{"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n    event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n    const targetElement = event.target as HTMLElement;\n    if (!targetElement) {\n        return;\n    }\n    const editableElement = targetElement.closest(\"[data-cslp]\");\n\n    if (!editableElement) {\n        return;\n    }\n    const cslpData = editableElement.getAttribute(\"data-cslp\");\n    if (!cslpData) {\n        return;\n    }\n    const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n    return {\n        editableElement: editableElement,\n        cslpData,\n        fieldMetadata,\n    };\n}\n\nfunction getPrefix(cslp: string): string {\n    let prefix;\n    if (cslp.startsWith(\"v2:\")) {\n        // v2: prefix is added to cslp in variant cases\n        const variantPrefix = cslp.split(\":\")[1];\n        const content_type_uid = variantPrefix.split(\".\")[0];\n        const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n        const locale = variantPrefix.split(\".\")[2];\n        prefix = `${content_type_uid}.${euid}.${locale}`;\n    } else {\n        prefix = cslp;\n    }\n    return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n    const cslpSet: string[] = [];\n    let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n    while (curr) {\n        const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR)!;\n        const entryPrefix = getPrefix(cslp);\n        const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n            entryPrefix\n        );\n        if (!hasSamePrevPrefix) {\n            cslpSet.unshift(cslp);\n        }\n        curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n    }\n    return cslpSet.map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAuC;AACvC,uBAAwC;AASjC,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,QAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,CAAC,UAAU;AACX;AAAA,EACJ;AACA,QAAM,oBAAgB,wCAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AApD1D;AAqDI,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,wCAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,wCAAuB;AACtD,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,YAAO,UAAK,kBAAL,mBAAoB,QAAQ,IAAI,wCAAuB;AAAA,EAClE;AACA,SAAO,QAAQ,IAAI,CAAC,aAAS,wCAAuB,IAAI,CAAC;AAC7D;","names":[]}