@servicetitan/dte-unlayer 0.153.0 → 0.154.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { logUnlayerError } from './log';\nimport { defaultImageValidation } from './shared/configs';\nimport type { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerSupportedFonts } from './shared/fonts';\nimport {\n FormFieldInfo,\n FormInfo,\n getFormFieldSampleValue,\n parseFormFieldKey,\n} from './shared/forms';\nimport { schemaBuildMap, schemaIsDate } from './shared/schema';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport { CreateUnlayerEditorProps, UnlayerDesignFormat, UnlayerRef } from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\nconst UNLAYER_TOOLS_READY_TIMEOUT_MS = 30000;\n\nconst normalizeFontToken = (font: string) =>\n font.replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n\nconst getDesignFontTokens = (value: any, out: Set<string>) => {\n if (!value || typeof value !== 'object') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n getDesignFontTokens(item, out);\n }\n\n return;\n }\n\n for (const [key, fieldValue] of Object.entries(value)) {\n if (key === 'fontFamily') {\n if (typeof fieldValue === 'string') {\n out.add(normalizeFontToken(fieldValue));\n } else if (fieldValue && typeof fieldValue === 'object') {\n const fontFamilyValue = fieldValue as { label?: string; value?: string };\n\n if (typeof fontFamilyValue.label === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.label));\n }\n\n if (typeof fontFamilyValue.value === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.value));\n }\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n getDesignFontTokens(fieldValue, out);\n }\n }\n};\n\nconst ensureChunksFonts = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n data.chunks ??= {};\n\n const existingFonts: any[] = Array.isArray(data.chunks.fonts) ? data.chunks.fonts : [];\n const existingLabels = new Set(existingFonts.map((f: any) => f.label));\n\n const usedFontTokens = new Set<string>();\n getDesignFontTokens(data.design, usedFontTokens);\n\n const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';\n\n for (const font of unlayerSupportedFonts) {\n const labelToken = normalizeFontToken(font.label);\n const valueToken = normalizeFontToken(font.value);\n const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);\n const isUsedInHtml = [labelToken, valueToken].some(token => html.includes(token));\n\n if ((isUsedInDesign || isUsedInHtml) && !existingLabels.has(font.label)) {\n existingFonts.push(font);\n existingLabels.add(font.label);\n }\n }\n\n data.chunks.fonts = existingFonts;\n return data;\n};\n\nconst FORM_FIELD_DATA_POINT_PREFIX = 'FORM_FIELD_';\n\nconst getByPath = (data: unknown, path: string): unknown => {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[part];\n }, data);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst deepMerge = (...sources: unknown[]): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n\n for (const source of sources) {\n if (!isPlainObject(source)) {\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (isPlainObject(value) && isPlainObject(out[key])) {\n out[key] = deepMerge(out[key], value);\n } else {\n out[key] = value;\n }\n }\n }\n\n return out;\n};\n\nconst setByPath = (target: Record<string, unknown>, path: string, value: unknown) => {\n const parts = path.split('.');\n if (!parts.length) {\n return;\n }\n\n let node: Record<string, unknown> = target;\n\n for (let i = 0; i < parts.length - 1; i += 1) {\n const key = parts[i];\n if (!isPlainObject(node[key])) {\n node[key] = {};\n }\n node = node[key] as Record<string, unknown>;\n }\n\n node[parts[parts.length - 1]] = value;\n};\n\nconst tokenizeFormulaFields = (expression: string): string[] => {\n const regex = /[A-Za-z_][A-Za-z0-9_.]*/g;\n return expression.match(regex) ?? [];\n};\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n private readonly schemaDummyData: Record<string, unknown>;\n private readonly dateSchemaFieldKeys: Set<string>;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n private hasCoreLoaded = false;\n private hasToolsRegistered = false;\n private toolsReadyWatchdogId?: number;\n private formFieldsByFormId: Record<number, FormFieldInfo[]> = {};\n private formFieldSamples: Record<string, unknown> = {};\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n const schemaData = this.props.schema ? schemaBuildMap(this.props.schema) : undefined;\n this.schemaDummyData = (schemaData?.dummyData ?? {}) as Record<string, unknown>;\n this.dateSchemaFieldKeys = new Set(\n Object.values(schemaData?.map ?? {})\n .filter(field => field.isValue && schemaIsDate(field.node))\n .map(field => field.fullKey),\n );\n\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n const result = ensureChunksFonts(data);\n result.demoData = this.buildCalculatedFieldDemoData(result.design);\n cb(result);\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n try {\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n if (!(window as any).unlayer) {\n throw new Error('Unlayer embed script loaded but window.unlayer is missing');\n }\n\n this.editor = createUnlayerEditor(container, this.props);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n\n if (!this.iframe) {\n logUnlayerError('Unlayer iframe was not created after createEditor');\n }\n\n this.startToolsReadyWatchdog();\n } catch (error: unknown) {\n this.isInit = false;\n this.clearToolsReadyWatchdog();\n logUnlayerError('Failed to initialize Unlayer editor', error);\n throw error;\n }\n };\n\n destroy = () => {\n this.clearToolsReadyWatchdog();\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.formFieldsByFormId[formId] = fields;\n this.updateFormFieldSamples(formId, fields);\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n private onDesignLoaded = () => {\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.hasToolsRegistered = true;\n this.clearToolsReadyWatchdog();\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n this.hasCoreLoaded = true;\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private updateFormFieldSamples = (formId: number, fields: FormFieldInfo[]) => {\n fields.forEach((field, index) => {\n const normalizedFieldId = String(field.id ?? '').replaceAll('-', '');\n if (!normalizedFieldId) {\n return;\n }\n\n const sampleValue = getFormFieldSampleValue(field, index);\n setByPath(\n this.formFieldSamples,\n `__submission_fields.${formId}.${normalizedFieldId}`,\n sampleValue,\n );\n this.formFieldSamples[`${FORM_FIELD_DATA_POINT_PREFIX}${normalizedFieldId}`] =\n sampleValue;\n });\n };\n\n private collectCalculatedFieldKeys = (design?: UnlayerDesignFormat): Set<string> => {\n const keys = new Set<string>();\n\n if (!design) {\n return keys;\n }\n\n unlayerToolsIterate(design, tool => {\n const calc = tool.values?.calculation;\n if (!calc || typeof calc !== 'object') {\n return;\n }\n\n if (typeof calc.expression === 'string') {\n for (const key of tokenizeFormulaFields(calc.expression)) {\n keys.add(key);\n }\n }\n\n if (calc.fieldLabels && typeof calc.fieldLabels === 'object') {\n Object.keys(calc.fieldLabels).forEach(key => keys.add(key));\n }\n });\n\n return keys;\n };\n\n private resolveDemoValue = (\n key: string,\n fallbackIndex: number,\n sourceData: Record<string, unknown>,\n ): unknown => {\n const parsedFormField = parseFormFieldKey(key);\n if (parsedFormField) {\n const normalizedFieldId = parsedFormField.fieldId;\n const formFields = this.formFieldsByFormId[parsedFormField.formId] ?? [];\n const fieldIndex = formFields.findIndex(\n field => String(field.id ?? '').replaceAll('-', '') === normalizedFieldId,\n );\n const field = fieldIndex >= 0 ? formFields[fieldIndex] : undefined;\n const sample = field\n ? getFormFieldSampleValue(field, fieldIndex)\n : getByPath(\n this.formFieldSamples,\n `__submission_fields.${parsedFormField.formId}.${normalizedFieldId}`,\n );\n\n if (sample !== undefined) {\n return sample;\n }\n\n return this.dateSchemaFieldKeys.has(key) ? '2026-01-15' : 44 + fallbackIndex;\n }\n\n const existing = getByPath(sourceData, key);\n if (existing !== undefined) {\n return existing;\n }\n\n if (this.dateSchemaFieldKeys.has(key)) {\n return '2026-01-15';\n }\n\n return 44 + fallbackIndex;\n };\n\n private buildCalculatedFieldDemoData = (\n design?: UnlayerDesignFormat,\n ): Record<string, unknown> => {\n const demoData: Record<string, unknown> = {};\n const usedKeys = Array.from(this.collectCalculatedFieldKeys(design));\n const sourceData = deepMerge(\n this.schemaDummyData,\n this.props.dummyData,\n this.formFieldSamples,\n );\n\n usedKeys.forEach((key, index) => {\n const value = this.resolveDemoValue(key, index, sourceData);\n setByPath(demoData, key, value);\n });\n\n return demoData;\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n logUnlayerError(`Image validation failed: ${res.title}`, res.description);\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch (error: unknown) {\n logUnlayerError('Image upload failed', error);\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private startToolsReadyWatchdog = () => {\n this.clearToolsReadyWatchdog();\n this.toolsReadyWatchdogId = window.setTimeout(() => {\n if (this.hasToolsRegistered) {\n return;\n }\n\n logUnlayerError(\n 'Unlayer custom tools did not finish loading. customJS may not have run, or tool registration stalled.',\n {\n hasCoreLoaded: this.hasCoreLoaded,\n hasToolsRegistered: this.hasToolsRegistered,\n },\n );\n this.onErrorCB?.(\n 'Editor failed to load custom tools',\n 'Unlayer custom tools did not finish loading. Check the browser console for [dte-unlayer] details.',\n );\n }, UNLAYER_TOOLS_READY_TIMEOUT_MS);\n };\n\n private clearToolsReadyWatchdog = () => {\n if (this.toolsReadyWatchdogId === undefined) {\n return;\n }\n\n window.clearTimeout(this.toolsReadyWatchdogId);\n this.toolsReadyWatchdogId = undefined;\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","logUnlayerError","defaultImageValidation","unlayerSupportedFonts","getFormFieldSampleValue","parseFormFieldKey","schemaBuildMap","schemaIsDate","unlayerToolsParseTwinKey","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","UNLAYER_TOOLS_READY_TIMEOUT_MS","normalizeFontToken","font","replace","split","trim","toLowerCase","getDesignFontTokens","value","out","Array","isArray","item","key","fieldValue","Object","entries","add","fontFamilyValue","label","ensureChunksFonts","data","chunks","existingFonts","fonts","existingLabels","Set","map","f","usedFontTokens","design","html","labelToken","valueToken","isUsedInDesign","has","isUsedInHtml","some","token","includes","push","FORM_FIELD_DATA_POINT_PREFIX","getByPath","path","undefined","reduce","current","part","isPlainObject","deepMerge","sources","source","setByPath","target","parts","length","node","i","tokenizeFormulaFields","expression","regex","match","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","schemaDummyData","dateSchemaFieldKeys","editor","isInit","iframe","hasDesign","hasCoreLoaded","hasToolsRegistered","toolsReadyWatchdogId","formFieldsByFormId","formFieldSamples","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","onDesignLoaded","onDesignUpdated","onPostMessage","updateFormFieldSamples","collectCalculatedFieldKeys","resolveDemoValue","buildCalculatedFieldDemoData","sendMessage","uploadImage","startToolsReadyWatchdog","clearToolsReadyWatchdog","validateImage","container","setTimeout","window","addEventListener","unlayer","Error","registerCallback","querySelector","error","removeEventListener","unregisterCallback","twin","toolTwins","JSON","parse","stringify","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","type","isToolsListChanged","exportHtml","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","usedFormIds","fieldKeys","customTools","tools","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","forEach","field","index","normalizedFieldId","String","replaceAll","sampleValue","keys","calc","calculation","fieldLabels","fallbackIndex","sourceData","parsedFormField","fieldId","formFields","fieldIndex","findIndex","sample","existing","demoData","usedKeys","from","contentWindow","postMessage","done","progress","attachments","file","res","imageValidation","isValid","description","url","clearTimeout","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","schemaData","filter","isValue","fullKey","saveDesign","cb","result"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { loadScript } from './loadScript';\nimport { logUnlayerError } from './log';\nimport { toUnlayerMergeTags, type UnlayerMergeTagsConfig } from './merge-tags';\nimport { defaultImageValidation } from './shared/configs';\nimport type { UnlayerEditorTwin, UnlayerEventConfig, UnlayerEventRegister } from './shared/const';\nimport { unlayerSupportedFonts } from './shared/fonts';\nimport {\n FormFieldInfo,\n FormInfo,\n getFormFieldSampleValue,\n parseFormFieldKey,\n} from './shared/forms';\nimport { schemaBuildMap, schemaIsDate } from './shared/schema';\nimport { unlayerToolsParseTwinKey } from './shared/tools';\nimport { unlayerToolsDedupeInstanceIds, unlayerToolsIterate } from './tools';\nimport {\n createUnlayerEditor,\n DesignUpdatedEventType,\n EventDesignUpdated,\n Unlayer,\n} from './unlayer';\nimport {\n CreateUnlayerEditorProps,\n UnlayerDesignFormat,\n UnlayerEditorMergeTagInfo,\n UnlayerRef,\n} from './unlayer-interface';\n\nconst defaultScriptUrl = 'https://editor.unlayer.com/embed.js?2';\nconst UNLAYER_TOOLS_READY_TIMEOUT_MS = 30000;\n\nconst normalizeFontToken = (font: string) =>\n font.replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n\nconst getDesignFontTokens = (value: any, out: Set<string>) => {\n if (!value || typeof value !== 'object') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n getDesignFontTokens(item, out);\n }\n\n return;\n }\n\n for (const [key, fieldValue] of Object.entries(value)) {\n if (key === 'fontFamily') {\n if (typeof fieldValue === 'string') {\n out.add(normalizeFontToken(fieldValue));\n } else if (fieldValue && typeof fieldValue === 'object') {\n const fontFamilyValue = fieldValue as { label?: string; value?: string };\n\n if (typeof fontFamilyValue.label === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.label));\n }\n\n if (typeof fontFamilyValue.value === 'string') {\n out.add(normalizeFontToken(fontFamilyValue.value));\n }\n }\n }\n\n if (fieldValue && typeof fieldValue === 'object') {\n getDesignFontTokens(fieldValue, out);\n }\n }\n};\n\nconst ensureChunksFonts = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n data.chunks ??= {};\n\n const existingFonts: any[] = Array.isArray(data.chunks.fonts) ? data.chunks.fonts : [];\n const existingLabels = new Set(existingFonts.map((f: any) => f.label));\n\n const usedFontTokens = new Set<string>();\n getDesignFontTokens(data.design, usedFontTokens);\n\n const html = typeof data.html === 'string' ? data.html.toLowerCase() : '';\n\n for (const font of unlayerSupportedFonts) {\n const labelToken = normalizeFontToken(font.label);\n const valueToken = normalizeFontToken(font.value);\n const isUsedInDesign = usedFontTokens.has(labelToken) || usedFontTokens.has(valueToken);\n const isUsedInHtml = [labelToken, valueToken].some(token => html.includes(token));\n\n if ((isUsedInDesign || isUsedInHtml) && !existingLabels.has(font.label)) {\n existingFonts.push(font);\n existingLabels.add(font.label);\n }\n }\n\n data.chunks.fonts = existingFonts;\n return data;\n};\n\nconst FORM_FIELD_DATA_POINT_PREFIX = 'FORM_FIELD_';\n\nconst getByPath = (data: unknown, path: string): unknown => {\n if (!data || typeof data !== 'object') {\n return undefined;\n }\n\n return path.split('.').reduce<unknown>((current, part) => {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[part];\n }, data);\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\n\nconst deepMerge = (...sources: unknown[]): Record<string, unknown> => {\n const out: Record<string, unknown> = {};\n\n for (const source of sources) {\n if (!isPlainObject(source)) {\n continue;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (isPlainObject(value) && isPlainObject(out[key])) {\n out[key] = deepMerge(out[key], value);\n } else {\n out[key] = value;\n }\n }\n }\n\n return out;\n};\n\nconst setByPath = (target: Record<string, unknown>, path: string, value: unknown) => {\n const parts = path.split('.');\n if (!parts.length) {\n return;\n }\n\n let node: Record<string, unknown> = target;\n\n for (let i = 0; i < parts.length - 1; i += 1) {\n const key = parts[i];\n if (!isPlainObject(node[key])) {\n node[key] = {};\n }\n node = node[key] as Record<string, unknown>;\n }\n\n node[parts[parts.length - 1]] = value;\n};\n\nconst tokenizeFormulaFields = (expression: string): string[] => {\n const regex = /[A-Za-z_][A-Za-z0-9_.]*/g;\n return expression.match(regex) ?? [];\n};\n\nexport interface UnlayerDesignChangeInfo {\n isToolsListChanged: boolean;\n}\n\n// We are using exclusive lists here, because we can't be sure that we know all unlayer event types\nconst eventsNotChangingToolsList: DesignUpdatedEventType[] = [\n DesignUpdatedEventType.ContentMoved,\n DesignUpdatedEventType.ContentModified,\n DesignUpdatedEventType.ColumnModified,\n DesignUpdatedEventType.RowMoved,\n DesignUpdatedEventType.RowModified,\n DesignUpdatedEventType.BodyModified,\n];\n\nconst eventsNotAddingTools: DesignUpdatedEventType[] = [\n ...eventsNotChangingToolsList,\n DesignUpdatedEventType.ContentRemoved,\n DesignUpdatedEventType.ColumnRemoved,\n DesignUpdatedEventType.RowRemoved,\n];\n\nexport class UnlayerStore {\n readonly unlayerRef: UnlayerRef;\n private readonly schemaDummyData: Record<string, unknown>;\n private readonly dateSchemaFieldKeys: Set<string>;\n\n private editor: Unlayer | undefined;\n private isInit = false;\n private iframe?: HTMLIFrameElement;\n private hasDesign = false;\n private hasCoreLoaded = false;\n private hasToolsRegistered = false;\n private toolsReadyWatchdogId?: number;\n private formFieldsByFormId: Record<number, FormFieldInfo[]> = {};\n private formFieldSamples: Record<string, unknown> = {};\n private isEditorReady = false;\n private isMergeTagsApplied = false;\n private mergeTagsConfig?: UnlayerMergeTagsConfig;\n\n private onMessageCB?: (type: string, data: any) => void;\n private onChangeCB?: (info: UnlayerDesignChangeInfo) => void;\n private onSnapshotSaveCB?: (snapshot: UnlayerEditorTwin) => void;\n private onReadyCB?: () => void;\n private onImageCB?: (file: File) => Promise<{ url: string }>;\n private onErrorCB?: (title: string, description?: string) => void;\n private onFormSelectCB?: (formId: number) => void;\n private onCalcFieldOpenCB?: (usedFormIds: number[]) => void;\n private onCalcFieldSelectCB?: (fieldKeys: string[]) => void;\n\n constructor(readonly props: CreateUnlayerEditorProps) {\n const schemaData = this.props.schema ? schemaBuildMap(this.props.schema) : undefined;\n this.schemaDummyData = (schemaData?.dummyData ?? {}) as Record<string, unknown>;\n this.dateSchemaFieldKeys = new Set(\n Object.values(schemaData?.map ?? {})\n .filter(field => field.isValue && schemaIsDate(field.node))\n .map(field => field.fullKey),\n );\n\n this.props.eSignFieldTypes = ['Signature', 'Initials', 'Date Signed', 'Full Name'];\n\n this.unlayerRef = {\n loadDesign: design => {\n this.editor?.loadDesign(design);\n },\n saveDesign: cb => {\n this.editor?.saveDesign(cb);\n },\n exportHtml: cb => {\n this.editor?.exportHtml(data => {\n const result = ensureChunksFonts(data);\n result.demoData = this.buildCalculatedFieldDemoData(result.design);\n cb(result);\n });\n },\n sendFormList: forms => {\n this.sendFormList(forms);\n },\n sendFormFields: (formId, fields) => {\n this.sendFormFields(formId, fields);\n },\n sendCalcFieldLabels: labels => {\n this.sendCalcFieldLabels(labels);\n },\n setMergeTags: tags => {\n this.setMergeTags(tags);\n },\n };\n }\n\n init = async (container: HTMLDivElement) => {\n if (this.isInit) {\n return;\n }\n\n this.isInit = true;\n\n try {\n setTimeout(() => window.addEventListener('message', this.onPostMessage));\n\n await loadScript(defaultScriptUrl);\n\n if (!(window as any).unlayer) {\n throw new Error('Unlayer embed script loaded but window.unlayer is missing');\n }\n\n this.editor = createUnlayerEditor(container, this.props);\n // The host may already have pushed a newer set through `setMergeTags`; keep it.\n this.mergeTagsConfig ??= toUnlayerMergeTags(this.props.mergeTags);\n this.editor.addEventListener('editor:ready', this.onEditorReady);\n this.editor.addEventListener('design:loaded', this.onDesignLoaded);\n this.editor.addEventListener('design:updated', this.onDesignUpdated);\n this.editor.registerCallback('image', this.uploadImage);\n\n this.iframe = container.querySelector(`iframe`) ?? undefined;\n\n if (!this.iframe) {\n logUnlayerError('Unlayer iframe was not created after createEditor');\n }\n\n this.startToolsReadyWatchdog();\n } catch (error: unknown) {\n this.isInit = false;\n this.clearToolsReadyWatchdog();\n logUnlayerError('Failed to initialize Unlayer editor', error);\n throw error;\n }\n };\n\n destroy = () => {\n this.clearToolsReadyWatchdog();\n window.removeEventListener('message', this.onPostMessage);\n\n if (this.editor) {\n this.editor.removeEventListener('editor:ready', this.onEditorReady);\n this.editor.removeEventListener('design:loaded', this.onDesignLoaded);\n this.editor.removeEventListener('design:updated', this.onDesignUpdated);\n this.editor.unregisterCallback('image', this.uploadImage);\n\n this.editor = undefined;\n }\n };\n\n addTwin = (twin: UnlayerEditorTwin) => {\n this.props.toolTwins?.push(twin);\n this.sendMessage('--add-twin', JSON.parse(JSON.stringify(twin)));\n };\n\n setDesign = (design?: UnlayerDesignFormat) => {\n if (!this.editor) {\n return;\n }\n\n this.hasDesign = !!design;\n\n if (design) {\n this.editor.loadDesign(design);\n }\n };\n\n setOnChange = (onChange?: UnlayerStore['onChangeCB']) => {\n this.onChangeCB = onChange;\n };\n\n setOnSnapshotSave = (onSnapshotSave?: UnlayerStore['onSnapshotSaveCB']) => {\n this.onSnapshotSaveCB = onSnapshotSave;\n };\n\n setOnReady = (onReady?: UnlayerStore['onReadyCB']) => {\n this.onReadyCB = onReady;\n };\n\n setOnImage = (onImage?: UnlayerStore['onImageCB']) => {\n this.onImageCB = onImage;\n };\n\n setOnError = (onError?: UnlayerStore['onErrorCB']) => {\n this.onErrorCB = onError;\n };\n\n setOnMessage = (onMessage?: UnlayerStore['onMessageCB']) => {\n this.onMessageCB = onMessage;\n };\n\n setOnFormSelect = (onFormSelect?: UnlayerStore['onFormSelectCB']) => {\n this.onFormSelectCB = onFormSelect;\n };\n\n setOnCalcFieldOpen = (onCalcFieldOpen?: UnlayerStore['onCalcFieldOpenCB']) => {\n this.onCalcFieldOpenCB = onCalcFieldOpen;\n };\n\n setOnCalcFieldSelect = (onCalcFieldSelect?: UnlayerStore['onCalcFieldSelectCB']) => {\n this.onCalcFieldSelectCB = onCalcFieldSelect;\n };\n\n sendFormList = (forms: FormInfo[]) => {\n this.sendMessage('--form-list', { forms });\n };\n\n sendFormFields = (formId: number, fields: FormFieldInfo[]) => {\n this.formFieldsByFormId[formId] = fields;\n this.updateFormFieldSamples(formId, fields);\n this.sendMessage('--form-fields', { formId, fields });\n };\n\n sendCalcFieldLabels = (labels: Record<string, string>) => {\n this.sendMessage('--calc-field-labels', { labels });\n };\n\n /**\n * Replaces the editor's merge tag menu. Nested groups passed to `createEditor` stop DTE\n * custom tools from registering, so init only carries the flat shape and the grouped\n * config is applied here once the editor is ready. A call before that (including the\n * initial props) is parked; a later call replaces it. A failed apply is retried on the\n * next `design:loaded`.\n */\n setMergeTags = (tags: UnlayerEditorMergeTagInfo[] | undefined) => {\n this.mergeTagsConfig = toUnlayerMergeTags(tags);\n this.isMergeTagsApplied = false;\n this.applyMergeTags();\n };\n\n private applyMergeTags = () => {\n if (\n !this.editor ||\n !this.isEditorReady ||\n this.isMergeTagsApplied ||\n !this.mergeTagsConfig\n ) {\n return;\n }\n\n try {\n this.editor.setMergeTags(this.mergeTagsConfig);\n this.isMergeTagsApplied = true;\n } catch (error: unknown) {\n logUnlayerError('Failed to apply merge tags', error);\n }\n };\n\n private onEditorReady = () => {\n this.isEditorReady = true;\n this.applyMergeTags();\n };\n\n private onDesignLoaded = () => {\n // A loaded design means the editor is up even if `editor:ready` never reached us.\n this.onEditorReady();\n\n if (!this.hasDesign) {\n this.hasDesign = true;\n this.editor?.setBodyValues({\n backgroundColor: 'rgba(0,0,0,0)',\n contentWidth: '100%',\n });\n }\n };\n\n private onDesignUpdated = (event: EventDesignUpdated) => {\n const isToolAdded = !eventsNotAddingTools.includes(event.type);\n const isToolsListChanged = !eventsNotChangingToolsList.includes(event.type);\n\n if (isToolAdded) {\n this.editor?.exportHtml(data => {\n let hasChanges = false;\n\n unlayerToolsIterate(data.design, tool => {\n const realTool = tool.slug\n ? unlayerToolsParseTwinKey(tool.slug ?? '')\n : undefined;\n\n if (realTool) {\n hasChanges = true;\n\n if (tool.slug) {\n delete data.design.counters[`u_content_custom_${tool.slug}`];\n delete tool.values._meta.htmlID;\n }\n\n tool.type = realTool.type;\n tool.slug = realTool.slug;\n }\n });\n\n // Duplicated contents/rows carry the original's instance GUIDs; give copies new ones.\n if (unlayerToolsDedupeInstanceIds(data.design, event.item?.values?._meta?.htmlID)) {\n hasChanges = true;\n }\n\n if (hasChanges) {\n this.setDesign(data.design);\n }\n\n this.onChangeCB?.({ isToolsListChanged });\n });\n } else {\n this.onChangeCB?.({ isToolsListChanged });\n }\n };\n\n private onPostMessage = (e: MessageEvent) => {\n if (!e.data?.['-dte-message-from']) {\n return;\n }\n\n const type = e.data?.['-dte-message-from']?.type;\n const data = e.data?.['-dte-message-from']?.data;\n\n if (!type) {\n return;\n }\n\n if (type === '--ready' || type === '--registered') {\n this.hasToolsRegistered = true;\n this.clearToolsReadyWatchdog();\n this.onReadyCB?.();\n } else if (type === '--core-loaded') {\n this.hasCoreLoaded = true;\n const configData: UnlayerEventConfig = {\n dummyData: this.props.dummyData,\n schema: this.props.schema,\n generics: this.props.generics,\n genericConfigMode: this.props.genericConfigMode,\n isSnapshotMode: this.props.isSnapshotMode,\n holidays: this.props.holidays,\n };\n\n this.sendMessage('--config', JSON.parse(JSON.stringify(configData)));\n } else if (type === '--form-select') {\n this.onFormSelectCB?.(data?.formId);\n } else if (type === '--calc-field-open') {\n this.onCalcFieldOpenCB?.(data?.usedFormIds ?? []);\n } else if (type === '--calc-field-select') {\n if (this.onCalcFieldSelectCB) {\n this.onCalcFieldSelectCB(data?.fieldKeys ?? []);\n } else {\n this.sendCalcFieldLabels({});\n }\n } else if (type === '--data-loaded') {\n const data: UnlayerEventRegister = {\n customTools: this.props.tools.map(tool => ({ key: tool.key })),\n toolTwins: this.props.toolTwins,\n eSignRecipients: this.props.eSignRecipients,\n eSignFieldTypes: this.props.eSignFieldTypes,\n units: this.props.units?.map(unit => ({\n ...unit,\n values: {\n ...unit.values,\n adminConfig: undefined,\n },\n })),\n };\n\n this.sendMessage('--register', JSON.parse(JSON.stringify(data)));\n } else if (type === '--save-snapshot') {\n this.editor?.exportHtml(template => {\n unlayerToolsIterate(template.design, tool => {\n if (tool.values?.twin?.id === data.id) {\n if (!tool.slug) {\n return;\n }\n\n this.onSnapshotSaveCB?.({\n title: '',\n tool: tool.slug,\n values: tool.values,\n });\n return false;\n }\n });\n });\n }\n\n this.onMessageCB?.(type, data);\n };\n\n private updateFormFieldSamples = (formId: number, fields: FormFieldInfo[]) => {\n fields.forEach((field, index) => {\n const normalizedFieldId = String(field.id ?? '').replaceAll('-', '');\n if (!normalizedFieldId) {\n return;\n }\n\n const sampleValue = getFormFieldSampleValue(field, index);\n setByPath(\n this.formFieldSamples,\n `__submission_fields.${formId}.${normalizedFieldId}`,\n sampleValue,\n );\n this.formFieldSamples[`${FORM_FIELD_DATA_POINT_PREFIX}${normalizedFieldId}`] =\n sampleValue;\n });\n };\n\n private collectCalculatedFieldKeys = (design?: UnlayerDesignFormat): Set<string> => {\n const keys = new Set<string>();\n\n if (!design) {\n return keys;\n }\n\n unlayerToolsIterate(design, tool => {\n const calc = tool.values?.calculation;\n if (!calc || typeof calc !== 'object') {\n return;\n }\n\n if (typeof calc.expression === 'string') {\n for (const key of tokenizeFormulaFields(calc.expression)) {\n keys.add(key);\n }\n }\n\n if (calc.fieldLabels && typeof calc.fieldLabels === 'object') {\n Object.keys(calc.fieldLabels).forEach(key => keys.add(key));\n }\n });\n\n return keys;\n };\n\n private resolveDemoValue = (\n key: string,\n fallbackIndex: number,\n sourceData: Record<string, unknown>,\n ): unknown => {\n const parsedFormField = parseFormFieldKey(key);\n if (parsedFormField) {\n const normalizedFieldId = parsedFormField.fieldId;\n const formFields = this.formFieldsByFormId[parsedFormField.formId] ?? [];\n const fieldIndex = formFields.findIndex(\n field => String(field.id ?? '').replaceAll('-', '') === normalizedFieldId,\n );\n const field = fieldIndex >= 0 ? formFields[fieldIndex] : undefined;\n const sample = field\n ? getFormFieldSampleValue(field, fieldIndex)\n : getByPath(\n this.formFieldSamples,\n `__submission_fields.${parsedFormField.formId}.${normalizedFieldId}`,\n );\n\n if (sample !== undefined) {\n return sample;\n }\n\n return this.dateSchemaFieldKeys.has(key) ? '2026-01-15' : 44 + fallbackIndex;\n }\n\n const existing = getByPath(sourceData, key);\n if (existing !== undefined) {\n return existing;\n }\n\n if (this.dateSchemaFieldKeys.has(key)) {\n return '2026-01-15';\n }\n\n return 44 + fallbackIndex;\n };\n\n private buildCalculatedFieldDemoData = (\n design?: UnlayerDesignFormat,\n ): Record<string, unknown> => {\n const demoData: Record<string, unknown> = {};\n const usedKeys = Array.from(this.collectCalculatedFieldKeys(design));\n const sourceData = deepMerge(\n this.schemaDummyData,\n this.props.dummyData,\n this.formFieldSamples,\n );\n\n usedKeys.forEach((key, index) => {\n const value = this.resolveDemoValue(key, index, sourceData);\n setByPath(demoData, key, value);\n });\n\n return demoData;\n };\n\n private sendMessage = (type: string, data?: any) => {\n this.iframe?.contentWindow?.postMessage(\n {\n '-dte-message-to': {\n type,\n data,\n },\n },\n '*',\n );\n };\n\n private uploadImage = async (\n data: { attachments: File[] },\n done: (result: { progress: number; url?: string }) => void,\n ) => {\n if (!this.onImageCB) {\n done({ progress: 100 });\n throw new Error('image upload is not implemented');\n }\n\n if (!data.attachments?.length) {\n return;\n }\n\n const file = data.attachments[0];\n\n const res = await this.validateImage(file, {\n ...defaultImageValidation,\n ...(this.props.imageValidation ?? {}),\n });\n\n if (!res.isValid) {\n logUnlayerError(`Image validation failed: ${res.title}`, res.description);\n this.onErrorCB?.(res.title, res.description);\n return;\n }\n\n done({ progress: 0 });\n\n try {\n const { url } = await this.onImageCB(file);\n done({ progress: 100, url });\n } catch (error: unknown) {\n logUnlayerError('Image upload failed', error);\n this.onErrorCB?.(\n 'Image upload failed',\n 'Something went wrong while uploading the image. Please try again or select another image.',\n );\n done({ progress: 100 });\n }\n };\n\n private startToolsReadyWatchdog = () => {\n this.clearToolsReadyWatchdog();\n this.toolsReadyWatchdogId = window.setTimeout(() => {\n if (this.hasToolsRegistered) {\n return;\n }\n\n logUnlayerError(\n 'Unlayer custom tools did not finish loading. customJS may not have run, or tool registration stalled.',\n {\n hasCoreLoaded: this.hasCoreLoaded,\n hasToolsRegistered: this.hasToolsRegistered,\n },\n );\n this.onErrorCB?.(\n 'Editor failed to load custom tools',\n 'Unlayer custom tools did not finish loading. Check the browser console for [dte-unlayer] details.',\n );\n }, UNLAYER_TOOLS_READY_TIMEOUT_MS);\n };\n\n private clearToolsReadyWatchdog = () => {\n if (this.toolsReadyWatchdogId === undefined) {\n return;\n }\n\n window.clearTimeout(this.toolsReadyWatchdogId);\n this.toolsReadyWatchdogId = undefined;\n };\n\n private validateImage = async (\n file: File,\n imageValidation: { maxFileSize: number; maxWidth: number; maxHeight: number },\n ): Promise<{ isValid: boolean; title: string; description: string }> => {\n const { maxFileSize, maxHeight, maxWidth } = imageValidation;\n\n if (file.size > maxFileSize) {\n const maxSizeMB = (maxFileSize / 1024 / 1024).toFixed(2);\n const fileSizeMB = (file.size / 1024 / 1024).toFixed(2);\n return {\n isValid: false,\n title: 'Image size limit reached',\n description: `This image is ${fileSizeMB}MB, which is above the ${maxSizeMB}MB limit. Please upload a smaller file to continue.`,\n };\n }\n\n return new Promise(resolve => {\n const img = new Image();\n const objectUrl = URL.createObjectURL(file);\n\n img.onload = () => {\n URL.revokeObjectURL(objectUrl);\n const { height, width } = img;\n\n if (width > maxWidth || height > maxHeight) {\n resolve({\n isValid: false,\n title: 'Dimension limit reached',\n description: `These image dimensions (${width}x${height}px) exceed the ${maxWidth}x${maxHeight}px limit. Please resize the image and try again.`,\n });\n } else {\n resolve({ isValid: true, title: '', description: '' });\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(objectUrl);\n resolve({\n isValid: false,\n title: 'The image is broken',\n description:\n 'Looks like this image isn’t valid. Please choose another image and try again.',\n });\n };\n\n img.src = objectUrl;\n });\n };\n}\n"],"names":["loadScript","logUnlayerError","toUnlayerMergeTags","defaultImageValidation","unlayerSupportedFonts","getFormFieldSampleValue","parseFormFieldKey","schemaBuildMap","schemaIsDate","unlayerToolsParseTwinKey","unlayerToolsDedupeInstanceIds","unlayerToolsIterate","createUnlayerEditor","DesignUpdatedEventType","defaultScriptUrl","UNLAYER_TOOLS_READY_TIMEOUT_MS","normalizeFontToken","font","replace","split","trim","toLowerCase","getDesignFontTokens","value","out","Array","isArray","item","key","fieldValue","Object","entries","add","fontFamilyValue","label","ensureChunksFonts","data","chunks","existingFonts","fonts","existingLabels","Set","map","f","usedFontTokens","design","html","labelToken","valueToken","isUsedInDesign","has","isUsedInHtml","some","token","includes","push","FORM_FIELD_DATA_POINT_PREFIX","getByPath","path","undefined","reduce","current","part","isPlainObject","deepMerge","sources","source","setByPath","target","parts","length","node","i","tokenizeFormulaFields","expression","regex","match","eventsNotChangingToolsList","ContentMoved","ContentModified","ColumnModified","RowMoved","RowModified","BodyModified","eventsNotAddingTools","ContentRemoved","ColumnRemoved","RowRemoved","UnlayerStore","props","unlayerRef","schemaDummyData","dateSchemaFieldKeys","editor","isInit","iframe","hasDesign","hasCoreLoaded","hasToolsRegistered","toolsReadyWatchdogId","formFieldsByFormId","formFieldSamples","isEditorReady","isMergeTagsApplied","mergeTagsConfig","onMessageCB","onChangeCB","onSnapshotSaveCB","onReadyCB","onImageCB","onErrorCB","onFormSelectCB","onCalcFieldOpenCB","onCalcFieldSelectCB","init","destroy","addTwin","setDesign","setOnChange","setOnSnapshotSave","setOnReady","setOnImage","setOnError","setOnMessage","setOnFormSelect","setOnCalcFieldOpen","setOnCalcFieldSelect","sendFormList","sendFormFields","sendCalcFieldLabels","setMergeTags","applyMergeTags","onEditorReady","onDesignLoaded","onDesignUpdated","onPostMessage","updateFormFieldSamples","collectCalculatedFieldKeys","resolveDemoValue","buildCalculatedFieldDemoData","sendMessage","uploadImage","startToolsReadyWatchdog","clearToolsReadyWatchdog","validateImage","container","setTimeout","window","addEventListener","unlayer","Error","mergeTags","registerCallback","querySelector","error","removeEventListener","unregisterCallback","twin","toolTwins","JSON","parse","stringify","loadDesign","onChange","onSnapshotSave","onReady","onImage","onError","onMessage","onFormSelect","onCalcFieldOpen","onCalcFieldSelect","forms","formId","fields","labels","tags","setBodyValues","backgroundColor","contentWidth","event","isToolAdded","type","isToolsListChanged","exportHtml","hasChanges","tool","realTool","slug","counters","values","_meta","htmlID","e","configData","dummyData","schema","generics","genericConfigMode","isSnapshotMode","holidays","usedFormIds","fieldKeys","customTools","tools","eSignRecipients","eSignFieldTypes","units","unit","adminConfig","template","id","title","forEach","field","index","normalizedFieldId","String","replaceAll","sampleValue","keys","calc","calculation","fieldLabels","fallbackIndex","sourceData","parsedFormField","fieldId","formFields","fieldIndex","findIndex","sample","existing","demoData","usedKeys","from","contentWindow","postMessage","done","progress","attachments","file","res","imageValidation","isValid","description","url","clearTimeout","maxFileSize","maxHeight","maxWidth","size","maxSizeMB","toFixed","fileSizeMB","Promise","resolve","img","Image","objectUrl","URL","createObjectURL","onload","revokeObjectURL","height","width","onerror","src","schemaData","filter","isValue","fullKey","saveDesign","cb","result"],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -18,6 +18,18 @@ export declare const unlayerToolsCustomStat: (design: UnlayerDesignFormat, tools
18
18
  isRequired?: boolean;
19
19
  }[]) => UnlayerCustomToolsStat;
20
20
  export declare const unlayerToolsListCustom: (design: UnlayerDesignFormat) => UnlayerDesignCustomTool[];
21
+ /**
22
+ * Makes `values.id` unique across all instance-id tools (see `INSTANCE_ID_TOOL_SLUGS`)
23
+ * in the design. Duplicating content/rows in Unlayer copies the values verbatim, so
24
+ * every copy ends up with the original's GUID; this gives each copy a fresh one.
25
+ *
26
+ * Of the contents sharing an id, the one that keeps it is the first in document
27
+ * order that is not the just-added content (`addedHtmlID`), so the original always
28
+ * wins over its duplicate regardless of where the copy was inserted.
29
+ *
30
+ * @returns `true` when at least one id was regenerated.
31
+ */
32
+ export declare const unlayerToolsDedupeInstanceIds: (design: UnlayerDesignFormat, addedHtmlID?: string) => boolean;
21
33
  export declare const unlayerToolsBuildDesign: (tools: UnlayerDesignTool[]) => UnlayerDesignFormat;
22
34
  export declare const unlayerUnitsGetIdFromValues: (values?: any) => string | undefined;
23
35
  export declare const unlayerUnitsGetTitleFromValues: (values?: any) => string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,uBAAuB,QAAO,mBAiFzC,CAAC;AAGH,eAAO,MAAM,mBAAmB,GAC5B,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAW9D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAClC,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAOpE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,QAAQ,mBAAmB,KAAG,MAAM,EAE9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,KAChD,iBAAiB,GAAG,SAWtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,mBAAmB,EAC3B,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EAC/C,QAAQ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAChE,sBAuCF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,mBAAmB,KAAG,uBAAuB,EAQ3F,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,iBAAiB,EAAE,KAAG,mBAKpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACN,CAAC;AAC/D,eAAO,MAAM,8BAA8B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACX,CAAC;AAE7D,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAC7C,eAAO,MAAM,oBAAoB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAEhD,eAAO,MAAM,iCAAiC,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAAM,EAGtF,CAAC;AAEN,eAAO,MAAM,yBAAyB,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAY5E,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAO,MAgB9C,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACR,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,uBAAuB,QAAO,mBAiFzC,CAAC;AAGH,eAAO,MAAM,mBAAmB,GAC5B,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAW9D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAClC,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,GAAG,SAAS,GAAG,IAAI,SAOpE,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,QAAQ,mBAAmB,KAAG,MAAM,EAE9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GACzB,QAAQ,mBAAmB,EAC3B,IAAI,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI,KAChD,iBAAiB,GAAG,SAWtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,sBAAsB,GAC/B,QAAQ,mBAAmB,EAC3B,QAAQ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,EAC/C,QAAQ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAChE,sBAuCF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,mBAAmB,KAAG,uBAAuB,EAQ3F,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,GACtC,QAAQ,mBAAmB,EAC3B,cAAc,MAAM,KACrB,OAkCF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,iBAAiB,EAAE,KAAG,mBAKpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACN,CAAC;AAC/D,eAAO,MAAM,8BAA8B,GAAI,SAAS,GAAG,KAAG,MAAM,GAAG,SACX,CAAC;AAE7D,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAC7C,eAAO,MAAM,oBAAoB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SACzB,CAAC;AAEhD,eAAO,MAAM,iCAAiC,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAAM,EAGtF,CAAC;AAEN,eAAO,MAAM,yBAAyB,GAAI,OAAO,uBAAuB,EAAE,KAAG,MAY5E,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAO,MAgB9C,CAAC"}
package/dist/tools.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { constGenericsEditor } from './shared/const';
2
2
  import { editIconSvg } from './shared/edit-icon';
3
+ import { generateInstanceId, INSTANCE_ID_TOOL_SLUGS } from './shared/instance-id';
3
4
  import { unlayerToolsParseUnitKey } from './shared/tools';
4
5
  import { versions } from './unlayer';
5
6
  /* eslint-disable @typescript-eslint/naming-convention */ export const unlayerGetDefaultDesign = ()=>({
@@ -154,6 +155,52 @@ export const unlayerToolsListCustom = (design)=>{
154
155
  });
155
156
  return tools;
156
157
  };
158
+ /**
159
+ * Makes `values.id` unique across all instance-id tools (see `INSTANCE_ID_TOOL_SLUGS`)
160
+ * in the design. Duplicating content/rows in Unlayer copies the values verbatim, so
161
+ * every copy ends up with the original's GUID; this gives each copy a fresh one.
162
+ *
163
+ * Of the contents sharing an id, the one that keeps it is the first in document
164
+ * order that is not the just-added content (`addedHtmlID`), so the original always
165
+ * wins over its duplicate regardless of where the copy was inserted.
166
+ *
167
+ * @returns `true` when at least one id was regenerated.
168
+ */ export const unlayerToolsDedupeInstanceIds = (design, addedHtmlID)=>{
169
+ const byId = new Map();
170
+ unlayerToolsIterateCustom(design, (tool)=>{
171
+ var _tool_values;
172
+ const id = (_tool_values = tool.values) === null || _tool_values === void 0 ? void 0 : _tool_values.id;
173
+ if (INSTANCE_ID_TOOL_SLUGS.includes(tool.slug) && typeof id === 'string' && id) {
174
+ var _byId_get;
175
+ const key = `${tool.slug}|${id}`;
176
+ byId.set(key, [
177
+ ...(_byId_get = byId.get(key)) !== null && _byId_get !== void 0 ? _byId_get : [],
178
+ tool
179
+ ]);
180
+ }
181
+ });
182
+ let hasChanges = false;
183
+ byId.forEach((tools)=>{
184
+ var _tools_find;
185
+ if (tools.length < 2) {
186
+ return;
187
+ }
188
+ const keeper = (_tools_find = tools.find((tool)=>{
189
+ var _tool_values__meta, _tool_values;
190
+ return ((_tool_values = tool.values) === null || _tool_values === void 0 ? void 0 : (_tool_values__meta = _tool_values._meta) === null || _tool_values__meta === void 0 ? void 0 : _tool_values__meta.htmlID) !== addedHtmlID;
191
+ })) !== null && _tools_find !== void 0 ? _tools_find : tools[0];
192
+ for (const tool of tools){
193
+ if (tool !== keeper) {
194
+ /*
195
+ * If no id can be generated the copy is left without one, which is still
196
+ * better than two instances bound to the same image.
197
+ */ tool.values.id = generateInstanceId();
198
+ hasChanges = true;
199
+ }
200
+ }
201
+ });
202
+ return hasChanges;
203
+ };
157
204
  export const unlayerToolsBuildDesign = (tools)=>{
158
205
  const design = unlayerGetDefaultDesign();
159
206
  design.body.rows[0].columns[0].contents = tools;
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools.ts"],"sourcesContent":["import { constGenericsEditor, UnlayerToolMetaData } from './shared/const';\nimport { editIconSvg } from './shared/edit-icon';\nimport { unlayerToolsParseUnitKey } from './shared/tools';\nimport { versions } from './unlayer';\n\nimport type {\n UnlayerDesignCustomTool,\n UnlayerDesignFormat,\n UnlayerDesignTool,\n UnlayerEditorCustomTool,\n} from './unlayer-interface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const unlayerGetDefaultDesign = (): UnlayerDesignFormat => ({\n counters: {\n u_column: 1,\n u_row: 1,\n u_content_custom_generic_list_of_fields: 1,\n },\n body: {\n rows: [\n {\n cells: [1],\n columns: [\n {\n contents: [],\n values: {\n backgroundColor: '',\n padding: '0px',\n border: {},\n _meta: {\n htmlID: 'u_column_1',\n htmlClassNames: 'u_column',\n },\n },\n },\n ],\n values: {\n displayCondition: null,\n columns: false,\n backgroundColor: '',\n columnsBackgroundColor: '',\n backgroundImage: {\n url: '',\n fullWidth: true,\n repeat: false,\n center: true,\n cover: false,\n },\n padding: '0px',\n hideDesktop: false,\n hideMobile: false,\n noStackMobile: false,\n _meta: {\n htmlID: 'u_row_1',\n htmlClassNames: 'u_row',\n },\n selectable: true,\n draggable: true,\n duplicatable: true,\n deletable: true,\n },\n },\n ],\n values: {\n backgroundColor: 'rgba(0,0,0,0)',\n backgroundImage: {\n url: '',\n fullWidth: true,\n repeat: false,\n center: true,\n cover: false,\n },\n contentWidth: '100%',\n contentAlign: 'center',\n fontFamily: {\n label: 'Arial',\n value: 'arial,helvetica,sans-serif',\n },\n preheaderText: '',\n linkStyle: {\n body: true,\n linkColor: '#0000ee',\n linkHoverColor: '#0000ee',\n linkUnderline: true,\n linkHoverUnderline: true,\n },\n _meta: {\n htmlID: 'u_body',\n htmlClassNames: 'u_body',\n },\n },\n },\n schemaVersion: versions.schema,\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const unlayerToolsIterate = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignTool) => boolean | undefined | void\n) => {\n for (const row of design?.body?.rows ?? []) {\n for (const column of row.columns) {\n for (const content of column.contents) {\n if (cb(content) === false) {\n return;\n }\n }\n }\n }\n};\n\nexport const unlayerToolsIterateCustom = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignCustomTool) => boolean | undefined | void\n) => {\n unlayerToolsIterate(design, tool => {\n if (tool.type === 'custom' && tool.slug) {\n return cb(tool as any);\n }\n });\n};\n\nexport const unlayerToolsListCustomKeys = (design: UnlayerDesignFormat): string[] => {\n return Array.from(new Set(unlayerToolsListCustom(design).map(tool => tool.slug)));\n};\n\nexport const unlayerToolsFind = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignTool) => boolean | void\n): UnlayerDesignTool | undefined => {\n let out: UnlayerDesignTool | undefined;\n\n unlayerToolsIterate(design, tool => {\n if (cb(tool)) {\n out = tool;\n return false;\n }\n });\n\n return out;\n};\n\nexport interface UnlayerCustomToolsStat {\n counters: Record<string, number>;\n missing: string[];\n notSupported: string[];\n}\n\nexport const unlayerToolsCustomStat = (\n design: UnlayerDesignFormat,\n tools?: { key: string; isRequired?: boolean }[],\n units?: { id: string; generic: string; isRequired?: boolean }[]\n): UnlayerCustomToolsStat => {\n const counters: Record<string, number> = {};\n const notSupported = new Set<string>();\n const unitIDs = new Set<string>();\n\n unlayerToolsIterateCustom(design, tool => {\n if (!counters[tool.slug]) {\n counters[tool.slug] = 0;\n }\n\n counters[tool.slug]++;\n\n const isUnit = unlayerToolsParseUnitKey(tool.slug);\n\n if (isUnit) {\n unitIDs.add(isUnit.id);\n }\n\n if (\n (isUnit && !units?.some(unit => unit.id === isUnit.id)) ??\n (!isUnit && !tools?.some(t => t.key === tool.slug))\n ) {\n notSupported.add(tool.slug);\n }\n });\n\n return {\n counters,\n notSupported: Array.from(notSupported),\n\n missing: [\n ...(tools\n ?.filter(tool => tool.isRequired && !counters[tool.key])\n .map(tool => tool.key) ?? []),\n ...(units\n ?.filter(unit => unit.isRequired && !unitIDs.has(unit.id))\n .map(unit => unit.id) ?? []),\n ],\n };\n};\n\nexport const unlayerToolsListCustom = (design: UnlayerDesignFormat): UnlayerDesignCustomTool[] => {\n const tools: UnlayerDesignCustomTool[] = [];\n\n unlayerToolsIterateCustom(design, tool => {\n tools.push(tool);\n });\n\n return tools;\n};\n\nexport const unlayerToolsBuildDesign = (tools: UnlayerDesignTool[]): UnlayerDesignFormat => {\n const design = unlayerGetDefaultDesign();\n\n design.body.rows[0].columns[0].contents = tools;\n return design;\n};\n\nexport const unlayerUnitsGetIdFromValues = (values?: any): string | undefined =>\n values?.[constGenericsEditor.adminConfigProperty]?.crossId;\nexport const unlayerUnitsGetTitleFromValues = (values?: any): string | undefined =>\n values?.[constGenericsEditor.adminConfigProperty]?.title;\n\nexport const unlayerUnitsGetId = (tool: UnlayerDesignTool): string | undefined =>\n unlayerUnitsGetIdFromValues(tool.values);\nexport const unlayerUnitsGetTitle = (tool: UnlayerDesignTool): string | undefined =>\n unlayerUnitsGetTitleFromValues(tool.values);\n\nexport const unlayerCustomToolsGetRegisterUrls = (tools: UnlayerEditorCustomTool[]): string[] =>\n Array.from(\n new Set(tools.map(tool => (tool.groupUrl ? `${tool.groupUrl}/index.js` : tool.url)))\n );\n\nexport const unlayerCustomToolMetaData = (tools: UnlayerEditorCustomTool[]): string => {\n const toolMetaData = tools.reduce((acc: Record<string, UnlayerToolMetaData>, tool) => {\n acc[tool.title] = {\n key: tool.key,\n description: tool.description,\n };\n return acc;\n }, {});\n\n return `\n window.dteStore.setToolMetaData(${JSON.stringify(toolMetaData)});\n `;\n};\n\nexport const unlayerCustomEmptyToolState = (): string => {\n const divElement = document.createElement('div');\n const editIconContainer = document.createElement('div');\n const textContainer = document.createElement('div');\n\n divElement.classList.add('unlayer-custom-empty-tool-state');\n editIconContainer.classList.add('unlayer-custom-empty-tool-state-icon');\n textContainer.classList.add('unlayer-custom-empty-tool-state-text');\n\n editIconContainer.innerHTML = editIconSvg;\n textContainer.innerText = 'Please choose \\n\\r your component';\n divElement.appendChild(editIconContainer);\n divElement.appendChild(textContainer);\n return `\n document.querySelector('.tab-content .tab-pane').innerHTML = \\`${divElement.outerHTML}\\`;\n `;\n};\n"],"names":["constGenericsEditor","editIconSvg","unlayerToolsParseUnitKey","versions","unlayerGetDefaultDesign","counters","u_column","u_row","u_content_custom_generic_list_of_fields","body","rows","cells","columns","contents","values","backgroundColor","padding","border","_meta","htmlID","htmlClassNames","displayCondition","columnsBackgroundColor","backgroundImage","url","fullWidth","repeat","center","cover","hideDesktop","hideMobile","noStackMobile","selectable","draggable","duplicatable","deletable","contentWidth","contentAlign","fontFamily","label","value","preheaderText","linkStyle","linkColor","linkHoverColor","linkUnderline","linkHoverUnderline","schemaVersion","schema","unlayerToolsIterate","design","cb","row","column","content","unlayerToolsIterateCustom","tool","type","slug","unlayerToolsListCustomKeys","Array","from","Set","unlayerToolsListCustom","map","unlayerToolsFind","out","unlayerToolsCustomStat","tools","units","notSupported","unitIDs","isUnit","add","id","some","unit","t","key","missing","filter","isRequired","has","push","unlayerToolsBuildDesign","unlayerUnitsGetIdFromValues","adminConfigProperty","crossId","unlayerUnitsGetTitleFromValues","title","unlayerUnitsGetId","unlayerUnitsGetTitle","unlayerCustomToolsGetRegisterUrls","groupUrl","unlayerCustomToolMetaData","toolMetaData","reduce","acc","description","JSON","stringify","unlayerCustomEmptyToolState","divElement","document","createElement","editIconContainer","textContainer","classList","innerHTML","innerText","appendChild","outerHTML"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/tools.ts"],"sourcesContent":["import { constGenericsEditor, UnlayerToolMetaData } from './shared/const';\nimport { editIconSvg } from './shared/edit-icon';\nimport { generateInstanceId, INSTANCE_ID_TOOL_SLUGS } from './shared/instance-id';\nimport { unlayerToolsParseUnitKey } from './shared/tools';\nimport { versions } from './unlayer';\n\nimport type {\n UnlayerDesignCustomTool,\n UnlayerDesignFormat,\n UnlayerDesignTool,\n UnlayerEditorCustomTool,\n} from './unlayer-interface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const unlayerGetDefaultDesign = (): UnlayerDesignFormat => ({\n counters: {\n u_column: 1,\n u_row: 1,\n u_content_custom_generic_list_of_fields: 1,\n },\n body: {\n rows: [\n {\n cells: [1],\n columns: [\n {\n contents: [],\n values: {\n backgroundColor: '',\n padding: '0px',\n border: {},\n _meta: {\n htmlID: 'u_column_1',\n htmlClassNames: 'u_column',\n },\n },\n },\n ],\n values: {\n displayCondition: null,\n columns: false,\n backgroundColor: '',\n columnsBackgroundColor: '',\n backgroundImage: {\n url: '',\n fullWidth: true,\n repeat: false,\n center: true,\n cover: false,\n },\n padding: '0px',\n hideDesktop: false,\n hideMobile: false,\n noStackMobile: false,\n _meta: {\n htmlID: 'u_row_1',\n htmlClassNames: 'u_row',\n },\n selectable: true,\n draggable: true,\n duplicatable: true,\n deletable: true,\n },\n },\n ],\n values: {\n backgroundColor: 'rgba(0,0,0,0)',\n backgroundImage: {\n url: '',\n fullWidth: true,\n repeat: false,\n center: true,\n cover: false,\n },\n contentWidth: '100%',\n contentAlign: 'center',\n fontFamily: {\n label: 'Arial',\n value: 'arial,helvetica,sans-serif',\n },\n preheaderText: '',\n linkStyle: {\n body: true,\n linkColor: '#0000ee',\n linkHoverColor: '#0000ee',\n linkUnderline: true,\n linkHoverUnderline: true,\n },\n _meta: {\n htmlID: 'u_body',\n htmlClassNames: 'u_body',\n },\n },\n },\n schemaVersion: versions.schema,\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const unlayerToolsIterate = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignTool) => boolean | undefined | void\n) => {\n for (const row of design?.body?.rows ?? []) {\n for (const column of row.columns) {\n for (const content of column.contents) {\n if (cb(content) === false) {\n return;\n }\n }\n }\n }\n};\n\nexport const unlayerToolsIterateCustom = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignCustomTool) => boolean | undefined | void\n) => {\n unlayerToolsIterate(design, tool => {\n if (tool.type === 'custom' && tool.slug) {\n return cb(tool as any);\n }\n });\n};\n\nexport const unlayerToolsListCustomKeys = (design: UnlayerDesignFormat): string[] => {\n return Array.from(new Set(unlayerToolsListCustom(design).map(tool => tool.slug)));\n};\n\nexport const unlayerToolsFind = (\n design: UnlayerDesignFormat,\n cb: (tool: UnlayerDesignTool) => boolean | void\n): UnlayerDesignTool | undefined => {\n let out: UnlayerDesignTool | undefined;\n\n unlayerToolsIterate(design, tool => {\n if (cb(tool)) {\n out = tool;\n return false;\n }\n });\n\n return out;\n};\n\nexport interface UnlayerCustomToolsStat {\n counters: Record<string, number>;\n missing: string[];\n notSupported: string[];\n}\n\nexport const unlayerToolsCustomStat = (\n design: UnlayerDesignFormat,\n tools?: { key: string; isRequired?: boolean }[],\n units?: { id: string; generic: string; isRequired?: boolean }[]\n): UnlayerCustomToolsStat => {\n const counters: Record<string, number> = {};\n const notSupported = new Set<string>();\n const unitIDs = new Set<string>();\n\n unlayerToolsIterateCustom(design, tool => {\n if (!counters[tool.slug]) {\n counters[tool.slug] = 0;\n }\n\n counters[tool.slug]++;\n\n const isUnit = unlayerToolsParseUnitKey(tool.slug);\n\n if (isUnit) {\n unitIDs.add(isUnit.id);\n }\n\n if (\n (isUnit && !units?.some(unit => unit.id === isUnit.id)) ??\n (!isUnit && !tools?.some(t => t.key === tool.slug))\n ) {\n notSupported.add(tool.slug);\n }\n });\n\n return {\n counters,\n notSupported: Array.from(notSupported),\n\n missing: [\n ...(tools\n ?.filter(tool => tool.isRequired && !counters[tool.key])\n .map(tool => tool.key) ?? []),\n ...(units\n ?.filter(unit => unit.isRequired && !unitIDs.has(unit.id))\n .map(unit => unit.id) ?? []),\n ],\n };\n};\n\nexport const unlayerToolsListCustom = (design: UnlayerDesignFormat): UnlayerDesignCustomTool[] => {\n const tools: UnlayerDesignCustomTool[] = [];\n\n unlayerToolsIterateCustom(design, tool => {\n tools.push(tool);\n });\n\n return tools;\n};\n\n/**\n * Makes `values.id` unique across all instance-id tools (see `INSTANCE_ID_TOOL_SLUGS`)\n * in the design. Duplicating content/rows in Unlayer copies the values verbatim, so\n * every copy ends up with the original's GUID; this gives each copy a fresh one.\n *\n * Of the contents sharing an id, the one that keeps it is the first in document\n * order that is not the just-added content (`addedHtmlID`), so the original always\n * wins over its duplicate regardless of where the copy was inserted.\n *\n * @returns `true` when at least one id was regenerated.\n */\nexport const unlayerToolsDedupeInstanceIds = (\n design: UnlayerDesignFormat,\n addedHtmlID?: string\n): boolean => {\n const byId = new Map<string, UnlayerDesignCustomTool[]>();\n\n unlayerToolsIterateCustom(design, tool => {\n const id = tool.values?.id;\n\n if (INSTANCE_ID_TOOL_SLUGS.includes(tool.slug) && typeof id === 'string' && id) {\n const key = `${tool.slug}|${id}`;\n byId.set(key, [...(byId.get(key) ?? []), tool]);\n }\n });\n\n let hasChanges = false;\n\n byId.forEach(tools => {\n if (tools.length < 2) {\n return;\n }\n\n const keeper = tools.find(tool => tool.values?._meta?.htmlID !== addedHtmlID) ?? tools[0];\n\n for (const tool of tools) {\n if (tool !== keeper) {\n /*\n * If no id can be generated the copy is left without one, which is still\n * better than two instances bound to the same image.\n */\n tool.values.id = generateInstanceId();\n hasChanges = true;\n }\n }\n });\n\n return hasChanges;\n};\n\nexport const unlayerToolsBuildDesign = (tools: UnlayerDesignTool[]): UnlayerDesignFormat => {\n const design = unlayerGetDefaultDesign();\n\n design.body.rows[0].columns[0].contents = tools;\n return design;\n};\n\nexport const unlayerUnitsGetIdFromValues = (values?: any): string | undefined =>\n values?.[constGenericsEditor.adminConfigProperty]?.crossId;\nexport const unlayerUnitsGetTitleFromValues = (values?: any): string | undefined =>\n values?.[constGenericsEditor.adminConfigProperty]?.title;\n\nexport const unlayerUnitsGetId = (tool: UnlayerDesignTool): string | undefined =>\n unlayerUnitsGetIdFromValues(tool.values);\nexport const unlayerUnitsGetTitle = (tool: UnlayerDesignTool): string | undefined =>\n unlayerUnitsGetTitleFromValues(tool.values);\n\nexport const unlayerCustomToolsGetRegisterUrls = (tools: UnlayerEditorCustomTool[]): string[] =>\n Array.from(\n new Set(tools.map(tool => (tool.groupUrl ? `${tool.groupUrl}/index.js` : tool.url)))\n );\n\nexport const unlayerCustomToolMetaData = (tools: UnlayerEditorCustomTool[]): string => {\n const toolMetaData = tools.reduce((acc: Record<string, UnlayerToolMetaData>, tool) => {\n acc[tool.title] = {\n key: tool.key,\n description: tool.description,\n };\n return acc;\n }, {});\n\n return `\n window.dteStore.setToolMetaData(${JSON.stringify(toolMetaData)});\n `;\n};\n\nexport const unlayerCustomEmptyToolState = (): string => {\n const divElement = document.createElement('div');\n const editIconContainer = document.createElement('div');\n const textContainer = document.createElement('div');\n\n divElement.classList.add('unlayer-custom-empty-tool-state');\n editIconContainer.classList.add('unlayer-custom-empty-tool-state-icon');\n textContainer.classList.add('unlayer-custom-empty-tool-state-text');\n\n editIconContainer.innerHTML = editIconSvg;\n textContainer.innerText = 'Please choose \\n\\r your component';\n divElement.appendChild(editIconContainer);\n divElement.appendChild(textContainer);\n return `\n document.querySelector('.tab-content .tab-pane').innerHTML = \\`${divElement.outerHTML}\\`;\n `;\n};\n"],"names":["constGenericsEditor","editIconSvg","generateInstanceId","INSTANCE_ID_TOOL_SLUGS","unlayerToolsParseUnitKey","versions","unlayerGetDefaultDesign","counters","u_column","u_row","u_content_custom_generic_list_of_fields","body","rows","cells","columns","contents","values","backgroundColor","padding","border","_meta","htmlID","htmlClassNames","displayCondition","columnsBackgroundColor","backgroundImage","url","fullWidth","repeat","center","cover","hideDesktop","hideMobile","noStackMobile","selectable","draggable","duplicatable","deletable","contentWidth","contentAlign","fontFamily","label","value","preheaderText","linkStyle","linkColor","linkHoverColor","linkUnderline","linkHoverUnderline","schemaVersion","schema","unlayerToolsIterate","design","cb","row","column","content","unlayerToolsIterateCustom","tool","type","slug","unlayerToolsListCustomKeys","Array","from","Set","unlayerToolsListCustom","map","unlayerToolsFind","out","unlayerToolsCustomStat","tools","units","notSupported","unitIDs","isUnit","add","id","some","unit","t","key","missing","filter","isRequired","has","push","unlayerToolsDedupeInstanceIds","addedHtmlID","byId","Map","includes","set","get","hasChanges","forEach","length","keeper","find","unlayerToolsBuildDesign","unlayerUnitsGetIdFromValues","adminConfigProperty","crossId","unlayerUnitsGetTitleFromValues","title","unlayerUnitsGetId","unlayerUnitsGetTitle","unlayerCustomToolsGetRegisterUrls","groupUrl","unlayerCustomToolMetaData","toolMetaData","reduce","acc","description","JSON","stringify","unlayerCustomEmptyToolState","divElement","document","createElement","editIconContainer","textContainer","classList","innerHTML","innerText","appendChild","outerHTML"],"mappings":"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"}
@@ -37,12 +37,22 @@ export interface UnlayerRef {
37
37
  sendFormList(forms: FormInfo[]): void;
38
38
  sendFormFields(formId: number, fields: FormFieldInfo[]): void;
39
39
  sendCalcFieldLabels(labels: Record<string, string>): void;
40
+ /**
41
+ * Replaces the editor's merge tag menu with `tags` (grouped). Safe to call before the editor is
42
+ * ready — the tags are applied once it is. Lets hosts add tags that finish loading after init
43
+ * (e.g. form fields) without remounting the editor.
44
+ */
45
+ setMergeTags(tags: UnlayerEditorMergeTagInfo[] | undefined): void;
40
46
  }
41
47
  export interface UnlayerEditorMergeTagInfo {
42
48
  id: string;
43
49
  name: string;
44
50
  propertyPath: string;
45
- group?: string;
51
+ /**
52
+ * Submenu the tag is listed under. A string is a single submenu (`'Custom Fields'`);
53
+ * an array nests submenus in order (`['Forms', 'Customer Intake']` → Forms ▸ Customer Intake ▸ tag).
54
+ */
55
+ group?: string | string[];
46
56
  }
47
57
  export interface UnlayerEditorCustomTool {
48
58
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"unlayer-interface.d.ts","sourceRoot":"","sources":["../src/unlayer-interface.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unlayer-interface.d.ts","sourceRoot":"","sources":["../src/unlayer-interface.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/unlayer-interface.tsx"],"sourcesContent":["import {\n UnlayerEditorESignRecipientInfo,\n UnlayerEditorTwin,\n UnlayerEditorUnit,\n} from './shared/const';\nimport { FormFieldInfo, FormInfo } from './shared/forms';\nimport { SchemaObject } from './shared/schema';\n\nexport interface UnlayerDesignTool {\n type: string;\n slug?: string;\n values: any;\n}\nexport interface UnlayerDesignCustomTool extends UnlayerDesignTool {\n slug: string;\n}\n\nexport interface UnlayerDesignFormat {\n body: {\n rows: {\n cells: number[];\n columns: {\n contents: UnlayerDesignTool[];\n values?: any;\n }[];\n values?: any;\n }[];\n values?: any;\n };\n counters: Record<string, number>;\n schemaVersion: number;\n}\n\nexport interface UnlayerExport {\n html: string;\n chunks: any;\n design: UnlayerDesignFormat;\n demoData?: Record<string, unknown>;\n}\n\nexport interface UnlayerRef {\n loadDesign(design: any): void;\n saveDesign(cb: (design: any) => void): void;\n exportHtml(cb: (data: UnlayerExport) => void): void;\n sendFormList(forms: FormInfo[]): void;\n sendFormFields(formId: number, fields: FormFieldInfo[]): void;\n sendCalcFieldLabels(labels: Record<string, string>): void;\n}\n\nexport interface UnlayerEditorMergeTagInfo {\n id: string;\n name: string;\n propertyPath: string;\n group?: string;\n}\n\nexport interface UnlayerEditorCustomTool {\n key: string;\n title: string;\n description?: string;\n url: string;\n groupUrl?: string;\n}\n\nexport interface CreateUnlayerEditorProps {\n tools: UnlayerEditorCustomTool[];\n newSnapshot?: UnlayerEditorTwin;\n toolTwins?: UnlayerEditorTwin[];\n isSnapshotMode?: boolean;\n dummyData?: any;\n schema?: SchemaObject;\n customCSS?: string | string[] | undefined;\n customJS?: string | string[] | undefined;\n mergeTags?: UnlayerEditorMergeTagInfo[] | undefined;\n eSignRecipients?: UnlayerEditorESignRecipientInfo[] | undefined;\n eSignFieldTypes?: string[] | undefined;\n genericConfigMode?: boolean;\n generics?: true | string[];\n units?: UnlayerEditorUnit[];\n noCoreTools?: boolean;\n latest?: boolean;\n blocks?: boolean;\n hideAllTools?: boolean;\n hideContentControls?: boolean;\n hideBodyMenuItem?: boolean;\n displayConditions?: boolean;\n /**\n * Optional portal target for the display-conditions dialog. Prefer unset so the dialog\n * stays under the host `AnvilProvider` (`.anvil2` CSS scope). When set, content is wrapped\n * in `ThemeProvider` so Anvil2 styles still apply after portaling.\n */\n displayConditionModalPortalContainer?: Element | DocumentFragment | null;\n enableHTMLEditing?: boolean;\n enableHTMLEditingReadonly?: boolean;\n imageValidation?: {\n maxWidth?: number;\n maxHeight?: number;\n maxFileSize?: number;\n };\n holidays?: string[];\n onFormSelect?: (formId: number) => void;\n onCalcFieldOpen?: (usedFormIds: number[]) => void;\n onCalcFieldSelect?: (fieldKeys: string[]) => void;\n onConditionalsOpen?: (\n usedFormIds: number[],\n sendFormList: (forms: FormInfo[]) => void,\n sendFormFields: (formId: number, fields: FormFieldInfo[]) => void,\n ) => void;\n onConditionFormSelect?: (\n formId: number,\n sendFormFields: (formId: number, fields: FormFieldInfo[]) => void,\n ) => void;\n}\n"],"names":[],"mappings":"AAgEA,WAgDC"}
1
+ {"version":3,"sources":["../src/unlayer-interface.tsx"],"sourcesContent":["import {\n UnlayerEditorESignRecipientInfo,\n UnlayerEditorTwin,\n UnlayerEditorUnit,\n} from './shared/const';\nimport { FormFieldInfo, FormInfo } from './shared/forms';\nimport { SchemaObject } from './shared/schema';\n\nexport interface UnlayerDesignTool {\n type: string;\n slug?: string;\n values: any;\n}\nexport interface UnlayerDesignCustomTool extends UnlayerDesignTool {\n slug: string;\n}\n\nexport interface UnlayerDesignFormat {\n body: {\n rows: {\n cells: number[];\n columns: {\n contents: UnlayerDesignTool[];\n values?: any;\n }[];\n values?: any;\n }[];\n values?: any;\n };\n counters: Record<string, number>;\n schemaVersion: number;\n}\n\nexport interface UnlayerExport {\n html: string;\n chunks: any;\n design: UnlayerDesignFormat;\n demoData?: Record<string, unknown>;\n}\n\nexport interface UnlayerRef {\n loadDesign(design: any): void;\n saveDesign(cb: (design: any) => void): void;\n exportHtml(cb: (data: UnlayerExport) => void): void;\n sendFormList(forms: FormInfo[]): void;\n sendFormFields(formId: number, fields: FormFieldInfo[]): void;\n sendCalcFieldLabels(labels: Record<string, string>): void;\n /**\n * Replaces the editor's merge tag menu with `tags` (grouped). Safe to call before the editor is\n * ready — the tags are applied once it is. Lets hosts add tags that finish loading after init\n * (e.g. form fields) without remounting the editor.\n */\n setMergeTags(tags: UnlayerEditorMergeTagInfo[] | undefined): void;\n}\n\nexport interface UnlayerEditorMergeTagInfo {\n id: string;\n name: string;\n propertyPath: string;\n /**\n * Submenu the tag is listed under. A string is a single submenu (`'Custom Fields'`);\n * an array nests submenus in order (`['Forms', 'Customer Intake']` → Forms ▸ Customer Intake ▸ tag).\n */\n group?: string | string[];\n}\n\nexport interface UnlayerEditorCustomTool {\n key: string;\n title: string;\n description?: string;\n url: string;\n groupUrl?: string;\n}\n\nexport interface CreateUnlayerEditorProps {\n tools: UnlayerEditorCustomTool[];\n newSnapshot?: UnlayerEditorTwin;\n toolTwins?: UnlayerEditorTwin[];\n isSnapshotMode?: boolean;\n dummyData?: any;\n schema?: SchemaObject;\n customCSS?: string | string[] | undefined;\n customJS?: string | string[] | undefined;\n mergeTags?: UnlayerEditorMergeTagInfo[] | undefined;\n eSignRecipients?: UnlayerEditorESignRecipientInfo[] | undefined;\n eSignFieldTypes?: string[] | undefined;\n genericConfigMode?: boolean;\n generics?: true | string[];\n units?: UnlayerEditorUnit[];\n noCoreTools?: boolean;\n latest?: boolean;\n blocks?: boolean;\n hideAllTools?: boolean;\n hideContentControls?: boolean;\n hideBodyMenuItem?: boolean;\n displayConditions?: boolean;\n /**\n * Optional portal target for the display-conditions dialog. Prefer unset so the dialog\n * stays under the host `AnvilProvider` (`.anvil2` CSS scope). When set, content is wrapped\n * in `ThemeProvider` so Anvil2 styles still apply after portaling.\n */\n displayConditionModalPortalContainer?: Element | DocumentFragment | null;\n enableHTMLEditing?: boolean;\n enableHTMLEditingReadonly?: boolean;\n imageValidation?: {\n maxWidth?: number;\n maxHeight?: number;\n maxFileSize?: number;\n };\n holidays?: string[];\n onFormSelect?: (formId: number) => void;\n onCalcFieldOpen?: (usedFormIds: number[]) => void;\n onCalcFieldSelect?: (fieldKeys: string[]) => void;\n onConditionalsOpen?: (\n usedFormIds: number[],\n sendFormList: (forms: FormInfo[]) => void,\n sendFormFields: (formId: number, fields: FormFieldInfo[]) => void,\n ) => void;\n onConditionFormSelect?: (\n formId: number,\n sendFormFields: (formId: number, fields: FormFieldInfo[]) => void,\n ) => void;\n}\n"],"names":[],"mappings":"AA0EA,WAgDC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unlayer.d.ts","sourceRoot":"","sources":["../src/unlayer.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAClD,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1D,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAA;KAAE,GAAG,GAAG,CAAC;IAC7D,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CACpC;AAED,oBAAY,sBAAsB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;IACpC,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,YAAY,kBAAkB;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,GAAG,CAAC;KACf,CAAC;CACL;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,mBAAmB,MAAM,WAO5D,CAAC;AAEF,eAAO,MAAM,2BAA2B,cAUvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,cAMnC,CAAC;AAyBF,eAAO,MAAM,uBAAuB,cAQnC,CAAC;AACF,eAAO,MAAM,gBAAgB,cAiC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,WAAW,cAAc,EACzB,gOAgBG,wBAAwB,KAC5B,OA8LF,CAAC"}
1
+ {"version":3,"file":"unlayer.d.ts","sourceRoot":"","sources":["../src/unlayer.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9D,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAClD,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1D,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAA;KAAE,GAAG,GAAG,CAAC;IAC7D,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CACpC;AAED,oBAAY,sBAAsB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;IACpC,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,YAAY,kBAAkB;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,GAAG,CAAC;KACf,CAAC;CACL;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,mBAAmB,MAAM,WAO5D,CAAC;AAEF,eAAO,MAAM,2BAA2B,cAUvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,cAMnC,CAAC;AAyBF,eAAO,MAAM,uBAAuB,cAQnC,CAAC;AACF,eAAO,MAAM,gBAAgB,cAiC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC5B,WAAW,cAAc,EACzB,gOAgBG,wBAAwB,KAC5B,OAgMF,CAAC"}
package/dist/unlayer.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { emitDisplayCondition } from './display-conditions/displayConditionController';
2
2
  import { editorCoreScript, editorCoreStyles, editorCoreTools } from './editor-core';
3
3
  import { logUnlayerError } from './log';
4
- import { scheduleUnlayerMergeTags, toUnlayerMergeTags } from './merge-tags';
4
+ import { toUnlayerMergeTags } from './merge-tags';
5
5
  import { constGenericsEditor } from './shared/const';
6
6
  import { unlayerSupportedFonts } from './shared/fonts';
7
7
  import { unlayerCustomEmptyToolState, unlayerCustomToolMetaData, unlayerCustomToolsGetRegisterUrls } from './tools';
@@ -226,7 +226,10 @@ export const createUnlayerEditor = (container, { customCSS, customJS, displayCon
226
226
  tables: true
227
227
  }
228
228
  },
229
- mergeTags: toUnlayerMergeTags(mergeTags, {
229
+ /*
230
+ * Flat only: nested groups here break custom tool registration. UnlayerStore applies
231
+ * the grouped config via setMergeTags once the editor is ready.
232
+ */ mergeTags: toUnlayerMergeTags(mergeTags, {
230
233
  groups: false
231
234
  }),
232
235
  projectId: 5713,
@@ -308,7 +311,6 @@ export const createUnlayerEditor = (container, { customCSS, customJS, displayCon
308
311
  } finally{
309
312
  document.getElementById = currentFind;
310
313
  }
311
- scheduleUnlayerMergeTags(result, mergeTags);
312
314
  if (displayConditions) {
313
315
  result.registerCallback('displayCondition', function(data, done) {
314
316
  emitDisplayCondition({