{"version":3,"file":"elementUtil.mjs","sources":["../../../../src/utils/elementUtil.ts"],"sourcesContent":["import {\n    Container,\n    ElementOption,\n    elementType,\n    FormatterVariable,\n    MyElement,\n    MyHtmlElement,\n    PageUnit,\n    Panel,\n    Point,\n    PointLabel,\n    Position,\n    PreviewWrapper,\n    Provider,\n    RuntimeElementOption,\n    SvgData,\n    TableCellElement,\n    TableHeadProviderCellElement\n} from '@myprint/design/types/entity';\nimport { elementTypeContainerList, fontMap } from '@myprint/design/constants/common';\nimport { _defaultVal, generateUUID, mitt, parse, stringify, to } from './utils';\nimport { CSSProperties, reactive, Ref } from 'vue-demi';\nimport { formatDate } from './timeUtil';\nimport { px2unit, unit2px, unit2unit } from '@myprint/design/utils/devicePixelRatio';\nimport { arrayRemove } from '@myprint/design/utils/arrays';\nimport { useAppStoreHook as appStore } from '@myprint/design/stores/app';\nimport { updatePanel } from '@myprint/design/plugins/moveable/moveable';\nimport {\n    findTableHeadDeep,\n    findUpperCell,\n    handleTableCellInitHeight,\n    recursionHandleTableHead\n} from '@myprint/design/utils/table/dataTable';\nimport numberUtil, { _defaultNum } from '@myprint/design/utils/numberUtil';\nimport { isEmpty, isNil } from 'lodash';\n\n// export function displayModel(displayModel?: DisplayModel) {\n//     if (displayModel) {\n//         appStore().displayModel = displayModel;\n//     }\n//     return appStore().displayModel;\n// }\n\nexport function displayDesign(element: MyElement) {\n    return !displayPreview(element);\n}\n\nexport function displayPreview(element: MyElement) {\n    return element.runtimeOption.previewIs;\n}\n\n// export function displayModelPrint() {\n//     return appStore().displayModel == 'print';\n// }\n\nexport function setCurrentPanel(panel: Panel) {\n    appStore().currentPanel = panel;\n    appStore().lastPageUnit = panel.pageUnit;\n}\n\nexport function getCurrentPanel(panel?: Panel): Panel {\n    return panel != null ? panel : appStore().currentPanel as Panel;\n}\n\nexport function setPreviewData(previewData?: any[]) {\n    appStore().previewData = previewData == null ? [] : previewData;\n}\n\nexport function getPreviewData() {\n    return appStore().previewData == null ? [] : appStore().previewData;\n}\n\nexport function setProvider(provider?: Provider) {\n    if (provider == null) {\n        to({}, appStore().provider);\n    } else {\n        to(provider, appStore().provider);\n    }\n}\n\nexport function getProvider() {\n    return appStore().provider == null ? {} as Provider : appStore().provider;\n}\n\nexport function getRecursionParentPanel(element: MyElement): Panel {\n    const panel = element.runtimeOption.parent as Panel;\n    if (panel == null) {\n        return null!;\n    }\n    if (panel.pageUnit != null) {\n        return panel;\n    }\n    return getRecursionParentPanel(panel as any);\n}\n\nexport function getCurrentPanelUnit(panel?: Panel): PageUnit {\n    return _defaultVal(getCurrentPanel(panel).pageUnit, 'px');\n}\n\nexport function setCurrentElement(element: MyElement[]) {\n    appStore().currentElement = element;\n    mitt.emit('changeElement');\n}\n\nexport function valueUnit(value: number | undefined, panel?: Panel) {\n    return value + getCurrentPanel(panel).pageUnit;\n}\n\nexport function widthValueUnit(element: MyElement) {\n    return element.runtimeOption.workEnvironment == 'DataTable' ? '100%' : (element.width + getCurrentPanel(element.runtimeOption.parent as Panel).pageUnit);\n}\n\nexport function heightValueUnit(element: MyElement) {\n    return element.runtimeOption.workEnvironment == 'DataTable' ? '100%' : (element.height + getCurrentPanel().pageUnit);\n}\n\nexport function getPositionX(element: MyElement) {\n    if (element.runtimeOption.parent!.x) {\n        return numberUtil.sum(element.x, element.runtimeOption.parent!.x);\n    }\n    return element.x;\n}\n\nexport function getPositionY(element: MyElement) {\n    if (element.runtimeOption.parent!.y) {\n        return element.y + element.runtimeOption.parent!.y;\n    }\n    return element.y;\n}\n\nexport function width(element: MyElement) {\n    if (['DottedVerticalLine', 'VerticalLine'].includes(element.type)) {\n        return element.option.borderWidth + 0.6;\n    }\n    return element.width;\n}\n\nexport function height(element: MyElement) {\n    if (['DottedHorizontalLine', 'HorizontalLine'].includes(element.type)) {\n        return element.option.borderWidth + 2;\n    }\n    return element.height;\n}\n\nexport function clearPanel(panel: Panel) {\n    panel.pageHeader = undefined;\n    panel.pageFooter = undefined;\n    panel.elementList = [];\n    panel.auxiliaryLineList = [];\n}\n\nexport function initPanel(panel: Panel, provider: Ref<Provider>) {\n    panel.name == null && (panel.name = '新模版');\n    panel.width == null && (panel.width = _defaultNum(provider.value.width, 210));\n    panel.height == null && (panel.height = _defaultNum(provider.value.height, 297));\n    panel.pageSize == null && (panel.pageSize = _defaultVal(provider.value.pageSize, 'A4'));\n    panel.fontSizeUnit == null && (panel.fontSizeUnit = _defaultVal(provider.value.fontSizeUnit, 'px'));\n    panel.pageUnit == null && (panel.pageUnit = _defaultVal(provider.value.pageUnit, 'mm'));\n    panel.dragSnapPanelIs == null && (panel.dragSnapPanelIs = provider.value.dragSnapPanelIs);\n    panel.dragSnapIs == null && (panel.dragSnapIs = provider.value.dragSnapIs);\n    panel.elementList == undefined && (panel.elementList = []);\n    panel.groupList == null && (panel.groupList = []);\n    panel.auxiliaryLineList == null && (panel.auxiliaryLineList = []);\n}\n\nexport function none(element?: MyElement) {\n    if (element == null) {\n        return;\n    }\n    element.runtimeOption.status = 'NONE';\n    if (element.elementList != null) {\n        for (let childrenElement of element.elementList) {\n            none(childrenElement);\n        }\n    }\n}\n\nexport function handle(element: Container) {\n    element.runtimeOption.status = 'HANDLE';\n}\n\nexport function recursionForElement(container: Panel, callback: (element: MyElement) => void) {\n    recursionElement(container, callback);\n    recursionElement(container.pageFooter!, callback);\n    recursionElement(container.pageHeader!, callback);\n}\n\nexport function recursionElement(container: Container, callback: (element: MyElement) => void) {\n    if (container?.elementList?.length! > 0) {\n        // console.log(container)\n        for (let elementTmp of container!.elementList!) {\n            callback(elementTmp);\n            recursionElement(elementTmp, callback);\n        }\n    }\n}\n\nexport function innerElementIs(point: Point, element: MyElement, parentElement: MyElement) {\n    return (!(elementTypeContainerList.includes(element.type)  /*容器目前不支持嵌套*/\n            && elementTypeContainerList.includes(parentElement.type))) && point.x >= parentElement.runtimeOption.x && point.x <= parentElement.runtimeOption.x + parentElement.runtimeOption.width\n        && point.y >= parentElement.runtimeOption.y && point.y <= parentElement.runtimeOption.y + parentElement.runtimeOption.height;\n}\n\nexport function parentInitElement(panel: Panel, parent: Container, element: MyElement, index: number) {\n    initElement(panel, element, index);\n    installParentElement(parent, element);\n    if (element.elementList?.length > 0) {\n        for (let i = 0; i < element.elementList.length; i++) {\n            let elementTmp = element.elementList[i];\n            parentInitElement(panel, element, elementTmp, i);\n        }\n    }\n}\n\nexport function initElement(panel: Panel, element: MyElement, index: number) {\n    if (element == null) {\n        return;\n    }\n\n    if (element.option == null) {\n        element.option = {} as ElementOption;\n    }\n    if (element.runtimeOption == null) {\n        element.runtimeOption = {} as RuntimeElementOption;\n    }\n    element.runtimeOption.index = index;\n    element.runtimeOption.status = 'NONE';\n\n    let initWidth = 0, initHeight = 0, initBorderWidth = 0;\n\n    if (!element.id) {\n        element.id = generateUUID();\n\n        switch (element.type) {\n            case 'Text':\n                initWidth = 30;\n                initHeight = 8;\n                break;\n            case 'DataTable':\n                initWidth = 200;\n                initHeight = 30;\n                if (element.option.tableHeightType == null) {\n                    element.option.tableHeightType = 'AUTO';\n                    // element.option.tableHeightType = \"FIXED\"\n                }\n\n                if (element.tableBodyList == undefined) {\n                    let indexView = {\n                        type: 'Text',\n                        field: 'autoIncrement',\n                        width: unit2unit('mm', getCurrentPanelUnit(), 10),\n                        label: '序号',\n                        height: element.columnList[0].height,\n                        option: <ElementOption>{\n                            disableSort: 1,\n                            disableEnable: 0,\n                            enable: 1,\n                            formatter: '{{autoIncrement}}'\n                        }\n                    } as TableHeadProviderCellElement;\n\n                    indexView.columnBody = {\n                        type: 'Text',\n                        height: indexView.height,\n                        data: '1',\n                        option: { ...indexView.option }\n                    } as TableCellElement;\n\n                    element.columnList.unshift(indexView);\n\n                    const deep = findTableHeadDeep(element.columnList, 0) + 1;\n                    // console.log(deep);\n                    const tableHeadListList: TableCellElement[][] = [...Array.from({ length: deep }, (_) => [])];\n                    recursionHandleTableHead(tableHeadListList, element.columnList, 0);\n\n                    handleTableCellInitHeight(tableHeadListList);\n                    // console.log(tableHeadListList);\n                    element.tableHeadList = tableHeadListList;\n                    element.tableBodyList = [[]];\n\n                    const floorHeaderList = tableHeadListList[deep - 1];\n                    let maxHeadHeight = -1, maxBodyHeight = -1;\n                    // let tableWidth = 0;\n\n\n                    for (let i = 0; i < floorHeaderList.length; i++) {\n                        let tableHeadCellElement = floorHeaderList[i];\n                        if (tableHeadCellElement == null) {\n                            tableHeadCellElement = findUpperCell(tableHeadListList, i, deep - 1)!;\n                        }\n                        if (tableHeadCellElement == null) {\n                            continue;\n                        }\n\n                        if (tableHeadCellElement.columnBody == undefined) {\n                            tableHeadCellElement.columnBody = {\n                                height: numberUtil.div(tableHeadCellElement.height, tableHeadCellElement.rowspan),\n                                data: tableHeadCellElement.data,\n                                type: 'Text',\n                                option: tableHeadCellElement.option\n                            } as TableCellElement;\n                        }\n                        if (tableHeadCellElement.columnBody.type == null) {\n                            tableHeadCellElement.columnBody.type = 'Text';\n                        }\n                        if (tableHeadCellElement.columnBody.data == null) {\n                            tableHeadCellElement.columnBody.data = tableHeadCellElement.data;\n                        }\n                        if (!tableHeadCellElement.columnBody.height) {\n                            tableHeadCellElement.columnBody.height = numberUtil.div(tableHeadCellElement.height, tableHeadCellElement.rowspan);\n                        }\n                        // console.log(tableHeadCellElement.columnBody.width);\n                        tableHeadCellElement.columnBody.width = tableHeadCellElement.width;\n                        tableHeadCellElement.type = 'Text';\n                        tableHeadCellElement.data = tableHeadCellElement.label;\n                        tableHeadCellElement.columnBody.rowspan = 1;\n                        tableHeadCellElement.columnBody.colspan = 1;\n\n                        element.tableBodyList[0].push(tableHeadCellElement.columnBody as TableCellElement);\n\n                        if (maxHeadHeight < tableHeadCellElement.height) {\n                            maxHeadHeight = tableHeadCellElement.height;\n                        }\n                        if (maxBodyHeight < tableHeadCellElement.columnBody.height) {\n                            maxBodyHeight = tableHeadCellElement.columnBody.height;\n                        }\n\n                        tableHeadCellElement.columnBody = undefined!;\n                    }\n\n                    if (element.option.tableHeightType == 'AUTO') {\n                        element.height = maxHeadHeight + maxBodyHeight;\n                    }\n                }\n                break;\n            case 'Image':\n                initWidth = 30;\n                initHeight = 30;\n                break;\n            case 'Rect':\n                initWidth = 30;\n                initHeight = 30;\n                initBorderWidth = px2unit(1);\n                break;\n            case 'HorizontalLine':\n            case 'DottedHorizontalLine':\n                initWidth = 30;\n                initBorderWidth = px2unit(1);\n                initHeight = px2unit(initBorderWidth + 3);\n                break;\n            case 'VerticalLine':\n            case 'DottedVerticalLine':\n                initHeight = 30;\n                initBorderWidth = px2unit(1);\n                initWidth = px2unit(initBorderWidth + 3);\n                break;\n            case 'SvgPolygonLine':\n            case 'SvgBezierCurve':\n            case 'SvgBezierCurveThree':\n            case 'SvgLine':\n                if (element.data) {\n                    const data = JSON.parse(element.data) as SvgData;\n                    const points = data.points as Point[];\n                    const controlPoints = data.controlPoints as Point[];\n                    const dataJson = {} as SvgData;\n                    if (points) {\n                        for (let point of points) {\n                            point.x = unit2px(point.x, panel);\n                            point.y = unit2px(point.y, panel);\n                        }\n                        dataJson.points = points;\n                    }\n\n                    if (controlPoints) {\n                        for (let point of controlPoints) {\n                            point.x = unit2px(point.x, panel);\n                            point.y = unit2px(point.y, panel);\n                        }\n                        dataJson.controlPoints = controlPoints;\n                    }\n\n                    // console.log(tmpDataList)\n                    element.data = JSON.stringify(dataJson);\n                }\n                break;\n        }\n    }\n\n    if (element.type == 'Text' || element.type == 'TextTime') {\n        if (!element.contentType) {\n            element.contentType = 'Text';\n        }\n    }\n\n    if (element.type == 'DataTable') {\n        for (let i = 0; i < element.tableHeadList.length; i++) {\n            const headList = element.tableHeadList[i];\n            for (let j = 0; j < headList.length; j++) {\n                const column = headList[j];\n                if (column) {\n                    parentInitElement(panel, element, column, i);\n                    column.runtimeOption.workEnvironment = 'DataTable';\n                    column.runtimeOption.cellType = 'Head';\n                }\n            }\n        }\n\n        for (let i = 0; i < element.tableBodyList.length; i++) {\n            const bodyList = element.tableBodyList[i];\n            for (let j = 0; j < bodyList.length; j++) {\n                parentInitElement(panel, element, bodyList[j], element.tableHeadList.length);\n                bodyList[j].runtimeOption.workEnvironment = 'DataTable';\n                bodyList[j].runtimeOption.cellType = 'Body';\n            }\n        }\n\n        if (!element.statisticsList) {\n            element.statisticsList = [];\n        }\n        for (let i = 0; i < element.statisticsList.length; i++) {\n            const statisticsList = element.statisticsList[i];\n            for (let j = 0; j < statisticsList.length; j++) {\n                parentInitElement(panel, element, statisticsList[j], element.tableHeadList.length);\n                statisticsList[j].runtimeOption.workEnvironment = 'DataTable';\n                statisticsList[j].runtimeOption.cellType = 'Statistics';\n            }\n        }\n    }\n\n    if (['Text', 'TextTime', 'PageNum', 'DataTable'].includes(element.type)) {\n        if (!element.option.fontFamily) {\n            element.option.fontFamily = 'heiti';\n        }\n        if (element.option.fontSize == null) {\n            element.option.fontSize = 13;\n        }\n    }\n\n    // if (elementTypeLineList.includes(element.type)) {\n    //     if (!element.option.lineHeight) {\n    //         element.option.lineHeight = 0.9;\n    //     }\n    //     if (!element.option.color) {\n    //         element.option.color = '#000';\n    //     }\n    // }\n\n    // if (['DottedHorizontalLine', 'DottedVerticalLine']) {\n    //     if (!element.option.dottedStyle) {\n    //         element.option.dottedStyle = 'dashed';\n    //     }\n    // }\n\n    if (element.width == null) {\n        element.width = initWidth;\n    }\n\n    if (element.height == null) {\n        element.height = initHeight;\n    }\n\n    if (element.option.opacity == null) {\n        element.option.opacity = 1;\n    }\n    // 初始化旋转\n    if (!element.option.rotate) {\n        element.option.rotate = 0;\n    }\n\n    if (element.option.padding == null) {\n        element.option.padding = {} as Position;\n    }\n\n    element.runtimeOption.init = {} as Container;\n    element.runtimeOption.init.runtimeOption = {} as RuntimeElementOption;\n    element.runtimeOption.width = unit2px(element.width, panel);\n    element.runtimeOption.height = unit2px(element.height, panel);\n    element.runtimeOption.x = unit2px(element.x, panel);\n    element.runtimeOption.y = unit2px(element.y, panel);\n    element.runtimeOption.rotate = element.option.rotate;\n    element.runtimeOption.init.x = element.runtimeOption.x;\n    element.runtimeOption.init.y = element.runtimeOption.y;\n    element.runtimeOption.init.width = element.runtimeOption.width;\n    element.runtimeOption.init.height = element.runtimeOption.height;\n    element.runtimeOption.init.runtimeOption.rotate = element.runtimeOption.rotate;\n    // element.runtimeOption.translate = { x: 0, y: 0 };\n    if (element.option.margin == null) {\n        element.option.margin = {} as Position;\n    }\n}\n\nexport function elementGroup(htmlElementList: Array<MyHtmlElement>) {\n    const panel = getCurrentPanel();\n    const idList = flatIdList(htmlElementList);\n    const index = findGroup(idList);\n\n    for (let htmlElementListElement of htmlElementList) {\n        htmlElementListElement.element.groupIs = true;\n    }\n\n    if (index >= 0) {\n        panel.groupList[index] = idList;\n    } else {\n        panel.groupList.push(idList);\n    }\n}\n\nexport function groupListToMap(groupList: string[][]) {\n    const map = {} as Record<string, number>;\n    for (let i = 0; i < groupList.length; i++) {\n        for (let groupListElement of groupList[i]) {\n            map[groupListElement] = i;\n        }\n    }\n    return map;\n}\n\nexport function elementUngroup(htmlElementList: Array<MyHtmlElement>) {\n    const panel = getCurrentPanel();\n    const idList = flatIdList(htmlElementList);\n    const index = findGroup(idList);\n\n    for (let htmlElementListElement of htmlElementList) {\n        htmlElementListElement.element.groupIs = false;\n    }\n\n    if (index >= 0) {\n        panel.groupList.splice(index, 1);\n    }\n}\n\nexport function elementDown(elementList: MyElement[], layer: number) {\n    elementList.sort(function(a, b) {\n        return a.runtimeOption.index - b.runtimeOption.index;\n    });\n\n    for (let myElement of elementList) {\n        let newLayer = myElement.runtimeOption.index - layer;\n        const parentElementList = myElement.runtimeOption.parent!.elementList!;\n        if (newLayer < 0) {\n            newLayer = 0;\n        }\n\n        const tmp = parentElementList[myElement.runtimeOption.index];\n\n        for (let i = myElement.runtimeOption.index; i > newLayer; i--) {\n            // console.log(i)\n            parentElementList[i] = parentElementList[i - 1];\n            parentElementList[i].runtimeOption.index = i;\n        }\n        parentElementList[newLayer] = tmp;\n        tmp.runtimeOption.index = newLayer;\n    }\n    updatePanel(elementList);\n}\n\nexport function elementUp(elementList: MyElement[], layer: number) {\n    elementList.sort(function(a, b) {\n        return a.runtimeOption.index - b.runtimeOption.index;\n    });\n\n    for (let myElement of elementList) {\n        let newLayer = myElement.runtimeOption.index + layer;\n        const parentElementList = myElement.runtimeOption.parent!.elementList!;\n        if (newLayer > parentElementList.length - 1) {\n            newLayer = parentElementList.length - 1;\n        }\n        // console.log('123,', newLayer)\n\n        const tmp = parentElementList[myElement.runtimeOption.index];\n\n        for (let i = myElement.runtimeOption.index; i < newLayer; i++) {\n            // console.log(i)\n            parentElementList[i] = parentElementList[i + 1];\n            parentElementList[i].runtimeOption.index = i;\n        }\n        parentElementList[newLayer] = tmp;\n        tmp.runtimeOption.index = newLayer;\n    }\n    updatePanel(elementList);\n}\n\nfunction flatIdList(htmlElementList: Array<MyHtmlElement | MyHtmlElement[]>) {\n    const idList: string[] = [];\n    for (let htmlElementListElement of htmlElementList) {\n        if (Array.isArray(htmlElementListElement)) {\n            for (let htmlElementListElementElement of htmlElementListElement) {\n                idList.push(htmlElementListElementElement.element.id);\n            }\n        } else {\n            idList.push(htmlElementListElement.element.id);\n        }\n    }\n    return idList;\n}\n\nfunction findGroup(idList: string[]) {\n    const panel = getCurrentPanel();\n    for (let i = 0; i < panel.groupList.length; i++) {\n        const groupListKey = panel.groupList[i];\n        if (groupListKey.some(item => {\n            return idList.includes(item);\n        })) {\n            return i;\n        }\n    }\n    return -1;\n}\n\nexport function element2PreviewWrapper(element: MyElement | PreviewWrapper): PreviewWrapper {\n    const previewWrapper = parse(stringify(element, 'parent', 'target', 'elementList', 'previewWrapperList', 'nestColumnList'), reactive({}) as PreviewWrapper);\n    previewWrapper.id = generateUUID();\n    previewWrapper.heightIs = true;\n    previewWrapper.runtimeOption.parent = element.runtimeOption.parent;\n    previewWrapper.runtimeOption.previewIs = true;\n\n    // const oldPreviewWrapper = element as PreviewWrapper;\n    // if (oldPreviewWrapper.previewWrapperList != null) {\n    //     // const pList: PreviewWrapper[] = []\n    //     previewWrapper.previewWrapperList = [];\n    //     for (let myElement of oldPreviewWrapper.previewWrapperList) {\n    //         previewWrapper.previewWrapperList.push(element2PreviewWrapper(myElement));\n    //     }\n    // }\n\n    if (element.elementList != null) {\n        // const pList: PreviewWrapper[] = []\n        previewWrapper.previewWrapperList = [];\n        for (let myElement of element.elementList) {\n            previewWrapper.previewWrapperList.push(element2PreviewWrapper(myElement));\n        }\n    }\n\n    if (element.tableHeadList != null && element.tableHeadList.length > 0) {\n        for (let i = 0; i < element.tableHeadList.length; i++) {\n            const rowList = element.tableHeadList[i];\n            for (let j = 0; j < rowList.length; j++) {\n                if (rowList[j] == null) {\n                    continue;\n                }\n                previewWrapper.tableHeadList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent;\n            }\n        }\n    }\n\n    if (element.tableBodyList != null) {\n        // const pList: PreviewWrapper[] = []\n        for (let i = 0; i < element.tableBodyList.length; i++) {\n            const rowList = element.tableBodyList[i];\n            for (let j = 0; j < rowList.length; j++) {\n                if (rowList[j] == null) {\n                    continue;\n                }\n                previewWrapper.tableBodyList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent;\n            }\n        }\n    }\n\n    if (element.statisticsList != null) {\n        // const pList: PreviewWrapper[] = []\n        for (let i = 0; i < element.statisticsList.length; i++) {\n            const rowList = element.statisticsList[i];\n            for (let j = 0; j < rowList.length; j++) {\n                if (rowList[j] == null) {\n                    continue;\n                }\n                previewWrapper.statisticsList[i][j].runtimeOption.parent = rowList[j].runtimeOption.parent;\n            }\n        }\n    }\n    return previewWrapper;\n}\n\nexport function installPanelParentElement(panel: Panel) {\n    installParentElement(panel, panel.pageHeader);\n    installParentElement(panel, panel.pageFooter);\n    installListParentElement(panel, panel.elementList);\n}\n\nexport function installListParentElement(parent: Container, elementList?: Array<MyElement>) {\n    for (let element of elementList!) {\n        installParentElement(parent, element);\n        if (element.type == 'DataTable') {\n            for (let tableHeadListElement of element.tableHeadList) {\n                for (let tableCellElement of tableHeadListElement) {\n                    installParentElement(element, tableCellElement);\n                }\n            }\n            for (let tableHeadListElement of element.tableBodyList) {\n                for (let tableCellElement of tableHeadListElement) {\n                    installParentElement(element, tableCellElement);\n                }\n            }\n            for (let tableHeadListElement of element.statisticsList) {\n                for (let tableCellElement of tableHeadListElement) {\n                    installParentElement(element, tableCellElement);\n                }\n            }\n        }\n        if (element.elementList != null) {\n            installListParentElement(element, element.elementList);\n        }\n    }\n\n}\n\nexport function installParentElement(parent?: Container, element?: MyElement) {\n    if (!element) {\n        return;\n    }\n    element.runtimeOption.parent = parent;\n}\n\nexport function clearParent(element: MyElement) {\n    if (element.runtimeOption == null || element.runtimeOption.parent == undefined) {\n        return;\n    }\n    element.runtimeOption.parent = undefined;\n}\n\nexport function addElement(panel: Panel, parent: Container, element: MyElement) {\n    if (parent.elementList == null) {\n        parent.elementList = [];\n    }\n    parent.elementList.push(element);\n    initElement(panel, element, parent.elementList.length - 1);\n    installParentElement(parent, element);\n}\n\nexport function removeElement(element: MyElement) {\n    if (element.runtimeOption.parent == null) {\n        return;\n    }\n    if (element.runtimeOption.parent.elementList == null) {\n        return;\n    }\n    handleElementType(element)\n        .handle('PageHeader', () =>\n            (element.runtimeOption.parent as Panel).pageHeader = undefined\n        )\n        .handle('PageFooter', () =>\n            (element.runtimeOption.parent as Panel).pageFooter = undefined\n        )\n        // .handle('PrivateDragRectElement', () => {\n        //         const elementList: Array<MyElement> = [];\n        //\n        //         for (let valueElement of getCurrentPanel().elementList!) {\n        //             if ('SELECT' == valueElement.runtimeOption.status) {\n        //                 elementList.push(valueElement);\n        //             }\n        //         }\n        //\n        //         for (let valueElement of elementList) {\n        //             arrayRemove(valueElement.runtimeOption.parent!.elementList, valueElement);\n        //         }\n        //         element.x = undefined!;\n        //     }\n        // )\n        .end(() => {\n            arrayRemove(element.runtimeOption.parent!.elementList, element);\n        });\n}\n\nexport function handleElementType(element: Container) {\n    const handleList: any[] = [];\n    const handlers = {\n        handle(type: elementType, callback: () => void) {\n            handleList.push(type);\n            if (element.type === type) {\n                callback();\n            }\n            return handlers;\n        },\n        pageHeader(callback: () => void) {\n            handleList.push('PageHeader');\n            if (isPageHeader(element)) {\n                callback();\n            }\n            return handlers;\n        },\n        pageFooter(callback: () => void) {\n            handleList.push('PageFooter');\n            if (isPageFooter(element)) {\n                callback();\n            }\n            return handlers;\n        },\n        end(callback: () => void) {\n            // console.log(handleList)\n            if (!handleList.includes(element.type)) {\n                callback();\n            }\n        }\n    };\n\n    return handlers;\n}\n\nfunction getFontSizeUnit(panel?: Panel) {\n    const currentPanel = getCurrentPanel(panel);\n    return currentPanel.fontSizeUnit == null ? 'px' : currentPanel.fontSizeUnit;\n}\n\nexport function defaultPreviewData(previewData: any) {\n    return previewData == null || previewData.length == 0 ? [{}] : previewData;\n}\n\nexport function elementCommonPositionStyle(element: MyElement): CSSProperties {\n    const fontFamily = element.option.fontFamily || 'heiti';\n    return {\n        // width: element.runtimeOption.width + 'px',\n        // left: element.runtimeOption.x + 'px',\n        // top: element.runtimeOption.y + 'px',\n        // maxWidth: widthValueUnit(element),\n        // height: element.runtimeOption.height + 'px',\n        // maxHeight: heightValueUnit(element),\n        fontFamily: fontMap[fontFamily],\n        fontSize: element.option.fontSize + getFontSizeUnit(getRecursionParentPanel(element))\n    } as CSSProperties;\n}\n\nexport function elementBarCodeValueStyle(element: MyElement, cssStyle?: CSSProperties): CSSProperties {\n    if (cssStyle == null) {\n        cssStyle = {} as CSSProperties;\n    }\n\n    const option = element.option!;\n    const panel = element.runtimeOption.parent as Panel;\n    let textDecoration = '';\n    if (option.underline) {\n        textDecoration = textDecoration + 'underline ';\n    }\n    if (option.lineThrough) {\n        textDecoration = textDecoration + 'line-through ';\n    }\n\n    option.opacity != null && (cssStyle.opacity = option.opacity);\n    option.color && (cssStyle.color = option.color);\n    option.background && (cssStyle.background = option.background);\n    option.bold && (cssStyle.fontWeight = option.bold ? 'bold' : 'normal');\n    textDecoration && (cssStyle.textDecoration = textDecoration);\n    option.italic && (cssStyle.fontStyle = option.italic ? 'italic' : 'normal');\n    if (option.textAlign) {\n        cssStyle.justifyContent = option.textAlign;\n    }\n\n    if (option.lineBreak == 0) {\n        cssStyle.whiteSpace = 'nowrap';\n    }\n\n    if (option.lineHeight != null) {\n        cssStyle.lineHeight = valueUnit(option.lineHeight, panel);\n    }\n\n    if (option.verticalAlign) {\n        cssStyle.alignItems = option.verticalAlign;\n    }\n    return cssStyle;\n}\n\nexport function elementCommonStyle(element: MyElement, cssStyle?: CSSProperties): CSSProperties {\n    if (cssStyle == null) {\n        cssStyle = elementCommonPositionStyle(element);\n    }\n    const option = element.option!;\n    const panel = getRecursionParentPanel(element) as Panel;\n    let textDecoration = '';\n    if (option.underline) {\n        textDecoration = textDecoration + 'underline ';\n    }\n    if (option.lineThrough) {\n        textDecoration = textDecoration + 'line-through ';\n    }\n\n    option.opacity != null && (cssStyle.opacity = option.opacity);\n    option.color && (cssStyle.color = option.color);\n    option.background && (cssStyle.background = option.background);\n    option.bold && (cssStyle.fontWeight = option.bold ? 'bold' : 'normal');\n    textDecoration && (cssStyle.textDecoration = textDecoration);\n    option.italic && (cssStyle.fontStyle = option.italic ? 'italic' : 'normal');\n    if (option.textAlign) {\n        cssStyle.justifyContent = option.textAlign;\n    }\n\n    if (option.lineBreak == 0) {\n        cssStyle.whiteSpace = 'nowrap';\n    }\n\n    if (option.lineHeight != null) {\n        cssStyle.lineHeight = valueUnit(option.lineHeight, panel);\n    }\n\n    if (option.verticalAlign) {\n        cssStyle.alignItems = option.verticalAlign;\n    }\n\n    if (element.runtimeOption.workEnvironment == 'DataTable') {\n        let extHeight = 0;\n        const parent = (element.runtimeOption.parent as MyElement);\n        // if (parent == null) {\n        //     console.log(element);\n        // }\n        if (parent != null) {\n            if (parent.option.borderAll) {\n                // 加上边框高度\n                if ((element as TableCellElement).rowspan > 1) {\n                    extHeight = (element as TableCellElement).rowspan - 1;\n                }\n            }\n            if (parent.option.tableBodyHeightType == 'FIXED') {\n                cssStyle.height = (element.runtimeOption.init.height + extHeight) + 'px';\n                cssStyle.maxHeight = (element.runtimeOption.init.height + extHeight) + 'px';\n                cssStyle.overflow = 'hidden';\n            }\n        } else {\n        }\n\n        if (element.type == 'Text' && element.contentType == 'Barcode') {\n            cssStyle.width = element.runtimeOption.width + 'px';\n            cssStyle.maxWidth = element.runtimeOption.width + 'px';\n        }\n        // cssStyle.maxWidth = (element.runtimeOption.init.width - 1) + 'px';\n    } else {\n        if (option.borderAll) {\n            cssStyle.border = '1px solid black';\n            cssStyle.boxSizing = 'border-box';\n        }\n    }\n\n    if (!isNil(option.borderRadius)) {\n        cssStyle.borderRadius = valueUnit(option.borderRadius, panel);\n    }\n\n    if (!isNil(option.padding)) {\n        if (option.padding.top) cssStyle.paddingTop = valueUnit(option.padding.top, panel);\n        if (option.padding.bottom) cssStyle.paddingBottom = valueUnit(option.padding.bottom, panel);\n        if (option.padding.left) cssStyle.paddingLeft = valueUnit(option.padding.left, panel);\n        if (option.padding.right) cssStyle.paddingRight = valueUnit(option.padding.right, panel);\n    }\n\n    if (option.margin) {\n        let subWidth = 0, subHeight = 0;\n        if (option.margin.top) {\n            cssStyle.marginTop = valueUnit(option.margin.top, panel);\n            subHeight += unit2px(option.margin.top, panel);\n        }\n        if (option.margin.bottom) {\n            cssStyle.marginBottom = valueUnit(option.margin.bottom, panel);\n            subHeight += unit2px(option.margin.bottom, panel);\n        }\n        if (option.margin.left) {\n            cssStyle.marginLeft = valueUnit(option.margin.left, panel);\n            subWidth += unit2px(option.margin.left, panel);\n        }\n        if (option.margin.right) {\n            cssStyle.marginRight = valueUnit(option.margin.right, panel);\n            subWidth += unit2px(option.margin.right, panel);\n        }\n        if (subWidth > 0) {\n            cssStyle.width = `calc(100% - ${subWidth}px)`;\n        }\n        if (subHeight > 0) {\n            cssStyle.height = `calc(100% - ${subHeight}px)`;\n        }\n\n    }\n    return cssStyle;\n}\n\nexport function isPageHeader(element: Container) {\n    return element != null && element.type == 'PageHeader';\n}\n\nexport function isPageFooter(element: Container) {\n    return element != null && element.type == 'PageFooter';\n}\n\nexport function formatter(element: MyElement, variable: FormatterVariable = {} as FormatterVariable): string {\n    if (element.option.formatter) {\n        let contentData: any;\n        if (element.type == 'TextTime') {\n            const variableNames = extractVariableNames(element.option.formatter);\n            if (variableNames == null || variableNames.length == 0) {\n                contentData = '不支持的变量';\n            } else {\n                try {\n                    variable[variableNames[0]] = formatDate(variable.nowDate ? variable.nowDate : new Date(), variableNames[0]);\n                    contentData = replaceVariables(element.option.formatter, variable);\n                } catch (e) {\n                    contentData = '不支持的变量';\n                }\n            }\n        } else {\n            contentData = replaceVariables(element.option.formatter, variable);\n        }\n        // console.log(contentData)\n        return contentData;\n    }\n    return element.data;\n}\n\nexport function extractVariableNames(template: string): string[] {\n    const regex = /\\{\\{(.+?)}}/g;\n    const matches = template.match(regex);\n    if (!matches) {\n        return [];\n    }\n    // console.log(matches)\n    return matches.map(match => match.slice(2, -2));\n}\n\nfunction parseVariables(str: string): { name: string, defaultValue: string }[] {\n    const regex = /\\{\\{(.*?)}}/g; // 匹配 {{ 及其内部内容 }}\n    const matches = str.match(regex); // 匹配结果数组\n\n    if (!matches) {\n        return []; // 没有匹配到任何变量\n    }\n\n    // 解析变量名和默认值\n    const variables: { name: string, defaultValue: string }[] = [];\n    for (const match of matches) {\n        const parts = match.slice(2, -2).split('::'); // 去除 {{ 和 }} 并按冒号分割\n        const name = parts[0].trim(); // 变量名\n        const defaultValue = parts[1] ? parts[1].trim() : ''; // 默认值（如果有的话）\n\n        variables.push({ name, defaultValue });\n    }\n\n    return variables;\n}\n\nexport function replaceVariables(str: string, params: { [key: string]: any }): string {\n    let result = str;\n    const variables = parseVariables(str);\n\n    for (const variable of variables) {\n        const { name, defaultValue } = variable;\n        const value = params[name] !== undefined ? params[name] : defaultValue;\n        result = result.replace(new RegExp(isEmpty(defaultValue) ? `{{${name}}}` : `{{${name}::${defaultValue}}}`, 'g'), value);\n    }\n\n    return result;\n}\n\nexport function changePageSize(val?: any) {\n    const panel = getCurrentPanel();\n    if (val) {\n        panel.width = unit2unit('mm', panel.pageUnit, val.width);\n        panel.height = unit2unit('mm', panel.pageUnit, val.height);\n    }\n    // panel.pageSize = unit2unit('mm', panel.pageUnit,  val.value\n    if (panel.pageHeader != null) {\n        panel.pageHeader.width = unit2unit('mm', panel.pageUnit, panel.width);\n        panel.pageHeader.runtimeOption.width = unit2px(panel.width);\n    }\n    if (panel.pageFooter != null) {\n        panel.pageFooter.width = unit2unit('mm', panel.pageUnit, panel.width);\n        panel.pageFooter.y = unit2unit('mm', panel.pageUnit, panel.height - panel.pageFooter.height);\n        panel.pageFooter.runtimeOption.width = unit2px(panel.width);\n    }\n    mitt.emit('changePageSize');\n}\n\nexport function changePageUnit() {\n    const panel = getCurrentPanel();\n    // console.log(lastPageUnit)\n    // console.log(panel.pageUnit)\n    panel.width = unit2unit(appStore().lastPageUnit, panel.pageUnit, panel.width);\n    panel.height = unit2unit(appStore().lastPageUnit, panel.pageUnit, panel.height);\n    const { pageHeader, pageFooter, pageUnit } = panel;\n\n    for (let element of panel.elementList!) {\n        computedChangePageUnit(pageUnit, element);\n    }\n\n    if (pageHeader) {\n        computedChangePageUnit(pageUnit, pageHeader);\n    }\n\n    if (pageFooter) {\n        computedChangePageUnit(pageUnit, pageFooter);\n    }\n\n    appStore().lastPageUnit = panel.pageUnit;\n}\n\nfunction computedChangePageUnit(pageUnit: PageUnit, element: MyElement) {\n    element.x = unit2unit(appStore().lastPageUnit, pageUnit, element.x);\n    element.y = unit2unit(appStore().lastPageUnit, pageUnit, element.y);\n    element.width = unit2unit(appStore().lastPageUnit, pageUnit, element.width);\n    element.height = unit2unit(appStore().lastPageUnit, pageUnit, element.height);\n    if (element.option.lineHeight != null) {\n        element.option.lineHeight = unit2unit(appStore().lastPageUnit, pageUnit, element.option.lineHeight);\n    }\n\n    if (element.elementList) {\n        for (let myElement of element.elementList) {\n            computedChangePageUnit(pageUnit, myElement);\n        }\n    }\n}\n\nexport function computedShapeBound(points: Array<PointLabel>): Container {\n    let minX = points[0].x;\n    let minY = points[0].y;\n    let maxX = points[0].x;\n    let maxY = points[0].y;\n\n    for (let i = 1; i < points.length; i++) {\n        let point = points[i];\n        minX = Math.min(minX, point.x);\n        minY = Math.min(minY, point.y);\n        maxX = Math.max(maxX, point.x);\n        maxY = Math.max(maxY, point.y);\n    }\n\n    return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY\n    } as Container;\n}\n\nexport function setElementWidthHeightPx(width: number, height: number, element: MyElement) {\n    setElementWidthPx(width, element);\n    setElementHeightPx(height, element);\n}\n\nexport function setElementWidthPx(width: number, element: MyElement) {\n    element.runtimeOption.width = width;\n    element.runtimeOption.init.width = width;\n    element.width = px2unit(width, getRecursionParentPanel(element));\n}\n\nexport function setElementHeightPx(height: number, element: MyElement) {\n    element.runtimeOption.height = height;\n    element.runtimeOption.init.height = height;\n    element.height = px2unit(height, getRecursionParentPanel(element));\n}\n\nexport function setElementOffsetWidthPx(offsetWidth: number, element: MyElement) {\n    element.runtimeOption.width = element.runtimeOption.init.width + offsetWidth;\n    element.width = px2unit(element.runtimeOption.width, getRecursionParentPanel(element));\n}\n\nexport function recursionUpdateCellParentWidth(columnElement: TableCellElement, offsetX: number, panel: Panel) {\n    columnElement.runtimeOption.width = columnElement.runtimeOption.init.width + offsetX;\n    columnElement.width = px2unit(columnElement.runtimeOption.width, panel);\n    // console.log(columnElement.runtimeOption.cellParent);\n    if (columnElement.runtimeOption.cellParent != null) {\n        recursionUpdateCellParentWidth(columnElement.runtimeOption.cellParent, offsetX, panel);\n    }\n}\n\nexport function recursionUpdateCellParentInitWidth(columnElement: TableCellElement) {\n    columnElement.runtimeOption.init.width = columnElement.runtimeOption.width;\n\n    if (columnElement.runtimeOption.cellParent != null) {\n        recursionUpdateCellParentInitWidth(columnElement.runtimeOption.cellParent);\n    }\n}\n\nexport function multipleElementGetValueList(props: string) {\n    const elementList = appStore().currentElement;\n    const valueList = new Set();\n    if (elementList.length == 0) {\n        return [...valueList];\n    }\n\n    for (let currentElementElement of elementList) {\n        valueList.add(getNestedPropertyValue(currentElementElement, props));\n    }\n\n    return [...valueList];\n}\n\nexport function multipleElementGetValue(props: string) {\n    const elementList = appStore().currentElement;\n    if (elementList.length == 0) {\n        return undefined;\n    }\n\n    const firstValue = getNestedPropertyValue(elementList[0], props);\n    for (let currentElementElement of elementList) {\n        if (getNestedPropertyValue(currentElementElement, props) != firstValue) {\n            return undefined;\n        }\n    }\n    return firstValue;\n}\n\nfunction getNestedPropertyValue(obj: any, propertyPath: any) {\n    const properties = propertyPath.split('.');\n    let currentObj = obj;\n\n    for (let prop of properties) {\n        if (currentObj.hasOwnProperty(prop)) {\n            currentObj = currentObj[prop];\n        } else {\n            return undefined; // 如果属性不存在，返回 undefined\n        }\n    }\n\n    return currentObj;\n}\n\nfunction setNestedPropertyValue(obj: any, propertyPath: any, value: any) {\n    const properties = propertyPath.split('.');\n    // console.log(obj)\n    let currentObj = obj;\n\n    for (let i = 0; i < properties.length - 1; i++) {\n        if (!currentObj.hasOwnProperty(properties[i])) {\n            currentObj[properties[i]] = {};\n        }\n        currentObj = currentObj[properties[i]];\n    }\n\n    currentObj[properties[properties.length - 1]] = value;\n}\n\n\nexport function multipleElementSetValue(props: string, val: any) {\n    // console.log(val);\n    // 修改属性\n    // record(<Snapshot>{\n    //     type: 'Element',\n    //     action: ActionEnum.UPDATE_STYLE,\n    //     elementList: appStore().currentElement\n    // });\n    for (let currentElementElement of appStore().currentElement as MyElement[]) {\n\n        setNestedPropertyValue(currentElementElement, props, val);\n\n        if (currentElementElement.type == 'DataTable') {\n            for (let myElement of currentElementElement.tableHeadList) {\n                for (let tableCellElement of myElement) {\n                    if (tableCellElement != null) {\n                        setNestedPropertyValue(tableCellElement, props, val);\n                    }\n\n                }\n            }\n            // console.log(currentElementElement.bodyList)\n            for (let bodyRowList of currentElementElement.tableBodyList) {\n                for (let myElement of bodyRowList) {\n                    setNestedPropertyValue(myElement, props, val);\n                }\n            }\n            for (let bodyRowList of currentElementElement.statisticsList) {\n                for (let myElement of bodyRowList) {\n                    setNestedPropertyValue(myElement, props, val);\n                }\n            }\n        }\n    }\n}\n\nexport function autoComputedPanelHeight() {\n    const panel = getCurrentPanel();\n    if (panel.pageSize != 'AutoHeight') {\n        return;\n    }\n    if (panel.elementList == null || panel.elementList.length == 0) {\n        return;\n    }\n    let maxY = 0;\n    for (let myElement of panel.elementList) {\n        const tmpY = myElement.y + myElement.height;\n        maxY = Math.max(tmpY, maxY);\n    }\n    panel.height = maxY;\n}\n\nexport function getPrintRealHeight(panel?: Panel) {\n    panel = getCurrentPanel(panel);\n    if (panel.pageSize == 'AutoHeight') {\n        return panel.runtimeOption.printRealHeight;\n    }\n    return panel.height;\n\n}\n"],"names":["appStore","numberUtil","width","height"],"mappings":"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"}