@kotao/storefront 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +50 -2
  2. package/dist/bridge-ZKbKqgFd.d.ts +239 -0
  3. package/dist/cart-documents-BLavRDiu.d.ts +89 -0
  4. package/dist/cart-documents.d.ts +1 -2
  5. package/dist/cart-documents.js +1 -1
  6. package/dist/{chunk-M7BPQ54D.js → chunk-2MRB6SMP.js} +4 -3
  7. package/dist/chunk-2MRB6SMP.js.map +1 -0
  8. package/dist/chunk-CKGI3Y7L.js +19 -0
  9. package/dist/chunk-CKGI3Y7L.js.map +1 -0
  10. package/dist/{chunk-GGOZELAA.js → chunk-EG34HLSX.js} +209 -162
  11. package/dist/chunk-EG34HLSX.js.map +1 -0
  12. package/dist/chunk-O6YZEY7X.js +1382 -0
  13. package/dist/chunk-O6YZEY7X.js.map +1 -0
  14. package/dist/{chunk-MCIFKJQK.js → chunk-R4N565GX.js} +5 -2
  15. package/dist/chunk-R4N565GX.js.map +1 -0
  16. package/dist/{chunk-XMTWFJCZ.js → chunk-RFM27BKZ.js} +31 -7
  17. package/dist/chunk-RFM27BKZ.js.map +1 -0
  18. package/dist/{chunk-MYDKIJRH.js → chunk-SVMYFYIA.js} +2 -2
  19. package/dist/{chunk-MYDKIJRH.js.map → chunk-SVMYFYIA.js.map} +1 -1
  20. package/dist/{chunk-H3D7BAOL.js → chunk-VOTBNOWH.js} +21 -3
  21. package/dist/chunk-VOTBNOWH.js.map +1 -0
  22. package/dist/{chunk-PXVDVUFX.js → chunk-W74FGUZH.js} +10 -3
  23. package/dist/chunk-W74FGUZH.js.map +1 -0
  24. package/dist/{chunk-2IWNUDSZ.js → chunk-WNXI3MPM.js} +2 -2
  25. package/dist/chunk-WNXI3MPM.js.map +1 -0
  26. package/dist/chunk-XXNCFWXT.js +2118 -0
  27. package/dist/chunk-XXNCFWXT.js.map +1 -0
  28. package/dist/{client-bsiNPHBi.d.ts → client-CwOPPpFF.d.ts} +11 -1
  29. package/dist/{createCartHandler-C4RrPwSG.d.ts → createCartHandler-7DdKB-GF.d.ts} +1 -1
  30. package/dist/custom-css-Bl7Ur3-H.d.ts +6 -0
  31. package/dist/editor.d.ts +57 -104
  32. package/dist/editor.js +270 -1
  33. package/dist/editor.js.map +1 -1
  34. package/dist/events-react.d.ts +1 -1
  35. package/dist/events-react.js +1 -1
  36. package/dist/events.d.ts +3 -3
  37. package/dist/events.js +1 -1
  38. package/dist/{fetch-M3Y-fQrW.d.ts → fetch-Bq_cc8_G.d.ts} +5 -0
  39. package/dist/hydrogen-Bu7k0kE4.d.ts +259 -0
  40. package/dist/index.d.ts +74 -51
  41. package/dist/index.js +19 -15
  42. package/dist/index.js.map +1 -1
  43. package/dist/react-router.d.ts +30 -9
  44. package/dist/react-router.js +16 -7
  45. package/dist/react-router.js.map +1 -1
  46. package/dist/react.d.ts +79 -11
  47. package/dist/react.js +279 -10
  48. package/dist/react.js.map +1 -1
  49. package/dist/{routing-sEonP93J.d.ts → routing-Bz3Cg0BW.d.ts} +36 -6
  50. package/dist/seo.d.ts +7 -4
  51. package/dist/seo.js +2 -2
  52. package/dist/settings.d.ts +14 -4
  53. package/dist/settings.js +2 -2
  54. package/dist/{shop-BJSvtmnV.d.ts → shop-CnrnSAJw.d.ts} +33 -6
  55. package/dist/{store-CtCWHI8H.d.ts → store-DO08fzJi.d.ts} +1 -1
  56. package/dist/storefront-api-types.d.ts +12 -0
  57. package/dist/{types-BDhHWZsP.d.ts → types-BkY0yET-.d.ts} +3 -3
  58. package/dist/{types-bcbQzx87.d.ts → types-DZX8ScsJ.d.ts} +2 -0
  59. package/package.json +4 -4
  60. package/dist/cart-documents-CwwRTvm8.d.ts +0 -21
  61. package/dist/chunk-2IWNUDSZ.js.map +0 -1
  62. package/dist/chunk-GGOZELAA.js.map +0 -1
  63. package/dist/chunk-H3D7BAOL.js.map +0 -1
  64. package/dist/chunk-M7BPQ54D.js.map +0 -1
  65. package/dist/chunk-MCIFKJQK.js.map +0 -1
  66. package/dist/chunk-PXVDVUFX.js.map +0 -1
  67. package/dist/chunk-PXZ737N3.js +0 -439
  68. package/dist/chunk-PXZ737N3.js.map +0 -1
  69. 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-O6YZEY7X.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'\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 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 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 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 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 dispose(): void\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 onReady?: (ready: StorefrontEditorReady) => 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: '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: '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\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 '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 '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.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.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 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\nfunction htmlAttribute(value: string): string {\n return value.replaceAll('&', '&amp;').replaceAll('\"', '&quot;').replaceAll('<', '&lt;')\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 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 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\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 hoveredElement = setElementState('hovered', sectionId)\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 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 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 (hoveredElement === null) return\n const nextElement = sectionElementFromTarget(event.relatedTarget)\n if (nextElement === hoveredElement || hoveredElement.contains(event.relatedTarget)) return\n hoveredBlockElement?.removeAttribute('data-kotao-editor-block-hovered')\n hoveredBlockElement = null\n setHovered(null)\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 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 dispose() {\n setHovered(null)\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 resolvedDocument = editorDocument ?? defaultEditorDocument()\n const affordances =\n resolvedDocument === undefined\n ? null\n : createEditorAffordances({\n document: resolvedDocument,\n labelForBlock,\n labelForSection,\n onCanvasAction: postCanvasAction,\n onHoverSection: postHoverSection,\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 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 onMessage = (event: StorefrontEditorMessageEvent): void => {\n if (event.origin !== adminOrigin) return\n if (event.source !== undefined && event.source !== null && 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 'section.hover':\n affordances?.setHovered(message.sectionId)\n break\n case 'section.activate':\n affordances?.setSelected(message.sectionId, message.blockId)\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 replaceAppExtensionPreviewFrames(resolvedDocument, [])\n affordances?.dispose()\n transport.removeEventListener('message', onMessage)\n },\n }\n}\n\nexport function createStorefrontEditorHostBridge({\n onCanvasAction,\n onHoverSection,\n onReady,\n onSelectSection,\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 if (event.source !== undefined && event.source !== null && event.source !== currentTarget())\n return\n const ready = parsePreviewReady(event.data, shopId)\n if (ready !== null) {\n onReady?.({\n sections: ready.sections,\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 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 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"]}
@@ -84,6 +84,9 @@ function createEventsClient(input) {
84
84
  return await response.json();
85
85
  }
86
86
  const client = {
87
+ async listEvents() {
88
+ return (await get("/events")).events;
89
+ },
87
90
  getEvent: (handle) => get(`/events/${resource(handle)}`),
88
91
  createCheckoutSession: (handle, body, idempotencyKey) => post(
89
92
  `/events/${resource(handle)}/checkout-sessions`,
@@ -141,5 +144,5 @@ function createEventsClient(input) {
141
144
  }
142
145
 
143
146
  export { StorefrontEventsRequestError, createEventsClient, normalizeStorefrontHeaders };
144
- //# sourceMappingURL=chunk-MCIFKJQK.js.map
145
- //# sourceMappingURL=chunk-MCIFKJQK.js.map
147
+ //# sourceMappingURL=chunk-R4N565GX.js.map
148
+ //# sourceMappingURL=chunk-R4N565GX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/http-types.ts","../src/events/client.ts"],"names":[],"mappings":"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","file":"chunk-R4N565GX.js","sourcesContent":["/** Structural Headers-compatible value without depending on an ambient `HeadersInit` alias. */\nexport interface StorefrontHeadersLike {\n forEach(callback: (value: string, key: string) => void): void\n}\n\n/**\n * Header input accepted by storefront clients. This preserves the iterable and record shapes\n * accepted by the Web Headers constructor while remaining portable to Node-only declarations.\n */\nexport type StorefrontHeadersInit =\n | StorefrontHeadersLike\n | Iterable<Iterable<string>>\n | Record<string, string>\n\nfunction isHeadersLike(input: StorefrontHeadersInit): input is StorefrontHeadersLike {\n return 'forEach' in input && typeof input.forEach === 'function'\n}\n\nfunction isIterableHeaders(input: StorefrontHeadersInit): input is Iterable<Iterable<string>> {\n return Symbol.iterator in input && typeof input[Symbol.iterator] === 'function'\n}\n\nexport function normalizeStorefrontHeaders(input?: StorefrontHeadersInit): Headers {\n const headers = new Headers()\n if (input === undefined) return headers\n\n if (isIterableHeaders(input)) {\n for (const entry of input) {\n const pair = [...entry]\n if (pair.length !== 2) throw new TypeError('header entry must contain exactly two items')\n headers.append(pair[0]!, pair[1]!)\n }\n return headers\n }\n if (isHeadersLike(input)) {\n input.forEach((value, key) => headers.append(key, value))\n return headers\n }\n for (const [key, value] of Object.entries(input)) headers.append(key, value)\n return headers\n}\n","import type {\n ClaimEventApprovalOffer,\n CreateEventApprovalRequest,\n CreateEventCheckoutSession,\n CreateEventWaitlistEntry,\n EventApprovalOfferResolution,\n EventApprovalRequestReceipt,\n EventCheckoutSession,\n EventRegistrationResult,\n EventRegistrationSubmission,\n EventWaitlistReceipt,\n PublicEvent,\n PublicEventSummary,\n} from './types'\nimport { normalizeStorefrontHeaders, type StorefrontHeadersInit } from '../http-types'\n\nexport interface EventsClient {\n listEvents(): Promise<readonly PublicEventSummary[]>\n getEvent(handle: string): Promise<PublicEvent>\n createCheckoutSession(\n handle: string,\n input: CreateEventCheckoutSession,\n idempotencyKey: string,\n ): Promise<EventCheckoutSession>\n submitApplication(\n handle: string,\n input: CreateEventApprovalRequest,\n idempotencyKey: string,\n ): Promise<EventApprovalRequestReceipt>\n joinWaitlist(handle: string, input: CreateEventWaitlistEntry): Promise<EventWaitlistReceipt>\n submitRegistration(input: EventRegistrationSubmission): Promise<EventRegistrationResult>\n resolveOffer(\n offerId: string,\n claimToken: string,\n idempotencyKey?: string,\n ): Promise<EventApprovalOfferResolution>\n claimOffer(\n offerId: string,\n input: ClaimEventApprovalOffer,\n idempotencyKey: string,\n ): Promise<EventCheckoutSession>\n}\n\nexport class StorefrontEventsRequestError extends Error {\n readonly status: number\n\n constructor(status: number) {\n super(`Events request failed with status ${status}`)\n this.name = 'StorefrontEventsRequestError'\n this.status = status\n }\n}\n\ninterface EventApprovalClaimResult {\n readonly checkoutSession: EventCheckoutSession\n}\n\ninterface PublicEventList {\n readonly events: readonly PublicEventSummary[]\n}\n\nfunction cleanBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim().replace(/\\/+$/u, '')\n if (trimmed === '' || /[?#]/u.test(trimmed)) {\n throw new Error('Events base URL must not contain a query string or fragment')\n }\n return trimmed\n}\n\nfunction resource(value: string): string {\n return encodeURIComponent(value)\n}\n\nfunction requestHeaders(defaultHeaders: Headers, idempotencyKey?: string): Headers {\n const headers = new Headers(defaultHeaders)\n headers.set('content-type', 'application/json')\n if (idempotencyKey !== undefined) headers.set('idempotency-key', idempotencyKey)\n return headers\n}\n\nfunction resolutionIdempotencyKey(): string {\n return `events-resolve-${Date.now()}-${Math.random().toString(36).slice(2)}`\n}\n\nexport function createEventsClient(input: {\n readonly baseUrl: string\n readonly fetch: typeof globalThis.fetch\n readonly defaultHeaders?: StorefrontHeadersInit\n}): EventsClient {\n const baseUrl = cleanBaseUrl(input.baseUrl)\n const defaultHeaders = normalizeStorefrontHeaders(input.defaultHeaders)\n const fetcher = input.fetch.bind(globalThis)\n\n async function get<T>(path: string): Promise<T> {\n const headers = new Headers(defaultHeaders)\n headers.delete('content-type')\n const requestInit = {\n method: 'GET',\n headers,\n credentials: 'include',\n cache: 'no-store',\n referrerPolicy: 'no-referrer',\n } as RequestInit\n const response = await fetcher(`${baseUrl}${path}`, requestInit)\n if (!response.ok) throw new StorefrontEventsRequestError(response.status)\n return (await response.json()) as T\n }\n\n async function post<T>(path: string, body: unknown, idempotencyKey?: string): Promise<T> {\n const requestInit = {\n method: 'POST',\n headers: requestHeaders(defaultHeaders, idempotencyKey),\n credentials: 'include',\n cache: 'no-store',\n referrerPolicy: 'no-referrer',\n body: JSON.stringify(body),\n } as RequestInit\n const response = await fetcher(`${baseUrl}${path}`, requestInit)\n if (!response.ok) throw new StorefrontEventsRequestError(response.status)\n return (await response.json()) as T\n }\n\n const client: EventsClient = {\n async listEvents() {\n return (await get<PublicEventList>('/events')).events\n },\n getEvent: (handle) => get<PublicEvent>(`/events/${resource(handle)}`),\n createCheckoutSession: (handle, body, idempotencyKey) =>\n post<EventCheckoutSession>(\n `/events/${resource(handle)}/checkout-sessions`,\n body,\n idempotencyKey,\n ),\n submitApplication: (handle, body, idempotencyKey) =>\n post<EventApprovalRequestReceipt>(\n `/events/${resource(handle)}/approval-requests`,\n body,\n idempotencyKey,\n ),\n joinWaitlist: (handle, body) =>\n post<EventWaitlistReceipt>(`/events/${resource(handle)}/waitlist`, body),\n async submitRegistration(submission) {\n switch (submission.registrationMode) {\n case 'instant':\n return {\n kind: 'checkout',\n checkoutSession: await client.createCheckoutSession(\n submission.handle,\n submission.input,\n submission.idempotencyKey,\n ),\n }\n case 'approval_then_payment':\n return {\n kind: 'approval',\n receipt: await client.submitApplication(\n submission.handle,\n submission.input,\n submission.idempotencyKey,\n ),\n }\n case 'waitlist_only':\n return {\n kind: 'waitlist',\n receipt: await client.joinWaitlist(submission.handle, submission.input),\n }\n }\n },\n resolveOffer: (offerId, claimToken, idempotencyKey) =>\n post<EventApprovalOfferResolution>(\n `/events/approval-offers/${resource(offerId)}/resolve`,\n { claimToken },\n idempotencyKey ?? resolutionIdempotencyKey(),\n ),\n async claimOffer(offerId, body, idempotencyKey) {\n const claimed = await post<EventApprovalClaimResult>(\n `/events/approval-offers/${resource(offerId)}/claim`,\n body,\n idempotencyKey,\n )\n return claimed.checkoutSession\n },\n }\n return client\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { CART_FORM_ACTIONS, isGranted } from './chunk-OGWYTYYS.js';
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 = isGranted(options.getConsent(), "analytics");
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-XMTWFJCZ.js.map
138
- //# sourceMappingURL=chunk-XMTWFJCZ.js.map
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-MYDKIJRH.js.map
81
- //# sourceMappingURL=chunk-MYDKIJRH.js.map
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
- export { createThemeSettingsStore, mergeSection, mergeSettings, resolveThemeSettings };
215
- //# sourceMappingURL=chunk-H3D7BAOL.js.map
216
- //# sourceMappingURL=chunk-H3D7BAOL.js.map
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