@riverbankcms/sdk 0.74.0 → 0.76.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/README.md +2 -0
- package/dist/{PreviewEditorSidebar-5XL7M3OM.mjs → PreviewEditorSidebar-X2HWXFOL.mjs} +172 -89
- package/dist/{PreviewEditorUI-ZDFRDJID.mjs → PreviewEditorUI-AQXIXPOH.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-ZQNDCASH.mjs +8 -0
- package/dist/_dts/api/src/bookingOperations.d.ts +12 -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/index.d.ts +1 -1
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +13 -4
- package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +4 -2
- package/dist/_dts/block-form/src/client/index.d.ts +1 -1
- package/dist/_dts/block-form/src/manifest/utils.d.ts +24 -0
- 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 +6 -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/contracts/proof-block-islands.d.ts +4 -4
- 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 +7 -6
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +3 -27
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +163 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +5 -5
- 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/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +29 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +4 -3
- package/dist/_dts/blocks/src/system/runtime/shared/utils/bookingRoute.d.ts +20 -0
- package/dist/_dts/blocks/src/system/runtime/shared/utils/index.d.ts +2 -1
- package/dist/_dts/blocks/src/system/types/link.d.ts +12 -0
- package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +5 -0
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +3 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +3 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +5 -1
- package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/block-editor/actionControlMode.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +12 -2
- package/dist/_dts/preview-next/src/client/preview/themeOverlay.d.ts +21 -3
- package/dist/_dts/sdk/src/components.d.ts +2 -2
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
- package/dist/_dts/sdk/src/rendering/islands/deferredVideoEmbeds.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +6 -0
- package/dist/_dts/sdk/src/rendering/overrides.d.ts +21 -1
- package/dist/_dts/sdk/src/rendering/server.d.ts +4 -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-2MIWNFJM.mjs → chunk-LYI7TEMH.mjs} +494 -171
- package/dist/{chunk-YY7K3QD2.mjs → chunk-Q4OLG66B.mjs} +9 -9
- package/dist/{chunk-CEQBBLMJ.mjs → chunk-TW2Y4RR5.mjs} +69 -14
- package/dist/{chunk-CBD47MTM.mjs → chunk-V5VORNEJ.mjs} +2 -2
- package/dist/{chunk-7RX72SK2.mjs → chunk-VX7B5VAC.mjs} +36 -25
- package/dist/{chunk-YRJKZEQ3.mjs → chunk-Z7JLNTJR.mjs} +1 -1
- package/dist/cli/index.mjs +3395 -3753
- package/dist/client/{accordion-ZZVXWV3N.mjs → accordion-2YHIBOZH.mjs} +1 -1
- package/dist/client/bookingForm-35IBDWAS.mjs +3012 -0
- package/dist/client/bookings.mjs +30 -21
- package/dist/client/{carousel-25WK2H7G.mjs → carousel-K6XG7NZQ.mjs} +3 -2
- package/dist/client/cart-HCFYUTTU.mjs +18 -0
- package/dist/client/checkout-J3U4XR7K.mjs +18 -0
- package/dist/client/chunk-3DCJ45Z2.mjs +36 -0
- package/dist/client/chunk-3PEDD5KJ.mjs +146 -0
- package/dist/client/{chunk-6VGXRE34.mjs → chunk-7UOSCYY4.mjs} +76 -29
- package/dist/client/chunk-BOIHIU7E.mjs +106 -0
- package/dist/client/chunk-F7LHOKEH.mjs +146 -0
- package/dist/client/chunk-FGUIVT2B.mjs +204 -0
- package/dist/client/chunk-I2MMZO53.mjs +6 -0
- package/dist/client/chunk-II7O4XN3.mjs +2206 -0
- package/dist/client/chunk-J227A3CQ.mjs +245 -0
- package/dist/client/chunk-JEZECJ3W.mjs +383 -0
- package/dist/client/chunk-M3L3KYYR.mjs +1181 -0
- package/dist/client/chunk-OJPZEZU2.mjs +31 -0
- package/dist/client/chunk-PFBX3IQL.mjs +1378 -0
- package/dist/client/chunk-RTZ3JKKX.mjs +178 -0
- package/dist/client/chunk-SNSWVZEP.mjs +5592 -0
- package/dist/client/chunk-TQ5MSPDX.mjs +74 -0
- package/dist/client/chunk-YLMKMCSJ.mjs +86 -0
- package/dist/client/client.mjs +54052 -54518
- package/dist/client/courseRegistration-ZBXS7VGI.mjs +1737 -0
- package/dist/client/{eventCalendar-X6GIPYFM.mjs → eventCalendar-EQQZHJBA.mjs} +13 -2
- package/dist/client/{eventCombined-EZUOPM3G.mjs → eventCombined-JCFTGBFQ.mjs} +13 -2
- package/dist/client/eventDetails-HLUTQSYY.mjs +25 -0
- package/dist/client/{eventListing-HEFGAETC.mjs → eventListing-FG4MICVB.mjs} +13 -2
- package/dist/client/{eventRegistration-3LCP2V3P.mjs → eventRegistration-GUEB7LBT.mjs} +13 -2
- package/dist/client/form-YQEW4YIT.mjs +300 -0
- package/dist/client/headerSection-GTR3TTRM.mjs +729 -0
- package/dist/client/hooks.mjs +49 -33
- package/dist/client/locationMap-SPC7VGUH.mjs +227 -0
- package/dist/client/newsletterForm-4IW5BLID.mjs +208 -0
- package/dist/client/productDetail-KP5H2WJO.mjs +18 -0
- package/dist/client/productList-3M3M72XZ.mjs +18 -0
- package/dist/client/rendering/client.mjs +15580 -16277
- package/dist/client/rendering/islands.mjs +98 -21
- package/dist/client/rendering.mjs +48730 -49191
- package/dist/client/shop-ACQKVGOM.mjs +20 -0
- package/dist/preview-next/before-render.mjs +37 -25
- package/dist/preview-next/chrome.css +1 -1
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/editor-base.css +2 -148
- package/dist/preview-next/editor-chrome.css +179 -0
- package/dist/preview-next/middleware.mjs +37 -25
- package/dist/{sdk-runtime-OHNONZ5U.mjs → sdk-runtime-K7HNB4U2.mjs} +6 -6
- package/dist/server/components.mjs +1294 -1103
- 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 +1240 -1050
- package/dist/server/page-converter.mjs +12 -8
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +1389 -1104
- package/dist/server/rendering.mjs +1300 -1109
- 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 };
|
|
@@ -52533,6 +52689,37 @@ function pickReadableTextColor(background) {
|
|
|
52533
52689
|
return "rgb(var(--tb-onAccent, 255 255 255))";
|
|
52534
52690
|
}
|
|
52535
52691
|
}
|
|
52692
|
+
function BookingOptionCompactRow({
|
|
52693
|
+
option,
|
|
52694
|
+
buttonVariant = "primary"
|
|
52695
|
+
}) {
|
|
52696
|
+
const primaryMeta = option.primaryMeta?.filter((item) => item.length > 0) ?? [];
|
|
52697
|
+
const secondaryMeta = option.secondaryMeta?.filter((item) => item.label.length > 0) ?? [];
|
|
52698
|
+
const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "sm" });
|
|
52699
|
+
return /* @__PURE__ */ jsxs("div", { className: "event-compact-row", children: [
|
|
52700
|
+
/* @__PURE__ */ jsxs("div", { className: "event-compact-row-content", children: [
|
|
52701
|
+
/* @__PURE__ */ jsxs("div", { className: "event-compact-row-top", children: [
|
|
52702
|
+
/* @__PURE__ */ jsx("span", { className: "event-compact-row-title", children: option.title }),
|
|
52703
|
+
primaryMeta.length > 0 && /* @__PURE__ */ jsx("span", { className: "event-compact-row-datetime", children: primaryMeta.join(" \xB7 ") })
|
|
52704
|
+
] }),
|
|
52705
|
+
/* @__PURE__ */ jsxs("div", { className: "event-compact-row-bottom", children: [
|
|
52706
|
+
secondaryMeta.map((item) => /* @__PURE__ */ jsxs(
|
|
52707
|
+
"span",
|
|
52708
|
+
{
|
|
52709
|
+
className: item.className,
|
|
52710
|
+
children: [
|
|
52711
|
+
item.icon,
|
|
52712
|
+
item.label
|
|
52713
|
+
]
|
|
52714
|
+
},
|
|
52715
|
+
item.id ?? `${item.className ?? "meta"}:${item.label}`
|
|
52716
|
+
)),
|
|
52717
|
+
option.priceLabel && /* @__PURE__ */ jsx("span", { className: "event-compact-row-price", children: option.priceLabel })
|
|
52718
|
+
] })
|
|
52719
|
+
] }),
|
|
52720
|
+
option.action.kind === "status" ? /* @__PURE__ */ jsx("span", { className: "event-compact-row-status", children: option.action.label }) : /* @__PURE__ */ jsx("a", { href: option.action.href, className: `${buttonClass} event-compact-row-cta`, children: option.action.label })
|
|
52721
|
+
] });
|
|
52722
|
+
}
|
|
52536
52723
|
var EventCompactRow = ({
|
|
52537
52724
|
event,
|
|
52538
52725
|
buttonVariant = "primary",
|
|
@@ -52544,28 +52731,31 @@ var EventCompactRow = ({
|
|
|
52544
52731
|
const price = formatEventPrice(event);
|
|
52545
52732
|
const teacherLine = formatEventTeacherLine(event);
|
|
52546
52733
|
const cta = resolveEventCta(event, buttonText);
|
|
52547
|
-
const
|
|
52548
|
-
|
|
52549
|
-
|
|
52550
|
-
|
|
52551
|
-
|
|
52552
|
-
|
|
52553
|
-
|
|
52554
|
-
|
|
52555
|
-
|
|
52556
|
-
|
|
52557
|
-
|
|
52558
|
-
|
|
52559
|
-
|
|
52560
|
-
|
|
52561
|
-
|
|
52562
|
-
|
|
52563
|
-
|
|
52564
|
-
|
|
52565
|
-
|
|
52566
|
-
|
|
52567
|
-
|
|
52568
|
-
|
|
52734
|
+
const option = {
|
|
52735
|
+
id: event.occurrenceId ?? event.id,
|
|
52736
|
+
title: event.title,
|
|
52737
|
+
primaryMeta: [formattedDate, formattedTime],
|
|
52738
|
+
secondaryMeta: [
|
|
52739
|
+
...event.venue ? [
|
|
52740
|
+
{
|
|
52741
|
+
id: "venue",
|
|
52742
|
+
label: event.venue.name,
|
|
52743
|
+
icon: /* @__PURE__ */ jsx(MapPinIcon, { className: "rb-shrink-0" }),
|
|
52744
|
+
className: "event-compact-row-venue"
|
|
52745
|
+
}
|
|
52746
|
+
] : [],
|
|
52747
|
+
...teacherLine ? [
|
|
52748
|
+
{
|
|
52749
|
+
id: "teacher",
|
|
52750
|
+
label: teacherLine,
|
|
52751
|
+
className: "event-compact-row-teacher"
|
|
52752
|
+
}
|
|
52753
|
+
] : []
|
|
52754
|
+
],
|
|
52755
|
+
priceLabel: price,
|
|
52756
|
+
action: cta.hidden ? { kind: "status", label: cta.label } : { kind: "action", label: cta.label, href: cta.href }
|
|
52757
|
+
};
|
|
52758
|
+
return /* @__PURE__ */ jsx(BookingOptionCompactRow, { buttonVariant, option });
|
|
52569
52759
|
};
|
|
52570
52760
|
var EmptyState = ({
|
|
52571
52761
|
message: message2 = "No upcoming events scheduled.",
|
|
@@ -52703,7 +52893,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
52703
52893
|
containerClass: getContainerClass(layout, source.columns ?? "3"),
|
|
52704
52894
|
cardVariant: source.cardVariant ?? "default",
|
|
52705
52895
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
52706
|
-
buttonText: source.buttonText ?? "
|
|
52896
|
+
buttonText: source.buttonText ?? "Book now",
|
|
52707
52897
|
showVenue: source.showVenue ?? true,
|
|
52708
52898
|
showMap: source.showMap ?? true,
|
|
52709
52899
|
showCapacity: source.showCapacity ?? true,
|
|
@@ -52934,7 +53124,7 @@ var eventListingLayout = [
|
|
|
52934
53124
|
loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
|
|
52935
53125
|
cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
|
|
52936
53126
|
buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
|
|
52937
|
-
buttonText: { $bind: { from: "content.buttonText", fallback: "
|
|
53127
|
+
buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
|
|
52938
53128
|
showVenue: { $bind: { from: "content.showVenue" } },
|
|
52939
53129
|
showMap: { $bind: { from: "content.showMap" } },
|
|
52940
53130
|
showCapacity: { $bind: { from: "content.showCapacity" } },
|
|
@@ -52984,6 +53174,7 @@ var eventListingBlockDefinition = {
|
|
|
52984
53174
|
limit: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
|
|
52985
53175
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
52986
53176
|
detailLevel: "listing",
|
|
53177
|
+
readProfile: { $bind: { from: "content.layout", fallback: "listing-card" } },
|
|
52987
53178
|
kind: { $bind: { from: "content.kind" } },
|
|
52988
53179
|
eventSurface: { $bind: { from: "content.eventSurface" } },
|
|
52989
53180
|
eventPresets: {
|
|
@@ -53115,7 +53306,7 @@ function buildEventCalendarDisplay(source) {
|
|
|
53115
53306
|
),
|
|
53116
53307
|
filterVenueId: normalizeEventVenueId(source.filterVenueId),
|
|
53117
53308
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
53118
|
-
buttonText: source.buttonText ?? "
|
|
53309
|
+
buttonText: source.buttonText ?? "Book now",
|
|
53119
53310
|
showVenue: source.showVenue ?? true,
|
|
53120
53311
|
showMap: source.showMap ?? true,
|
|
53121
53312
|
showCapacity: source.showCapacity ?? true,
|
|
@@ -53323,7 +53514,7 @@ var eventCalendarLayout = [
|
|
|
53323
53514
|
$bind: { from: "content.buttonVariant", fallback: "primary" }
|
|
53324
53515
|
},
|
|
53325
53516
|
buttonText: {
|
|
53326
|
-
$bind: { from: "content.buttonText", fallback: "
|
|
53517
|
+
$bind: { from: "content.buttonText", fallback: "Book now" }
|
|
53327
53518
|
},
|
|
53328
53519
|
emptyMessage: { $bind: { from: "content.emptyMessage" } }
|
|
53329
53520
|
})
|
|
@@ -53777,6 +53968,7 @@ var eventCalendarBlockDefinition = {
|
|
|
53777
53968
|
limit: 100,
|
|
53778
53969
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
53779
53970
|
detailLevel: "listing",
|
|
53971
|
+
readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
|
|
53780
53972
|
// Pass filter params if configured
|
|
53781
53973
|
kind: { $bind: { from: "content.kind" } },
|
|
53782
53974
|
eventSurface: { $bind: { from: "content.eventSurface" } },
|
|
@@ -59802,9 +59994,9 @@ function getEmbedUrl(info) {
|
|
|
59802
59994
|
const kind = info.kind ?? "p";
|
|
59803
59995
|
return `https://www.instagram.com/${kind}/${info.id}/embed`;
|
|
59804
59996
|
}
|
|
59805
|
-
default:
|
|
59806
|
-
return "";
|
|
59807
59997
|
}
|
|
59998
|
+
const exhaustive = info.provider;
|
|
59999
|
+
return exhaustive;
|
|
59808
60000
|
}
|
|
59809
60001
|
function getThumbnailUrl(info) {
|
|
59810
60002
|
switch (info.provider) {
|
|
@@ -59814,9 +60006,20 @@ function getThumbnailUrl(info) {
|
|
|
59814
60006
|
return `https://vumbnail.com/${info.id}.jpg`;
|
|
59815
60007
|
case "instagram":
|
|
59816
60008
|
return "";
|
|
59817
|
-
default:
|
|
59818
|
-
return "";
|
|
59819
60009
|
}
|
|
60010
|
+
const exhaustive = info.provider;
|
|
60011
|
+
return exhaustive;
|
|
60012
|
+
}
|
|
60013
|
+
function getVideoEmbedLoadingStrategy(provider) {
|
|
60014
|
+
switch (provider) {
|
|
60015
|
+
case "youtube":
|
|
60016
|
+
case "vimeo":
|
|
60017
|
+
return "native-lazy";
|
|
60018
|
+
case "instagram":
|
|
60019
|
+
return "defer-until-near-viewport";
|
|
60020
|
+
}
|
|
60021
|
+
const exhaustive = provider;
|
|
60022
|
+
return exhaustive;
|
|
59820
60023
|
}
|
|
59821
60024
|
function getVideoEmbed(url) {
|
|
59822
60025
|
const info = parseVideoUrl(url);
|
|
@@ -59871,35 +60074,43 @@ var VideoEmbedNode = ({
|
|
|
59871
60074
|
);
|
|
59872
60075
|
}
|
|
59873
60076
|
const title = getVideoTitle(embedInfo);
|
|
59874
|
-
|
|
60077
|
+
const loadingStrategy = getVideoEmbedLoadingStrategy(embedInfo.provider);
|
|
60078
|
+
const shouldDeferSrc = loadingStrategy === "defer-until-near-viewport";
|
|
60079
|
+
return /* @__PURE__ */ jsx("div", { ...rest, children: /* @__PURE__ */ jsxs(
|
|
59875
60080
|
"div",
|
|
59876
60081
|
{
|
|
59877
60082
|
className,
|
|
60083
|
+
"data-rb-video-embed-wrapper": shouldDeferSrc ? "true" : void 0,
|
|
59878
60084
|
style: {
|
|
59879
60085
|
...style2,
|
|
59880
60086
|
aspectRatio: resolvedAspectRatio,
|
|
59881
60087
|
position: "relative",
|
|
59882
60088
|
width: "100%"
|
|
59883
60089
|
},
|
|
59884
|
-
children:
|
|
59885
|
-
|
|
59886
|
-
|
|
59887
|
-
|
|
59888
|
-
|
|
59889
|
-
|
|
59890
|
-
|
|
59891
|
-
|
|
59892
|
-
|
|
59893
|
-
|
|
59894
|
-
|
|
59895
|
-
|
|
59896
|
-
|
|
59897
|
-
|
|
59898
|
-
|
|
59899
|
-
|
|
59900
|
-
|
|
59901
|
-
|
|
59902
|
-
|
|
60090
|
+
children: [
|
|
60091
|
+
/* @__PURE__ */ jsx(
|
|
60092
|
+
"iframe",
|
|
60093
|
+
{
|
|
60094
|
+
src: shouldDeferSrc ? void 0 : embedInfo.embedUrl,
|
|
60095
|
+
title,
|
|
60096
|
+
loading: "lazy",
|
|
60097
|
+
"data-rb-video-embed-deferred": shouldDeferSrc ? "true" : void 0,
|
|
60098
|
+
"data-rb-video-embed-src": shouldDeferSrc ? embedInfo.embedUrl : void 0,
|
|
60099
|
+
style: {
|
|
60100
|
+
position: "absolute",
|
|
60101
|
+
top: 0,
|
|
60102
|
+
left: 0,
|
|
60103
|
+
width: "100%",
|
|
60104
|
+
height: "100%",
|
|
60105
|
+
border: "none"
|
|
60106
|
+
},
|
|
60107
|
+
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
|
|
60108
|
+
referrerPolicy: "no-referrer-when-downgrade",
|
|
60109
|
+
allowFullScreen: true
|
|
60110
|
+
}
|
|
60111
|
+
),
|
|
60112
|
+
shouldDeferSrc ? /* @__PURE__ */ jsx("noscript", { children: /* @__PURE__ */ jsx("a", { href: embedInfo.url, children: "View on Instagram" }) }) : null
|
|
60113
|
+
]
|
|
59903
60114
|
}
|
|
59904
60115
|
) });
|
|
59905
60116
|
};
|
|
@@ -59914,9 +60125,9 @@ function getVideoTitle(info) {
|
|
|
59914
60125
|
const label = kind === "reel" ? "reel" : kind === "tv" ? "video" : "post";
|
|
59915
60126
|
return `Instagram ${label} ${info.id}`;
|
|
59916
60127
|
}
|
|
59917
|
-
default:
|
|
59918
|
-
return "Embedded video";
|
|
59919
60128
|
}
|
|
60129
|
+
const exhaustive = info.provider;
|
|
60130
|
+
return exhaustive;
|
|
59920
60131
|
}
|
|
59921
60132
|
function getAspectRatio(propAspectRatio, style2) {
|
|
59922
60133
|
const styleAspectRatio = style2?.aspectRatio;
|
|
@@ -60159,10 +60370,15 @@ var HeaderSectionNode = ({
|
|
|
60159
60370
|
blockId,
|
|
60160
60371
|
children,
|
|
60161
60372
|
className,
|
|
60373
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
60162
60374
|
...rest
|
|
60163
60375
|
}) => {
|
|
60164
60376
|
const { wrapperClasses, sectionClasses } = splitPositioningClasses(className);
|
|
60165
|
-
const wrapperClassName =
|
|
60377
|
+
const wrapperClassName = [
|
|
60378
|
+
"block-site-header",
|
|
60379
|
+
wrapperClasses,
|
|
60380
|
+
previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
|
|
60381
|
+
].filter(Boolean).join(" ");
|
|
60166
60382
|
const asProp = rest.as;
|
|
60167
60383
|
const styleProp = rest.style;
|
|
60168
60384
|
const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
|
|
@@ -60178,6 +60394,7 @@ var HeaderSectionNode = ({
|
|
|
60178
60394
|
"data-block": "site-header",
|
|
60179
60395
|
"data-block-kind": "block.site-header",
|
|
60180
60396
|
"data-block-id": blockId ?? void 0,
|
|
60397
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
60181
60398
|
children: [
|
|
60182
60399
|
/* @__PURE__ */ jsx(IslandPropsScript, { value: { enabled: hasShrinkClasses(className) } }),
|
|
60183
60400
|
/* @__PURE__ */ jsx(
|
|
@@ -60811,7 +61028,18 @@ function getBookingSuccessMessage(successMessage) {
|
|
|
60811
61028
|
return successMessage?.trim() || "Your appointment has been booked! Check your email for confirmation.";
|
|
60812
61029
|
}
|
|
60813
61030
|
|
|
60814
|
-
// ../
|
|
61031
|
+
// ../logger/src/noop.ts
|
|
61032
|
+
var noop = () => {
|
|
61033
|
+
};
|
|
61034
|
+
var logger = {
|
|
61035
|
+
debug: noop,
|
|
61036
|
+
info: noop,
|
|
61037
|
+
warn: noop,
|
|
61038
|
+
error: noop,
|
|
61039
|
+
withFields: (_2) => logger
|
|
61040
|
+
};
|
|
61041
|
+
|
|
61042
|
+
// ../blocks/src/system/runtime/nodes/booking-runtime-sources.ts
|
|
60815
61043
|
var bookingFieldOptionSchema = z.object({
|
|
60816
61044
|
value: z.string(),
|
|
60817
61045
|
label: z.string()
|
|
@@ -60865,6 +61093,8 @@ var bookingSourceFormSchema = z.object({
|
|
|
60865
61093
|
createdAt: z.string(),
|
|
60866
61094
|
updatedAt: z.string()
|
|
60867
61095
|
});
|
|
61096
|
+
|
|
61097
|
+
// ../blocks/src/system/runtime/nodes/booking-form.interactive.ts
|
|
60868
61098
|
var blockBookingPaymentTermsAvailabilitySchema = z.union([
|
|
60869
61099
|
z.object({
|
|
60870
61100
|
kind: z.literal("available"),
|
|
@@ -61810,7 +62040,7 @@ var EventSpotlight = ({
|
|
|
61810
62040
|
columns = "3",
|
|
61811
62041
|
cardVariant = "default",
|
|
61812
62042
|
buttonVariant = "primary",
|
|
61813
|
-
buttonText = "
|
|
62043
|
+
buttonText = "Book now",
|
|
61814
62044
|
ctaLabel,
|
|
61815
62045
|
ctaUrl,
|
|
61816
62046
|
showVenue = true,
|
|
@@ -61956,7 +62186,7 @@ function buildEventCombinedDisplay(source) {
|
|
|
61956
62186
|
showMap: source.showMap ?? true,
|
|
61957
62187
|
showCapacity: source.showCapacity ?? true,
|
|
61958
62188
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
61959
|
-
buttonText: source.buttonText ?? "
|
|
62189
|
+
buttonText: source.buttonText ?? "Book now",
|
|
61960
62190
|
emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
|
|
61961
62191
|
};
|
|
61962
62192
|
}
|
|
@@ -78456,6 +78686,11 @@ var containerResponsiveThemeCss = `/*
|
|
|
78456
78686
|
* Dense row layout for event-calendar compact list mode
|
|
78457
78687
|
* ============================================================================= */
|
|
78458
78688
|
|
|
78689
|
+
:where(.theme-scope) .event-listing-compact-container {
|
|
78690
|
+
width: min(100%, 56rem);
|
|
78691
|
+
margin-inline: auto;
|
|
78692
|
+
}
|
|
78693
|
+
|
|
78459
78694
|
:where(.theme-scope) .event-compact-row {
|
|
78460
78695
|
display: flex;
|
|
78461
78696
|
align-items: center;
|
|
@@ -80388,51 +80623,36 @@ function deriveBlockDraftSaveability(input) {
|
|
|
80388
80623
|
issues
|
|
80389
80624
|
};
|
|
80390
80625
|
}
|
|
80391
|
-
function withNormalizedManifestMessage(issue2) {
|
|
80392
|
-
return {
|
|
80393
|
-
...issue2,
|
|
80394
|
-
message: normalizeManifestIssueMessage(issue2)
|
|
80395
|
-
};
|
|
80396
|
-
}
|
|
80397
80626
|
function validateBlockManifestIssues(manifest, values, mode) {
|
|
80398
80627
|
const validator = getManifestValidation(manifest, mode);
|
|
80399
80628
|
const result = validator.safeParse(values);
|
|
80400
80629
|
if (result.success) {
|
|
80401
80630
|
return [];
|
|
80402
80631
|
}
|
|
80403
|
-
return result.error.issues
|
|
80632
|
+
return result.error.issues;
|
|
80404
80633
|
}
|
|
80405
80634
|
function validateBlockManifest(manifest, values, mode) {
|
|
80635
|
+
const plans = getManifestValidationCacheEntry(manifest).plans;
|
|
80406
80636
|
return validateBlockManifestIssues(manifest, values, mode).map((issue2) => {
|
|
80407
80637
|
const path = normalizeIssuePath(issue2.path);
|
|
80638
|
+
const fieldDescriptor = resolveFieldValidationDescriptor(plans, path);
|
|
80408
80639
|
return {
|
|
80409
80640
|
code: issue2.code,
|
|
80410
80641
|
path,
|
|
80411
80642
|
fieldPath: normalizePathString(path),
|
|
80643
|
+
fieldDescriptor,
|
|
80644
|
+
isFieldVisibleInSidebar: isValidationFieldVisibleInSidebar(fieldDescriptor),
|
|
80412
80645
|
message: issue2.message
|
|
80413
80646
|
};
|
|
80414
80647
|
});
|
|
80415
80648
|
}
|
|
80416
|
-
function
|
|
80417
|
-
|
|
80418
|
-
|
|
80419
|
-
return issue2.message;
|
|
80420
|
-
case "too_big":
|
|
80421
|
-
return issue2.origin === "string" ? `Use ${issue2.maximum} characters or fewer` : issue2.message;
|
|
80422
|
-
case "too_small":
|
|
80423
|
-
if (issue2.origin !== "string") return issue2.message;
|
|
80424
|
-
return issue2.minimum === 1 ? "This field is required" : `Use at least ${issue2.minimum} characters`;
|
|
80425
|
-
case "invalid_format":
|
|
80426
|
-
if (issue2.format === "email") return "Enter a valid email address";
|
|
80427
|
-
if (issue2.format === "url") return "Enter a valid web address";
|
|
80428
|
-
return "Check the format and try again";
|
|
80429
|
-
default:
|
|
80430
|
-
return issue2.message;
|
|
80431
|
-
}
|
|
80649
|
+
function isValidationFieldVisibleInSidebar(descriptor) {
|
|
80650
|
+
if (!descriptor) return true;
|
|
80651
|
+
return descriptor.visibility.kind === "visible";
|
|
80432
80652
|
}
|
|
80433
80653
|
function getManifestValidation(manifest, mode) {
|
|
80434
|
-
const cached =
|
|
80435
|
-
const existing = cached
|
|
80654
|
+
const cached = getManifestValidationCacheEntry(manifest);
|
|
80655
|
+
const existing = cached.validators[mode];
|
|
80436
80656
|
if (existing) {
|
|
80437
80657
|
return existing;
|
|
80438
80658
|
}
|
|
@@ -80440,10 +80660,19 @@ function getManifestValidation(manifest, mode) {
|
|
|
80440
80660
|
allowNull: false,
|
|
80441
80661
|
mode
|
|
80442
80662
|
});
|
|
80443
|
-
|
|
80444
|
-
|
|
80445
|
-
|
|
80446
|
-
|
|
80663
|
+
cached.validators[mode] = created;
|
|
80664
|
+
return created;
|
|
80665
|
+
}
|
|
80666
|
+
function getManifestValidationCacheEntry(manifest) {
|
|
80667
|
+
const cached = manifestValidationCache.get(manifest);
|
|
80668
|
+
if (cached) {
|
|
80669
|
+
return cached;
|
|
80670
|
+
}
|
|
80671
|
+
const created = {
|
|
80672
|
+
plans: deriveFieldValidationPlans(manifest.fields ?? []),
|
|
80673
|
+
validators: {}
|
|
80674
|
+
};
|
|
80675
|
+
manifestValidationCache.set(manifest, created);
|
|
80447
80676
|
return created;
|
|
80448
80677
|
}
|
|
80449
80678
|
function normalizeIssuePath(path) {
|
|
@@ -81951,7 +82180,6 @@ function useBlockAutosave({
|
|
|
81951
82180
|
if (saveability.kind === "saveable") {
|
|
81952
82181
|
return true;
|
|
81953
82182
|
}
|
|
81954
|
-
drafts.clearPending(snapshot.id);
|
|
81955
82183
|
return false;
|
|
81956
82184
|
});
|
|
81957
82185
|
return saveablePending.map((s2) => ({
|
|
@@ -82031,6 +82259,8 @@ function deriveBlockedPublishPlan({
|
|
|
82031
82259
|
if (!firstError) {
|
|
82032
82260
|
return { type: "allowed" };
|
|
82033
82261
|
}
|
|
82262
|
+
const focusError = validationErrors.find((error) => error.isFieldVisibleInSidebar) ?? firstError;
|
|
82263
|
+
const focusFieldPath = focusError.isFieldVisibleInSidebar ? focusError.fieldPath || null : null;
|
|
82034
82264
|
return {
|
|
82035
82265
|
type: "blocked",
|
|
82036
82266
|
invalidBlockIds,
|
|
@@ -82039,8 +82269,8 @@ function deriveBlockedPublishPlan({
|
|
|
82039
82269
|
reveal: "show-validation"
|
|
82040
82270
|
})),
|
|
82041
82271
|
focusTarget: {
|
|
82042
|
-
blockId:
|
|
82043
|
-
fieldPath:
|
|
82272
|
+
blockId: focusError.blockId,
|
|
82273
|
+
fieldPath: focusFieldPath
|
|
82044
82274
|
},
|
|
82045
82275
|
message: invalidBlockIds.length === 1 ? {
|
|
82046
82276
|
type: "single-invalid-block",
|
|
@@ -82083,25 +82313,24 @@ function applyBlockedPublishPlan(uiStore, plan, setErrorMessage) {
|
|
|
82083
82313
|
// ../content-editor/src/hooks/validateBlocksForPublish.ts
|
|
82084
82314
|
function validateAllBlocks(uiStore) {
|
|
82085
82315
|
const errors = [];
|
|
82086
|
-
const
|
|
82316
|
+
const state = uiStore.getState();
|
|
82317
|
+
const draftsState = state.drafts;
|
|
82087
82318
|
const allBlocks = draftsState.inspect();
|
|
82088
82319
|
for (const snapshot of allBlocks) {
|
|
82089
82320
|
if (!snapshot.meta?.kind) continue;
|
|
82090
|
-
const
|
|
82091
|
-
const definition = getBlockDefinition(snapshot.meta.kind);
|
|
82092
|
-
if (!definition?.manifest) {
|
|
82093
|
-
continue;
|
|
82094
|
-
}
|
|
82095
|
-
const issues = validateBlockManifest(definition.manifest, content, "strict");
|
|
82321
|
+
const { issues, manifest } = getPublishValidationIssues(uiStore, snapshot);
|
|
82096
82322
|
if (issues.length > 0) {
|
|
82097
82323
|
for (const issue2 of issues) {
|
|
82098
82324
|
errors.push({
|
|
82099
82325
|
blockId: snapshot.id,
|
|
82100
82326
|
blockKind: snapshot.meta.kind,
|
|
82101
82327
|
fieldPath: issue2.fieldPath,
|
|
82328
|
+
fieldDescriptor: issue2.fieldDescriptor,
|
|
82329
|
+
isFieldVisibleInSidebar: issue2.isFieldVisibleInSidebar,
|
|
82102
82330
|
fieldLabel: getFieldLabelFromManifest(
|
|
82103
|
-
|
|
82104
|
-
issue2.path
|
|
82331
|
+
manifest,
|
|
82332
|
+
issue2.path,
|
|
82333
|
+
issue2.fieldDescriptor
|
|
82105
82334
|
),
|
|
82106
82335
|
message: issue2.message
|
|
82107
82336
|
});
|
|
@@ -82110,11 +82339,49 @@ function validateAllBlocks(uiStore) {
|
|
|
82110
82339
|
}
|
|
82111
82340
|
return errors;
|
|
82112
82341
|
}
|
|
82113
|
-
function
|
|
82342
|
+
function getPublishValidationIssues(uiStore, snapshot) {
|
|
82343
|
+
const definition = getBlockDefinition(snapshot.meta.kind);
|
|
82344
|
+
const registryManifest = definition?.manifest ?? null;
|
|
82345
|
+
if (registryManifest) {
|
|
82346
|
+
const content = snapshot.current ?? snapshot.baseline ?? {};
|
|
82347
|
+
return {
|
|
82348
|
+
issues: validateBlockManifest(registryManifest, content, "strict"),
|
|
82349
|
+
manifest: registryManifest
|
|
82350
|
+
};
|
|
82351
|
+
}
|
|
82352
|
+
const saveability = uiStore.getState().blockValidation?.getBlockSaveability(snapshot.id);
|
|
82353
|
+
if (!saveability) {
|
|
82354
|
+
return { issues: [], manifest: null };
|
|
82355
|
+
}
|
|
82356
|
+
if (saveability.issues.length > 0) {
|
|
82357
|
+
return {
|
|
82358
|
+
issues: saveability.issues,
|
|
82359
|
+
manifest: null
|
|
82360
|
+
};
|
|
82361
|
+
}
|
|
82362
|
+
if (saveability.kind === "save_failed") {
|
|
82363
|
+
return {
|
|
82364
|
+
issues: [
|
|
82365
|
+
{
|
|
82366
|
+
code: "custom",
|
|
82367
|
+
path: [],
|
|
82368
|
+
fieldPath: "",
|
|
82369
|
+
fieldDescriptor: null,
|
|
82370
|
+
isFieldVisibleInSidebar: true,
|
|
82371
|
+
message: saveability.error
|
|
82372
|
+
}
|
|
82373
|
+
],
|
|
82374
|
+
manifest: null
|
|
82375
|
+
};
|
|
82376
|
+
}
|
|
82377
|
+
return { issues: [], manifest: null };
|
|
82378
|
+
}
|
|
82379
|
+
function getFieldLabelFromManifest(manifest, path, descriptor) {
|
|
82380
|
+
if (descriptor) return descriptor.label;
|
|
82114
82381
|
if (path.length === 0) return "Unknown field";
|
|
82115
82382
|
const fieldId = path[0];
|
|
82116
82383
|
if (typeof fieldId !== "string") return String(fieldId);
|
|
82117
|
-
const field = manifest
|
|
82384
|
+
const field = manifest?.fields?.find((f2) => f2.id === fieldId);
|
|
82118
82385
|
return field?.label ?? fieldId;
|
|
82119
82386
|
}
|
|
82120
82387
|
|
|
@@ -82229,15 +82496,6 @@ function useEntryActions({
|
|
|
82229
82496
|
}, [uiStore, hasRoute, setErrorMessage]);
|
|
82230
82497
|
const performPublish = useCallback(async (options) => {
|
|
82231
82498
|
setErrorMessage(null);
|
|
82232
|
-
const dirtyTypes = getDirtyAutosaveTypes(uiStore, hasRoute);
|
|
82233
|
-
uiStore.getState().autosave.saveNow(dirtyTypes);
|
|
82234
|
-
uiStore.getState().autosave.flushAllPending();
|
|
82235
|
-
await waitForAutosavesComplete(uiStore);
|
|
82236
|
-
if (hasAutosaveErrors(uiStore)) {
|
|
82237
|
-
const message2 = "Cannot publish: failed to save draft changes.";
|
|
82238
|
-
setErrorMessage(message2);
|
|
82239
|
-
throw new Error(message2);
|
|
82240
|
-
}
|
|
82241
82499
|
const validationErrors = validateAllBlocks(uiStore);
|
|
82242
82500
|
const blockedPublishPlan = deriveBlockedPublishPlan({
|
|
82243
82501
|
validationErrors,
|
|
@@ -82247,6 +82505,15 @@ function useEntryActions({
|
|
|
82247
82505
|
applyBlockedPublishPlan(uiStore, blockedPublishPlan, setErrorMessage);
|
|
82248
82506
|
return;
|
|
82249
82507
|
}
|
|
82508
|
+
const dirtyTypes = getDirtyAutosaveTypes(uiStore, hasRoute);
|
|
82509
|
+
uiStore.getState().autosave.saveNow(dirtyTypes);
|
|
82510
|
+
uiStore.getState().autosave.flushAllPending();
|
|
82511
|
+
await waitForAutosavesComplete(uiStore);
|
|
82512
|
+
if (hasAutosaveErrors(uiStore)) {
|
|
82513
|
+
const message2 = "Cannot publish: failed to save draft changes.";
|
|
82514
|
+
setErrorMessage(message2);
|
|
82515
|
+
throw new Error(message2);
|
|
82516
|
+
}
|
|
82250
82517
|
uiStore.getState().autosave.setMetadataStatus({ status: "saving" });
|
|
82251
82518
|
try {
|
|
82252
82519
|
const values = uiStore.getState().metadata.getCurrentValues() || {};
|
|
@@ -90205,9 +90472,9 @@ var computePosition2 = (reference, floating, options) => {
|
|
|
90205
90472
|
});
|
|
90206
90473
|
};
|
|
90207
90474
|
var isClient = typeof document !== "undefined";
|
|
90208
|
-
var
|
|
90475
|
+
var noop2 = function noop3() {
|
|
90209
90476
|
};
|
|
90210
|
-
var index = isClient ? useLayoutEffect :
|
|
90477
|
+
var index = isClient ? useLayoutEffect : noop2;
|
|
90211
90478
|
function deepEqual4(a2, b2) {
|
|
90212
90479
|
if (a2 === b2) {
|
|
90213
90480
|
return true;
|
|
@@ -105520,6 +105787,17 @@ function readSliderFieldUiConfig(ui) {
|
|
|
105520
105787
|
};
|
|
105521
105788
|
}
|
|
105522
105789
|
|
|
105790
|
+
// ../block-form/src/manifest/utils.ts
|
|
105791
|
+
function assertNever9(value) {
|
|
105792
|
+
throw new Error(`Unhandled manifest variant: ${JSON.stringify(value)}`);
|
|
105793
|
+
}
|
|
105794
|
+
function getGroupChildFields(field) {
|
|
105795
|
+
return field.schema?.fields ?? field.fields;
|
|
105796
|
+
}
|
|
105797
|
+
function getRepeaterChildFields(field) {
|
|
105798
|
+
return field.schema?.fields ?? field.fields ?? [];
|
|
105799
|
+
}
|
|
105800
|
+
|
|
105523
105801
|
// ../block-form/src/manifest/canonicalValidation.ts
|
|
105524
105802
|
function buildCanonicalFieldSchema(field) {
|
|
105525
105803
|
const manifestField = normalizeFieldForCanonicalValidation(field);
|
|
@@ -105584,7 +105862,7 @@ function groupFieldToManifestInput(field) {
|
|
|
105584
105862
|
...field,
|
|
105585
105863
|
schema: {
|
|
105586
105864
|
...field.schema,
|
|
105587
|
-
fields: (field
|
|
105865
|
+
fields: getGroupChildFields(field).map(toManifestFieldInput)
|
|
105588
105866
|
}
|
|
105589
105867
|
};
|
|
105590
105868
|
}
|
|
@@ -105616,13 +105894,10 @@ function repeaterFieldToManifestInput(field) {
|
|
|
105616
105894
|
...field,
|
|
105617
105895
|
schema: {
|
|
105618
105896
|
...field.schema,
|
|
105619
|
-
fields: (field
|
|
105897
|
+
fields: getRepeaterChildFields(field).map(toManifestFieldInput)
|
|
105620
105898
|
}
|
|
105621
105899
|
};
|
|
105622
105900
|
}
|
|
105623
|
-
function assertNever9(value) {
|
|
105624
|
-
throw new Error(`Unhandled field config variant: ${JSON.stringify(value)}`);
|
|
105625
|
-
}
|
|
105626
105901
|
|
|
105627
105902
|
// ../block-form/src/widgets/TextField/textFieldSchema.ts
|
|
105628
105903
|
function buildTextFieldSchema(field) {
|
|
@@ -106052,7 +106327,7 @@ var DEFAULT_VALUE_BUILDERS = {
|
|
|
106052
106327
|
contentTypeSelect: getContentTypeSelectFieldDefault,
|
|
106053
106328
|
entryPicker: getEntryPickerFieldDefault
|
|
106054
106329
|
};
|
|
106055
|
-
function
|
|
106330
|
+
function buildFieldSchema(field, ctx) {
|
|
106056
106331
|
const builder = SCHEMA_BUILDERS[field.type];
|
|
106057
106332
|
if (!builder) {
|
|
106058
106333
|
console.warn(`No schema builder registered for field type: ${field.type}`);
|
|
@@ -106158,13 +106433,58 @@ function isFieldVisible(field, role) {
|
|
|
106158
106433
|
function buildValidationSchema(fields3) {
|
|
106159
106434
|
const shape = {};
|
|
106160
106435
|
const ctx = {
|
|
106161
|
-
getFieldSchema: (field) =>
|
|
106436
|
+
getFieldSchema: (field) => buildManifestFieldSchema(field, ctx)
|
|
106162
106437
|
};
|
|
106163
106438
|
for (const field of fields3) {
|
|
106164
|
-
shape[field.id] =
|
|
106439
|
+
shape[field.id] = buildManifestFieldSchema(field, ctx);
|
|
106165
106440
|
}
|
|
106166
106441
|
return z.object(shape).catchall(z.unknown()).passthrough();
|
|
106167
106442
|
}
|
|
106443
|
+
function buildManifestFieldSchema(field, ctx) {
|
|
106444
|
+
if (shouldUseCanonicalSchema(field)) {
|
|
106445
|
+
return buildCanonicalFieldSchema(field);
|
|
106446
|
+
}
|
|
106447
|
+
return buildFieldSchema(field, ctx);
|
|
106448
|
+
}
|
|
106449
|
+
function shouldUseCanonicalSchema(field) {
|
|
106450
|
+
switch (field.type) {
|
|
106451
|
+
case "text":
|
|
106452
|
+
case "number":
|
|
106453
|
+
case "select":
|
|
106454
|
+
case "boolean":
|
|
106455
|
+
case "url":
|
|
106456
|
+
case "slug":
|
|
106457
|
+
case "link":
|
|
106458
|
+
case "media":
|
|
106459
|
+
case "file":
|
|
106460
|
+
case "reference":
|
|
106461
|
+
return true;
|
|
106462
|
+
case "group":
|
|
106463
|
+
return getGroupChildFields(field).every(shouldUseCanonicalSchema);
|
|
106464
|
+
case "modal":
|
|
106465
|
+
return field.schema.fields.every(shouldUseCanonicalSchema);
|
|
106466
|
+
case "repeater":
|
|
106467
|
+
if (field.polymorphic) {
|
|
106468
|
+
return Object.values(field.itemTypes).every(
|
|
106469
|
+
(itemType) => itemType.fields.every(shouldUseCanonicalSchema)
|
|
106470
|
+
);
|
|
106471
|
+
}
|
|
106472
|
+
return getRepeaterChildFields(field).every(shouldUseCanonicalSchema);
|
|
106473
|
+
case "tabGroup":
|
|
106474
|
+
if (field.activeTabField) return false;
|
|
106475
|
+
return field.tabs.every((tab) => tab.fields.every(shouldUseCanonicalSchema));
|
|
106476
|
+
case "richText":
|
|
106477
|
+
case "date":
|
|
106478
|
+
case "time":
|
|
106479
|
+
case "datetime":
|
|
106480
|
+
case "presetOrCustom":
|
|
106481
|
+
case "contentTypeSelect":
|
|
106482
|
+
case "entryPicker":
|
|
106483
|
+
case "button":
|
|
106484
|
+
return false;
|
|
106485
|
+
}
|
|
106486
|
+
return assertNever9(field);
|
|
106487
|
+
}
|
|
106168
106488
|
function createManifestValidation(manifest, options) {
|
|
106169
106489
|
const { fields: fields3, schema } = createManifestFormAdapter(manifest, {
|
|
106170
106490
|
role: options?.role
|
|
@@ -108527,17 +108847,6 @@ function useBlockApi() {
|
|
|
108527
108847
|
}
|
|
108528
108848
|
return client;
|
|
108529
108849
|
}
|
|
108530
|
-
|
|
108531
|
-
// ../logger/src/noop.ts
|
|
108532
|
-
var noop3 = () => {
|
|
108533
|
-
};
|
|
108534
|
-
var logger = {
|
|
108535
|
-
debug: noop3,
|
|
108536
|
-
info: noop3,
|
|
108537
|
-
warn: noop3,
|
|
108538
|
-
error: noop3,
|
|
108539
|
-
withFields: (_2) => logger
|
|
108540
|
-
};
|
|
108541
108850
|
function AltchaWidget({
|
|
108542
108851
|
challengeUrl,
|
|
108543
108852
|
onSolutionChange,
|
|
@@ -109380,6 +109689,7 @@ function clearBookingFieldError(errors, fieldId) {
|
|
|
109380
109689
|
function createInitialBookingFlowReducerState(input) {
|
|
109381
109690
|
const initialData = input.initialData ?? {};
|
|
109382
109691
|
return {
|
|
109692
|
+
phase: "editing",
|
|
109383
109693
|
currentStepId: "service-selection",
|
|
109384
109694
|
selectedServiceId: toOptionalAppointmentServiceId(
|
|
109385
109695
|
toOptionalString(initialData.serviceId) ?? input.defaultServiceId
|
|
@@ -109400,8 +109710,7 @@ function createInitialBookingFlowReducerState(input) {
|
|
|
109400
109710
|
),
|
|
109401
109711
|
altchaSolution: null,
|
|
109402
109712
|
validationErrors: createEmptyBookingValidationErrors(),
|
|
109403
|
-
feedback: { kind: "none" }
|
|
109404
|
-
isSubmitting: false
|
|
109713
|
+
feedback: { kind: "none" }
|
|
109405
109714
|
};
|
|
109406
109715
|
}
|
|
109407
109716
|
function collectInitialFieldValues(initialData) {
|
|
@@ -109528,8 +109837,15 @@ function bookingFlowReducer(state, event) {
|
|
|
109528
109837
|
case "validation-errors-set":
|
|
109529
109838
|
return { ...state, validationErrors: event.errors };
|
|
109530
109839
|
case "feedback-set":
|
|
109531
|
-
return {
|
|
109840
|
+
return {
|
|
109841
|
+
...state,
|
|
109842
|
+
phase: event.feedback.kind === "success" ? "completed" : "editing",
|
|
109843
|
+
feedback: event.feedback
|
|
109844
|
+
};
|
|
109532
109845
|
case "availability-selection-invalidated":
|
|
109846
|
+
if (state.phase !== "editing") {
|
|
109847
|
+
return state;
|
|
109848
|
+
}
|
|
109533
109849
|
return {
|
|
109534
109850
|
...state,
|
|
109535
109851
|
currentStepId: "datetime-selection",
|
|
@@ -109543,11 +109859,11 @@ function bookingFlowReducer(state, event) {
|
|
|
109543
109859
|
validationErrors: clearBookingFormError(state.validationErrors)
|
|
109544
109860
|
};
|
|
109545
109861
|
case "feedback-cleared":
|
|
109546
|
-
return { ...state, feedback: { kind: "none" } };
|
|
109862
|
+
return { ...state, phase: "editing", feedback: { kind: "none" } };
|
|
109547
109863
|
case "submission-started":
|
|
109548
|
-
return { ...state,
|
|
109864
|
+
return { ...state, phase: "submitting" };
|
|
109549
109865
|
case "submission-finished":
|
|
109550
|
-
return { ...state,
|
|
109866
|
+
return state.phase === "submitting" ? { ...state, phase: "editing" } : state;
|
|
109551
109867
|
case "reset":
|
|
109552
109868
|
return event.initial;
|
|
109553
109869
|
default:
|
|
@@ -109982,8 +110298,8 @@ function toHeadlessEligibleAppointmentPackage(appointmentPackage) {
|
|
|
109982
110298
|
};
|
|
109983
110299
|
}
|
|
109984
110300
|
function resolveHeadlessBookingStatus(input) {
|
|
109985
|
-
if (input.
|
|
109986
|
-
if (input.feedback.kind === "success") {
|
|
110301
|
+
if (input.phase === "submitting") return { tag: "submitting" };
|
|
110302
|
+
if (input.phase === "completed" && input.feedback.kind === "success") {
|
|
109987
110303
|
return {
|
|
109988
110304
|
tag: "success",
|
|
109989
110305
|
resourceName: input.feedback.resourceName
|
|
@@ -110142,6 +110458,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110142
110458
|
[availableDates]
|
|
110143
110459
|
);
|
|
110144
110460
|
useEffect(() => {
|
|
110461
|
+
if (state.phase !== "editing") return;
|
|
110145
110462
|
const canEvaluateDate = availabilityDatesQuery.ok && Boolean(availableDatesLoadedRange) && !isLoadingDates && !datesError;
|
|
110146
110463
|
const canEvaluateSlot = !state.selectedSlot || availabilitySlotsQuery.ok && hasLoadedSlots && !isLoadingSlots && !slotsError;
|
|
110147
110464
|
if (!canEvaluateDate || !canEvaluateSlot) return;
|
|
@@ -110167,6 +110484,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110167
110484
|
isLoadingSlots,
|
|
110168
110485
|
slotViews,
|
|
110169
110486
|
slotsError,
|
|
110487
|
+
state.phase,
|
|
110170
110488
|
state.selectedDate,
|
|
110171
110489
|
state.selectedSlot
|
|
110172
110490
|
]);
|
|
@@ -110327,7 +110645,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110327
110645
|
const submitBooking = useCallback(
|
|
110328
110646
|
async (submitOptions) => {
|
|
110329
110647
|
const latest = latestRef.current;
|
|
110330
|
-
if (submittingRef.current || latest.state.
|
|
110648
|
+
if (submittingRef.current || latest.state.phase === "submitting") {
|
|
110331
110649
|
return {
|
|
110332
110650
|
ok: false,
|
|
110333
110651
|
reason: "blocked",
|
|
@@ -110523,7 +110841,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110523
110841
|
const spamProtectionEnabled = options.spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
110524
110842
|
const status = resolveHeadlessBookingStatus({
|
|
110525
110843
|
feedback: state.feedback,
|
|
110526
|
-
|
|
110844
|
+
phase: state.phase
|
|
110527
110845
|
});
|
|
110528
110846
|
const view = resolveHeadlessBookingView({
|
|
110529
110847
|
form: options.form,
|
|
@@ -120057,6 +120375,7 @@ var HeaderSectionNode2 = ({
|
|
|
120057
120375
|
pathBase,
|
|
120058
120376
|
children,
|
|
120059
120377
|
className: originalClassName,
|
|
120378
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
120060
120379
|
...restProps
|
|
120061
120380
|
}) => {
|
|
120062
120381
|
const rootRef = useRef(null);
|
|
@@ -120064,7 +120383,11 @@ var HeaderSectionNode2 = ({
|
|
|
120064
120383
|
() => splitPositioningClasses(originalClassName),
|
|
120065
120384
|
[originalClassName]
|
|
120066
120385
|
);
|
|
120067
|
-
const wrapperClassName =
|
|
120386
|
+
const wrapperClassName = [
|
|
120387
|
+
"block-site-header",
|
|
120388
|
+
wrapperClasses,
|
|
120389
|
+
previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
|
|
120390
|
+
].filter(Boolean).join(" ");
|
|
120068
120391
|
const hasShrinkClasses2 = useMemo(
|
|
120069
120392
|
() => Boolean(sectionClasses?.includes("rb-header-shrink")),
|
|
120070
120393
|
[sectionClasses]
|
|
@@ -120097,6 +120420,7 @@ var HeaderSectionNode2 = ({
|
|
|
120097
120420
|
"data-block-content": blockContent ? "true" : void 0,
|
|
120098
120421
|
"data-fragment-registry": fragmentRegistry2 ? "true" : void 0,
|
|
120099
120422
|
"data-path-base": typeof pathBase === "string" ? pathBase : void 0,
|
|
120423
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
120100
120424
|
children: /* @__PURE__ */ jsx(
|
|
120101
120425
|
Section_default,
|
|
120102
120426
|
{
|
|
@@ -121537,7 +121861,7 @@ var EventCombinedClient = ({
|
|
|
121537
121861
|
showCapacity,
|
|
121538
121862
|
// Styling
|
|
121539
121863
|
buttonVariant = "primary",
|
|
121540
|
-
buttonText = "
|
|
121864
|
+
buttonText = "Book now",
|
|
121541
121865
|
emptyMessage = "No upcoming events scheduled.",
|
|
121542
121866
|
className
|
|
121543
121867
|
}) => {
|
|
@@ -123238,7 +123562,7 @@ function shouldHoistNestedGroupSettings(field) {
|
|
|
123238
123562
|
const ui = field.ui;
|
|
123239
123563
|
return ui?.hideLabel === true;
|
|
123240
123564
|
}
|
|
123241
|
-
function
|
|
123565
|
+
function getGroupChildFields2(field) {
|
|
123242
123566
|
if (field.type !== "group") return [];
|
|
123243
123567
|
if (Array.isArray(field.fields)) return field.fields;
|
|
123244
123568
|
if (Array.isArray(field.schema?.fields)) return field.schema.fields;
|
|
@@ -123246,7 +123570,7 @@ function getGroupChildFields(field) {
|
|
|
123246
123570
|
}
|
|
123247
123571
|
function hoistNestedGroupSettings(field) {
|
|
123248
123572
|
if (!shouldHoistNestedGroupSettings(field)) return [];
|
|
123249
|
-
const groupChildren =
|
|
123573
|
+
const groupChildren = getGroupChildFields2(field);
|
|
123250
123574
|
if (groupChildren.length === 0) return [];
|
|
123251
123575
|
const { display, behavior, style: style2 } = partitionFieldsByIntent(groupChildren);
|
|
123252
123576
|
const nestedSettings = [...display, ...behavior, ...style2];
|
|
@@ -161202,7 +161526,7 @@ function EditorStatusBar({
|
|
|
161202
161526
|
lastSavedLabel,
|
|
161203
161527
|
secondaryMessage
|
|
161204
161528
|
]);
|
|
161205
|
-
const disablePublish = isSaving || toolbar?.disablePublish || !hasChanges;
|
|
161529
|
+
const disablePublish = isSaving || toolbar?.disablePublish || !hasChanges && currentLifecycle !== "draft";
|
|
161206
161530
|
isSaving || toolbar?.disableDiscard || !hasChanges;
|
|
161207
161531
|
const statusClass = unsavedError || generalError ? "text-destructive" : "text-slate-600";
|
|
161208
161532
|
return /* @__PURE__ */ jsx(FixedBottomSurface, { variant: "light", children: /* @__PURE__ */ jsxs(
|
|
@@ -162940,7 +163264,6 @@ var PreviewRichTextEditorInner = ({
|
|
|
162940
163264
|
toolbarTone: "dark",
|
|
162941
163265
|
toolbarPortalToChrome: false,
|
|
162942
163266
|
hideToolbar: true,
|
|
162943
|
-
onClick: () => editor?.chain().focus().run(),
|
|
162944
163267
|
renderContent: (content) => /* @__PURE__ */ jsx(
|
|
162945
163268
|
"div",
|
|
162946
163269
|
{
|
|
@@ -164702,4 +165025,4 @@ lucide-react/dist/esm/lucide-react.js:
|
|
|
164702
165025
|
*)
|
|
164703
165026
|
*/
|
|
164704
165027
|
|
|
164705
|
-
export { ArrowDown, ArrowUp, BackgroundColorField, BackgroundGradientField, Badge2 as Badge, BlockApiProvider, Box, Button, CSS2 as CSS, CTA_ICON_OPTIONS, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardHeader, CardTitle, Check, ChevronDown, ChevronLeft, ChevronRight, Collapsible2 as Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Combobox, Content, ContentFieldsForm, Copy, DEFAULT_LAUNCH_READINESS_INPUT, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter, DialogHeader, DialogTitle2 as DialogTitle, DndContext, DropdownMenu2 as DropdownMenu, DropdownMenuContent2 as DropdownMenuContent, DropdownMenuItem2 as DropdownMenuItem, DropdownMenuLabel2 as DropdownMenuLabel, DropdownMenuSeparator2 as DropdownMenuSeparator, DropdownMenuTrigger2 as DropdownMenuTrigger, EMPTY_DOC, EditableBlockProvider, EditorChrome, EditorProvider, EmptyState2 as EmptyState, EntryControllerProvider, FieldFrame, FixedBottomSurface, FormRenderer, GripVertical, Input, KeyboardCode, Label4 as Label, List2 as List, LoaderCircle, ManifestForm, Maximize2, MediaEditor, MediaEditorProvider, MediaPickerDialog, MediaPickerMini, Monitor, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, PUBLIC_FILE_FIELD_KINDS, PageRenderer, Palette, PaletteProvider, Pencil, Plus, PointerSensor, PreviewRichTextEditor, PreviewTextEditor, ResizableSplitPane, RichText2 as RichText, RichTextEditorSurface, Root2, RotateCcw, SUBROUTE_KINDS, ScrollableDialogContent, Search, Select2 as Select, SelectContent2 as SelectContent, SelectItem2 as SelectItem, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator2 as Separator, Settings, SiteDocumentLayout, Smartphone, Sparkles, Surface, Tablet, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Text2 as Text, ThemeScope, Trash2, TriangleAlert, Trigger, X, applyCompiledRuntimeFieldsToContent, applyPageDesignEditorAction, asDesignBlockId, asEditorBlockId, asEditorBlockValues, asRecord, asSiteId, assertNever3 as assertNever, assertNever5 as assertNever2, augmentManifestWithStyleGroups, buildEditorModelRuntimeFieldsByBlockId, buildThemeRuntime, buttonPersonalities, canRedoHistory, canUndoHistory, classifyHistoryShortcut, clientComponentRegistry, closestCenter, cn, compileSiteThemeFromSelections, createBlock, createEditorInsertBlockCommand, createEditorRemoveBlockCommand, createEditorReorderBlocksCommand, createHistoryState, createManifestFormAdapter, createManifestValidation, createRoutingHelpers, createSnapshotFromPageRecord, createStoreBackend, curatedSiteStyles, deleteBlock, deriveLaunchReadiness, findButtonPersonality, findFooterLook, findHeaderLook, findPaletteVariant, foldSubroute, footerLookCatalog, footerLookRejectionReasonLabel, getBlockDefinition, getClientRect, getCtaIconComponent, getCuratedSiteStyle, getDirectImageUrlForMediaAsset, getFieldIntent, getModalConfig, getPageDesignEditorState, getRichTextImagePositionFromTarget, getRouteMetadataManifestForType, headerLookCatalog, headerLookRejectionReasonLabel, insertOrReplaceRichTextImage, isCtaIconName, isHeaderField, isInternalResolvedLinkValue, isKeyboardEvent, isNonEmptyValue, isObjectRecord2 as isObjectRecord, isSvgMimeType, isThemeV2NormalEditorRawStyleFieldName, isThemeV2NormalEditorRawStylePath, listBlockDescriptors, listContentTypes, lucide_react_exports, mergeManifestWithSdkOptions, mutateBlockContent, normalEditorCuratedPromotedFieldPaths, normalizePickerSearchThreshold, omitRouteTitleFieldFromManifest, paletteOverridesSchema, paletteVariants, parseAspectRatioValue, planPageDesignLayoutLookCompatibility, planSiteDocument, previewAssistantEnabled, pushHistoryEntry, recoveryConflictCopy, redoHistory, reorderBlocks, requireEntriesForCuratedChoices, resolveBlockTitle, resolveImageUrlWithContext, resolveMediaSlotContract, resolvePickerSelectionLabel, resolvePreviewSidebarTab, resolveVisiblePromotedFieldPathsForEditorBlock, shouldShowPickerSearch, siteStyleIdFromTheme, surfaceResolutionContextFromTheme, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetApplyContentPatch, systemCustomizeFacetCurrentValue, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, systemCustomizeFacetRollbackContentPatch, toRoutableLinkPayload, transformSdkBlockToDefinition, transformSdkBlockToManifest, undoHistory, unfinishedBlockCopy, unwrapResponse, useAsyncPickerOptions, useBackendWatch, useBlockContext, useCombinedRefs, useDebouncedLatestSave, useDndContext, useDraggable, useDroppable, useEditor2 as useEditor, useEditorUiStore, useEditorUiStoreInstance, useEntryController, useEntryEditorController, useField, useIsomorphicLayoutEffect3 as useIsomorphicLayoutEffect, useMediaEditor, useMediaEditorOptional, useMultiAutosave, useOptionalEditorUiStoreInstance, useRichTextEditor, useSdkConfig, useSensor, useSensors, useUISelector, useUniqueId, validateBlockManifestIssues, writePlanForLookCustomizationCommand };
|
|
165028
|
+
export { ArrowDown, ArrowUp, BackgroundColorField, BackgroundGradientField, Badge2 as Badge, BlockApiProvider, Box, Button, CSS2 as CSS, CTA_ICON_OPTIONS, Callout, CalloutDescription, CalloutTitle, Card, CardContent, CardHeader, CardTitle, Check, ChevronDown, ChevronLeft, ChevronRight, Collapsible2 as Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ColorPicker, Combobox, Content, ContentFieldsForm, Copy, DEFAULT_LAUNCH_READINESS_INPUT, Dialog2 as Dialog, DialogClose2 as DialogClose, DialogContent2 as DialogContent, DialogDescription2 as DialogDescription, DialogFooter, DialogHeader, DialogTitle2 as DialogTitle, DndContext, DropdownMenu2 as DropdownMenu, DropdownMenuContent2 as DropdownMenuContent, DropdownMenuItem2 as DropdownMenuItem, DropdownMenuLabel2 as DropdownMenuLabel, DropdownMenuSeparator2 as DropdownMenuSeparator, DropdownMenuTrigger2 as DropdownMenuTrigger, EMPTY_DOC, EditableBlockProvider, EditorChrome, EditorProvider, EllipsisVertical, EmptyState2 as EmptyState, EntryControllerProvider, FieldFrame, FixedBottomSurface, FormRenderer, GripVertical, Input, KeyboardCode, Label4 as Label, List2 as List, LoaderCircle, ManifestForm, Maximize2, MediaEditor, MediaEditorProvider, MediaPickerDialog, MediaPickerMini, Monitor, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, PUBLIC_FILE_FIELD_KINDS, PageRenderer, Palette, PaletteProvider, Pencil, Plus, PointerSensor, PreviewRichTextEditor, PreviewTextEditor, ResizableSplitPane, RichText2 as RichText, RichTextEditorSurface, Root2, RotateCcw, SUBROUTE_KINDS, ScrollableDialogContent, Search, Select2 as Select, SelectContent2 as SelectContent, SelectItem2 as SelectItem, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator2 as Separator, Settings, SiteDocumentLayout, Smartphone, Sparkles, Surface, Tablet, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Text2 as Text, ThemeScope, Trash2, TriangleAlert, Trigger, X, applyCompiledRuntimeFieldsToContent, applyPageDesignEditorAction, asDesignBlockId, asEditorBlockId, asEditorBlockValues, asRecord, asSiteId, assertNever3 as assertNever, assertNever5 as assertNever2, augmentManifestWithStyleGroups, buildEditorModelRuntimeFieldsByBlockId, buildThemeRuntime, buttonPersonalities, canRedoHistory, canUndoHistory, classifyHistoryShortcut, clientComponentRegistry, closestCenter, cn, compileSiteThemeFromSelections, createBlock, createEditorInsertBlockCommand, createEditorRemoveBlockCommand, createEditorReorderBlocksCommand, createHistoryState, createManifestFormAdapter, createManifestValidation, createRoutingHelpers, createSnapshotFromPageRecord, createStoreBackend, curatedSiteStyles, deleteBlock, deriveLaunchReadiness, findButtonPersonality, findFooterLook, findHeaderLook, findPaletteVariant, foldSubroute, footerLookCatalog, footerLookRejectionReasonLabel, getBlockDefinition, getClientRect, getCtaIconComponent, getCuratedSiteStyle, getDirectImageUrlForMediaAsset, getFieldIntent, getModalConfig, getPageDesignEditorState, getRichTextImagePositionFromTarget, getRouteMetadataManifestForType, headerLookCatalog, headerLookRejectionReasonLabel, insertOrReplaceRichTextImage, isCtaIconName, isHeaderField, isInternalResolvedLinkValue, isKeyboardEvent, isNonEmptyValue, isObjectRecord2 as isObjectRecord, isSvgMimeType, isThemeV2NormalEditorRawStyleFieldName, isThemeV2NormalEditorRawStylePath, listBlockDescriptors, listContentTypes, lucide_react_exports, mergeManifestWithSdkOptions, mutateBlockContent, normalEditorCuratedPromotedFieldPaths, normalizePickerSearchThreshold, omitRouteTitleFieldFromManifest, paletteOverridesSchema, paletteVariants, parseAspectRatioValue, planPageDesignLayoutLookCompatibility, planSiteDocument, previewAssistantEnabled, pushHistoryEntry, recoveryConflictCopy, redoHistory, reorderBlocks, requireEntriesForCuratedChoices, resolveBlockTitle, resolveImageUrlWithContext, resolveMediaSlotContract, resolvePickerSelectionLabel, resolvePreviewSidebarTab, resolveVisiblePromotedFieldPathsForEditorBlock, shouldShowPickerSearch, siteStyleIdFromTheme, surfaceResolutionContextFromTheme, systemCustomizeFacetAppliesToLayoutVariant, systemCustomizeFacetApplyContentPatch, systemCustomizeFacetCurrentValue, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetDefinitionsForBlock, systemCustomizeFacetLabelForValue, systemCustomizeFacetNextValue, systemCustomizeFacetRollbackContentPatch, toRoutableLinkPayload, transformSdkBlockToDefinition, transformSdkBlockToManifest, undoHistory, unfinishedBlockCopy, unwrapResponse, useAsyncPickerOptions, useBackendWatch, useBlockContext, useCombinedRefs, useDebouncedLatestSave, useDndContext, useDraggable, useDroppable, useEditor2 as useEditor, useEditorUiStore, useEditorUiStoreInstance, useEntryController, useEntryEditorController, useField, useIsomorphicLayoutEffect3 as useIsomorphicLayoutEffect, useMediaEditor, useMediaEditorOptional, useMultiAutosave, useOptionalEditorUiStoreInstance, useRichTextEditor, useSdkConfig, useSensor, useSensors, useUISelector, useUniqueId, validateBlockManifestIssues, writePlanForLookCustomizationCommand };
|