@kotao/storefront 0.2.5 → 0.2.7
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 +57 -2
- package/dist/bridge-CfNBWu0H.d.ts +260 -0
- package/dist/cart-documents-BLavRDiu.d.ts +89 -0
- package/dist/cart-documents.d.ts +1 -2
- package/dist/cart-documents.js +1 -1
- package/dist/{chunk-M7BPQ54D.js → chunk-2MRB6SMP.js} +4 -3
- package/dist/chunk-2MRB6SMP.js.map +1 -0
- package/dist/chunk-CKGI3Y7L.js +19 -0
- package/dist/chunk-CKGI3Y7L.js.map +1 -0
- package/dist/{chunk-GGOZELAA.js → chunk-DTKLAOKR.js} +231 -165
- package/dist/chunk-DTKLAOKR.js.map +1 -0
- package/dist/{chunk-MCIFKJQK.js → chunk-R4N565GX.js} +5 -2
- package/dist/chunk-R4N565GX.js.map +1 -0
- package/dist/chunk-RFKLO6TD.js +1594 -0
- package/dist/chunk-RFKLO6TD.js.map +1 -0
- package/dist/{chunk-XMTWFJCZ.js → chunk-RFM27BKZ.js} +31 -7
- package/dist/chunk-RFM27BKZ.js.map +1 -0
- package/dist/{chunk-MYDKIJRH.js → chunk-SVMYFYIA.js} +2 -2
- package/dist/{chunk-MYDKIJRH.js.map → chunk-SVMYFYIA.js.map} +1 -1
- package/dist/{chunk-H3D7BAOL.js → chunk-VOTBNOWH.js} +21 -3
- package/dist/chunk-VOTBNOWH.js.map +1 -0
- package/dist/{chunk-PXVDVUFX.js → chunk-W74FGUZH.js} +10 -3
- package/dist/chunk-W74FGUZH.js.map +1 -0
- package/dist/{chunk-2IWNUDSZ.js → chunk-WNXI3MPM.js} +2 -2
- package/dist/chunk-WNXI3MPM.js.map +1 -0
- package/dist/chunk-XXNCFWXT.js +2118 -0
- package/dist/chunk-XXNCFWXT.js.map +1 -0
- package/dist/{client-bsiNPHBi.d.ts → client-CwOPPpFF.d.ts} +11 -1
- package/dist/{createCartHandler-C4RrPwSG.d.ts → createCartHandler-7DdKB-GF.d.ts} +1 -1
- package/dist/custom-css-Bl7Ur3-H.d.ts +6 -0
- package/dist/editor.d.ts +57 -104
- package/dist/editor.js +270 -1
- package/dist/editor.js.map +1 -1
- package/dist/events-react.d.ts +4 -2
- package/dist/events-react.js +6 -4
- package/dist/events-react.js.map +1 -1
- package/dist/events.d.ts +3 -3
- package/dist/events.js +1 -1
- package/dist/{fetch-M3Y-fQrW.d.ts → fetch-Bq_cc8_G.d.ts} +5 -0
- package/dist/hydrogen-CqDMW3YC.d.ts +259 -0
- package/dist/index.d.ts +75 -51
- package/dist/index.js +19 -15
- package/dist/index.js.map +1 -1
- package/dist/react-router.d.ts +40 -9
- package/dist/react-router.js +16 -7
- package/dist/react-router.js.map +1 -1
- package/dist/react.d.ts +79 -11
- package/dist/react.js +279 -10
- package/dist/react.js.map +1 -1
- package/dist/{routing-sEonP93J.d.ts → routing-Bz3Cg0BW.d.ts} +36 -6
- package/dist/seo.d.ts +7 -4
- package/dist/seo.js +2 -2
- package/dist/settings.d.ts +14 -4
- package/dist/settings.js +2 -2
- package/dist/{shop-BJSvtmnV.d.ts → shop-CnrnSAJw.d.ts} +33 -6
- package/dist/{store-CtCWHI8H.d.ts → store-ZzoBbWir.d.ts} +1 -1
- package/dist/storefront-api-types.d.ts +12 -0
- package/dist/{types-BDhHWZsP.d.ts → types-BkY0yET-.d.ts} +3 -3
- package/dist/{types-bcbQzx87.d.ts → types-DZX8ScsJ.d.ts} +2 -0
- package/package.json +4 -4
- package/dist/cart-documents-CwwRTvm8.d.ts +0 -21
- package/dist/chunk-2IWNUDSZ.js.map +0 -1
- package/dist/chunk-GGOZELAA.js.map +0 -1
- package/dist/chunk-H3D7BAOL.js.map +0 -1
- package/dist/chunk-M7BPQ54D.js.map +0 -1
- package/dist/chunk-MCIFKJQK.js.map +0 -1
- package/dist/chunk-PXVDVUFX.js.map +0 -1
- package/dist/chunk-PXZ737N3.js +0 -439
- package/dist/chunk-PXZ737N3.js.map +0 -1
- package/dist/chunk-XMTWFJCZ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editor/bridge.ts","../src/editor/custom-css.ts"],"names":[],"mappings":"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","file":"chunk-RFKLO6TD.js","sourcesContent":["import type { ThemeSettingsStore } from '../settings/store'\nimport type { ResolvedBlock, ResolvedSection, ResolvedSettings } from '../settings/types'\n\nconst HOST_SOURCE = 'kotao:workspaces-editor'\nconst PREVIEW_SOURCE = 'kotao:storefront-preview'\nconst VISUAL_READY_REQUEST_ID = /^[A-Za-z0-9_-]{1,128}$/u\n\nexport interface StorefrontEditorMessageTarget {\n postMessage(message: unknown, targetOrigin: string): void\n}\n\nexport interface StorefrontEditorMessageEvent {\n readonly origin: string\n readonly data: unknown\n readonly source?: StorefrontEditorMessageTarget | null\n}\n\nexport interface StorefrontEditorMessageSource {\n addEventListener(type: 'message', listener: (event: StorefrontEditorMessageEvent) => void): void\n removeEventListener(\n type: 'message',\n listener: (event: StorefrontEditorMessageEvent) => void,\n ): void\n}\n\ninterface StorefrontEditorPointerEvent {\n readonly target?: unknown\n readonly relatedTarget?: unknown\n readonly button?: number\n readonly defaultPrevented?: boolean\n readonly metaKey?: boolean\n readonly ctrlKey?: boolean\n readonly shiftKey?: boolean\n readonly altKey?: boolean\n preventDefault?(): void\n stopPropagation?(): void\n}\n\nexport interface StorefrontEditorRect {\n readonly top: number\n readonly right: number\n readonly bottom: number\n readonly left: number\n readonly width: number\n readonly height: number\n}\n\ninterface StorefrontEditorDomElement {\n id: string\n innerHTML?: string\n textContent?: string | null\n closest(selector: string): StorefrontEditorDomElement | null\n contains(candidate: unknown): boolean\n getAttribute?(name: string): string | null\n getBoundingClientRect?(): StorefrontEditorRect\n addEventListener?(type: 'click', listener: (event: StorefrontEditorPointerEvent) => void): void\n removeEventListener?(type: 'click', listener: (event: StorefrontEditorPointerEvent) => void): void\n setAttribute(name: string, value: string): void\n removeAttribute(name: string): void\n remove?(): void\n}\n\ninterface StorefrontEditorStyleElement {\n id: string\n textContent: string | null\n remove(): void\n}\n\nexport interface StorefrontEditorDocument {\n readonly documentElement: Pick<StorefrontEditorDomElement, 'setAttribute' | 'removeAttribute'>\n readonly head?: { appendChild(element: StorefrontEditorStyleElement): void }\n readonly body?: { appendChild(element: StorefrontEditorDomElement): void }\n readonly defaultView?: {\n readonly innerWidth: number\n readonly innerHeight: number\n readonly location?: { readonly href: string; readonly origin: string }\n requestAnimationFrame?(callback: (now: number) => void): number\n cancelAnimationFrame?(requestId: number): void\n open?(url: string, target: '_blank', features: 'noopener,noreferrer'): void\n addEventListener?(type: 'scroll' | 'resize', listener: () => void, capture?: boolean): void\n removeEventListener?(type: 'scroll' | 'resize', listener: () => void, capture?: boolean): void\n }\n createElement(tagName: 'style'): StorefrontEditorStyleElement\n createElement(tagName: 'div'): StorefrontEditorDomElement\n getElementById(id: string): StorefrontEditorDomElement | StorefrontEditorStyleElement | null\n querySelectorAll?(selector: string): readonly StorefrontEditorDomElement[]\n addEventListener(\n type: 'pointerover' | 'pointerout' | 'click',\n listener: (event: StorefrontEditorPointerEvent) => void,\n capture?: boolean,\n ): void\n removeEventListener(\n type: 'pointerover' | 'pointerout' | 'click',\n listener: (event: StorefrontEditorPointerEvent) => void,\n capture?: boolean,\n ): void\n}\n\nexport interface StorefrontEditorBridge {\n ready(): void\n hoverSection(sectionId: string | null): void\n selectSection(sectionId: string): void\n selectBlock(sectionId: string, blockId: string): void\n dispose(): void\n}\n\nexport interface StorefrontEditorSettingOption {\n readonly value: string\n readonly label: string\n}\n\nexport interface StorefrontEditorThemeStyle {\n readonly name: string\n readonly settings: ResolvedSettings\n}\n\nexport interface StorefrontEditorSettingInput {\n readonly type: string\n readonly name: string\n readonly label: string\n readonly group?: string\n readonly defaultValue?: unknown\n readonly placeholder?: string\n readonly helpText?: string\n readonly options?: readonly StorefrontEditorSettingOption[]\n readonly min?: number\n readonly max?: number\n readonly step?: number\n readonly unit?: string\n}\n\nexport interface StorefrontEditorBlockSchema {\n readonly type: string\n readonly label: string\n readonly settings: readonly StorefrontEditorSettingInput[]\n readonly limit?: number\n}\n\nexport interface StorefrontEditorSectionPresetBlock {\n readonly type: string\n readonly settings?: ResolvedSettings\n}\n\nexport interface StorefrontEditorSectionPreset {\n readonly name: string\n readonly settings?: ResolvedSettings\n readonly blocks?: readonly StorefrontEditorSectionPresetBlock[]\n}\n\nexport interface StorefrontEditorSectionSchema {\n readonly type: string\n readonly label: string\n readonly settings: readonly StorefrontEditorSettingInput[]\n readonly blocks?: readonly StorefrontEditorBlockSchema[]\n readonly maxBlocks?: number\n readonly presets?: readonly StorefrontEditorSectionPreset[]\n}\n\nexport type StorefrontEditorSelectionScope =\n | { readonly kind: 'template'; readonly handle: string }\n | { readonly kind: 'sectionGroup'; readonly handle: string }\n\nexport interface StorefrontEditorSelection {\n readonly sectionId: string\n readonly blockId?: string\n readonly block?: ResolvedBlock\n readonly scope?: StorefrontEditorSelectionScope\n readonly section?: ResolvedSection\n readonly sections?: readonly ResolvedSection[]\n readonly schema?: StorefrontEditorSectionSchema\n readonly schemas?: Readonly<Record<string, StorefrontEditorSectionSchema>>\n}\n\nexport type StorefrontEditorCanvasSectionAction =\n | 'section.addBefore'\n | 'section.addAfter'\n | 'section.duplicate'\n | 'section.toggleVisibility'\n | 'section.moveUp'\n | 'section.moveDown'\n | 'section.remove'\n\nexport type StorefrontEditorCanvasBlockAction =\n | 'block.duplicate'\n | 'block.toggleVisibility'\n | 'block.moveUp'\n | 'block.moveDown'\n | 'block.remove'\n\nexport type StorefrontEditorCanvasAction =\n | {\n readonly action: StorefrontEditorCanvasSectionAction\n readonly sectionId: string\n readonly scope?: StorefrontEditorSelectionScope\n }\n | {\n readonly action: StorefrontEditorCanvasBlockAction\n readonly sectionId: string\n readonly blockId: string\n readonly scope?: StorefrontEditorSelectionScope\n }\n\nexport interface StorefrontEditorValuesDocument {\n readonly shopId: string\n readonly sections: readonly ResolvedSection[]\n}\n\nexport interface StorefrontEditorReady {\n readonly sections: readonly ResolvedSection[]\n readonly visualReadyProtocol?: 1\n readonly global?: ResolvedSettings\n readonly schemas?: Readonly<Record<string, StorefrontEditorSectionSchema>>\n readonly globalInputs?: readonly StorefrontEditorSettingInput[]\n readonly themeStyles?: readonly StorefrontEditorThemeStyle[]\n readonly templates?: Readonly<Record<string, StorefrontEditorValuesDocument>>\n readonly sectionGroups?: Readonly<Record<string, StorefrontEditorValuesDocument>>\n}\n\nexport interface StorefrontEditorHostBridge {\n requestReady(): void\n requestVisualReady(requestId: string): void\n hoverSection(sectionId: string | null): void\n activateSection(sectionId: string | null, blockId?: string): void\n patchSection(sectionId: string, settings: ResolvedSettings): void\n patchGlobal(settings: ResolvedSettings): void\n insertSection(section: ResolvedSection, index?: number): void\n removeSection(sectionId: string): void\n reorderSection(sectionId: string, index: number): void\n patchBlock(sectionId: string, blockId: string, settings: ResolvedSettings): void\n insertBlock(sectionId: string, block: ResolvedBlock, index?: number): void\n removeBlock(sectionId: string, blockId: string): void\n reorderBlock(sectionId: string, blockId: string, index: number): void\n replaceTemplate(handle: string, document: StorefrontEditorValuesDocument): void\n replaceSectionGroup(handle: string, document: StorefrontEditorValuesDocument): void\n replaceAppExtensions(extensions: readonly StorefrontEditorAppExtensionPreview[]): void\n setInspectorEnabled(enabled: boolean): void\n dispose(): void\n}\n\nexport interface StorefrontEditorNavigationRequest {\n readonly href: string\n}\n\nexport interface StorefrontEditorAppExtensionPreview {\n readonly instanceId: string\n readonly kind: 'app_embed' | 'app_section' | 'app_block'\n readonly appId: string\n readonly appName: string\n readonly extensionId: string\n readonly extensionName: string\n readonly version: string\n readonly entrypointUrl: string\n readonly stylesheetUrls: readonly string[]\n readonly capabilities: readonly string[]\n readonly allowedOrigins: readonly string[]\n readonly settings: ResolvedSettings\n readonly embedLocation?: 'head' | 'body_start' | 'body_end'\n readonly target?: { readonly kind: 'template' | 'section_group'; readonly handle: string }\n readonly templateHandle?: string\n readonly sectionInstanceId?: string\n readonly position: number\n}\n\nexport interface CreateStorefrontEditorBridgeArgs {\n readonly adminOrigin: string\n readonly shopId: string\n readonly store: ThemeSettingsStore\n readonly schemas?: Readonly<Record<string, StorefrontEditorSectionSchema>>\n readonly globalInputs?: readonly StorefrontEditorSettingInput[]\n readonly themeStyles?: readonly StorefrontEditorThemeStyle[]\n readonly templates?: Readonly<Record<string, StorefrontEditorValuesDocument>>\n readonly sectionGroups?: Readonly<Record<string, StorefrontEditorValuesDocument>>\n readonly transport: StorefrontEditorMessageSource\n readonly target: StorefrontEditorMessageTarget\n readonly document?: StorefrontEditorDocument\n}\n\nexport interface CreateStorefrontEditorHostBridgeArgs {\n readonly onSelectSection: (selection: StorefrontEditorSelection) => void\n readonly onCanvasAction?: (action: StorefrontEditorCanvasAction) => void\n readonly onHoverSection?: (sectionId: string | null) => void\n readonly onNavigate?: (request: StorefrontEditorNavigationRequest) => void\n readonly onReady?: (ready: StorefrontEditorReady) => void\n readonly onVisualReady?: (requestId: string) => void\n readonly previewOrigin: string\n readonly resolveTarget?: () => StorefrontEditorMessageTarget | null\n readonly shopId: string\n readonly transport: StorefrontEditorMessageSource\n readonly target: StorefrontEditorMessageTarget\n}\n\ntype HostMessage =\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'editor.ready.request'\n readonly shopId: string\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'editor.visual-ready.request'\n readonly shopId: string\n readonly requestId: string\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'section.hover' | 'section.activate'\n readonly shopId: string\n readonly sectionId: string | null\n readonly blockId?: string\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'inspector.set'\n readonly shopId: string\n readonly enabled: boolean\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'settings.patchSection'\n readonly shopId: string\n readonly sectionId: string\n readonly settings: ResolvedSettings\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'settings.patchGlobal'\n readonly shopId: string\n readonly settings: ResolvedSettings\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'sections.insert'\n readonly shopId: string\n readonly section: ResolvedSection\n readonly index?: number\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'sections.remove'\n readonly shopId: string\n readonly sectionId: string\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'sections.reorder'\n readonly shopId: string\n readonly sectionId: string\n readonly index: number\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'settings.patchBlock'\n readonly shopId: string\n readonly sectionId: string\n readonly blockId: string\n readonly settings: ResolvedSettings\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'blocks.insert'\n readonly shopId: string\n readonly sectionId: string\n readonly block: ResolvedBlock\n readonly index?: number\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'blocks.remove'\n readonly shopId: string\n readonly sectionId: string\n readonly blockId: string\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'blocks.reorder'\n readonly shopId: string\n readonly sectionId: string\n readonly blockId: string\n readonly index: number\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'template.replace'\n readonly shopId: string\n readonly handle: string\n readonly document: StorefrontEditorValuesDocument\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'sectionGroup.replace'\n readonly shopId: string\n readonly handle: string\n readonly document: StorefrontEditorValuesDocument\n }\n | {\n readonly source: typeof HOST_SOURCE\n readonly type: 'appExtensions.replace'\n readonly shopId: string\n readonly extensions: readonly StorefrontEditorAppExtensionPreview[]\n }\n\ninterface PreviewSelectionMessage {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'section.select'\n readonly shopId: string\n readonly sectionId: string\n readonly blockId?: string\n readonly block?: ResolvedBlock\n readonly scope?: StorefrontEditorSelectionScope\n readonly section?: ResolvedSection\n readonly sections?: readonly ResolvedSection[]\n readonly schema?: StorefrontEditorSectionSchema\n readonly schemas?: Readonly<Record<string, StorefrontEditorSectionSchema>>\n}\n\ninterface PreviewCanvasActionMessage {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'editor.action'\n readonly shopId: string\n readonly action: StorefrontEditorCanvasAction['action']\n readonly sectionId: string\n readonly blockId?: string\n readonly scope?: StorefrontEditorSelectionScope\n}\n\ninterface PreviewHoverMessage {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'section.hover'\n readonly shopId: string\n readonly sectionId: string | null\n}\n\ninterface PreviewReadyMessage extends StorefrontEditorReady {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'editor.ready'\n readonly shopId: string\n}\n\ninterface PreviewVisualReadyMessage {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'editor.visual-ready'\n readonly shopId: string\n readonly requestId: string\n}\n\ninterface PreviewNavigationRequestMessage extends StorefrontEditorNavigationRequest {\n readonly source: typeof PREVIEW_SOURCE\n readonly type: 'preview.navigate'\n readonly shopId: string\n}\n\nfunction isReservedSectionId(sectionId: string): boolean {\n return sectionId.startsWith('theme:')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isSettings(value: unknown): value is ResolvedSettings {\n return isRecord(value)\n}\n\nfunction isOptionalSettings(value: unknown): value is ResolvedSettings | undefined {\n return value === undefined || isSettings(value)\n}\n\nfunction isBlockId(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0\n}\n\nfunction isResolvedBlock(value: unknown): value is ResolvedBlock {\n return (\n isRecord(value) &&\n (value.id === undefined || isBlockId(value.id)) &&\n typeof value.type === 'string' &&\n isSettings(value.settings)\n )\n}\n\nfunction isResolvedSection(value: unknown): value is ResolvedSection {\n if (!isRecord(value)) return false\n return (\n typeof value.id === 'string' &&\n typeof value.type === 'string' &&\n isSettings(value.settings) &&\n Array.isArray(value.blocks) &&\n value.blocks.every(isResolvedBlock)\n )\n}\n\nfunction isValuesDocument(value: unknown): value is StorefrontEditorValuesDocument {\n return (\n isRecord(value) &&\n typeof value.shopId === 'string' &&\n value.shopId.length > 0 &&\n isResolvedSectionArray(value.sections)\n )\n}\n\nfunction isSettingOption(value: unknown): value is StorefrontEditorSettingOption {\n return isRecord(value) && typeof value.value === 'string' && typeof value.label === 'string'\n}\n\nfunction isOptionalString(value: unknown): value is string | undefined {\n return value === undefined || typeof value === 'string'\n}\n\nfunction isOptionalFiniteNumber(value: unknown): value is number | undefined {\n return value === undefined || (typeof value === 'number' && Number.isFinite(value))\n}\n\nfunction isOptionalPositiveInteger(value: unknown): value is number | undefined {\n return value === undefined || (typeof value === 'number' && Number.isInteger(value) && value > 0)\n}\n\nfunction isSettingInput(value: unknown): value is StorefrontEditorSettingInput {\n if (\n !isRecord(value) ||\n typeof value.type !== 'string' ||\n typeof value.name !== 'string' ||\n typeof value.label !== 'string'\n ) {\n return false\n }\n\n return (\n isOptionalString(value.placeholder) &&\n isOptionalString(value.helpText) &&\n isOptionalString(value.group) &&\n isOptionalString(value.unit) &&\n isOptionalFiniteNumber(value.min) &&\n isOptionalFiniteNumber(value.max) &&\n isOptionalFiniteNumber(value.step) &&\n (value.options === undefined ||\n (Array.isArray(value.options) && value.options.every(isSettingOption)))\n )\n}\n\nfunction isBlockSchema(value: unknown): value is StorefrontEditorBlockSchema {\n return (\n isRecord(value) &&\n typeof value.type === 'string' &&\n typeof value.label === 'string' &&\n Array.isArray(value.settings) &&\n value.settings.every(isSettingInput) &&\n isOptionalPositiveInteger(value.limit)\n )\n}\n\nfunction isSectionPresetBlock(value: unknown): value is StorefrontEditorSectionPresetBlock {\n return isRecord(value) && typeof value.type === 'string' && isOptionalSettings(value.settings)\n}\n\nfunction isSectionPreset(value: unknown): value is StorefrontEditorSectionPreset {\n return (\n isRecord(value) &&\n typeof value.name === 'string' &&\n isOptionalSettings(value.settings) &&\n (value.blocks === undefined ||\n (Array.isArray(value.blocks) && value.blocks.every(isSectionPresetBlock)))\n )\n}\n\nfunction isSectionSchema(value: unknown): value is StorefrontEditorSectionSchema {\n return (\n isRecord(value) &&\n typeof value.type === 'string' &&\n typeof value.label === 'string' &&\n Array.isArray(value.settings) &&\n value.settings.every(isSettingInput) &&\n isOptionalPositiveInteger(value.maxBlocks) &&\n (value.blocks === undefined ||\n (Array.isArray(value.blocks) && value.blocks.every(isBlockSchema))) &&\n (value.presets === undefined ||\n (Array.isArray(value.presets) && value.presets.every(isSectionPreset)))\n )\n}\n\nfunction isResolvedSectionArray(value: unknown): value is readonly ResolvedSection[] {\n return Array.isArray(value) && value.every(isResolvedSection)\n}\n\nfunction isSectionSchemaRecord(\n value: unknown,\n): value is Readonly<Record<string, StorefrontEditorSectionSchema>> {\n return isRecord(value) && Object.values(value).every(isSectionSchema)\n}\n\nfunction isSettingInputArray(value: unknown): value is readonly StorefrontEditorSettingInput[] {\n return Array.isArray(value) && value.every(isSettingInput)\n}\n\nfunction isThemeStyle(value: unknown): value is StorefrontEditorThemeStyle {\n return isRecord(value) && typeof value.name === 'string' && isSettings(value.settings)\n}\n\nfunction isThemeStyleArray(value: unknown): value is readonly StorefrontEditorThemeStyle[] {\n return Array.isArray(value) && value.every(isThemeStyle)\n}\n\nfunction validValuesDocuments(\n value: unknown,\n): Readonly<Record<string, StorefrontEditorValuesDocument>> | undefined {\n if (!isRecord(value)) return undefined\n const documents: Record<string, StorefrontEditorValuesDocument> = {}\n for (const [handle, document] of Object.entries(value)) {\n if (isValuesDocument(document)) documents[handle] = document\n }\n return documents\n}\n\nfunction isSelectionScope(value: unknown): value is StorefrontEditorSelectionScope {\n return (\n isRecord(value) &&\n (value.kind === 'template' || value.kind === 'sectionGroup') &&\n typeof value.handle === 'string' &&\n value.handle.trim() !== ''\n )\n}\n\nfunction isHttpsUrl(value: unknown): value is string {\n if (typeof value !== 'string') return false\n try {\n const url = new URL(value)\n return url.protocol === 'https:' && url.username === '' && url.password === ''\n } catch {\n return false\n }\n}\n\nfunction isBareHttpOrigin(value: unknown): value is string {\n if (typeof value !== 'string') return false\n try {\n const url = new URL(value)\n return (\n (url.protocol === 'https:' || url.protocol === 'http:') &&\n url.username === '' &&\n url.password === '' &&\n url.pathname === '/' &&\n url.search === '' &&\n url.hash === ''\n )\n } catch {\n return false\n }\n}\n\nfunction isAppExtensionPreview(value: unknown): value is StorefrontEditorAppExtensionPreview {\n if (\n !isRecord(value) ||\n (value.kind !== 'app_embed' && value.kind !== 'app_section' && value.kind !== 'app_block') ||\n typeof value.instanceId !== 'string' ||\n typeof value.appId !== 'string' ||\n typeof value.appName !== 'string' ||\n typeof value.extensionId !== 'string' ||\n typeof value.extensionName !== 'string' ||\n typeof value.version !== 'string' ||\n !isHttpsUrl(value.entrypointUrl) ||\n !Array.isArray(value.stylesheetUrls) ||\n !value.stylesheetUrls.every(isHttpsUrl) ||\n !Array.isArray(value.capabilities) ||\n !value.capabilities.every((capability) => typeof capability === 'string') ||\n !Array.isArray(value.allowedOrigins) ||\n !value.allowedOrigins.every(isBareHttpOrigin) ||\n !isSettings(value.settings) ||\n typeof value.position !== 'number' ||\n !Number.isInteger(value.position) ||\n value.position < 0\n ) {\n return false\n }\n if (value.kind === 'app_embed') {\n return (\n value.embedLocation === 'head' ||\n value.embedLocation === 'body_start' ||\n value.embedLocation === 'body_end'\n )\n }\n if (value.kind === 'app_section') {\n return (\n isRecord(value.target) &&\n (value.target.kind === 'template' || value.target.kind === 'section_group') &&\n typeof value.target.handle === 'string' &&\n value.target.handle !== ''\n )\n }\n return typeof value.templateHandle === 'string' && isBlockId(value.sectionInstanceId)\n}\n\nfunction parseHostMessage(data: unknown, shopId: string): HostMessage | null {\n if (!isRecord(data) || data.source !== HOST_SOURCE || data.shopId !== shopId) return null\n\n switch (data.type) {\n case 'editor.ready.request':\n return {\n source: HOST_SOURCE,\n type: 'editor.ready.request',\n shopId,\n }\n case 'editor.visual-ready.request':\n return typeof data.requestId === 'string' && VISUAL_READY_REQUEST_ID.test(data.requestId)\n ? {\n source: HOST_SOURCE,\n type: 'editor.visual-ready.request',\n shopId,\n requestId: data.requestId,\n }\n : null\n case 'section.hover':\n case 'section.activate':\n if (\n data.sectionId !== null &&\n (typeof data.sectionId !== 'string' || isReservedSectionId(data.sectionId))\n ) {\n return null\n }\n if (\n data.blockId !== undefined &&\n (data.type !== 'section.activate' || !isBlockId(data.blockId))\n ) {\n return null\n }\n return {\n source: HOST_SOURCE,\n type: data.type,\n shopId,\n sectionId: data.sectionId,\n ...(data.blockId !== undefined ? { blockId: data.blockId } : {}),\n }\n case 'inspector.set':\n return typeof data.enabled === 'boolean'\n ? { source: HOST_SOURCE, type: 'inspector.set', shopId, enabled: data.enabled }\n : null\n case 'settings.patchSection':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n isSettings(data.settings)\n ? {\n source: HOST_SOURCE,\n type: 'settings.patchSection',\n shopId,\n sectionId: data.sectionId,\n settings: data.settings,\n }\n : null\n case 'settings.patchGlobal':\n return isSettings(data.settings)\n ? { source: HOST_SOURCE, type: 'settings.patchGlobal', shopId, settings: data.settings }\n : null\n case 'sections.insert':\n return isResolvedSection(data.section) && !isReservedSectionId(data.section.id)\n ? {\n source: HOST_SOURCE,\n type: 'sections.insert',\n shopId,\n section: data.section,\n ...(typeof data.index === 'number' ? { index: data.index } : {}),\n }\n : null\n case 'sections.remove':\n return typeof data.sectionId === 'string' && !isReservedSectionId(data.sectionId)\n ? {\n source: HOST_SOURCE,\n type: 'sections.remove',\n shopId,\n sectionId: data.sectionId,\n }\n : null\n case 'sections.reorder':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n typeof data.index === 'number'\n ? {\n source: HOST_SOURCE,\n type: 'sections.reorder',\n shopId,\n sectionId: data.sectionId,\n index: data.index,\n }\n : null\n case 'settings.patchBlock':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n isBlockId(data.blockId) &&\n isSettings(data.settings)\n ? {\n source: HOST_SOURCE,\n type: 'settings.patchBlock',\n shopId,\n sectionId: data.sectionId,\n blockId: data.blockId,\n settings: data.settings,\n }\n : null\n case 'blocks.insert':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n isResolvedBlock(data.block)\n ? {\n source: HOST_SOURCE,\n type: 'blocks.insert',\n shopId,\n sectionId: data.sectionId,\n block: data.block,\n ...(typeof data.index === 'number' ? { index: data.index } : {}),\n }\n : null\n case 'blocks.remove':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n isBlockId(data.blockId)\n ? {\n source: HOST_SOURCE,\n type: 'blocks.remove',\n shopId,\n sectionId: data.sectionId,\n blockId: data.blockId,\n }\n : null\n case 'blocks.reorder':\n return typeof data.sectionId === 'string' &&\n !isReservedSectionId(data.sectionId) &&\n isBlockId(data.blockId) &&\n typeof data.index === 'number'\n ? {\n source: HOST_SOURCE,\n type: 'blocks.reorder',\n shopId,\n sectionId: data.sectionId,\n blockId: data.blockId,\n index: data.index,\n }\n : null\n case 'template.replace':\n return typeof data.handle === 'string' && isValuesDocument(data.document)\n ? {\n source: HOST_SOURCE,\n type: 'template.replace',\n shopId,\n handle: data.handle,\n document: data.document,\n }\n : null\n case 'sectionGroup.replace':\n return typeof data.handle === 'string' &&\n data.handle.trim() !== '' &&\n isValuesDocument(data.document)\n ? {\n source: HOST_SOURCE,\n type: 'sectionGroup.replace',\n shopId,\n handle: data.handle,\n document: data.document,\n }\n : null\n case 'appExtensions.replace':\n return Array.isArray(data.extensions) && data.extensions.every(isAppExtensionPreview)\n ? {\n source: HOST_SOURCE,\n type: 'appExtensions.replace',\n shopId,\n extensions: data.extensions,\n }\n : null\n default:\n return null\n }\n}\n\nfunction parsePreviewSelection(data: unknown, shopId: string): PreviewSelectionMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (data.type !== 'section.select' || typeof data.sectionId !== 'string') return null\n if (data.blockId !== undefined && !isBlockId(data.blockId)) return null\n if (data.block !== undefined && !isResolvedBlock(data.block)) return null\n if (data.block !== undefined && data.blockId === undefined) return null\n if (data.section !== undefined && !isResolvedSection(data.section)) return null\n if (data.sections !== undefined && !isResolvedSectionArray(data.sections)) return null\n if (data.schema !== undefined && !isSectionSchema(data.schema)) return null\n if (data.schemas !== undefined && !isSectionSchemaRecord(data.schemas)) return null\n if (data.scope !== undefined && !isSelectionScope(data.scope)) return null\n return {\n source: PREVIEW_SOURCE,\n type: 'section.select',\n shopId,\n sectionId: data.sectionId,\n ...(data.blockId !== undefined ? { blockId: data.blockId } : {}),\n ...(data.block !== undefined ? { block: data.block } : {}),\n ...(data.scope !== undefined ? { scope: data.scope } : {}),\n ...(data.section !== undefined ? { section: data.section } : {}),\n ...(data.sections !== undefined ? { sections: data.sections } : {}),\n ...(data.schema !== undefined ? { schema: data.schema } : {}),\n ...(data.schemas !== undefined ? { schemas: data.schemas } : {}),\n }\n}\n\nconst SECTION_CANVAS_ACTIONS = new Set<StorefrontEditorCanvasAction['action']>([\n 'section.addBefore',\n 'section.addAfter',\n 'section.duplicate',\n 'section.toggleVisibility',\n 'section.moveUp',\n 'section.moveDown',\n 'section.remove',\n])\n\nconst BLOCK_CANVAS_ACTIONS = new Set<StorefrontEditorCanvasAction['action']>([\n 'block.duplicate',\n 'block.toggleVisibility',\n 'block.moveUp',\n 'block.moveDown',\n 'block.remove',\n])\n\nfunction parsePreviewCanvasAction(\n data: unknown,\n shopId: string,\n): PreviewCanvasActionMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (\n data.type !== 'editor.action' ||\n typeof data.action !== 'string' ||\n typeof data.sectionId !== 'string' ||\n data.sectionId === '' ||\n isReservedSectionId(data.sectionId)\n ) {\n return null\n }\n if (data.scope !== undefined && !isSelectionScope(data.scope)) return null\n\n if (SECTION_CANVAS_ACTIONS.has(data.action as StorefrontEditorCanvasAction['action'])) {\n if (data.blockId !== undefined) return null\n return {\n source: PREVIEW_SOURCE,\n type: 'editor.action',\n shopId,\n action: data.action as StorefrontEditorCanvasSectionAction,\n sectionId: data.sectionId,\n ...(data.scope !== undefined ? { scope: data.scope } : {}),\n }\n }\n if (\n BLOCK_CANVAS_ACTIONS.has(data.action as StorefrontEditorCanvasAction['action']) &&\n isBlockId(data.blockId)\n ) {\n return {\n source: PREVIEW_SOURCE,\n type: 'editor.action',\n shopId,\n action: data.action as StorefrontEditorCanvasBlockAction,\n sectionId: data.sectionId,\n blockId: data.blockId,\n ...(data.scope !== undefined ? { scope: data.scope } : {}),\n }\n }\n return null\n}\n\nfunction parsePreviewHover(data: unknown, shopId: string): PreviewHoverMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (data.type !== 'section.hover') return null\n if (\n data.sectionId !== null &&\n (typeof data.sectionId !== 'string' || isReservedSectionId(data.sectionId))\n ) {\n return null\n }\n return {\n source: PREVIEW_SOURCE,\n type: 'section.hover',\n shopId,\n sectionId: data.sectionId,\n }\n}\n\nfunction parsePreviewReady(data: unknown, shopId: string): PreviewReadyMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (data.type !== 'editor.ready' || !isResolvedSectionArray(data.sections)) return null\n if (data.visualReadyProtocol !== undefined && data.visualReadyProtocol !== 1) return null\n if (data.global !== undefined && !isSettings(data.global)) return null\n if (data.schemas !== undefined && !isSectionSchemaRecord(data.schemas)) return null\n if (data.globalInputs !== undefined && !isSettingInputArray(data.globalInputs)) return null\n if (data.themeStyles !== undefined && !isThemeStyleArray(data.themeStyles)) return null\n const templates = data.templates === undefined ? undefined : validValuesDocuments(data.templates)\n const sectionGroups =\n data.sectionGroups === undefined ? undefined : validValuesDocuments(data.sectionGroups)\n return {\n source: PREVIEW_SOURCE,\n type: 'editor.ready',\n shopId,\n sections: data.sections,\n ...(data.visualReadyProtocol === 1 ? { visualReadyProtocol: 1 as const } : {}),\n ...(data.global !== undefined ? { global: data.global } : {}),\n ...(data.schemas !== undefined ? { schemas: data.schemas } : {}),\n ...(data.globalInputs !== undefined ? { globalInputs: data.globalInputs } : {}),\n ...(data.themeStyles !== undefined ? { themeStyles: data.themeStyles } : {}),\n ...(templates !== undefined ? { templates } : {}),\n ...(sectionGroups !== undefined ? { sectionGroups } : {}),\n }\n}\n\nfunction parsePreviewVisualReady(\n data: unknown,\n shopId: string,\n): PreviewVisualReadyMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (\n data.type !== 'editor.visual-ready' ||\n typeof data.requestId !== 'string' ||\n !VISUAL_READY_REQUEST_ID.test(data.requestId)\n ) {\n return null\n }\n return {\n source: PREVIEW_SOURCE,\n type: 'editor.visual-ready',\n shopId,\n requestId: data.requestId,\n }\n}\n\nfunction parsePreviewNavigation(\n data: unknown,\n shopId: string,\n previewOrigin: string,\n): PreviewNavigationRequestMessage | null {\n if (!isRecord(data) || data.source !== PREVIEW_SOURCE || data.shopId !== shopId) return null\n if (data.type !== 'preview.navigate' || typeof data.href !== 'string' || data.href.trim() === '') {\n return null\n }\n try {\n const href = new URL(data.href)\n if (\n (href.protocol !== 'https:' && href.protocol !== 'http:') ||\n href.username !== '' ||\n href.password !== '' ||\n href.origin !== previewOrigin\n ) {\n return null\n }\n } catch {\n return null\n }\n return { source: PREVIEW_SOURCE, type: 'preview.navigate', shopId, href: data.href }\n}\n\nfunction postHostMessage(\n target: StorefrontEditorMessageTarget,\n previewOrigin: string,\n message: HostMessage,\n): void {\n target.postMessage(message, previewOrigin)\n}\n\nconst EDITOR_AFFORDANCE_STYLE_ID = 'kotao-storefront-editor-affordances'\nconst EDITOR_CANVAS_ID = 'kotao-storefront-editor-canvas'\nconst EDITOR_AFFORDANCE_CSS = `\nhtml[data-kotao-editor=\"true\"] [id^=\"shopify-section-\"] {\n cursor: pointer;\n position: relative;\n}\nhtml[data-kotao-editor=\"true\"] [id^=\"shopify-section-\"][data-kotao-editor-hovered=\"true\"] {\n outline: 2px solid #2c6ecb !important;\n outline-offset: -2px;\n}\nhtml[data-kotao-editor=\"true\"] [id^=\"shopify-section-\"][data-kotao-editor-selected=\"true\"] {\n outline: 2px solid #005bd3 !important;\n outline-offset: -2px;\n}\nhtml[data-kotao-editor=\"true\"] [id^=\"shopify-section-\"][data-kotao-editor-hovered=\"true\"]::before {\n content: attr(data-kotao-editor-label);\n position: absolute;\n z-index: 2147483646;\n inset-block-start: 0;\n inset-inline-start: 0;\n max-width: calc(100% - 16px);\n padding: 5px 9px;\n border-radius: 0 0 6px 0;\n background: #005bd3;\n color: #fff;\n font: 600 12px/1.25 ui-sans-serif, system-ui, sans-serif;\n letter-spacing: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n}\nhtml[data-kotao-editor=\"true\"] [data-kotao-editor-block-hovered=\"true\"],\nhtml[data-kotao-editor=\"true\"] [data-kotao-editor-block-selected=\"true\"] {\n position: relative;\n outline: 2px solid #005bd3 !important;\n outline-offset: -2px;\n}\n#${EDITOR_CANVAS_ID} {\n position: fixed;\n z-index: 2147483647;\n display: none;\n align-items: center;\n max-width: calc(100vw - 16px);\n height: 38px;\n overflow: hidden;\n border: 1px solid rgba(255, 255, 255, .22);\n border-radius: 8px;\n background: #202223;\n color: #fff;\n box-shadow: 0 4px 18px rgba(0, 0, 0, .28);\n font: 600 12px/1 ui-sans-serif, system-ui, sans-serif;\n letter-spacing: 0;\n}\n#${EDITOR_CANVAS_ID}[data-visible=\"true\"] { display: flex; }\n#${EDITOR_CANVAS_ID} [data-kotao-editor-canvas-label] {\n min-width: 0;\n max-width: 180px;\n overflow: hidden;\n padding: 0 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n#${EDITOR_CANVAS_ID} [data-kotao-editor-canvas-actions] {\n display: flex;\n align-self: stretch;\n border-inline-start: 1px solid rgba(255, 255, 255, .18);\n}\n#${EDITOR_CANVAS_ID} button {\n display: inline-flex;\n width: 36px;\n align-items: center;\n justify-content: center;\n border: 0;\n border-inline-end: 1px solid rgba(255, 255, 255, .12);\n background: transparent;\n color: inherit;\n cursor: pointer;\n font: 600 14px/1 ui-sans-serif, system-ui, sans-serif;\n}\n#${EDITOR_CANVAS_ID} button:hover,\n#${EDITOR_CANVAS_ID} button:focus-visible {\n outline: 0;\n background: #3b82f6;\n}\n#${EDITOR_CANVAS_ID} button:focus-visible { box-shadow: inset 0 0 0 2px #fff; }\n#${EDITOR_CANVAS_ID} button[data-destructive=\"true\"]:hover,\n#${EDITOR_CANVAS_ID} button[data-destructive=\"true\"]:focus-visible { background: #d72c0d; }\n#${EDITOR_CANVAS_ID} button:disabled { cursor: not-allowed; opacity: .38; }\n`\n\nexport interface StorefrontEditorCanvasPosition {\n readonly left: number\n readonly top: number\n readonly placement: 'above' | 'below'\n}\n\nexport function positionStorefrontEditorCanvasToolbar(\n anchor: StorefrontEditorRect,\n toolbar: Pick<StorefrontEditorRect, 'width' | 'height'>,\n viewport: { readonly width: number; readonly height: number },\n): StorefrontEditorCanvasPosition {\n const gap = 8\n const maxLeft = Math.max(gap, viewport.width - toolbar.width - gap)\n const left = Math.min(Math.max(anchor.left, gap), maxLeft)\n const placement = anchor.top >= toolbar.height + gap * 2 ? 'above' : 'below'\n const requestedTop =\n placement === 'above' ? anchor.top - toolbar.height - gap : anchor.bottom + gap\n const maxTop = Math.max(gap, viewport.height - toolbar.height - gap)\n return {\n left: Math.round(left),\n top: Math.round(Math.min(Math.max(requestedTop, gap), maxTop)),\n placement,\n }\n}\n\nfunction defaultEditorDocument(): StorefrontEditorDocument | undefined {\n const candidate = (globalThis as { document?: unknown }).document\n if (!isRecord(candidate)) return undefined\n if (\n typeof candidate.addEventListener !== 'function' ||\n typeof candidate.removeEventListener !== 'function' ||\n typeof candidate.getElementById !== 'function' ||\n typeof candidate.createElement !== 'function' ||\n !isRecord(candidate.documentElement)\n ) {\n return undefined\n }\n return candidate as unknown as StorefrontEditorDocument\n}\n\nfunction appExtensionFrameDocument(extension: StorefrontEditorAppExtensionPreview): string {\n const assetOrigin = new URL(extension.entrypointUrl).origin\n const connectSources = extension.capabilities.includes('network:fetch')\n ? extension.allowedOrigins.join(' ')\n : \"'none'\"\n const csp = [\n \"default-src 'none'\",\n `script-src ${assetOrigin}`,\n `style-src ${assetOrigin}`,\n `connect-src ${connectSources}`,\n `img-src data: ${assetOrigin} ${extension.allowedOrigins.join(' ')}`.trim(),\n `font-src ${assetOrigin}`,\n ].join('; ')\n const styles = extension.stylesheetUrls\n .map((url) => `<link rel=\"stylesheet\" href=\"${htmlAttribute(url)}\">`)\n .join('')\n return [\n '<!doctype html><html><head><meta charset=\"utf-8\">',\n `<meta http-equiv=\"Content-Security-Policy\" content=\"${htmlAttribute(csp)}\">`,\n '<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">',\n styles,\n '</head><body><div id=\"kotao-app-root\"></div>',\n `<script type=\"module\" src=\"${htmlAttribute(extension.entrypointUrl)}\"></script>`,\n '</body></html>',\n ].join('')\n}\n\ninterface AppExtensionPreviewElement {\n id: string\n readonly dataset: Record<string, string>\n title: string\n hidden: boolean\n loading: string\n name: string\n srcdoc: string\n readonly style: { cssText: string }\n append(element: AppExtensionPreviewElement): void\n prepend(element: AppExtensionPreviewElement): void\n before(element: AppExtensionPreviewElement): void\n getAttribute(name: string): string | null\n hasAttribute(name: string): boolean\n setAttribute(name: string, value: string): void\n remove?(): void\n}\n\ninterface AppExtensionPreviewDocument {\n readonly head: AppExtensionPreviewElement\n readonly body: AppExtensionPreviewElement\n createElement(tagName: string): AppExtensionPreviewElement\n querySelector(selector: string): AppExtensionPreviewElement | null\n querySelectorAll(selector: string): readonly AppExtensionPreviewElement[]\n}\n\nfunction replaceAppExtensionPreviewFrames(\n editorDocument: StorefrontEditorDocument | undefined,\n extensions: readonly StorefrontEditorAppExtensionPreview[],\n): void {\n if (editorDocument === undefined) return\n const document = editorDocument as unknown as AppExtensionPreviewDocument\n if (\n typeof document.querySelectorAll !== 'function' ||\n typeof document.createElement !== 'function'\n ) {\n return\n }\n for (const element of document.querySelectorAll('[data-kotao-editor-app-extension]')) {\n element.remove?.()\n }\n const sectionElements = (): AppExtensionPreviewElement[] =>\n [...document.querySelectorAll('[data-section-id], [id^=\"shopify-section-\"]')].filter(\n (element) => !element.hasAttribute('data-kotao-editor-app-extension'),\n )\n const sectionById = (id: string): AppExtensionPreviewElement | null =>\n sectionElements().find(\n (element) =>\n element.getAttribute('data-section-id') === id || element.id === `shopify-section-${id}`,\n ) ?? null\n\n for (const extension of extensions) {\n if (extension.settings.disabled === true) continue\n const frame = document.createElement('iframe')\n frame.dataset.kotaoAppExtension = extension.instanceId\n frame.dataset.kotaoAppId = extension.appId\n frame.title = `${extension.appName} — ${extension.extensionName}`\n frame.setAttribute('sandbox', 'allow-scripts')\n frame.setAttribute('referrerpolicy', 'no-referrer')\n frame.loading = 'lazy'\n frame.name = JSON.stringify({\n instanceId: extension.instanceId,\n appId: extension.appId,\n extensionId: extension.extensionId,\n version: extension.version,\n capabilities: extension.capabilities,\n allowedOrigins: extension.allowedOrigins,\n settings: extension.settings,\n context: extension.capabilities.includes('storefront:context:read')\n ? {\n templateHandle: extension.templateHandle ?? extension.target?.handle ?? null,\n sectionInstanceId: extension.sectionInstanceId ?? null,\n }\n : null,\n })\n frame.srcdoc = appExtensionFrameDocument(extension)\n\n if (extension.kind === 'app_embed') {\n frame.setAttribute('data-kotao-editor-app-extension', 'true')\n frame.hidden = true\n const parent = extension.embedLocation === 'head' ? document.head : document.body\n if (extension.embedLocation === 'body_start') parent.prepend(frame)\n else parent.append(frame)\n continue\n }\n\n frame.style.cssText = 'display:block;width:100%;min-height:1px;border:0'\n if (extension.kind === 'app_block') {\n const section = sectionById(extension.sectionInstanceId ?? '')\n if (section === null) continue\n frame.setAttribute('data-kotao-editor-app-extension', 'true')\n frame.setAttribute('data-block-id', extension.instanceId)\n section.append(frame)\n continue\n }\n\n const wrapper = document.createElement('div')\n wrapper.id = `shopify-section-${extension.instanceId}`\n wrapper.setAttribute('data-section-id', extension.instanceId)\n wrapper.setAttribute('data-kotao-editor-app-extension', 'true')\n wrapper.append(frame)\n if (extension.target?.kind === 'section_group') {\n const group = [...document.querySelectorAll('[data-section-group]')].find(\n (element) => element.getAttribute('data-section-group') === extension.target?.handle,\n )\n if (group !== undefined) group.append(wrapper)\n else if (extension.target.handle.includes('header')) document.body.prepend(wrapper)\n else document.body.append(wrapper)\n continue\n }\n const sections = sectionElements()\n const target = sections[Math.min(extension.position, sections.length - 1)]\n if (target !== undefined && extension.position < sections.length) target.before(wrapper)\n else (document.querySelector('main') ?? document.body).append(wrapper)\n }\n}\n\nfunction sectionElementFromTarget(target: unknown): StorefrontEditorDomElement | null {\n if (!isRecord(target) || typeof target.closest !== 'function') return null\n const element = target.closest('[id^=\"shopify-section-\"]') as unknown\n if (!isRecord(element) || typeof element.id !== 'string') return null\n if (!element.id.startsWith('shopify-section-')) return null\n return element as unknown as StorefrontEditorDomElement\n}\n\nfunction blockElementFromTarget(target: unknown): StorefrontEditorDomElement | null {\n if (!isRecord(target) || typeof target.closest !== 'function') return null\n const element = target.closest(\n '[data-block-id], [data-shopify-editor-block], [id^=\"shopify-block-\"]',\n ) as unknown\n if (!isRecord(element) || typeof element.id !== 'string') return null\n return element as unknown as StorefrontEditorDomElement\n}\n\nfunction blockIdForElement(element: StorefrontEditorDomElement): string | null {\n const direct = element.getAttribute?.('data-block-id')\n if (direct) return direct\n const serialized = element.getAttribute?.('data-shopify-editor-block')\n if (serialized) {\n try {\n const value = JSON.parse(serialized) as unknown\n if (isRecord(value) && isBlockId(value.id)) return value.id\n } catch {\n // Malformed third-party editor metadata must not break the storefront.\n }\n }\n return element.id.startsWith('shopify-block-') ? element.id.slice('shopify-block-'.length) : null\n}\n\nfunction findBlockElement(\n document: StorefrontEditorDocument,\n blockId: string,\n): StorefrontEditorDomElement | null {\n const candidates = document.querySelectorAll?.(\n '[data-block-id], [data-shopify-editor-block], [id^=\"shopify-block-\"]',\n )\n return candidates?.find((element) => blockIdForElement(element) === blockId) ?? null\n}\n\ntype AnchorClickDisposition =\n | { readonly kind: 'internal'; readonly href: string }\n | { readonly kind: 'external'; readonly href: string }\n | { readonly kind: 'unsafe' }\n | { readonly kind: 'hash' }\n | { readonly kind: 'scheme' }\n\nfunction isModifiedClick(event: StorefrontEditorPointerEvent): boolean {\n return event.metaKey === true || event.ctrlKey === true || event.shiftKey === true || event.altKey === true\n}\n\nfunction anchorElementFromTarget(target: unknown): StorefrontEditorDomElement | null {\n if (!isRecord(target) || typeof target.closest !== 'function') return null\n const anchor = target.closest('a[href]') as unknown\n if (!isRecord(anchor) || typeof anchor.getAttribute !== 'function') return null\n return anchor as unknown as StorefrontEditorDomElement\n}\n\nfunction classifyAnchorClick(\n event: StorefrontEditorPointerEvent,\n anchor: StorefrontEditorDomElement,\n document: StorefrontEditorDocument,\n): AnchorClickDisposition | null {\n const download = anchor.getAttribute?.('download')\n if (\n event.defaultPrevented === true ||\n (event.button !== undefined && event.button !== 0) ||\n isModifiedClick(event) ||\n anchor.getAttribute?.('target')?.toLowerCase() === '_blank' ||\n (download !== null && download !== undefined)\n ) {\n return null\n }\n const rawHref = anchor.getAttribute?.('href')\n const location = document.defaultView?.location\n if (typeof rawHref !== 'string' || rawHref.trim() === '' || location === undefined) return null\n const hasFragmentDelimiter = rawHref.includes('#')\n\n let href: URL\n let current: URL\n try {\n href = new URL(rawHref, location.href)\n current = new URL(location.href)\n } catch {\n return { kind: 'unsafe' }\n }\n if (href.protocol === 'javascript:' || href.protocol === 'data:') return { kind: 'unsafe' }\n if (href.protocol === 'mailto:' || href.protocol === 'tel:') return { kind: 'scheme' }\n if (href.protocol !== 'https:' && href.protocol !== 'http:') return { kind: 'unsafe' }\n if (\n href.origin === location.origin &&\n href.pathname === current.pathname &&\n href.search === current.search &&\n (href.hash !== '' || hasFragmentDelimiter)\n ) {\n return { kind: 'hash' }\n }\n return href.origin === location.origin\n ? { kind: 'internal', href: href.href }\n : { kind: 'external', href: href.href }\n}\n\nfunction htmlAttribute(value: string): string {\n return value.replaceAll('&', '&').replaceAll('\"', '"').replaceAll('<', '<')\n}\n\nconst SECTION_CANVAS_BUTTONS: readonly {\n readonly action: StorefrontEditorCanvasSectionAction\n readonly label: string\n readonly glyph: string\n readonly destructive?: boolean\n}[] = [\n { action: 'section.addBefore', label: 'Add section above', glyph: '+↑' },\n { action: 'section.moveUp', label: 'Move section up', glyph: '↑' },\n { action: 'section.moveDown', label: 'Move section down', glyph: '↓' },\n { action: 'section.duplicate', label: 'Duplicate section', glyph: '⧉' },\n { action: 'section.toggleVisibility', label: 'Hide or show section', glyph: '◉' },\n { action: 'section.remove', label: 'Delete section', glyph: '⌫', destructive: true },\n { action: 'section.addAfter', label: 'Add section below', glyph: '+↓' },\n]\n\nconst BLOCK_CANVAS_BUTTONS: readonly {\n readonly action: StorefrontEditorCanvasBlockAction\n readonly label: string\n readonly glyph: string\n readonly destructive?: boolean\n}[] = [\n { action: 'block.moveUp', label: 'Move block up', glyph: '↑' },\n { action: 'block.moveDown', label: 'Move block down', glyph: '↓' },\n { action: 'block.duplicate', label: 'Duplicate block', glyph: '⧉' },\n { action: 'block.toggleVisibility', label: 'Hide or show block', glyph: '◉' },\n { action: 'block.remove', label: 'Delete block', glyph: '⌫', destructive: true },\n]\n\ninterface StorefrontEditorCanvasSelectionState {\n readonly canAddSection: boolean\n readonly canDuplicate: boolean\n readonly canMoveDown: boolean\n readonly canMoveUp: boolean\n readonly hidden: boolean\n}\n\nfunction canvasToolbarHtml(\n label: string,\n block: boolean,\n state: StorefrontEditorCanvasSelectionState,\n): string {\n const buttons = block ? BLOCK_CANVAS_BUTTONS : SECTION_CANVAS_BUTTONS\n return `<span data-kotao-editor-canvas-label>${htmlAttribute(label)}</span><span data-kotao-editor-canvas-actions>${buttons\n .map(({ action, destructive, glyph, label: staticLabel }) => {\n const actionLabel = action.endsWith('toggleVisibility')\n ? `${state.hidden ? 'Show' : 'Hide'} ${block ? 'block' : 'section'}`\n : staticLabel\n const disabled =\n (action.endsWith('moveUp') && !state.canMoveUp) ||\n (action.endsWith('moveDown') && !state.canMoveDown) ||\n (action.endsWith('duplicate') && !state.canDuplicate) ||\n (action.startsWith('section.add') && !state.canAddSection)\n return `<button type=\"button\" data-kotao-editor-action=\"${action}\"${destructive ? ' data-destructive=\"true\"' : ''}${disabled ? ' disabled' : ''} aria-label=\"${htmlAttribute(actionLabel)}\" title=\"${htmlAttribute(actionLabel)}\">${glyph}</button>`\n })\n .join('')}</span>`\n}\n\nfunction createEditorAffordances({\n document,\n labelForBlock,\n labelForSection,\n onCanvasAction,\n onHoverSection,\n onNavigate,\n onSelect,\n stateForSelection,\n}: {\n readonly document: StorefrontEditorDocument\n readonly labelForBlock: (sectionId: string, blockId: string) => string\n readonly labelForSection: (sectionId: string) => string\n readonly onCanvasAction: (action: StorefrontEditorCanvasAction) => void\n readonly onHoverSection: (sectionId: string | null) => void\n readonly onNavigate: (href: string) => void\n readonly onSelect: (sectionId: string, blockId?: string) => void\n readonly stateForSelection: (\n sectionId: string,\n blockId?: string,\n ) => StorefrontEditorCanvasSelectionState\n}) {\n let hoveredElement: StorefrontEditorDomElement | null = null\n let hoveredBlockElement: StorefrontEditorDomElement | null = null\n let selectedElement: StorefrontEditorDomElement | null = null\n let selectedBlockElement: StorefrontEditorDomElement | null = null\n let selectedSectionId: string | null = null\n let selectedBlockId: string | null = null\n let ownedStyle: StorefrontEditorStyleElement | null = null\n let ownedToolbar: StorefrontEditorDomElement | null = null\n let inspectorEnabled = true\n\n const setElementState = (\n kind: 'hovered' | 'selected',\n sectionId: string | null,\n ): StorefrontEditorDomElement | null => {\n const previous = kind === 'hovered' ? hoveredElement : selectedElement\n previous?.removeAttribute(`data-kotao-editor-${kind}`)\n if (sectionId === null) return null\n const element = document.getElementById(`shopify-section-${sectionId}`)\n if (element === null || !('setAttribute' in element)) return null\n const sectionElement = element as StorefrontEditorDomElement\n sectionElement.setAttribute(`data-kotao-editor-${kind}`, 'true')\n sectionElement.setAttribute('data-kotao-editor-label', labelForSection(sectionId))\n return sectionElement\n }\n const setHovered = (sectionId: string | null) => {\n if (!inspectorEnabled && sectionId !== null) return\n hoveredElement = setElementState('hovered', sectionId)\n }\n const clearHovered = () => {\n hoveredBlockElement?.removeAttribute('data-kotao-editor-block-hovered')\n hoveredBlockElement = null\n setHovered(null)\n }\n const positionToolbar = () => {\n const anchor = selectedBlockElement ?? selectedElement\n const anchorRect = anchor?.getBoundingClientRect?.()\n if (ownedToolbar === null || anchorRect === undefined) return\n const toolbarRect = ownedToolbar.getBoundingClientRect?.() ?? {\n top: 0,\n right: 420,\n bottom: 38,\n left: 0,\n width: 420,\n height: 38,\n }\n const position = positionStorefrontEditorCanvasToolbar(anchorRect, toolbarRect, {\n width: document.defaultView?.innerWidth ?? 1024,\n height: document.defaultView?.innerHeight ?? 768,\n })\n ownedToolbar.setAttribute('style', `left:${position.left}px;top:${position.top}px`)\n ownedToolbar.setAttribute('data-placement', position.placement)\n }\n const renderToolbar = () => {\n if (ownedToolbar === null) return\n if (selectedSectionId === null) {\n ownedToolbar.removeAttribute('data-visible')\n return\n }\n const isBlock = selectedBlockId !== null\n if (selectedBlockId !== null) {\n ownedToolbar.innerHTML = canvasToolbarHtml(\n labelForBlock(selectedSectionId, selectedBlockId),\n true,\n stateForSelection(selectedSectionId, selectedBlockId),\n )\n } else {\n ownedToolbar.innerHTML = canvasToolbarHtml(\n labelForSection(selectedSectionId),\n false,\n stateForSelection(selectedSectionId),\n )\n }\n ownedToolbar.setAttribute('data-visible', 'true')\n ownedToolbar.setAttribute('aria-label', isBlock ? 'Block actions' : 'Section actions')\n positionToolbar()\n }\n const setSelected = (sectionId: string | null, blockId?: string) => {\n if (!inspectorEnabled && sectionId !== null) return\n selectedBlockElement?.removeAttribute('data-kotao-editor-block-selected')\n selectedBlockElement = null\n selectedBlockId = blockId ?? null\n selectedSectionId = sectionId\n selectedElement = setElementState('selected', sectionId)\n if (sectionId !== null && blockId !== undefined) {\n selectedBlockElement = findBlockElement(document, blockId)\n selectedBlockElement?.setAttribute('data-kotao-editor-block-selected', 'true')\n selectedBlockElement?.setAttribute(\n 'data-kotao-editor-label',\n labelForBlock(sectionId, blockId),\n )\n }\n renderToolbar()\n }\n const onPointerOver = (event: StorefrontEditorPointerEvent) => {\n if (!inspectorEnabled) return\n const element = sectionElementFromTarget(event.target)\n if (element === null) return\n const sectionId = element.id.slice('shopify-section-'.length)\n if (sectionId === '' || isReservedSectionId(sectionId)) return\n const nextBlockElement = blockElementFromTarget(event.target)\n if (element === hoveredElement && nextBlockElement === hoveredBlockElement) return\n hoveredBlockElement?.removeAttribute('data-kotao-editor-block-hovered')\n hoveredBlockElement = nextBlockElement\n const blockId = hoveredBlockElement ? blockIdForElement(hoveredBlockElement) : null\n if (hoveredBlockElement !== null && blockId !== null) {\n hoveredBlockElement.setAttribute('data-kotao-editor-block-hovered', 'true')\n hoveredBlockElement.setAttribute('data-kotao-editor-label', labelForBlock(sectionId, blockId))\n }\n if (element !== hoveredElement) {\n setHovered(sectionId)\n onHoverSection(sectionId)\n }\n }\n const onPointerOut = (event: StorefrontEditorPointerEvent) => {\n if (!inspectorEnabled) return\n if (hoveredElement === null) return\n const nextElement = sectionElementFromTarget(event.relatedTarget)\n if (nextElement === hoveredElement || hoveredElement.contains(event.relatedTarget)) return\n clearHovered()\n onHoverSection(null)\n }\n const onClick = (event: StorefrontEditorPointerEvent) => {\n if (isRecord(event.target) && typeof event.target.closest === 'function') {\n const canvas = event.target.closest(`#${EDITOR_CANVAS_ID}`) as unknown\n if (canvas !== null) return\n }\n const anchor = anchorElementFromTarget(event.target)\n if (anchor !== null) {\n const disposition = classifyAnchorClick(event, anchor, document)\n if (disposition === null) return\n if (inspectorEnabled) {\n event.preventDefault?.()\n event.stopPropagation?.()\n } else {\n switch (disposition.kind) {\n case 'internal':\n event.preventDefault?.()\n event.stopPropagation?.()\n onNavigate(disposition.href)\n break\n case 'external':\n event.preventDefault?.()\n event.stopPropagation?.()\n document.defaultView?.open?.(disposition.href, '_blank', 'noopener,noreferrer')\n break\n case 'unsafe':\n event.preventDefault?.()\n event.stopPropagation?.()\n break\n case 'hash':\n case 'scheme':\n break\n }\n return\n }\n } else if (!inspectorEnabled) {\n return\n }\n const section = sectionElementFromTarget(event.target)\n if (section === null) return\n const sectionId = section.id.slice('shopify-section-'.length)\n if (sectionId === '' || isReservedSectionId(sectionId)) return\n const block = blockElementFromTarget(event.target)\n const blockId = block === null ? null : blockIdForElement(block)\n setSelected(sectionId, blockId ?? undefined)\n onSelect(sectionId, blockId ?? undefined)\n }\n const onToolbarClick = (event: StorefrontEditorPointerEvent) => {\n if (!isRecord(event.target) || typeof event.target.closest !== 'function') return\n const button = event.target.closest('[data-kotao-editor-action]') as unknown\n if (!isRecord(button) || typeof button.getAttribute !== 'function') return\n const action = button.getAttribute('data-kotao-editor-action') as unknown\n if (typeof action !== 'string' || selectedSectionId === null) return\n event.preventDefault?.()\n event.stopPropagation?.()\n if (SECTION_CANVAS_ACTIONS.has(action as StorefrontEditorCanvasAction['action'])) {\n onCanvasAction({\n action: action as StorefrontEditorCanvasSectionAction,\n sectionId: selectedSectionId,\n })\n return\n }\n if (\n selectedBlockId !== null &&\n BLOCK_CANVAS_ACTIONS.has(action as StorefrontEditorCanvasAction['action'])\n ) {\n onCanvasAction({\n action: action as StorefrontEditorCanvasBlockAction,\n sectionId: selectedSectionId,\n blockId: selectedBlockId,\n })\n }\n }\n\n document.documentElement.setAttribute('data-kotao-editor', 'true')\n if (document.getElementById(EDITOR_AFFORDANCE_STYLE_ID) === null && document.head !== undefined) {\n ownedStyle = document.createElement('style')\n ownedStyle.id = EDITOR_AFFORDANCE_STYLE_ID\n ownedStyle.textContent = EDITOR_AFFORDANCE_CSS\n document.head.appendChild(ownedStyle)\n }\n if (document.body !== undefined) {\n ownedToolbar = document.createElement('div')\n ownedToolbar.id = EDITOR_CANVAS_ID\n ownedToolbar.setAttribute('role', 'toolbar')\n ownedToolbar.setAttribute('data-kotao-editor-canvas', 'true')\n ownedToolbar.addEventListener?.('click', onToolbarClick)\n document.body.appendChild(ownedToolbar)\n }\n document.addEventListener('pointerover', onPointerOver, true)\n document.addEventListener('pointerout', onPointerOut, true)\n document.addEventListener('click', onClick, true)\n document.defaultView?.addEventListener?.('scroll', positionToolbar, true)\n document.defaultView?.addEventListener?.('resize', positionToolbar)\n\n return {\n setHovered,\n setSelected,\n setInspectorEnabled(enabled: boolean) {\n inspectorEnabled = enabled\n if (!enabled) {\n clearHovered()\n setSelected(null)\n }\n },\n dispose() {\n clearHovered()\n setSelected(null)\n document.documentElement.removeAttribute('data-kotao-editor')\n document.removeEventListener('pointerover', onPointerOver, true)\n document.removeEventListener('pointerout', onPointerOut, true)\n document.removeEventListener('click', onClick, true)\n document.defaultView?.removeEventListener?.('scroll', positionToolbar, true)\n document.defaultView?.removeEventListener?.('resize', positionToolbar)\n ownedToolbar?.removeEventListener?.('click', onToolbarClick)\n ownedToolbar?.remove?.()\n ownedStyle?.remove()\n },\n }\n}\n\nexport function createStorefrontEditorBridge({\n adminOrigin,\n document: editorDocument,\n globalInputs,\n themeStyles,\n schemas,\n sectionGroups,\n shopId,\n store,\n target,\n templates,\n transport,\n}: CreateStorefrontEditorBridgeArgs): StorefrontEditorBridge {\n const postHoverSection = (sectionId: string | null): void => {\n if (sectionId !== null && isReservedSectionId(sectionId)) return\n const message: PreviewHoverMessage = {\n source: PREVIEW_SOURCE,\n type: 'section.hover',\n shopId,\n sectionId,\n }\n target.postMessage(message, adminOrigin)\n }\n const labelForSection = (sectionId: string): string => {\n const snapshot = store.getSnapshot()\n const documents = [\n snapshot.sections,\n ...Object.values(snapshot.sectionGroups ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ...Object.values(snapshot.templates ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ]\n const section = documents\n .flatMap((document) => document)\n .find((candidate) => candidate.id === sectionId)\n return section === undefined ? sectionId : (schemas?.[section.type]?.label ?? section.type)\n }\n const labelForBlock = (sectionId: string, blockId: string): string => {\n const snapshot = store.getSnapshot()\n const documents = [\n snapshot.sections,\n ...Object.values(snapshot.sectionGroups ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ...Object.values(snapshot.templates ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ]\n const section = documents\n .flatMap((document) => document)\n .find((candidate) => candidate.id === sectionId)\n const block = section?.blocks.find((candidate) => candidate.id === blockId)\n const schema = section === undefined ? undefined : schemas?.[section.type]\n return block === undefined\n ? blockId\n : (schema?.blocks?.find((candidate) => candidate.type === block.type)?.label ?? block.type)\n }\n const stateForSelection = (\n sectionId: string,\n blockId?: string,\n ): StorefrontEditorCanvasSelectionState => {\n const snapshot = store.getSnapshot()\n const documents = [\n snapshot.sections,\n ...Object.values(snapshot.sectionGroups ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ...Object.values(snapshot.templates ?? {}).flatMap((document) =>\n document === undefined ? [] : [document.sections],\n ),\n ]\n const sections = documents.find((document) =>\n document.some((candidate) => candidate.id === sectionId),\n )\n const sectionIndex = sections?.findIndex((candidate) => candidate.id === sectionId) ?? -1\n const section = sectionIndex === -1 ? undefined : sections?.[sectionIndex]\n const canAddSection = Object.values(schemas ?? {}).some(\n (schema) => (schema.presets?.length ?? 0) > 0,\n )\n if (blockId === undefined) {\n return {\n canAddSection,\n canDuplicate: section !== undefined,\n canMoveDown: sections !== undefined && sectionIndex < sections.length - 1,\n canMoveUp: sectionIndex > 0,\n hidden: section?.settings.disabled === true,\n }\n }\n const blockIndex = section?.blocks.findIndex((candidate) => candidate.id === blockId) ?? -1\n const block = blockIndex === -1 ? undefined : section?.blocks[blockIndex]\n const sectionSchema = section === undefined ? undefined : schemas?.[section.type]\n const blockSchema = block\n ? sectionSchema?.blocks?.find((candidate) => candidate.type === block.type)\n : undefined\n const underSectionLimit =\n section !== undefined &&\n (sectionSchema?.maxBlocks === undefined || section.blocks.length < sectionSchema.maxBlocks)\n const underBlockLimit =\n block !== undefined &&\n (blockSchema?.limit === undefined ||\n (section?.blocks.filter((candidate) => candidate.type === block.type).length ?? 0) <\n blockSchema.limit)\n return {\n canAddSection,\n canDuplicate:\n sectionSchema !== undefined &&\n blockSchema !== undefined &&\n underSectionLimit &&\n underBlockLimit,\n canMoveDown:\n section !== undefined && blockIndex !== -1 && blockIndex < section.blocks.length - 1,\n canMoveUp: blockIndex > 0,\n hidden: block?.settings.disabled === true,\n }\n }\n const postSelection = (sectionId: string, blockId?: string): void => {\n if (isReservedSectionId(sectionId)) return\n const snapshot = store.getSnapshot()\n let sections = snapshot.sections\n let section = sections.find((candidate) => candidate.id === sectionId)\n let scope: StorefrontEditorSelectionScope | undefined\n\n if (section === undefined) {\n for (const [handle, document] of Object.entries(snapshot.sectionGroups ?? {})) {\n const candidate = document?.sections.find((item) => item.id === sectionId)\n if (candidate === undefined) continue\n section = candidate\n sections = document.sections\n scope = { kind: 'sectionGroup', handle }\n break\n }\n }\n if (section === undefined) {\n for (const [handle, document] of Object.entries(snapshot.templates ?? {})) {\n const candidate = document?.sections.find((item) => item.id === sectionId)\n if (candidate === undefined) continue\n section = candidate\n sections = document.sections\n scope = { kind: 'template', handle }\n break\n }\n }\n const block =\n blockId === undefined ? undefined : section?.blocks.find((item) => item.id === blockId)\n if (blockId !== undefined && block === undefined) return\n const schema = section !== undefined ? schemas?.[section.type] : undefined\n const message: PreviewSelectionMessage = {\n source: PREVIEW_SOURCE,\n type: 'section.select',\n shopId,\n sectionId,\n ...(blockId !== undefined ? { blockId } : {}),\n ...(block !== undefined ? { block } : {}),\n ...(scope !== undefined ? { scope } : {}),\n ...(section !== undefined ? { section } : {}),\n sections,\n ...(schema !== undefined ? { schema } : {}),\n ...(schemas !== undefined ? { schemas } : {}),\n }\n target.postMessage(message, adminOrigin)\n }\n const postCanvasAction = (action: StorefrontEditorCanvasAction): void => {\n const message: PreviewCanvasActionMessage = {\n source: PREVIEW_SOURCE,\n type: 'editor.action',\n shopId,\n ...action,\n }\n target.postMessage(message, adminOrigin)\n }\n const postNavigation = (href: string): void => {\n const message: PreviewNavigationRequestMessage = {\n source: PREVIEW_SOURCE,\n type: 'preview.navigate',\n shopId,\n href,\n }\n target.postMessage(message, adminOrigin)\n }\n const resolvedDocument = editorDocument ?? defaultEditorDocument()\n let disposed = false\n const pendingAnimationFrames = new Set<number>()\n const affordances =\n resolvedDocument === undefined\n ? null\n : createEditorAffordances({\n document: resolvedDocument,\n labelForBlock,\n labelForSection,\n onCanvasAction: postCanvasAction,\n onHoverSection: postHoverSection,\n onNavigate: postNavigation,\n onSelect: postSelection,\n stateForSelection,\n })\n\n const postReady = (): void => {\n const snapshot = store.getSnapshot()\n const message: PreviewReadyMessage = {\n source: PREVIEW_SOURCE,\n type: 'editor.ready',\n shopId,\n sections: snapshot.sections,\n visualReadyProtocol: 1,\n global: snapshot.global,\n ...(schemas !== undefined ? { schemas } : {}),\n ...(globalInputs !== undefined ? { globalInputs } : {}),\n ...(themeStyles !== undefined ? { themeStyles } : {}),\n ...(templates !== undefined ? { templates } : {}),\n ...(sectionGroups !== undefined ? { sectionGroups } : {}),\n }\n target.postMessage(message, adminOrigin)\n }\n\n const postVisualReadyAfterPaint = (requestId: string): void => {\n const view = resolvedDocument?.defaultView\n const requestAnimationFrame = view?.requestAnimationFrame?.bind(view)\n if (requestAnimationFrame === undefined) {\n queueMicrotask(() => {\n queueMicrotask(() => {\n if (disposed) return\n target.postMessage(\n {\n source: PREVIEW_SOURCE,\n type: 'editor.visual-ready',\n shopId,\n requestId,\n } satisfies PreviewVisualReadyMessage,\n adminOrigin,\n )\n })\n })\n return\n }\n\n const firstFrame = requestAnimationFrame(() => {\n pendingAnimationFrames.delete(firstFrame)\n if (disposed) return\n const secondFrame = requestAnimationFrame(() => {\n pendingAnimationFrames.delete(secondFrame)\n if (disposed) return\n target.postMessage(\n {\n source: PREVIEW_SOURCE,\n type: 'editor.visual-ready',\n shopId,\n requestId,\n } satisfies PreviewVisualReadyMessage,\n adminOrigin,\n )\n })\n pendingAnimationFrames.add(secondFrame)\n })\n pendingAnimationFrames.add(firstFrame)\n }\n\n const onMessage = (event: StorefrontEditorMessageEvent): void => {\n if (event.origin !== adminOrigin) return\n if (event.source !== target) return\n const message = parseHostMessage(event.data, shopId)\n if (message === null) return\n\n switch (message.type) {\n case 'editor.ready.request':\n postReady()\n break\n case 'editor.visual-ready.request':\n postVisualReadyAfterPaint(message.requestId)\n break\n case 'section.hover':\n affordances?.setHovered(message.sectionId)\n break\n case 'section.activate':\n affordances?.setSelected(message.sectionId, message.blockId)\n break\n case 'inspector.set':\n affordances?.setInspectorEnabled(message.enabled)\n break\n case 'settings.patchSection':\n store.patchSection(message.sectionId, message.settings)\n break\n case 'settings.patchGlobal':\n store.patchGlobal(message.settings)\n break\n case 'sections.insert':\n store.insertSection(message.section, message.index)\n break\n case 'sections.remove':\n store.removeSection(message.sectionId)\n break\n case 'sections.reorder':\n store.moveSection(message.sectionId, message.index)\n break\n case 'settings.patchBlock':\n store.patchBlock(message.sectionId, message.blockId, message.settings)\n break\n case 'blocks.insert':\n store.insertBlock(message.sectionId, message.block, message.index)\n break\n case 'blocks.remove':\n store.removeBlock(message.sectionId, message.blockId)\n break\n case 'blocks.reorder':\n store.moveBlock(message.sectionId, message.blockId, message.index)\n break\n case 'template.replace':\n store.replaceSections(message.document.sections)\n break\n case 'sectionGroup.replace':\n store.replaceSectionGroup(message.handle, message.document)\n break\n case 'appExtensions.replace':\n replaceAppExtensionPreviewFrames(resolvedDocument, message.extensions)\n break\n }\n }\n\n transport.addEventListener('message', onMessage)\n\n return {\n ready: postReady,\n hoverSection: (sectionId) => {\n if (sectionId !== null && isReservedSectionId(sectionId)) return\n affordances?.setHovered(sectionId)\n postHoverSection(sectionId)\n },\n selectSection: (sectionId) => {\n if (isReservedSectionId(sectionId)) return\n affordances?.setSelected(sectionId)\n postSelection(sectionId)\n },\n selectBlock: (sectionId, blockId) => {\n if (isReservedSectionId(sectionId) || !isBlockId(blockId)) return\n affordances?.setSelected(sectionId, blockId)\n postSelection(sectionId, blockId)\n },\n dispose: () => {\n disposed = true\n for (const requestId of pendingAnimationFrames) {\n resolvedDocument?.defaultView?.cancelAnimationFrame?.(requestId)\n }\n pendingAnimationFrames.clear()\n replaceAppExtensionPreviewFrames(resolvedDocument, [])\n affordances?.dispose()\n transport.removeEventListener('message', onMessage)\n },\n }\n}\n\nexport function createStorefrontEditorHostBridge({\n onCanvasAction,\n onHoverSection,\n onNavigate,\n onReady,\n onSelectSection,\n onVisualReady,\n previewOrigin,\n resolveTarget,\n shopId,\n target,\n transport,\n}: CreateStorefrontEditorHostBridgeArgs): StorefrontEditorHostBridge {\n const currentTarget = (): StorefrontEditorMessageTarget => resolveTarget?.() ?? target\n\n const onMessage = (event: StorefrontEditorMessageEvent): void => {\n if (event.origin !== previewOrigin) return\n const expectedTarget = currentTarget()\n if (event.source !== expectedTarget) return\n const visualReady = parsePreviewVisualReady(event.data, shopId)\n if (visualReady !== null) {\n onVisualReady?.(visualReady.requestId)\n return\n }\n const navigation = parsePreviewNavigation(event.data, shopId, previewOrigin)\n if (navigation !== null) {\n onNavigate?.({ href: navigation.href })\n return\n }\n const ready = parsePreviewReady(event.data, shopId)\n if (ready !== null) {\n onReady?.({\n sections: ready.sections,\n ...(ready.visualReadyProtocol === 1 ? { visualReadyProtocol: 1 as const } : {}),\n ...(ready.global !== undefined ? { global: ready.global } : {}),\n ...(ready.schemas !== undefined ? { schemas: ready.schemas } : {}),\n ...(ready.globalInputs !== undefined ? { globalInputs: ready.globalInputs } : {}),\n ...(ready.themeStyles !== undefined ? { themeStyles: ready.themeStyles } : {}),\n ...(ready.templates !== undefined ? { templates: ready.templates } : {}),\n ...(ready.sectionGroups !== undefined ? { sectionGroups: ready.sectionGroups } : {}),\n })\n return\n }\n const hover = parsePreviewHover(event.data, shopId)\n if (hover !== null) {\n onHoverSection?.(hover.sectionId)\n return\n }\n const canvasAction = parsePreviewCanvasAction(event.data, shopId)\n if (canvasAction !== null) {\n onCanvasAction?.(\n canvasAction.blockId === undefined\n ? {\n action: canvasAction.action as StorefrontEditorCanvasSectionAction,\n sectionId: canvasAction.sectionId,\n ...(canvasAction.scope !== undefined ? { scope: canvasAction.scope } : {}),\n }\n : {\n action: canvasAction.action as StorefrontEditorCanvasBlockAction,\n sectionId: canvasAction.sectionId,\n blockId: canvasAction.blockId,\n ...(canvasAction.scope !== undefined ? { scope: canvasAction.scope } : {}),\n },\n )\n return\n }\n const message = parsePreviewSelection(event.data, shopId)\n if (message === null || isReservedSectionId(message.sectionId)) return\n onSelectSection({\n sectionId: message.sectionId,\n ...(message.blockId !== undefined ? { blockId: message.blockId } : {}),\n ...(message.block !== undefined ? { block: message.block } : {}),\n ...(message.scope !== undefined ? { scope: message.scope } : {}),\n ...(message.section !== undefined ? { section: message.section } : {}),\n ...(message.sections !== undefined ? { sections: message.sections } : {}),\n ...(message.schema !== undefined ? { schema: message.schema } : {}),\n ...(message.schemas !== undefined ? { schemas: message.schemas } : {}),\n })\n }\n\n transport.addEventListener('message', onMessage)\n\n return {\n requestReady: () => {\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'editor.ready.request',\n shopId,\n })\n },\n requestVisualReady: (requestId) => {\n if (!VISUAL_READY_REQUEST_ID.test(requestId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'editor.visual-ready.request',\n shopId,\n requestId,\n })\n },\n hoverSection: (sectionId) => {\n if (sectionId !== null && isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'section.hover',\n shopId,\n sectionId,\n })\n },\n activateSection: (sectionId, blockId) => {\n if (sectionId !== null && isReservedSectionId(sectionId)) return\n if (blockId !== undefined && !isBlockId(blockId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'section.activate',\n shopId,\n sectionId,\n ...(blockId !== undefined ? { blockId } : {}),\n })\n },\n patchSection: (sectionId, settings) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'settings.patchSection',\n shopId,\n sectionId,\n settings,\n })\n },\n patchGlobal: (settings) => {\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'settings.patchGlobal',\n shopId,\n settings,\n })\n },\n insertSection: (section, index) => {\n if (isReservedSectionId(section.id)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'sections.insert',\n shopId,\n section,\n ...(index !== undefined ? { index } : {}),\n })\n },\n removeSection: (sectionId) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'sections.remove',\n shopId,\n sectionId,\n })\n },\n reorderSection: (sectionId, index) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'sections.reorder',\n shopId,\n sectionId,\n index,\n })\n },\n patchBlock: (sectionId, blockId, settings) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'settings.patchBlock',\n shopId,\n sectionId,\n blockId,\n settings,\n })\n },\n insertBlock: (sectionId, block, index) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'blocks.insert',\n shopId,\n sectionId,\n block,\n ...(index !== undefined ? { index } : {}),\n })\n },\n removeBlock: (sectionId, blockId) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'blocks.remove',\n shopId,\n sectionId,\n blockId,\n })\n },\n reorderBlock: (sectionId, blockId, index) => {\n if (isReservedSectionId(sectionId)) return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'blocks.reorder',\n shopId,\n sectionId,\n blockId,\n index,\n })\n },\n replaceTemplate: (handle, document) => {\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'template.replace',\n shopId,\n handle,\n document,\n })\n },\n replaceSectionGroup: (handle, document) => {\n if (handle.trim() === '') return\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'sectionGroup.replace',\n shopId,\n handle,\n document,\n })\n },\n replaceAppExtensions: (extensions) => {\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'appExtensions.replace',\n shopId,\n extensions,\n })\n },\n setInspectorEnabled: (enabled) => {\n postHostMessage(currentTarget(), previewOrigin, {\n source: HOST_SOURCE,\n type: 'inspector.set',\n shopId,\n enabled,\n })\n },\n dispose: () => {\n transport.removeEventListener('message', onMessage)\n },\n }\n}\n","/** Reserved section setting used to persist Shopify's per-instance custom CSS. */\nexport const STOREFRONT_SECTION_CUSTOM_CSS_SETTING = '__kotaoCustomCss'\n\nconst CSS_GROUP_AT_RULE = /^@(?:media|supports|container|layer|scope)\\b/iu\n\nfunction rawCss(value: unknown): string {\n const css = Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string').join('\\n')\n : typeof value === 'string'\n ? value\n : ''\n return css\n .replace(/\\/\\*[\\s\\S]*?\\*\\//gu, '')\n .replace(/<\\/style/giu, '')\n .trim()\n}\n\nfunction splitTopLevelSelectors(selectorList: string): string[] {\n const selectors: string[] = []\n let parentheses = 0\n let brackets = 0\n let quote: string | null = null\n let current = ''\n for (let index = 0; index < selectorList.length; index += 1) {\n const character = selectorList[index] ?? ''\n if (quote !== null) {\n current += character\n if (character === '\\\\') {\n current += selectorList[index + 1] ?? ''\n index += 1\n } else if (character === quote) quote = null\n continue\n }\n if (character === '\"' || character === \"'\") quote = character\n else if (character === '(') parentheses += 1\n else if (character === ')') parentheses = Math.max(0, parentheses - 1)\n else if (character === '[') brackets += 1\n else if (character === ']') brackets = Math.max(0, brackets - 1)\n if (character === ',' && parentheses === 0 && brackets === 0) {\n selectors.push(current)\n current = ''\n } else current += character\n }\n selectors.push(current)\n return selectors\n}\n\nfunction splitTopLevelRules(css: string): Array<{ prelude: string; body: string | null }> {\n const rules: Array<{ prelude: string; body: string | null }> = []\n let prelude = ''\n let quote: string | null = null\n for (let index = 0; index < css.length; index += 1) {\n const character = css[index] ?? ''\n if (quote !== null) {\n prelude += character\n if (character === '\\\\') {\n prelude += css[index + 1] ?? ''\n index += 1\n } else if (character === quote) quote = null\n continue\n }\n if (character === '\"' || character === \"'\") {\n quote = character\n prelude += character\n continue\n }\n if (character === '{') {\n let depth = 1\n let body = ''\n let bodyQuote: string | null = null\n index += 1\n for (; index < css.length; index += 1) {\n const nested = css[index] ?? ''\n if (bodyQuote !== null) {\n body += nested\n if (nested === '\\\\') {\n body += css[index + 1] ?? ''\n index += 1\n } else if (nested === bodyQuote) bodyQuote = null\n continue\n }\n if (nested === '\"' || nested === \"'\") {\n bodyQuote = nested\n body += nested\n } else if (nested === '{') {\n depth += 1\n body += nested\n } else if (nested === '}') {\n depth -= 1\n if (depth === 0) break\n body += nested\n } else body += nested\n }\n rules.push({ prelude: prelude.trim(), body })\n prelude = ''\n } else if (character === ';') {\n if (prelude.trim() !== '') rules.push({ prelude: prelude.trim(), body: null })\n prelude = ''\n } else prelude += character\n }\n if (prelude.trim() !== '') rules.push({ prelude: prelude.trim(), body: null })\n return rules\n}\n\nfunction scopeRules(css: string, scope: string): string {\n return splitTopLevelRules(css)\n .map(({ prelude, body }) => {\n if (body === null) return `${prelude};`\n if (prelude.startsWith('@')) {\n return CSS_GROUP_AT_RULE.test(prelude)\n ? `${prelude} {\\n${scopeRules(body, scope)}\\n}`\n : `${prelude} {${body}}`\n }\n const selectors = splitTopLevelSelectors(prelude)\n .map((selector) => selector.trim())\n .filter(Boolean)\n .map((selector) =>\n selector.includes('&') ? selector.replaceAll('&', scope) : `${scope} ${selector}`,\n )\n .join(', ')\n return selectors === '' ? '' : `${selectors} {${body}}`\n })\n .filter(Boolean)\n .join('\\n')\n}\n\n/** Scope merchant-authored CSS to one rendered section and prevent style-element breakout. */\nexport function scopeStorefrontSectionCss(value: unknown, sectionId: string): string {\n const css = rawCss(value)\n return css === '' ? '' : scopeRules(css, `#shopify-section-${sectionId}`).trim()\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CART_FORM_ACTIONS
|
|
1
|
+
import { CART_FORM_ACTIONS } from './chunk-OGWYTYYS.js';
|
|
2
2
|
import * as ReactRuntime from 'react';
|
|
3
3
|
import { createContext, createElement, useContext } from 'react';
|
|
4
4
|
|
|
@@ -51,6 +51,30 @@ function hasReactDispatcher() {
|
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
// src/analytics/attribution.ts
|
|
55
|
+
function deviceClass(matchMedia) {
|
|
56
|
+
if (matchMedia === void 0) return void 0;
|
|
57
|
+
if (matchMedia("(max-width: 767px)").matches) return "mobile";
|
|
58
|
+
if (matchMedia("(max-width: 1023px)").matches) return "tablet";
|
|
59
|
+
return "desktop";
|
|
60
|
+
}
|
|
61
|
+
function collectAnalyticsAttribution(environment) {
|
|
62
|
+
if (environment === null) return {};
|
|
63
|
+
const params = new URLSearchParams(environment.search ?? "");
|
|
64
|
+
const referrer = environment.referrer || void 0;
|
|
65
|
+
const utmSource = params.get("utm_source") || void 0;
|
|
66
|
+
const utmMedium = params.get("utm_medium") || void 0;
|
|
67
|
+
const utmCampaign = params.get("utm_campaign") || void 0;
|
|
68
|
+
const classifiedDevice = deviceClass(environment.matchMedia);
|
|
69
|
+
return {
|
|
70
|
+
...referrer !== void 0 ? { referrer } : {},
|
|
71
|
+
...utmSource !== void 0 ? { utmSource } : {},
|
|
72
|
+
...utmMedium !== void 0 ? { utmMedium } : {},
|
|
73
|
+
...utmCampaign !== void 0 ? { utmCampaign } : {},
|
|
74
|
+
...classifiedDevice !== void 0 ? { deviceClass: classifiedDevice } : {}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
54
78
|
// src/analytics/emitter.ts
|
|
55
79
|
function createAnalyticsEmitter() {
|
|
56
80
|
const handlers = /* @__PURE__ */ new Map();
|
|
@@ -85,9 +109,9 @@ function createAnalyticsBus(options) {
|
|
|
85
109
|
emitter,
|
|
86
110
|
publish(event, payload) {
|
|
87
111
|
emitter.publish(event, payload);
|
|
88
|
-
const consented =
|
|
89
|
-
const context = options.getContext?.() ?? {};
|
|
112
|
+
const consented = options.getConsent().analytics === true;
|
|
90
113
|
if (consented) {
|
|
114
|
+
const context = options.getContext?.() ?? {};
|
|
91
115
|
options.transport.record({ event, payload, context, timestamp: now(), consent: true });
|
|
92
116
|
return;
|
|
93
117
|
}
|
|
@@ -95,7 +119,7 @@ function createAnalyticsBus(options) {
|
|
|
95
119
|
options.transport.record({
|
|
96
120
|
event,
|
|
97
121
|
payload: {},
|
|
98
|
-
context,
|
|
122
|
+
context: options.getAnonymousContext?.() ?? {},
|
|
99
123
|
timestamp: now(),
|
|
100
124
|
consent: false
|
|
101
125
|
});
|
|
@@ -133,6 +157,6 @@ function createPixelTransport(options) {
|
|
|
133
157
|
};
|
|
134
158
|
}
|
|
135
159
|
|
|
136
|
-
export { CartForm, createAnalyticsBus, createAnalyticsEmitter, createNonceProvider, createPixelTransport, getCartFormInput, useNonce };
|
|
137
|
-
//# sourceMappingURL=chunk-
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
160
|
+
export { CartForm, collectAnalyticsAttribution, createAnalyticsBus, createAnalyticsEmitter, createNonceProvider, createPixelTransport, getCartFormInput, useNonce };
|
|
161
|
+
//# sourceMappingURL=chunk-RFM27BKZ.js.map
|
|
162
|
+
//# sourceMappingURL=chunk-RFM27BKZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cart/CartForm.ts","../src/react/nonce.ts","../src/analytics/attribution.ts","../src/analytics/emitter.ts","../src/analytics/analytics-bus.ts","../src/analytics/pixel-transport.ts"],"names":["CartForm"],"mappings":"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","file":"chunk-RFM27BKZ.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CART_FORM_ACTIONS, type CartFormAction } from './actions'\n\nexport interface CartFormProps {\n readonly action: CartFormAction\n}\n\nexport interface CartFormInputResult {\n readonly action: CartFormAction | null\n readonly inputs: Record<string, any>\n}\n\nfunction parseFormValue(value: unknown): unknown {\n if (typeof value !== 'string') return value\n const trimmed = value.trim()\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n return JSON.parse(trimmed) as unknown\n } catch {\n return value\n }\n }\n return value\n}\n\nexport function getCartFormInput(formData: FormData): CartFormInputResult {\n const action = formData.get('cartAction')\n const inputs: Record<string, any> = {}\n for (const key of new Set(formData.keys())) {\n if (key === 'cartAction') continue\n const values = formData.getAll(key).map(parseFormValue)\n inputs[key] = values.length === 1 ? values[0] : values\n }\n return {\n action: typeof action === 'string' ? (action as CartFormAction) : null,\n inputs,\n }\n}\n\n/**\n * Lightweight CartForm surface marker for Hydrogen-style imports. React render integration can wrap\n * this constant surface; the load-bearing API today is the stable ACTIONS contract used by handlers.\n */\nexport const CartForm = Object.assign(\n function CartForm(_props: CartFormProps): null {\n return null\n },\n { ACTIONS: CART_FORM_ACTIONS, getFormInput: getCartFormInput },\n)\n","import * as ReactRuntime from 'react'\nimport { createContext, createElement, useContext, type ReactNode } from 'react'\n\nconst NonceContext = createContext<string | undefined>(undefined)\n\nexport interface NonceProviderProps {\n readonly children?: ReactNode\n readonly nonce?: string\n}\n\nexport type BoundNonceProvider = (props: { readonly children?: ReactNode }) => ReactNode\n\nexport function NonceProvider(props: NonceProviderProps): ReactNode {\n return createElement(NonceContext.Provider, { value: props.nonce }, props.children)\n}\n\nexport function createNonceProvider(nonce: string): BoundNonceProvider {\n return function BoundNonceProvider(props: { readonly children?: ReactNode }): ReactNode {\n return createElement(NonceContext.Provider, { value: nonce }, props.children)\n }\n}\n\n/** Hydrogen-compatible nonce hook. */\nexport function useNonce(): string | undefined {\n if (!hasReactDispatcher()) return undefined\n return useContext(NonceContext)\n}\n\nfunction hasReactDispatcher(): boolean {\n const runtime = ReactRuntime as unknown as {\n __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?: { H?: unknown }\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?: {\n ReactCurrentDispatcher?: { current?: unknown }\n }\n }\n return Boolean(\n runtime.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.H ??\n runtime.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentDispatcher?.current,\n )\n}\n","import type { AnalyticsContext, AnalyticsDeviceClass } from './events'\n\nexport interface AnalyticsAttributionEnvironment {\n readonly referrer?: string\n readonly search?: string\n readonly matchMedia?: (query: string) => { readonly matches: boolean }\n}\n\ntype AttributionContext = Pick<\n AnalyticsContext,\n 'referrer' | 'utmSource' | 'utmMedium' | 'utmCampaign' | 'deviceClass'\n>\n\nfunction deviceClass(\n matchMedia: AnalyticsAttributionEnvironment['matchMedia'],\n): AnalyticsDeviceClass | undefined {\n if (matchMedia === undefined) return undefined\n if (matchMedia('(max-width: 767px)').matches) return 'mobile'\n if (matchMedia('(max-width: 1023px)').matches) return 'tablet'\n return 'desktop'\n}\n\n/** Read static landing attribution plus the current responsive device class without retaining state\n * or identifiers. All values stay optional so non-DOM/SSR emitters keep their existing payload. */\nexport function collectAnalyticsAttribution(\n environment: AnalyticsAttributionEnvironment | null,\n): AttributionContext {\n if (environment === null) return {}\n const params = new URLSearchParams(environment.search ?? '')\n const referrer = environment.referrer || undefined\n const utmSource = params.get('utm_source') || undefined\n const utmMedium = params.get('utm_medium') || undefined\n const utmCampaign = params.get('utm_campaign') || undefined\n const classifiedDevice = deviceClass(environment.matchMedia)\n\n return {\n ...(referrer !== undefined ? { referrer } : {}),\n ...(utmSource !== undefined ? { utmSource } : {}),\n ...(utmMedium !== undefined ? { utmMedium } : {}),\n ...(utmCampaign !== undefined ? { utmCampaign } : {}),\n ...(classifiedDevice !== undefined ? { deviceClass: classifiedDevice } : {}),\n }\n}\n","import type { AnalyticsEventMap, AnalyticsEventName } from './events'\n\nexport type EventHandler<E extends AnalyticsEventName> = (payload: AnalyticsEventMap[E]) => void\n\n/** A framework-agnostic typed pub/sub bus (Hydrogen `useAnalytics` shape, minus React). */\nexport interface AnalyticsEmitter {\n subscribe<E extends AnalyticsEventName>(event: E, handler: EventHandler<E>): () => void\n publish<E extends AnalyticsEventName>(event: E, payload: AnalyticsEventMap[E]): void\n}\n\nexport function createAnalyticsEmitter(): AnalyticsEmitter {\n const handlers = new Map<AnalyticsEventName, Set<(payload: unknown) => void>>()\n return {\n subscribe(event, handler) {\n const set = handlers.get(event) ?? new Set<(payload: unknown) => void>()\n const erased = handler as (payload: unknown) => void\n set.add(erased)\n handlers.set(event, set)\n return () => {\n set.delete(erased)\n }\n },\n publish(event, payload) {\n const set = handlers.get(event)\n if (set === undefined) return\n // Snapshot so a handler unsubscribing mid-dispatch doesn't skip a sibling.\n for (const handler of [...set]) {\n try {\n handler(payload)\n } catch {\n // Isolate: a throwing subscriber must not break sibling handlers or the downstream pixel send.\n }\n }\n },\n }\n}\n","import type { AnonymousAnalyticsContext } from './anonymous-context'\nimport type { ConsentState } from './consent'\nimport { createAnalyticsEmitter, type AnalyticsEmitter } from './emitter'\nimport type { AnalyticsContext, AnalyticsEventMap, AnalyticsEventName } from './events'\nimport type { PixelTransport } from './pixel-transport'\n\nexport interface AnalyticsBusOptions {\n readonly transport: PixelTransport\n /** Legacy consent seam retained for API compatibility while Storefront consent UI is disabled. */\n readonly getConsent: () => ConsentState\n /** Ambient context (including attribution and device class) attached to consented events. */\n readonly getContext?: () => AnalyticsContext\n /** Sanitized same-origin page URL used only for the anonymous page-view fallback. */\n readonly getAnonymousContext?: () => AnonymousAnalyticsContext\n /** Clock seam for deterministic timestamps in tests. */\n readonly now?: () => string\n}\n\nexport interface AnalyticsBus {\n readonly emitter: AnalyticsEmitter\n publish<E extends AnalyticsEventName>(event: E, payload: AnalyticsEventMap[E]): void\n flush(): void\n}\n\n/**\n * Wire the emitter to the pixel. Every published event reaches theme subscribers (via the emitter).\n * First-party recording is consent-strict: denied visits get only an anonymous page_viewed row and\n * never evaluate ambient context, which may read attribution or device-class signals.\n */\nexport function createAnalyticsBus(options: AnalyticsBusOptions): AnalyticsBus {\n const emitter = createAnalyticsEmitter()\n const now = options.now ?? ((): string => new Date().toISOString())\n return {\n emitter,\n publish(event, payload) {\n emitter.publish(event, payload)\n const consented = options.getConsent().analytics === true\n if (consented) {\n const context = options.getContext?.() ?? {}\n options.transport.record({ event, payload, context, timestamp: now(), consent: true })\n return\n }\n if (event === 'page_viewed') {\n options.transport.record({\n event,\n payload: {} as AnalyticsEventMap[typeof event],\n context: options.getAnonymousContext?.() ?? {},\n timestamp: now(),\n consent: false,\n })\n }\n },\n flush() {\n options.transport.flush()\n },\n }\n}\n","import type { PixelEvent } from './events'\n\n/** The actual network send. Injectable so tests don't touch the network. */\nexport type PixelSend = (endpoint: string, body: string) => void\n\nexport interface PixelTransportOptions {\n /** Same-origin carve-out endpoint (default '/api/storefront/pixel') — never cross-origin. */\n readonly endpoint?: string\n readonly batchSize?: number\n /**\n * The actual network send. Required + injected: the browser sender (`sendBeacon`/keepalive `fetch`)\n * is DOM-specific and lives in the React layer, keeping this batching core framework-agnostic and\n * unit-testable with a spy. The provider wires the real sender.\n */\n readonly send: PixelSend\n}\n\nexport interface PixelTransport {\n record(event: PixelEvent): void\n flush(): void\n}\n\nconst DEFAULT_ENDPOINT = '/api/storefront/pixel'\nconst DEFAULT_BATCH_SIZE = 10\n\n/**\n * Batches pixel events and POSTs them to the same-origin carve-out. Flushes on `batchSize` or an\n * explicit `flush()` (the provider flushes on page-hide). The endpoint is same-origin so themes need\n * no CORS and no token is exposed in the browser.\n */\nexport function createPixelTransport(options: PixelTransportOptions): PixelTransport {\n const endpoint = options.endpoint ?? DEFAULT_ENDPOINT\n // SECURITY: the pixel must stay same-origin (no CORS, no token leak). Reject a non-relative or\n // protocol-relative endpoint so a misconfigured theme can't exfiltrate visitor data (e.g. clientIp).\n if (!/^\\/(?!\\/)/.test(endpoint)) {\n throw new Error(`pixel endpoint must be a same-origin path starting with '/'; got: ${endpoint}`)\n }\n const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE\n const send = options.send\n let queue: PixelEvent[] = []\n\n const flush = (): void => {\n if (queue.length === 0) return\n const batch = queue\n queue = []\n send(endpoint, JSON.stringify({ events: batch }))\n }\n\n return {\n record(event) {\n queue.push(event)\n if (queue.length >= batchSize) flush()\n },\n flush,\n }\n}\n"]}
|
|
@@ -77,5 +77,5 @@ function serializeJsonLd(obj) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export { getSeoMeta, serializeJsonLd };
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
81
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-SVMYFYIA.js.map
|
|
81
|
+
//# sourceMappingURL=chunk-SVMYFYIA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/seo/get-seo-meta.ts"],"names":[],"mappings":"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","file":"chunk-MYDKIJRH.js","sourcesContent":["import type {\n Alternate,\n JsonLd,\n OpenGraph,\n RobotsOptions,\n SeoConfig,\n SeoDescriptor,\n TwitterCard,\n} from './types'\n\ninterface MergedSeo {\n title?: string\n titleTemplate?: string\n description?: string\n canonical?: string\n robots?: string | RobotsOptions\n openGraph?: OpenGraph\n twitter?: TwitterCard\n alternates: Alternate[]\n jsonLd: JsonLd[]\n}\n\n/**\n * Merge SEO config across levels. Scalars: last defined wins. `openGraph`/`twitter`: shallow per-field\n * merge (a route overrides `openGraph.images` without dropping `openGraph.title`). `alternates`:\n * deduped by hreflang (last wins). `jsonLd`: accumulated (a page carries Organization + Product + …).\n */\nfunction mergeConfigs(configs: readonly SeoConfig[]): MergedSeo {\n const merged: MergedSeo = { alternates: [], jsonLd: [] }\n const byHreflang = new Map<string, Alternate>()\n for (const c of configs) {\n if (c.title != null) merged.title = c.title\n if (c.titleTemplate !== undefined) merged.titleTemplate = c.titleTemplate\n if (c.description != null) merged.description = c.description\n if (c.canonical != null) merged.canonical = c.canonical\n if (c.robots !== undefined) merged.robots = c.robots\n if (c.openGraph) merged.openGraph = { ...merged.openGraph, ...c.openGraph }\n if (c.twitter) merged.twitter = { ...merged.twitter, ...c.twitter }\n if (c.alternates) for (const a of c.alternates) byHreflang.set(a.hreflang, a)\n if (c.jsonLd) merged.jsonLd.push(...(Array.isArray(c.jsonLd) ? c.jsonLd : [c.jsonLd]))\n }\n merged.alternates = [...byHreflang.values()]\n return merged\n}\n\nfunction applyTemplate(title: string, template: string | undefined): string {\n return template !== undefined ? template.replace('%s', title) : title\n}\n\nfunction robotsContent(robots: string | RobotsOptions): string {\n if (typeof robots === 'string') return robots\n return [\n robots.noIndex === true ? 'noindex' : 'index',\n robots.noFollow === true ? 'nofollow' : 'follow',\n ].join(',')\n}\n\nfunction emitOpenGraph(\n out: SeoDescriptor[],\n og: OpenGraph | undefined,\n fallbackTitle: string | undefined,\n fallbackDescription: string | undefined,\n): void {\n const title = og?.title ?? fallbackTitle\n const description = og?.description ?? fallbackDescription\n if (title === undefined && description === undefined && og === undefined) return\n if (title !== undefined) out.push({ property: 'og:title', content: title })\n if (description !== undefined) out.push({ property: 'og:description', content: description })\n out.push({ property: 'og:type', content: og?.type ?? 'website' })\n if (og?.url !== undefined) out.push({ property: 'og:url', content: og.url })\n if (og?.siteName !== undefined) out.push({ property: 'og:site_name', content: og.siteName })\n if (og?.locale !== undefined) out.push({ property: 'og:locale', content: og.locale })\n for (const img of og?.images ?? []) {\n out.push({ property: 'og:image', content: img.url })\n if (img.width !== undefined)\n out.push({ property: 'og:image:width', content: String(img.width) })\n if (img.height !== undefined)\n out.push({ property: 'og:image:height', content: String(img.height) })\n if (img.alt !== undefined) out.push({ property: 'og:image:alt', content: img.alt })\n }\n}\n\nfunction emitTwitter(\n out: SeoDescriptor[],\n twitter: TwitterCard | undefined,\n fallbackTitle: string | undefined,\n fallbackDescription: string | undefined,\n): void {\n if (twitter === undefined) return\n out.push({ name: 'twitter:card', content: twitter.card ?? 'summary_large_image' })\n const title = twitter.title ?? fallbackTitle\n const description = twitter.description ?? fallbackDescription\n if (title !== undefined) out.push({ name: 'twitter:title', content: title })\n if (description !== undefined) out.push({ name: 'twitter:description', content: description })\n if (twitter.site !== undefined) out.push({ name: 'twitter:site', content: twitter.site })\n if (twitter.creator !== undefined) out.push({ name: 'twitter:creator', content: twitter.creator })\n if (twitter.image !== undefined) out.push({ name: 'twitter:image', content: twitter.image })\n}\n\n/**\n * Merge SEO config across levels and emit a flat, deduplicated descriptor list (RR7 `meta`-compatible):\n * title, description, canonical, robots, Open Graph, Twitter Card, hreflang alternates, and JSON-LD.\n * Open Graph / Twitter titles + descriptions fall back to the page title/description (Hydrogen-shaped).\n */\nexport function getSeoMeta(...configs: SeoConfig[]): SeoDescriptor[] {\n const m = mergeConfigs(configs)\n const out: SeoDescriptor[] = []\n const title = m.title !== undefined ? applyTemplate(m.title, m.titleTemplate) : undefined\n\n if (title !== undefined) out.push({ title })\n if (m.description !== undefined) out.push({ name: 'description', content: m.description })\n if (m.canonical !== undefined) out.push({ tagName: 'link', rel: 'canonical', href: m.canonical })\n if (m.robots !== undefined) out.push({ name: 'robots', content: robotsContent(m.robots) })\n emitOpenGraph(out, m.openGraph, title, m.description)\n emitTwitter(out, m.twitter, title, m.description)\n for (const a of m.alternates) {\n out.push({ tagName: 'link', rel: 'alternate', href: a.href, hrefLang: a.hreflang })\n }\n for (const obj of m.jsonLd) out.push({ 'script:ld+json': obj })\n return out\n}\n\n/**\n * Serialize a JSON-LD object for inline `<script>` injection. Escapes `<` to `<` so a value\n * containing `</script>` cannot break out of the script element (XSS guard). Use in any hand-rolled\n * renderer; the `<Seo/>` component uses this.\n */\nexport function serializeJsonLd(obj: JsonLd): string {\n return JSON.stringify(obj).replace(/</g, '\\\\u003c')\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/seo/get-seo-meta.ts"],"names":[],"mappings":"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","file":"chunk-SVMYFYIA.js","sourcesContent":["import type {\n Alternate,\n JsonLd,\n OpenGraph,\n RobotsOptions,\n SeoConfig,\n SeoDescriptor,\n TwitterCard,\n} from './types'\n\ninterface MergedSeo {\n title?: string\n titleTemplate?: string\n description?: string\n canonical?: string\n robots?: string | RobotsOptions\n openGraph?: OpenGraph\n twitter?: TwitterCard\n alternates: Alternate[]\n jsonLd: JsonLd[]\n}\n\n/**\n * Merge SEO config across levels. Scalars: last defined wins. `openGraph`/`twitter`: shallow per-field\n * merge (a route overrides `openGraph.images` without dropping `openGraph.title`). `alternates`:\n * deduped by hreflang (last wins). `jsonLd`: accumulated (a page carries Organization + Product + …).\n */\nfunction mergeConfigs(configs: readonly SeoConfig[]): MergedSeo {\n const merged: MergedSeo = { alternates: [], jsonLd: [] }\n const byHreflang = new Map<string, Alternate>()\n for (const c of configs) {\n if (c.title != null) merged.title = c.title\n if (c.titleTemplate !== undefined) merged.titleTemplate = c.titleTemplate\n if (c.description != null) merged.description = c.description\n if (c.canonical != null) merged.canonical = c.canonical\n if (c.robots !== undefined) merged.robots = c.robots\n if (c.openGraph) merged.openGraph = { ...merged.openGraph, ...c.openGraph }\n if (c.twitter) merged.twitter = { ...merged.twitter, ...c.twitter }\n if (c.alternates) for (const a of c.alternates) byHreflang.set(a.hreflang, a)\n if (c.jsonLd) merged.jsonLd.push(...(Array.isArray(c.jsonLd) ? c.jsonLd : [c.jsonLd]))\n }\n merged.alternates = [...byHreflang.values()]\n return merged\n}\n\nfunction applyTemplate(title: string, template: string | undefined): string {\n return template !== undefined ? template.replace('%s', title) : title\n}\n\nfunction robotsContent(robots: string | RobotsOptions): string {\n if (typeof robots === 'string') return robots\n return [\n robots.noIndex === true ? 'noindex' : 'index',\n robots.noFollow === true ? 'nofollow' : 'follow',\n ].join(',')\n}\n\nfunction emitOpenGraph(\n out: SeoDescriptor[],\n og: OpenGraph | undefined,\n fallbackTitle: string | undefined,\n fallbackDescription: string | undefined,\n): void {\n const title = og?.title ?? fallbackTitle\n const description = og?.description ?? fallbackDescription\n if (title === undefined && description === undefined && og === undefined) return\n if (title !== undefined) out.push({ property: 'og:title', content: title })\n if (description !== undefined) out.push({ property: 'og:description', content: description })\n out.push({ property: 'og:type', content: og?.type ?? 'website' })\n if (og?.url !== undefined) out.push({ property: 'og:url', content: og.url })\n if (og?.siteName !== undefined) out.push({ property: 'og:site_name', content: og.siteName })\n if (og?.locale !== undefined) out.push({ property: 'og:locale', content: og.locale })\n for (const img of og?.images ?? []) {\n out.push({ property: 'og:image', content: img.url })\n if (img.width !== undefined)\n out.push({ property: 'og:image:width', content: String(img.width) })\n if (img.height !== undefined)\n out.push({ property: 'og:image:height', content: String(img.height) })\n if (img.alt !== undefined) out.push({ property: 'og:image:alt', content: img.alt })\n }\n}\n\nfunction emitTwitter(\n out: SeoDescriptor[],\n twitter: TwitterCard | undefined,\n fallbackTitle: string | undefined,\n fallbackDescription: string | undefined,\n): void {\n if (twitter === undefined) return\n out.push({ name: 'twitter:card', content: twitter.card ?? 'summary_large_image' })\n const title = twitter.title ?? fallbackTitle\n const description = twitter.description ?? fallbackDescription\n if (title !== undefined) out.push({ name: 'twitter:title', content: title })\n if (description !== undefined) out.push({ name: 'twitter:description', content: description })\n if (twitter.site !== undefined) out.push({ name: 'twitter:site', content: twitter.site })\n if (twitter.creator !== undefined) out.push({ name: 'twitter:creator', content: twitter.creator })\n if (twitter.image !== undefined) out.push({ name: 'twitter:image', content: twitter.image })\n}\n\n/**\n * Merge SEO config across levels and emit a flat, deduplicated descriptor list (RR8 `meta`-compatible):\n * title, description, canonical, robots, Open Graph, Twitter Card, hreflang alternates, and JSON-LD.\n * Open Graph / Twitter titles + descriptions fall back to the page title/description (Hydrogen-shaped).\n */\nexport function getSeoMeta(...configs: SeoConfig[]): SeoDescriptor[] {\n const m = mergeConfigs(configs)\n const out: SeoDescriptor[] = []\n const title = m.title !== undefined ? applyTemplate(m.title, m.titleTemplate) : undefined\n\n if (title !== undefined) out.push({ title })\n if (m.description !== undefined) out.push({ name: 'description', content: m.description })\n if (m.canonical !== undefined) out.push({ tagName: 'link', rel: 'canonical', href: m.canonical })\n if (m.robots !== undefined) out.push({ name: 'robots', content: robotsContent(m.robots) })\n emitOpenGraph(out, m.openGraph, title, m.description)\n emitTwitter(out, m.twitter, title, m.description)\n for (const a of m.alternates) {\n out.push({ tagName: 'link', rel: 'alternate', href: a.href, hrefLang: a.hreflang })\n }\n for (const obj of m.jsonLd) out.push({ 'script:ld+json': obj })\n return out\n}\n\n/**\n * Serialize a JSON-LD object for inline `<script>` injection. Escapes `<` to `<` so a value\n * containing `</script>` cannot break out of the script element (XSS guard). Use in any hand-rolled\n * renderer; the `<Seo/>` component uses this.\n */\nexport function serializeJsonLd(obj: JsonLd): string {\n return JSON.stringify(obj).replace(/</g, '\\\\u003c')\n}\n"]}
|
|
@@ -211,6 +211,24 @@ function createThemeSettingsStore(initial) {
|
|
|
211
211
|
};
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
// src/settings/reconcile-synthetic.ts
|
|
215
|
+
function reconcileSyntheticSectionGroup(current, stored) {
|
|
216
|
+
if (stored === null || stored === void 0) return current;
|
|
217
|
+
const storedById = new Map(stored.sections.map((section) => [section.id, section]));
|
|
218
|
+
return {
|
|
219
|
+
shopId: stored.shopId,
|
|
220
|
+
sections: current.sections.map((section) => {
|
|
221
|
+
const saved = storedById.get(section.id);
|
|
222
|
+
if (saved === void 0 || saved.type !== section.type) return section;
|
|
223
|
+
return {
|
|
224
|
+
...section,
|
|
225
|
+
...saved,
|
|
226
|
+
settings: { ...section.settings, ...saved.settings }
|
|
227
|
+
};
|
|
228
|
+
})
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export { createThemeSettingsStore, mergeSection, mergeSettings, reconcileSyntheticSectionGroup, resolveThemeSettings };
|
|
233
|
+
//# sourceMappingURL=chunk-VOTBNOWH.js.map
|
|
234
|
+
//# sourceMappingURL=chunk-VOTBNOWH.js.map
|