@riverbankcms/sdk 0.82.0 → 0.84.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 +16 -0
- package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-HML67UDA.mjs} +330 -11
- package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-I4BQUU6K.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +8 -0
- package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
- package/dist/_dts/api/src/blocks.d.ts +36 -0
- package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
- package/dist/_dts/api/src/endpoints.d.ts +40 -0
- package/dist/_dts/api/src/index.d.ts +2 -2
- package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
- package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
- package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
- package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
- package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
- package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
- package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
- package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
- package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
- package/dist/_dts/blocks/src/client.d.ts +4 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
- package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
- package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
- package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
- package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
- package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
- package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
- package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
- package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +303 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +26 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
- package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
- package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
- package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
- package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
- package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
- package/dist/_dts/content-model/src/index.d.ts +1 -0
- package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
- package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
- package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
- package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
- package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
- package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
- package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
- package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
- package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
- package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
- package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
- package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
- package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
- package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
- package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
- package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
- package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
- package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
- package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/site-commands/src/commands.d.ts +15 -0
- package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
- package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
- package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
- package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
- package/dist/_dts/theme-core/src/schema.d.ts +30 -25
- package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
- package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
- package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
- package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
- package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
- package/dist/{chunk-G35HOQEN.mjs → chunk-5E33VO6J.mjs} +132 -46
- package/dist/{chunk-HKB6XVIP.mjs → chunk-6X2OVO3S.mjs} +2 -2
- package/dist/{chunk-6FWNF3DJ.mjs → chunk-HFMGVJCE.mjs} +158 -20
- package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
- package/dist/{chunk-XQR6THQJ.mjs → chunk-MSHZO4SL.mjs} +3193 -1216
- package/dist/cli/index.mjs +2635 -575
- package/dist/cli/init-docs/content/getting-started.md +2 -0
- package/dist/cli/init-docs/content/workflow-templates.md +93 -2
- package/dist/client/{accordion-G34C45TW.mjs → accordion-ESY65T56.mjs} +2 -2
- package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-JRFNZUHD.mjs} +5 -5
- package/dist/client/bookings.mjs +3539 -269
- package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-CPR5VWIP.mjs} +3 -3
- package/dist/client/{cart-Q6S6LZUO.mjs → cart-ZUX5BA7O.mjs} +6 -6
- package/dist/client/{checkout-5QJLDE4I.mjs → checkout-RULGBADZ.mjs} +6 -6
- package/dist/client/{chunk-CHAB5ACD.mjs → chunk-52I7BGEK.mjs} +2 -2
- package/dist/client/{chunk-CSZGLBYR.mjs → chunk-5ZEAZ33K.mjs} +1 -1
- package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-BT6AEIKN.mjs} +1 -1
- package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-HXPWP5EN.mjs} +268 -15
- package/dist/client/{chunk-5PQH4Y75.mjs → chunk-JWEYB4V6.mjs} +2 -2
- package/dist/client/{chunk-EQKYMX4N.mjs → chunk-RDJFCPY3.mjs} +158 -51
- package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
- package/dist/client/{chunk-WJFHDTYF.mjs → chunk-URQCZD5W.mjs} +5 -5
- package/dist/client/{chunk-U2EW7RSR.mjs → chunk-Z5OBQ5I4.mjs} +1 -1
- package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
- package/dist/client/client.mjs +2391 -673
- package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-QTUDC35T.mjs} +5 -5
- package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-Q7NS4XLD.mjs} +7 -7
- package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-QAO7VUO5.mjs} +7 -7
- package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-WTNNU6Q3.mjs} +7 -7
- package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-5TA2ELDT.mjs} +7 -7
- package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-M6USZGRF.mjs} +7 -7
- package/dist/client/{form-BOWN7ZNQ.mjs → form-DGVGXLMH.mjs} +2 -2
- package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-O2AGMPCU.mjs} +3 -3
- package/dist/client/hooks.mjs +1636 -385
- package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-EJRNRIKJ.mjs} +2 -2
- package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-7NTC2DTR.mjs} +2 -2
- package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-HH4LP53D.mjs} +6 -6
- package/dist/client/{productList-AZOLOZKM.mjs → productList-YVHYM2AF.mjs} +6 -6
- package/dist/client/rendering/client.mjs +2303 -1068
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +2587 -796
- package/dist/client/{shop-ZDLO7IIG.mjs → shop-UIFX7XRK.mjs} +6 -6
- package/dist/preview-next/before-render.mjs +40 -0
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/middleware.mjs +40 -0
- package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-ZENAOYMN.mjs} +6 -6
- package/dist/server/components.mjs +2028 -457
- package/dist/server/config-validation.mjs +1629 -377
- package/dist/server/config.mjs +1629 -377
- package/dist/server/data.mjs +1636 -385
- package/dist/server/index.mjs +42 -1
- package/dist/server/next.mjs +2215 -571
- package/dist/server/page-converter.mjs +2068 -884
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +2040 -469
- package/dist/server/rendering.mjs +2119 -475
- package/dist/server/routing.mjs +1711 -419
- package/dist/server/server.mjs +1718 -394
- package/dist/server/theme-bridge.mjs +1180 -101
- package/dist/server/theme.mjs +92 -1
- package/dist/styles/index.css +292 -36
- package/package.json +1 -1
- package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { KeyboardCode, getBlockDefinition, CSS, useSdkConfig, unwrapResponse, parseSiteIconStyleGuideVersionId, parseBlockIconValue, listBlockDescriptors, useSensor, PointerSensor, useSensors,
|
|
2
|
+
import { KeyboardCode, getBlockDefinition, CSS, useSdkConfig, unwrapResponse, parseSiteIconStyleGuideVersionId, parseBlockIconValue, listBlockDescriptors, useSensor, PointerSensor, useSensors, createEditorRemoveBlockCommand, unsafeAsEditorBlockId, DndContext, closestCenter, Button, Plus, useDroppable, useDraggable, useCombinedRefs, isKeyboardEvent, createCustomBlockRegistry, Card, cn, Collapsible, CollapsibleContent, listContentTypes, mergeBlockDescriptorsWithRegistry, createEditorReorderBlocksCommand, mutateBlockContent, deleteEntrySlotBlock, deleteBlock, useDndContext, useUniqueId, useIsomorphicLayoutEffect, EmptyState, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Search, getClientRect, resolveBlockTitle, CardHeader, GripVertical, ChevronRight, CardTitle, ArrowUp, ArrowDown, DropdownMenu, DropdownMenuTrigger, EllipsisVertical, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuItem, Copy, Trash2, DialogFooter, DialogClose, CardContent, createEntrySlotBlock, createBlock, createEditorInsertBlockCommand, reorderEntrySlotBlocks, reorderBlocks, LoaderCircle, ChevronDown, getFeatureCardIconCompletion, toFeatureCardIconSuggestionInputs, getBlockIconSemanticFallbackId, suggestSemanticIconForFeatureCard, getGeneratedBlockIconStyleState, assertNever, createManifestFormAdapter, getModalConfig, createStoreBackend, validateBlockManifestIssues, isNonEmptyValue, Settings, ScrollableDialogContent, FormRenderer, Tabs, TabsList, TabsTrigger, TabsContent, RotateCcw, ImagePlus, Sparkles, Textarea, Callout, CalloutDescription, normalEditorCuratedPromotedFieldPaths, resolveVisiblePromotedFieldPathsForEditorBlock, CalloutTitle, unfinishedBlockCopy, recoveryConflictCopy, ManifestForm, unsafeAsEditorBlockValues, Box, mergeManifestWithSdkOptions, augmentManifestWithStyleGroups, suggestFeatureCardSemanticIcons, applyFeatureCardIconSuggestions, createFeatureCardIconKey, lucide_react_exports, isThemeV2NormalEditorRawStylePath, getFieldIntent, isHeaderField, isThemeV2NormalEditorRawStyleFieldName, BackgroundGradientField, BackgroundColorField, useField, FieldFrame, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, useMediaEditorOptional, useRichTextEditor, RichTextEditorSurface, ThemeScope, isObjectRecord, EMPTY_DOC, useAsyncPickerOptions, resolvePickerSelectionLabel, shouldShowPickerSearch, normalizePickerSearchThreshold, Combobox, Badge, useBlockContext, resolveMediaSlotContract, asRecord, parseAspectRatioValue, MediaEditor, PUBLIC_FILE_FIELD_KINDS, useBackendWatch, resolveIconPickerPreset, isIconPickerPreset, getIconPickerOptionsForPreset, isKnownIconName, getIconComponent, isOfferingsPreviewSourceKey, EyeOff, CommandMultiSelect, expectParsedBrandedId, parseSiteId, buildThemeRuntime, SdkConfigProvider, PaletteProvider, MediaEditorProvider, useEditorUiStoreInstance, useUISelector, getRichTextImagePositionFromTarget, insertOrReplaceRichTextImage, emitMediaCropDebug, Pencil, resolveVideoSelectionIntentForMediaField, resolveOfferingsPreviewGroupOrderEntries, normalizeOfferingsPreviewGroupOrder, inferLegacyOfferingsPreviewGroupOrder, siteOptionSources, evaluateVisibility, Root2, List, Trigger, Content, Input, Check, Label, isInternalResolvedLinkValue, resolveImageUrlWithContext, useMediaEditor, MediaPickerMini, MediaPickerDialog, toRoutableLinkPayload, classifyKnownMimeType, getDirectImageUrlForMediaAsset, isSvgMimeType } from './chunk-MSHZO4SL.mjs';
|
|
3
3
|
import React, { createContext, memo, useMemo, useState, useRef, useEffect, forwardRef, useCallback, useImperativeHandle, useContext, useSyncExternalStore, useLayoutEffect, Fragment as Fragment$1, useReducer } from 'react';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -1302,12 +1302,81 @@ function buildInsertBlockHistoryCommand({
|
|
|
1302
1302
|
);
|
|
1303
1303
|
}
|
|
1304
1304
|
|
|
1305
|
+
// ../editor-blocks/src/block-editor/owner.ts
|
|
1306
|
+
function blockEditorOwnerKey(owner) {
|
|
1307
|
+
switch (owner.kind) {
|
|
1308
|
+
case "page":
|
|
1309
|
+
return `page:${owner.pageId}`;
|
|
1310
|
+
case "entry-slot":
|
|
1311
|
+
return `entry-slot:${owner.type}:${owner.entryId}:${owner.slotKey}`;
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
async function createEditableBlockForOwner(apiClient, siteId, owner, input) {
|
|
1315
|
+
switch (owner.kind) {
|
|
1316
|
+
case "page":
|
|
1317
|
+
return createBlock(apiClient, {
|
|
1318
|
+
siteId,
|
|
1319
|
+
pageId: owner.pageId,
|
|
1320
|
+
kind: input.kind,
|
|
1321
|
+
position: input.position,
|
|
1322
|
+
purpose: input.purpose,
|
|
1323
|
+
duplicatedFromBlockId: input.duplicatedFromBlockId
|
|
1324
|
+
});
|
|
1325
|
+
case "entry-slot":
|
|
1326
|
+
return createEntrySlotBlock(apiClient, {
|
|
1327
|
+
siteId,
|
|
1328
|
+
type: owner.type,
|
|
1329
|
+
entryId: owner.entryId,
|
|
1330
|
+
slotKey: owner.slotKey,
|
|
1331
|
+
kind: input.kind,
|
|
1332
|
+
position: input.position,
|
|
1333
|
+
purpose: input.purpose
|
|
1334
|
+
});
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
async function reorderEditableBlocksForOwner(apiClient, siteId, owner, blockIds) {
|
|
1338
|
+
switch (owner.kind) {
|
|
1339
|
+
case "page":
|
|
1340
|
+
return reorderBlocks(apiClient, {
|
|
1341
|
+
siteId,
|
|
1342
|
+
pageId: owner.pageId,
|
|
1343
|
+
blockIds
|
|
1344
|
+
});
|
|
1345
|
+
case "entry-slot":
|
|
1346
|
+
return reorderEntrySlotBlocks(apiClient, {
|
|
1347
|
+
siteId,
|
|
1348
|
+
type: owner.type,
|
|
1349
|
+
entryId: owner.entryId,
|
|
1350
|
+
slotKey: owner.slotKey,
|
|
1351
|
+
blockIds
|
|
1352
|
+
});
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
async function deleteEditableBlockForOwner(apiClient, siteId, owner, blockId) {
|
|
1356
|
+
switch (owner.kind) {
|
|
1357
|
+
case "page":
|
|
1358
|
+
return deleteBlock(apiClient, {
|
|
1359
|
+
siteId,
|
|
1360
|
+
pageId: owner.pageId,
|
|
1361
|
+
blockId
|
|
1362
|
+
});
|
|
1363
|
+
case "entry-slot":
|
|
1364
|
+
return deleteEntrySlotBlock(apiClient, {
|
|
1365
|
+
siteId,
|
|
1366
|
+
type: owner.type,
|
|
1367
|
+
entryId: owner.entryId,
|
|
1368
|
+
slotKey: owner.slotKey,
|
|
1369
|
+
blockId
|
|
1370
|
+
});
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1305
1374
|
// ../editor-blocks/src/block-editor/hooks/useBlockCreation.ts
|
|
1306
1375
|
function useBlockCreation({
|
|
1307
1376
|
allowCreation,
|
|
1308
1377
|
apiClient,
|
|
1309
1378
|
siteId,
|
|
1310
|
-
|
|
1379
|
+
owner,
|
|
1311
1380
|
blockList,
|
|
1312
1381
|
setBlockList,
|
|
1313
1382
|
onBlocksChange,
|
|
@@ -1335,9 +1404,7 @@ function useBlockCreation({
|
|
|
1335
1404
|
setCreatingBlockName(descriptor.name);
|
|
1336
1405
|
setErrorMessage(null);
|
|
1337
1406
|
try {
|
|
1338
|
-
const response = await
|
|
1339
|
-
siteId,
|
|
1340
|
-
pageId,
|
|
1407
|
+
const response = await createEditableBlockForOwner(apiClient, siteId, owner, {
|
|
1341
1408
|
kind: descriptor.name,
|
|
1342
1409
|
position: insertPosition,
|
|
1343
1410
|
purpose: "content"
|
|
@@ -1358,7 +1425,7 @@ function useBlockCreation({
|
|
|
1358
1425
|
addRecentBlock(siteId, descriptor.name);
|
|
1359
1426
|
if (newBlock.id) {
|
|
1360
1427
|
try {
|
|
1361
|
-
const storageKey = `blockEditor:${
|
|
1428
|
+
const storageKey = `blockEditor:${blockEditorOwnerKey(owner)}:collapsed`;
|
|
1362
1429
|
const raw = typeof window !== "undefined" ? localStorage.getItem(storageKey) : null;
|
|
1363
1430
|
const map = raw ? JSON.parse(raw) : {};
|
|
1364
1431
|
map[newBlock.id] = false;
|
|
@@ -1384,7 +1451,7 @@ function useBlockCreation({
|
|
|
1384
1451
|
setInsertPosition(null);
|
|
1385
1452
|
}
|
|
1386
1453
|
},
|
|
1387
|
-
[allowCreation, apiClient, blockList, creatingBlockName, insertPosition, onBlocksChange,
|
|
1454
|
+
[allowCreation, apiClient, blockList, creatingBlockName, insertPosition, onBlocksChange, owner, setBlockList, siteId, triggerFocus, uiStore]
|
|
1388
1455
|
);
|
|
1389
1456
|
return {
|
|
1390
1457
|
pickerOpen,
|
|
@@ -1409,7 +1476,7 @@ function useBlockDuplication({
|
|
|
1409
1476
|
allowCreation,
|
|
1410
1477
|
apiClient,
|
|
1411
1478
|
siteId,
|
|
1412
|
-
|
|
1479
|
+
owner,
|
|
1413
1480
|
blockList,
|
|
1414
1481
|
setBlockList,
|
|
1415
1482
|
onBlocksChange,
|
|
@@ -1432,9 +1499,7 @@ function useBlockDuplication({
|
|
|
1432
1499
|
setErrorMessage(null);
|
|
1433
1500
|
let createdBlockId = null;
|
|
1434
1501
|
try {
|
|
1435
|
-
const response = await
|
|
1436
|
-
siteId,
|
|
1437
|
-
pageId,
|
|
1502
|
+
const response = await createEditableBlockForOwner(apiClient, siteId, owner, {
|
|
1438
1503
|
kind: sourceBlock.kind,
|
|
1439
1504
|
position: insertIndex,
|
|
1440
1505
|
purpose,
|
|
@@ -1484,11 +1549,7 @@ function useBlockDuplication({
|
|
|
1484
1549
|
} catch (error) {
|
|
1485
1550
|
if (createdBlockId) {
|
|
1486
1551
|
try {
|
|
1487
|
-
await
|
|
1488
|
-
siteId,
|
|
1489
|
-
pageId,
|
|
1490
|
-
blockId: createdBlockId
|
|
1491
|
-
});
|
|
1552
|
+
await deleteEditableBlockForOwner(apiClient, siteId, owner, createdBlockId);
|
|
1492
1553
|
} catch {
|
|
1493
1554
|
}
|
|
1494
1555
|
}
|
|
@@ -1505,7 +1566,7 @@ function useBlockDuplication({
|
|
|
1505
1566
|
blockList,
|
|
1506
1567
|
duplicatingBlockId,
|
|
1507
1568
|
onBlocksChange,
|
|
1508
|
-
|
|
1569
|
+
owner,
|
|
1509
1570
|
setBlockList,
|
|
1510
1571
|
setErrorMessage,
|
|
1511
1572
|
siteId,
|
|
@@ -1529,7 +1590,7 @@ function useBlockReorder({
|
|
|
1529
1590
|
allowReordering,
|
|
1530
1591
|
apiClient,
|
|
1531
1592
|
siteId,
|
|
1532
|
-
|
|
1593
|
+
owner,
|
|
1533
1594
|
blockList,
|
|
1534
1595
|
setBlockList,
|
|
1535
1596
|
onBlocksChange,
|
|
@@ -1550,11 +1611,7 @@ function useBlockReorder({
|
|
|
1550
1611
|
)
|
|
1551
1612
|
});
|
|
1552
1613
|
try {
|
|
1553
|
-
await
|
|
1554
|
-
siteId,
|
|
1555
|
-
pageId,
|
|
1556
|
-
blockIds: nextBlockIds
|
|
1557
|
-
});
|
|
1614
|
+
await reorderEditableBlocksForOwner(apiClient, siteId, owner, nextBlockIds);
|
|
1558
1615
|
onBlocksChange?.(updated);
|
|
1559
1616
|
} catch (error) {
|
|
1560
1617
|
const message = error instanceof Error ? error.message : "Failed to reorder blocks";
|
|
@@ -1571,7 +1628,7 @@ function useBlockReorder({
|
|
|
1571
1628
|
setReorderId(null);
|
|
1572
1629
|
}
|
|
1573
1630
|
},
|
|
1574
|
-
[allowReordering, apiClient, onBlocksChange,
|
|
1631
|
+
[allowReordering, apiClient, onBlocksChange, owner, setBlockList, siteId, setErrorMessage, uiStore]
|
|
1575
1632
|
);
|
|
1576
1633
|
const handleMove = useCallback(
|
|
1577
1634
|
(blockId, direction) => {
|
|
@@ -1748,13 +1805,14 @@ function BlockForm({
|
|
|
1748
1805
|
hasRecoveryConflict = false,
|
|
1749
1806
|
focusSignal,
|
|
1750
1807
|
onFocusHandled,
|
|
1751
|
-
onSaveSuccess
|
|
1808
|
+
onSaveSuccess,
|
|
1752
1809
|
theme,
|
|
1753
1810
|
widgetOverrides,
|
|
1754
1811
|
hideThemeV2RawStyleFields: hideThemeV2RawStyleFields2 = false,
|
|
1755
1812
|
pageDesignBlock = null
|
|
1756
1813
|
}) {
|
|
1757
1814
|
const formRootRef = useRef(null);
|
|
1815
|
+
const lastSaveSnapshotRef = useRef(null);
|
|
1758
1816
|
const blockId = typeof block.id === "string" ? unsafeAsEditorBlockId(block.id) : null;
|
|
1759
1817
|
const blockSnapshot = useStoreSelector(
|
|
1760
1818
|
uiStore,
|
|
@@ -1877,6 +1935,20 @@ function BlockForm({
|
|
|
1877
1935
|
uiStore.getState().setActivePreviewField(null);
|
|
1878
1936
|
};
|
|
1879
1937
|
}, [uiStore]);
|
|
1938
|
+
useEffect(() => {
|
|
1939
|
+
if (!blockSnapshot) {
|
|
1940
|
+
lastSaveSnapshotRef.current = null;
|
|
1941
|
+
return;
|
|
1942
|
+
}
|
|
1943
|
+
const previous = lastSaveSnapshotRef.current;
|
|
1944
|
+
lastSaveSnapshotRef.current = {
|
|
1945
|
+
syncKind: blockSnapshot.syncState.kind,
|
|
1946
|
+
version: blockSnapshot.version
|
|
1947
|
+
};
|
|
1948
|
+
if (previous?.syncKind === "pending" && blockSnapshot.syncState.kind === "baseline" && previous.version !== blockSnapshot.version) {
|
|
1949
|
+
onSaveSuccess?.(blockSnapshot.baseline ?? {});
|
|
1950
|
+
}
|
|
1951
|
+
}, [blockSnapshot, onSaveSuccess]);
|
|
1880
1952
|
if (!blockId || !blockSnapshot) {
|
|
1881
1953
|
return null;
|
|
1882
1954
|
}
|
|
@@ -3389,7 +3461,7 @@ var SortableBlockItem = memo(function SortableBlockItem2({
|
|
|
3389
3461
|
}
|
|
3390
3462
|
},
|
|
3391
3463
|
style,
|
|
3392
|
-
...mounted ? sortable.attributes : {},
|
|
3464
|
+
...mounted && isDraggable ? sortable.attributes : {},
|
|
3393
3465
|
children: /* @__PURE__ */ jsx(
|
|
3394
3466
|
BlockCard,
|
|
3395
3467
|
{
|
|
@@ -3431,7 +3503,7 @@ var SortableBlockItem = memo(function SortableBlockItem2({
|
|
|
3431
3503
|
var BlockEditor = forwardRef(
|
|
3432
3504
|
function BlockEditor2({
|
|
3433
3505
|
siteId,
|
|
3434
|
-
|
|
3506
|
+
owner,
|
|
3435
3507
|
blocks,
|
|
3436
3508
|
recoveryConflictBlockIds = [],
|
|
3437
3509
|
recoveryConflictReviewRequestId = null,
|
|
@@ -3439,6 +3511,7 @@ var BlockEditor = forwardRef(
|
|
|
3439
3511
|
uiStore,
|
|
3440
3512
|
enableReordering = true,
|
|
3441
3513
|
enableCreation = true,
|
|
3514
|
+
enableDeletion = true,
|
|
3442
3515
|
onBlockSave,
|
|
3443
3516
|
onBlocksChange,
|
|
3444
3517
|
theme,
|
|
@@ -3449,6 +3522,9 @@ var BlockEditor = forwardRef(
|
|
|
3449
3522
|
enabledContentTypes = [],
|
|
3450
3523
|
sdkConfig = null,
|
|
3451
3524
|
customBlocks = [],
|
|
3525
|
+
allowedBlockKinds = null,
|
|
3526
|
+
emptyUnavailableMessage = "No blocks available for this page.",
|
|
3527
|
+
initialCollapsed = true,
|
|
3452
3528
|
reorderControlMode = DEFAULT_REORDER_CONTROL_MODE,
|
|
3453
3529
|
actionPresentation = DEFAULT_BLOCK_ACTION_PRESENTATION
|
|
3454
3530
|
}, ref) {
|
|
@@ -3477,6 +3553,7 @@ var BlockEditor = forwardRef(
|
|
|
3477
3553
|
const [iconStyleGuide, setIconStyleGuide] = useState(null);
|
|
3478
3554
|
const allowReordering = enableReordering;
|
|
3479
3555
|
const allowCreation = enableCreation;
|
|
3556
|
+
const allowDeletion = enableDeletion;
|
|
3480
3557
|
const conflictedBlockIdSet = useMemo(
|
|
3481
3558
|
() => new Set(recoveryConflictBlockIds),
|
|
3482
3559
|
[recoveryConflictBlockIds]
|
|
@@ -3494,9 +3571,11 @@ var BlockEditor = forwardRef(
|
|
|
3494
3571
|
),
|
|
3495
3572
|
[pageDesignEditorModel]
|
|
3496
3573
|
);
|
|
3574
|
+
const ownerKey = useMemo(() => blockEditorOwnerKey(owner), [owner]);
|
|
3497
3575
|
const { isCollapsed, setCollapsed } = useBlockExpandState({
|
|
3498
|
-
pageId,
|
|
3499
|
-
blockIds
|
|
3576
|
+
pageId: ownerKey,
|
|
3577
|
+
blockIds,
|
|
3578
|
+
initialCollapsed
|
|
3500
3579
|
});
|
|
3501
3580
|
useEffect(() => {
|
|
3502
3581
|
setBlockList(normalizeBlockListInitial(blocks));
|
|
@@ -3671,15 +3750,22 @@ var BlockEditor = forwardRef(
|
|
|
3671
3750
|
}),
|
|
3672
3751
|
[triggerFocus]
|
|
3673
3752
|
);
|
|
3674
|
-
const availableBlocks = useMemo(
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3753
|
+
const availableBlocks = useMemo(() => {
|
|
3754
|
+
const descriptors = mergeBlockDescriptors(
|
|
3755
|
+
listBlockDescriptors(),
|
|
3756
|
+
sdkConfig,
|
|
3757
|
+
customBlocks
|
|
3758
|
+
);
|
|
3759
|
+
if (!allowedBlockKinds) return descriptors;
|
|
3760
|
+
const allowed = new Set(allowedBlockKinds);
|
|
3761
|
+
return descriptors.filter((descriptor) => allowed.has(descriptor.name));
|
|
3762
|
+
}, [allowedBlockKinds, customBlocks, sdkConfig]);
|
|
3678
3763
|
const pointerSensor = useSensor(PointerSensor, {
|
|
3679
3764
|
activationConstraint: { distance: 5 }
|
|
3680
3765
|
});
|
|
3681
3766
|
const sensors = useSensors(pointerSensor);
|
|
3682
3767
|
const activeSensors = allowReordering ? sensors : [];
|
|
3768
|
+
const canCreateBlocks = allowCreation && availableBlocks.length > 0;
|
|
3683
3769
|
const {
|
|
3684
3770
|
pickerOpen,
|
|
3685
3771
|
creatingBlockName,
|
|
@@ -3687,10 +3773,10 @@ var BlockEditor = forwardRef(
|
|
|
3687
3773
|
closePicker,
|
|
3688
3774
|
handleCreateBlock
|
|
3689
3775
|
} = useBlockCreation({
|
|
3690
|
-
allowCreation,
|
|
3776
|
+
allowCreation: canCreateBlocks,
|
|
3691
3777
|
apiClient,
|
|
3692
3778
|
siteId,
|
|
3693
|
-
|
|
3779
|
+
owner,
|
|
3694
3780
|
blockList,
|
|
3695
3781
|
setBlockList,
|
|
3696
3782
|
onBlocksChange,
|
|
@@ -3701,7 +3787,7 @@ var BlockEditor = forwardRef(
|
|
|
3701
3787
|
allowReordering,
|
|
3702
3788
|
apiClient,
|
|
3703
3789
|
siteId,
|
|
3704
|
-
|
|
3790
|
+
owner,
|
|
3705
3791
|
blockList,
|
|
3706
3792
|
setBlockList,
|
|
3707
3793
|
onBlocksChange,
|
|
@@ -3709,10 +3795,10 @@ var BlockEditor = forwardRef(
|
|
|
3709
3795
|
uiStore
|
|
3710
3796
|
});
|
|
3711
3797
|
const { duplicatingBlockId, duplicateBlock } = useBlockDuplication({
|
|
3712
|
-
allowCreation,
|
|
3798
|
+
allowCreation: canCreateBlocks,
|
|
3713
3799
|
apiClient,
|
|
3714
3800
|
siteId,
|
|
3715
|
-
|
|
3801
|
+
owner,
|
|
3716
3802
|
blockList,
|
|
3717
3803
|
setBlockList,
|
|
3718
3804
|
onBlocksChange,
|
|
@@ -3728,7 +3814,7 @@ var BlockEditor = forwardRef(
|
|
|
3728
3814
|
if (!removedBlock) {
|
|
3729
3815
|
return;
|
|
3730
3816
|
}
|
|
3731
|
-
await
|
|
3817
|
+
await deleteEditableBlockForOwner(apiClient, siteId, owner, blockId);
|
|
3732
3818
|
const updatedList = blockList.filter((b) => b.id !== blockId);
|
|
3733
3819
|
setBlockList(updatedList);
|
|
3734
3820
|
if (uiStore) {
|
|
@@ -3746,7 +3832,7 @@ var BlockEditor = forwardRef(
|
|
|
3746
3832
|
[
|
|
3747
3833
|
apiClient,
|
|
3748
3834
|
siteId,
|
|
3749
|
-
|
|
3835
|
+
owner,
|
|
3750
3836
|
blockList,
|
|
3751
3837
|
setBlockList,
|
|
3752
3838
|
onBlocksChange,
|
|
@@ -3854,7 +3940,7 @@ var BlockEditor = forwardRef(
|
|
|
3854
3940
|
items: blockList.map((b) => b.id),
|
|
3855
3941
|
strategy: verticalListSortingStrategy,
|
|
3856
3942
|
children: /* @__PURE__ */ jsxs("div", { className: "space-y-0", children: [
|
|
3857
|
-
|
|
3943
|
+
canCreateBlocks ? /* @__PURE__ */ jsx(AddBlockDivider, { onOpen: openPicker, position: 0 }) : null,
|
|
3858
3944
|
blockList.map((block, index) => {
|
|
3859
3945
|
const focusSignal = focusRequest && block.id && focusRequest.blockId === unsafeAsEditorBlockId(block.id) ? focusRequest : null;
|
|
3860
3946
|
const collapsed = isCollapsed(block.id);
|
|
@@ -3878,7 +3964,7 @@ var BlockEditor = forwardRef(
|
|
|
3878
3964
|
block,
|
|
3879
3965
|
onMove: handleMove,
|
|
3880
3966
|
onDuplicate: duplicateBlock,
|
|
3881
|
-
onDelete: handleDelete,
|
|
3967
|
+
onDelete: allowDeletion ? handleDelete : void 0,
|
|
3882
3968
|
isFirst: index === 0,
|
|
3883
3969
|
isLast: index === blockList.length - 1,
|
|
3884
3970
|
isMoving: reorderId === block.id || duplicatingBlockId === block.id,
|
|
@@ -3916,7 +4002,7 @@ var BlockEditor = forwardRef(
|
|
|
3916
4002
|
onApplyGeneratedIconSet: applyGeneratedFeatureCardIconSet2
|
|
3917
4003
|
}
|
|
3918
4004
|
),
|
|
3919
|
-
|
|
4005
|
+
canCreateBlocks && index < blockList.length - 1 ? /* @__PURE__ */ jsx(
|
|
3920
4006
|
AddBlockDivider,
|
|
3921
4007
|
{
|
|
3922
4008
|
onOpen: openPicker,
|
|
@@ -3932,8 +4018,8 @@ var BlockEditor = forwardRef(
|
|
|
3932
4018
|
}
|
|
3933
4019
|
)
|
|
3934
4020
|
}
|
|
3935
|
-
) : hasBlocks ? /* @__PURE__ */ jsx("div", { className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground", children: "Loading block editor..." }) :
|
|
3936
|
-
|
|
4021
|
+
) : hasBlocks ? /* @__PURE__ */ jsx("div", { className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground", children: "Loading block editor..." }) : canCreateBlocks ? /* @__PURE__ */ jsx(EmptyState2, { onAdd: () => openPicker(0) }) : /* @__PURE__ */ jsx("div", { className: "rounded-md border border-dashed px-4 py-6 text-center text-sm text-muted-foreground", children: emptyUnavailableMessage }),
|
|
4022
|
+
canCreateBlocks && hasBlocks ? /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxs(
|
|
3937
4023
|
Button,
|
|
3938
4024
|
{
|
|
3939
4025
|
type: "button",
|
|
@@ -3945,7 +4031,7 @@ var BlockEditor = forwardRef(
|
|
|
3945
4031
|
]
|
|
3946
4032
|
}
|
|
3947
4033
|
) }) : null,
|
|
3948
|
-
|
|
4034
|
+
canCreateBlocks ? /* @__PURE__ */ jsx(
|
|
3949
4035
|
EnhancedBlockPickerDialog,
|
|
3950
4036
|
{
|
|
3951
4037
|
open: pickerOpen,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { assertNever2, usePreviewDesignHistoryOrder, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, unwrapResponse, useDebouncedLatestSave, AMBIENT_BACKGROUND_ROLES, applyPageDesignEditorAction, resolvePreviewSidebarTab, confirmAutosaveBatch, beginAutosaveBatch, enqueueTransaction, applyBackgroundOverrideContentPatch, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, unsafeAsEditorBlockId, createHistoryState, rejectAutosaveBatch, redoHistory, undoHistory, pushHistoryEntry, idleEditorTransactionQueueState, canRedoHistory, deriveTransactionCapabilities, canUndoHistory, backgroundOverrideEquals, attachRenderableMediaAssetFields, planPageDesignLayoutLookCompatibility, unsafeAsEditorBlockValues } from './chunk-
|
|
3
|
-
import { ApiRequestError, resolveSurfaceDocumentAttributes, SURFACE_DOCUMENT_DATA_ATTRIBUTE, SURFACE_IDS } from './chunk-
|
|
2
|
+
import { assertNever2, usePreviewDesignHistoryOrder, useOptionalEditorUiStoreInstance, getPageDesignEditorState, PAGE_DESIGN_EDITOR_STATE_FETCH_ERROR_MESSAGE, unwrapResponse, useDebouncedLatestSave, AMBIENT_BACKGROUND_ROLES, applyPageDesignEditorAction, resolvePreviewSidebarTab, confirmAutosaveBatch, beginAutosaveBatch, enqueueTransaction, applyBackgroundOverrideContentPatch, systemCustomizeFacetDefinitionForBlock, systemCustomizeFacetRollbackContentPatch, systemCustomizeFacetApplyContentPatch, unsafeAsEditorBlockId, createHistoryState, rejectAutosaveBatch, redoHistory, undoHistory, pushHistoryEntry, idleEditorTransactionQueueState, canRedoHistory, deriveTransactionCapabilities, canUndoHistory, backgroundOverrideEquals, attachRenderableMediaAssetFields, planPageDesignLayoutLookCompatibility, unsafeAsEditorBlockValues } from './chunk-MSHZO4SL.mjs';
|
|
3
|
+
import { ApiRequestError, resolveSurfaceDocumentAttributes, SURFACE_DOCUMENT_DATA_ATTRIBUTE, SURFACE_IDS } from './chunk-LBBPD2IW.mjs';
|
|
4
4
|
import { createContext, useState, useRef, useEffect, useMemo, useLayoutEffect, useContext } from 'react';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|