{"version":3,"file":"utils.mjs","sources":["../../../../src/utils/utils.ts"],"sourcesContent":["import { clearEventBubble } from './event';\nimport { MyElement, TableCellElement } from '@myprint/design/types/entity';\nimport { displayRatio } from '@myprint/design/utils/devicePixelRatio';\n// @ts-ignore\nimport * as mittInit from 'mitt';\nimport { Emitter } from 'mitt';\nimport { fontList } from '@myprint/design/constants/common';\nimport { EventTypes } from '@myprint/design/types/eventType';\nimport { findFromLeftCell } from '@myprint/design/utils/table/dataTable';\n\nlet collapsePanelZIndex = 1000;\n\nexport const mitt = mittInit.default() as Emitter<EventTypes>;\n\nexport function sortColumn(myElement: MyElement, baseColIndex: number, row: number, sourceIndex: number, targetIndex: number) {\n    const col = baseColIndex;\n    const diffCol = targetIndex - sourceIndex;\n    // console.log(col, targetCol);\n    // console.log(myElement.tableHeadList, baseColIndex, row, col, targetCol);\n    // const source = myElement.tableHeadList[sourceIndex];\n    // 删除原来的\n    // console.log(myElement.tableHeadList[row]);\n    const baseCell = myElement.tableHeadList[row][col];\n    const { cell: targetCell, col: targetCol } = findFromLeftCell(myElement.tableHeadList, row, baseColIndex, diffCol)!;\n    // console.log(targetCell, targetCol);\n    // console.log(baseCell, targetColTmp);\n    const colspan = baseCell.colspan;\n    const targetColspan = targetCell.colspan;\n    // console.log(myElement.tableHeadList);\n    changeTableList(myElement.tableHeadList, row, col, targetCol, colspan, targetColspan);\n    changeTableList(myElement.tableBodyList, 0, col, targetCol, colspan, targetColspan);\n    // console.log(myElement.tableHeadList);\n\n    // myElement.headList.splice(targetIndex, 0, source);\n\n    // for (let bodyRowList of myElement.bodyList) {\n    //\n    //     const source = bodyRowList[sourceIndex];\n    //     bodyRowList.splice(sourceIndex, 1);\n    //\n    //     bodyRowList.splice(targetIndex, 0, source);\n    // }\n\n    // for (let i = 0; i < arr.length; i++) {\n    //     console.log(arr[i])\n    //     arr[i].option.sort = i;\n    // }\n}\n\nfunction changeTableList(list: any[][], row: number, col: number, targetCol: number, colspan: number, targetColspan: number) {\n\n    const cacheSourceCellList: TableCellElement[][] = [];\n    for (let i = row; i < list.length; i++) {\n        const rowList = list[i];\n        const cacheSourceCellListTmp: TableCellElement[] = [];\n        for (let j = 0; j < colspan; j++) {\n            cacheSourceCellListTmp.push(rowList[col]);\n            rowList.splice(col, 1);\n        }\n        cacheSourceCellList.push(cacheSourceCellListTmp);\n    }\n    // 新位置插入\n    // debugger\n    for (let i = row; i < list.length; i++) {\n        const rowList = list[i];\n        for (let j = 0; j < colspan; j++) {\n            const skipColSpan = targetCol > col ? (targetColspan - 1) - (colspan - 1) : 0;\n            rowList.splice(targetCol + skipColSpan + j, 0, cacheSourceCellList[i - row][j]);\n        }\n    }\n}\n\nexport function click(ev: any, realFun: () => void) {\n    clearEventBubble(ev);\n    realFun();\n}\n\nexport function parse<T>(str: string, target: T): T {\n    let targetObj: any = JSON.parse(str);\n    return to(targetObj, target);\n}\n\n\nexport function to<T>(source: any, target: T): T {\n    return Object.assign(target as any, source);\n}\n\nexport function trend0(num: number) {\n    return num < 0 ? 0 : num;\n}\n\nexport function trend1(num: number) {\n    return num < 1 ? 1 : num;\n}\n\nexport function getRatio() {\n    return displayRatio;\n}\n\nexport function mm2pxNoScale(mm: number) {\n    // 获取每毫米的像素值\n    return mm * displayRatio;\n}\n\n\nexport function stringify(obj: any, ...ignore: any[]) {\n    return JSON.stringify(obj, (key, value) => {\n        if (ignore.includes(key)) return undefined;\n        return value;\n    });\n}\n\nexport function getCollapsePanelZIndex(zIndex: number) {\n    if (zIndex == collapsePanelZIndex) {\n        return zIndex;\n    }\n    return ++collapsePanelZIndex;\n}\n\nexport function rgbaToHex(rgba: string) {\n    const rgbaValues = rgba.match(/\\d+/g)!;\n    const r = Math.round(parseInt(rgbaValues[0]));\n    const g = Math.round(parseInt(rgbaValues[1]));\n    const b = Math.round(parseInt(rgbaValues[2]));\n\n    const hexR = r.toString(16).padStart(2, '0');\n    const hexG = g.toString(16).padStart(2, '0');\n    const hexB = b.toString(16).padStart(2, '0');\n    let hexA = '';\n    if (rgbaValues[3]) {\n        hexA = parseFloat(rgbaValues[3]).toString(16).padStart(2, '0');\n    }\n\n    return '#' + hexR + hexG + hexB + hexA;\n}\n\nlet printCssStyleCache: any = undefined;\n\nexport function printCssStyle() {\n    if (printCssStyleCache) {\n        return printCssStyleCache;\n    }\n\n    let cssRuleList =\n        `\n    @media print {\n        body {\n            -webkit-print-color-adjust: exact;\n            print-color-adjust: exact;\n        }\n    }\n\n.display-flex {\n  display: flex;\n}\n\n.display-flex-wrap {\n  flex-wrap: wrap;\n}\n\n.display-flex-column {\n  display: flex;\n  flex-direction: column;\n}\n\n.my-print-text_container {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  outline: 0;\n  box-sizing: border-box;\n  vertical-align: top;\n  word-break: break-all;\n  flex-grow: 1;\n}\n\n.my-print-barcode_svg_wrapper {\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n}\n\n.my-print-text_content {\n  vertical-align: top;\n  word-break: break-all;\n  box-sizing: border-box;\n  outline: 0;\n  flex-grow: 1;\n}\n\n.my-print-horizontal-line__wrapper {\n  width: 100%;\n  word-break: break-all;\n  cursor: move;\n  outline: none;\n}\n\n.my-print-horizontal-line {\n  cursor: move;\n  position: absolute;\n}\n\n.my-print-rect__wrapper {\n  word-break: break-all;\n  border: 1px #000 solid;\n  box-sizing: border-box;\n  position: absolute;\n  cursor: text;\n}\n\n.my-print-dotted-rect__wrapper {\n  word-break: break-all;\n  outline: #000 dotted;\n  position: absolute;\n  cursor: text;\n}\n\n.my-print-table {\n  text-indent: initial;\n  border-collapse: collapse;\n  border-spacing: 0;\n  padding: 0;\n  word-break: break-all;\n  box-sizing: border-box;\n  outline: none;\n}\n\n.my-print-columnHead {\n  position: relative;\n  word-break: break-all;\n  height: 100%;\n\n  box-sizing: border-box;\n  padding: 0;\n}\n\n.my-print-columnHead__content {\n  height: 100%;\n}\n\n.my-print-container {\n  width: var(--design-width);\n  max-width: var(--design-width);\n  height: var(--design-height);\n  max-height: var(--design-height);\n}\n\n.my-print-table-column_body {\n  word-break: break-all;\n  text-align: center;\n  box-sizing: border-box;\n  overflow: hidden;\n  padding: 0;\n}\n\n.my-print-container_over {\n  z-index: 1;\n  opacity: 0.6;\n  background: var(--page-header-drop-color);\n  outline: 4px solid var(--drag-h-color);\n}\n\n.my-print-preview-wrap {\n  position: absolute;\n}\n\n.my-print-preview-wrap_container {\n}\n\n.my-print-print_hidden {\n  position: absolute;\n  top: -99999px;\n}\n\n.my-print-preview-panel__wrap {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n}\n\n.my-print-preview-panel__content {\n  position: relative;\n\n}\n\n.my-print-preview-panel__content_page {\n  position: relative;\n  overflow: hidden;\n  //box-sizing: border-box;\n  background: white;\n}\n\n.my-print-draw_panel {\n  width: 100%;\n  height: 100%;\n}\n\n.my-print-draw_panel_img {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.my-print-chart {\n  position: absolute;\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n  overflow: visible;\n}\n`;\n    // let styleSheets = document.styleSheets;\n    // // console.log(styleSheets)\n    // for (let i = 0; i < styleSheets.length; i++) {\n    //     let styleSheet = styleSheets[i];\n    //     let cssRules = styleSheet.cssRules || styleSheet.rules;\n    //     // let isCss = false\n    //     for (let j = 0; j < cssRules.length; j++) {\n    //         let cssRule = cssRules[j];\n    //         let selectorText = (cssRule as CSSStyleRule).selectorText;\n    //         if (selectorText && selectorText.startsWith('.my-print-')) {\n    //             // console.log(cssRule.cssText)\n    //             cssRuleList = cssRuleList + cssRule.cssText;\n    //         }\n    //     }\n    // }\n    return printCssStyleCache = cssRuleList;\n}\n\nexport function download(blob: Blob, fileName: string) {\n    // 创建一个 URL 对象\n    const blobUrl = URL.createObjectURL(blob);\n\n    // 创建一个 <a> 元素用于下载\n    const a = document.createElement('a');\n    a.href = blobUrl;\n    a.download = fileName;\n    // 将 <a> 元素添加到 DOM 并触发点击事件以下载文件\n    document.body.appendChild(a);\n    a.click();\n\n    // 移除 <a> 元素并释放 URL 对象\n    document.body.removeChild(a);\n    URL.revokeObjectURL(blobUrl);\n}\n\nexport function downloadImg2Base64(url: string) {\n    return new Promise((resolve, reject) => {\n        fetch(url)\n            .then(res => {\n                const contentType = res.headers.get('content-type');\n                if (contentType!.includes('image/svg+xml')) {\n                    res.blob()\n                        .then(blob => {\n                            blob2Base64(blob)\n                                .then(resolve);\n                        });\n                } else {\n                    res.blob()\n                        .then(blob => {\n                            blob2Base64(blob)\n                                .then(resolve);\n                        });\n                }\n            }).catch(e => {\n            reject(e);\n        });\n    });\n}\n\nexport function isBlob(obj: any) {\n    return obj instanceof Blob;\n}\n\nexport function isArrayBuffer(obj: any) {\n    return obj instanceof ArrayBuffer;\n}\n\nexport function isUint8Array(obj: any) {\n    return obj instanceof Uint8Array;\n}\n\nexport function arrayBuffer2Base64(buffer: ArrayBuffer) {\n    const bytes = new Uint8Array(buffer);\n    let binary = '';\n\n    // 将每个字节转换为相应的二进制字符\n    bytes.forEach((byte) => {\n        binary += String.fromCharCode(byte);\n    });\n    // 使用btoa()将二进制字符串编码为Base64\n    return btoa(binary);\n}\n\nexport function uint8Array2Base64(bytes: Uint8Array) {\n    let binary = '';\n\n    // 将每个字节转换为相应的二进制字符\n    bytes.forEach((byte) => {\n        binary += String.fromCharCode(byte);\n    });\n    // 使用btoa()将二进制字符串编码为Base64\n    return btoa(binary);\n}\n\nexport function blob2Base64(blob: Blob) {\n    return new Promise<string>((resolve, _reject) => {\n        const reader = new FileReader();\n        reader.onloadend = () => {\n            resolve(reader.result as string);\n        };\n        reader.readAsDataURL(blob);\n    });\n}\n\nexport function getFontFamilyName(val: string) {\n    for (let fontListElement of fontList) {\n        for (let downList of fontListElement) {\n            if (val == downList.value) {\n                return downList.label;\n            }\n        }\n    }\n\n    return '默认';\n}\n\n/**\n * 路径压缩\n * @param points\n * @param epsilon\n */\nexport function douglasPeucker(points, epsilon) {\n    if (points.length <= 2) {\n        return points;\n    }\n\n    let dMax = 0;\n    let index = 0;\n\n    const end = points.length - 1;\n\n    for (let i = 1; i < end; i++) {\n        const d = perpendicularDistance(points[i], points[0], points[end]);\n\n        if (d > dMax) {\n            index = i;\n            dMax = d;\n        }\n    }\n\n    if (dMax > epsilon) {\n        const firstPart = douglasPeucker(points.slice(0, index + 1), epsilon);\n        const secondPart = douglasPeucker(points.slice(index, end + 1), epsilon);\n\n        return firstPart.slice(0, -1).concat(secondPart);\n    } else {\n        return [points[0], points[end]];\n    }\n}\n\nfunction perpendicularDistance(point, lineStart, lineEnd) {\n    const [x, y] = point;\n    const [startX, startY] = lineStart;\n    const [endX, endY] = lineEnd;\n\n    const A = x - startX;\n    const B = y - startY;\n    const C = endX - startX;\n    const D = endY - startY;\n\n    const dot = A * C + B * D;\n    const lenSq = C * C + D * D;\n    let param = -1;\n\n    if (lenSq !== 0) {\n        param = dot / lenSq;\n    }\n\n    let xx, yy;\n\n    if (param < 0) {\n        xx = startX;\n        yy = startY;\n    } else if (param > 1) {\n        xx = endX;\n        yy = endY;\n    } else {\n        xx = startX + param * C;\n        yy = startY + param * D;\n    }\n\n    const dx = x - xx;\n    const dy = y - yy;\n\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\n// 函数类型\nexport function isFunction(func: any) {\n    return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\n\nexport function _defaultVal(val, _default) {\n    return val ? val : _default;\n}\n\nexport function n2br(val: any) {\n    return typeof val === 'string' ? val.replaceAll('\\n', '<br>') : val;\n}\n\n\nexport function br2n(val: any) {\n    return typeof val === 'string' ? val.replaceAll('<br>', '\\n') : val;\n}\n\nexport function replaceSpacesOutsideHTMLTags(input) {\n    // 匹配所有 HTML 标签\n    const regex = /<[^>]*>/g;\n\n    // 保存所有匹配的 HTML 标签\n    const tags = input.match(regex) || [];\n\n    // 用占位符替换掉 HTML 标签\n    let tempStr = input.replace(regex, '__HTML_TAG__');\n\n    // 替换占位符以外的空格为 &nbsp;\n    tempStr = tempStr.replace(/ /g, '&nbsp;');\n\n    // 将占位符替换回原来的 HTML 标签\n    tags.forEach(tag => {\n        tempStr = tempStr.replace('__HTML_TAG__', tag);\n    });\n\n    return tempStr;\n}\n\n\n/**\n * 使用requestAnimationFrame实现的延迟setTimeout或间隔setInterval调用函数。\n *\n * @param fn 要执行的函数。\n * @param delay 延迟的时间，单位为ms，默认为0，表示不延迟立即执行。\n * @param interval 是否间隔执行，如果为true，则在首次执行后，以delay为间隔持续执行。\n * @returns 返回一个对象，包含一个id属性，该id为requestAnimationFrame的调用ID，可用于取消动画帧。\n */\nexport function rafTimeout(fn: Function, delay = 0, interval = false): object {\n    let start: number | null = null; // 记录动画开始的时间戳\n    function timeElapse(timestamp: number) {\n        // 定义动画帧回调函数\n        /*\n          timestamp参数：与performance.now()的返回值相同，它表示requestAnimationFrame() 开始去执行回调函数的时刻\n        */\n        if (!start) {\n            // 如果还没有开始时间，则以当前时间为开始时间\n            start = timestamp;\n        }\n        const elapsed = timestamp - start;\n        if (elapsed >= delay) {\n            try {\n                fn(); // 执行目标函数\n            } catch (error) {\n                console.error('Error executing rafTimeout function:', error);\n            }\n            if (interval) {\n                // 如果需要间隔执行，则重置开始时间并继续安排下一次动画帧\n                start = timestamp;\n                raf.id = requestAnimationFrame(timeElapse);\n            }\n        } else {\n            raf.id = requestAnimationFrame(timeElapse);\n        }\n    }\n\n    interface AnimationFrameID {\n        id: number;\n    }\n\n    // 创建一个对象用于存储动画帧的ID，并初始化动画帧\n    const raf: AnimationFrameID = {\n        id: requestAnimationFrame(timeElapse)\n    };\n    return raf;\n}\n\n/**\n * 用于取消 rafTimeout 函数\n *\n * @param raf - 包含请求动画帧ID的对象。该ID是由requestAnimationFrame返回的。\n *              该函数旨在取消之前通过requestAnimationFrame请求的动画帧。\n *              如果传入的raf对象或其id无效，则会打印警告。\n */\nexport function cancelRaf(raf: { id: number }): void {\n    if (raf && raf.id && typeof raf.id === 'number') {\n        cancelAnimationFrame(raf.id);\n    } else {\n        // console.warn('cancelRaf received an invalid id:', raf);\n    }\n}\n\nexport function generateUUID() {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n"],"names":[],"mappings":"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"}