@hufe921/canvas-editor 0.9.27 → 0.9.29

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.
@@ -1,4 +1,4 @@
1
- (()=>{(function(){"use strict";try{if(typeof document!="undefined"){var e=document.createElement("style");e.appendChild(document.createTextNode('.ce-select-control-popup{max-width:160px;min-width:69px;max-height:225px;position:absolute;z-index:1;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;box-shadow:0 2px 12px #0000001a;box-sizing:border-box;margin:5px 0;overflow-y:auto}.ce-select-control-popup ul{list-style:none;padding:3px 0;margin:0;box-sizing:border-box}.ce-select-control-popup ul li{font-size:13px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666;height:36px;line-height:36px;box-sizing:border-box;cursor:pointer}.ce-select-control-popup ul li:hover{background-color:#eef2fd}.ce-select-control-popup ul li.active{color:var(--COLOR-HOVER, #5175f4);font-weight:700}.ce-date-container{display:none;width:300px;overflow:hidden;left:0;right:0;position:absolute;z-index:1;color:#606266;background:#ffffff;border-radius:4px;padding:10px;user-select:none;border:1px solid #e4e7ed;box-shadow:0 2px 12px #0000001a}.ce-date-container.active{display:block}.ce-date-wrap{display:none}.ce-date-wrap.active{display:block}.ce-date-title{display:flex;justify-content:center;align-items:center;text-align:center;color:#606266;font-size:16px}.ce-date-title>span{display:inline-block}.ce-date-title>span:not(.ce-date-title__now){font-family:cursive;cursor:pointer}.ce-date-title>span:not(.ce-date-title__now):hover{color:#5175f4}.ce-date-title .ce-date-title__pre-year,.ce-date-title .ce-date-title__pre-month{width:15%}.ce-date-title .ce-date-title__now{width:40%}.ce-date-title .ce-date-title__next-year,.ce-date-title .ce-date-title__next-month{width:15%}.ce-date-week{width:100%;display:flex;justify-content:center;margin-top:15px;padding-bottom:5px;border-bottom:1px solid #e4e7ed}.ce-date-week>span{list-style:none;width:14.28571%;text-align:center;color:#606266;font-size:14px}.ce-date-day{width:100%;display:flex;flex-wrap:wrap;align-items:center;margin-top:5px}.ce-date-day>div{width:14.28571%;height:40px;text-align:center;color:#606266;font-size:14px;cursor:pointer;line-height:40px;border-radius:4px}.ce-date-day>div:hover{color:#5175f4;opacity:.8}.ce-date-day>div.active{color:#5175f4;font-weight:700}.ce-date-day>div.disable{color:#c0c4cc}.ce-date-day>div.select{color:#fff;background-color:#5175f4}.ce-time-wrap{display:none;padding:10px;height:286px}.ce-time-wrap ::-webkit-scrollbar{width:0}.ce-time-wrap.active{display:flex}.ce-time-wrap li{list-style:none}.ce-time-wrap>li{width:33.3%;height:100%;text-align:center}.ce-time-wrap>li>span{transform:translateY(-5px);display:inline-block}.ce-time-wrap>li>ol{height:calc(100% - 20px);overflow-y:auto;border:1px solid #e2e2e2;position:relative}.ce-time-wrap>li:first-child>ol{border-right:0}.ce-time-wrap>li:last-child>ol{border-left:0}.ce-time-wrap>li>ol>li{line-height:30px;cursor:pointer;transition:all .3s}.ce-time-wrap>li>ol>li:hover{background-color:#eaeaea}.ce-time-wrap>li>ol>li.active{color:#fff;background:#5175F4}.ce-date-menu{width:100%;height:28px;display:flex;justify-content:flex-end;align-items:center;padding-top:10px;position:relative;border-top:1px solid #e4e7ed}.ce-date-menu button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;appearance:none;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;user-select:none;padding:7px 15px;font-size:12px;border-radius:3px;margin:0 0 0 10px}.ce-date-menu button:hover{color:#5175f4;border-color:#5175f4}.ce-date-menu button.ce-date-menu__time{border:1px solid transparent;position:absolute;left:0;margin-left:0}.ce-date-menu button.ce-date-menu__time:hover{color:#5175f4}.ce-block-item{position:absolute;z-index:0;overflow:hidden;border-radius:8px;background-color:#fff;border:1px solid rgb(235 236 240)}.ce-table-tool__row{position:absolute;width:12px;border-radius:6.5px;overflow:hidden;background-color:#e2e6ed}.ce-table-tool__row .ce-table-tool__row__item{width:100%;position:relative}.ce-table-tool__row .ce-table-tool__row__item:after{content:"";position:absolute;bottom:0;left:2px;width:8px;height:1px;background-color:#c0c6cf}.ce-table-tool__row .ce-table-tool__row__item:last-child:after{display:none}.ce-table-tool__col{position:absolute;height:12px;border-radius:6.5px;overflow:hidden;background-color:#e2e6ed;display:flex}.ce-table-tool__col .ce-table-tool__col__item{height:100%;position:relative}.ce-table-tool__col .ce-table-tool__col__item:after{content:"";position:absolute;top:2px;left:-1px;width:1px;height:8px;z-index:1;background-color:#c0c6cf}.ce-table-tool__col .ce-table-tool__col__item:first-child:after{display:none}.ce-table-tool__row .ce-table-tool__row__item.active,.ce-table-tool__col .ce-table-tool__col__item.active{background-color:#c4d7fa}.ce-table-tool__col .ce-table-tool__anchor{right:-5px;width:10px;height:12px;z-index:9;position:absolute;cursor:col-resize}.ce-table-tool__row .ce-table-tool__anchor{bottom:-5px;left:0;width:12px;height:10px;z-index:9;position:absolute;cursor:row-resize}.ce-table-anchor__line{z-index:9;position:absolute;border:1px dotted #000000}.ce-table-tool__border{position:absolute;z-index:1;background:transparent;pointer-events:none}.ce-table-tool__border__row{position:absolute;cursor:row-resize;pointer-events:auto}.ce-table-tool__border__col{position:absolute;cursor:col-resize;pointer-events:auto}.ce-resizer-selection{position:absolute;border:1px solid}.ce-resizer-selection>div{position:absolute;width:10px;height:10px;box-shadow:0 1px 4px #0000004d;border-radius:5px;border:2px solid #ffffff;box-sizing:border-box}.ce-resizer-selection .handle-0{cursor:nw-resize}.ce-resizer-selection .handle-1{cursor:n-resize}.ce-resizer-selection .handle-2{cursor:ne-resize}.ce-resizer-selection .handle-3{cursor:e-resize}.ce-resizer-selection .handle-4{cursor:se-resize}.ce-resizer-selection .handle-5{cursor:s-resize}.ce-resizer-selection .handle-6{cursor:sw-resize}.ce-resizer-selection .handle-7{cursor:w-resize}.ce-resizer-image{position:absolute;opacity:.5}.ce-image-previewer{position:fixed;left:0;top:0;z-index:1000;width:100%;height:100%;overflow:hidden;background:#f2f4f7;display:flex;align-items:center;justify-content:center;animation:previewerAnimation .3s}@keyframes previewerAnimation{0%{opacity:.1}to{opacity:1}}.ce-image-previewer .image-close{width:24px;height:24px;display:inline-block;position:absolute;right:50px;top:30px;z-index:99;cursor:pointer;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIzLjk3IDdsMS40MTUgMS40MTQtNy43NzkgNy43NzggNy43NzkgNy43NzktMS40MTQgMS40MTQtNy43NzktNy43NzktNy43NzggNy43NzlMNyAyMy45N2w3Ljc3OC03Ljc3OUw3IDguNDE0IDguNDE0IDdsNy43NzggNy43NzhMMjMuOTcxIDd6IiBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) no-repeat;background-size:100% 100%;transition:all .3s;border-radius:50%}.ce-image-previewer .image-close:hover{background-color:#e2e6ed}.ce-image-previewer .ce-image-container{position:relative}.ce-image-previewer .ce-image-container img{cursor:move;position:relative}.ce-image-previewer .ce-image-menu{height:50px;position:absolute;bottom:50px;z-index:99;display:flex;align-items:center;justify-content:center}.ce-image-previewer .ce-image-menu i{width:32px;height:32px;margin:0 8px;cursor:pointer;display:inline-block;background-repeat:no-repeat;background-size:100% 100%;transition:all .3s;border-radius:50%}.ce-image-previewer .ce-image-menu i:hover{background-color:#e2e6ed}.ce-image-previewer .ce-image-menu i.zoom-in{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE0IDE0di00aDJ2NGg0djJoLTR2NGgtMnYtNGgtNHYtMmg0em04Ljc0OSAxMC4xNjNBMTEuOTUyIDExLjk1MiAwIDAxMTUgMjdDOC4zNzMgMjcgMyAyMS42MjcgMyAxNVM4LjM3MyAzIDE1IDNzMTIgNS4zNzMgMTIgMTJjMCAyLjk1NC0xLjA2NyA1LjY1OC0yLjgzNyA3Ljc0OWw0LjkwOCA0LjkwOC0xLjQxNCAxLjQxNC00LjkwOC00LjkwOHpNMTUgMjVjNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMyMC41MjMgNSAxNSA1IDUgOS40NzcgNSAxNXM0LjQ3NyAxMCAxMCAxMHoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.zoom-out{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIyLjc0OSAyNC4xNjNBMTEuOTUyIDExLjk1MiAwIDAxMTUgMjdDOC4zNzMgMjcgMyAyMS42MjcgMyAxNVM4LjM3MyAzIDE1IDNzMTIgNS4zNzMgMTIgMTJjMCAyLjk1NC0xLjA2NyA1LjY1OC0yLjgzNyA3Ljc0OWw0LjkwOCA0LjkwOC0xLjQxNCAxLjQxNC00LjkwOC00LjkwOHpNMTUgMjVjNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMyMC41MjMgNSAxNSA1IDUgOS40NzcgNSAxNXM0LjQ3NyAxMCAxMCAxMHptLTUtMTFoMTB2MkgxMHYtMnoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.rotate{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTYgNGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyYTExLjk3IDExLjk3IDAgMDEtNCA4Ljk0NFYyM2gtLjg2QTkuOTY4IDkuOTY4IDAgMDAyNiAxNmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZjMCA1LjE4NSAzLjk0NyA5LjQ0OSA5IDkuOTV2Mi4wMDlDOC44NCAyNy40NTEgNCAyMi4yOTEgNCAxNiA0IDkuMzczIDkuMzczIDQgMTYgNHoiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik0xOS44NzkgMjcuMzI4bDEuNzY3LTYuNzE3IDQuOTUgNC45NXoiLz48L2c+PC9zdmc+)}.ce-image-previewer .ce-image-menu i.original-size{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQgNGgyNHYyNEg0VjR6bTIgMnYyMGgyMFY2SDZ6bTQgNWgydjEwaC0yVjExem01IDJoMnYyaC0ydi0yem0wIDRoMnYyaC0ydi0yem01LTZoMnYxMGgtMlYxMXoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.image-download{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuNSAxNXYzLjVoMTVWMTVIMjF2NUgzdi01aDEuNXptOC4yMzItMTEuMjI2djkuMTk2bDQuMDUtNC4wNSAxLjA2IDEuMDYtNS44MzQgNS44MzQtNS44MzMtNS44MzMgMS4wNi0xLjA2IDMuOTk4IDMuOTk2VjMuNzc0aDEuNXoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-contextmenu-container{z-index:9;position:fixed;display:none;padding:4px;overflow-x:hidden;overflow-y:auto;background:#fff;box-shadow:0 2px 12px #38383833;border:1px solid #e2e6ed;border-radius:2px}.ce-contextmenu-content{display:flex;flex-direction:column}.ce-contextmenu-content .ce-contextmenu-sub-item:after{position:absolute;content:"";width:16px;height:16px;right:12px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwaDE2djE2SDB6Ii8+PGcgZmlsbD0iIzc2N0M4NSI+PHBhdGggZD0iTTcgMTIuMjQzbC0uNzA3LS43MDcgNC4yNDMtNC4yNDMuNzA3LjcwN3oiLz48cGF0aCBkPSJNNi4yOTMgNC40NjRMNyAzLjc1NyAxMS4yNDMgOGwtLjcwNy43MDd6Ii8+PC9nPjwvZz48L3N2Zz4=)}.ce-contextmenu-content .ce-contextmenu-item{min-width:140px;padding:0 32px 0 16px;height:30px;display:flex;align-items:center;white-space:nowrap;box-sizing:border-box;cursor:pointer}.ce-contextmenu-content .ce-contextmenu-item.hover{background:rgba(25,55,88,.04)}.ce-contextmenu-content .ce-contextmenu-item span{max-width:300px;font-size:12px;color:#3d4757;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ce-contextmenu-content .ce-contextmenu-item span.ce-shortcut{color:#767c85;height:30px;flex:1;text-align:right;line-height:30px;margin-left:20px}.ce-contextmenu-content .ce-contextmenu-item i{width:16px;height:16px;vertical-align:middle;display:inline-block;background-repeat:no-repeat;background-size:100% 100%;flex-shrink:0;margin-right:8px}.ce-contextmenu-divider{background-color:#e2e6ed;margin:4px 16px;height:1px}.ce-contextmenu-print{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMiA0aC0xVjJINXYySDRWMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJ6bTAgNXY0YTEgMSAwIDAxLTEgMUg1YTEgMSAwIDAxLTEtMVY5aDF2NGg2VjloMXoiLz48cGF0aCBkPSJNMTIgMTJ2LTFoMlY1SDJ2NmgydjFIMmExIDEgMCAwMS0xLTFWNWExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXY2YTEgMSAwIDAxLTEgMWgtMnoiLz48cGF0aCBkPSJNMyA4aDEwdjFIM3ptOC0yaDJ2MWgtMnoiLz48L2c+PC9zdmc+)}.ce-contextmenu-image{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZT4uc3Qwe2ZpbGw6IzNkNDc1N308L3N0eWxlPjxnIGlkPSJfeDMwXzAt5YWs5YWxX3gyRl8wMuW3peWFt+agj194MkZf5o+S5YWl5Zu+54mHLTE2cHgtIj48ZyBpZD0iR3JvdXAtMTkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgY2xhc3M9InN0MCIgZD0iTTEgMGgxMmMuNiAwIDEgLjQgMSAxdjExYzAgLjYtLjQgMS0xIDFIMWMtLjYgMC0xLS40LTEtMVYxYzAtLjYuNC0xIDEtMXptMCAxdjExaDEyVjFIMXoiLz48Y2lyY2xlIGlkPSLmpK3lnIblvaIiIGNsYXNzPSJzdDAiIGN4PSIxMCIgY3k9IjQiIHI9IjEiLz48cGF0aCBpZD0iUGF0aCIgY2xhc3M9InN0MCIgZD0iTTguNSAxMS4ybC00LTQuMUwxIDEwLjdWOS4yYzEuNy0xLjYgMi43LTIuNSAzLTIuOC40LS41LjctLjQgMSAwTDguNSAxMCAxMSA3LjNjLjQtLjUuNi0uNSAxLS4xbDIgMi44djEuNWwtMi41LTMuNC0zIDMuMXoiLz48L2c+PC9nPjwvc3ZnPg==)}.ce-contextmenu-image-change{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDQpIiBmaWxsPSIjM0Q0NzU3Ij48Y2lyY2xlIGZpbGwtcnVsZT0ibm9uemVybyIgY3g9IjMiIGN5PSIxIiByPSIxIi8+PHBhdGggZD0iTTcuNDczIDguMjIzTDMuNDcgNC4xMDcgMCA3LjY2N3YtMS41QzEuNzE1IDQuNiAyLjcwNyAzLjY2NCAyLjk3NSAzLjM1OGMuNDAyLS40NTcuNjUxLS4zOSAxLjA0MiAwTDcuNDczIDcgOS45NiA0LjM0OWMuNDE0LS40NjIuNjItLjQ2MiAxLjAxMS0uMDcxTDEzIDcuMDZ2MS41bC0yLjUxLTMuNDEtMy4wMTcgMy4wNzJ6Ii8+PC9nPjxwYXRoIGQ9Ik02IDEuNUgxLjV2MTJoMTN2LTRWMTNhLjUuNSAwIDAxLS41LjVIMmEuNS41IDAgMDEtLjUtLjVWMmEuNS41IDAgMDEuNS0uNWg0em04LjUgOFY2bC0uNS41aDFsLS41LS41djMuNXpNNiAxLjVoNEw5LjUgMXYxbC41LS41SDZ6IiBzdHJva2U9IiMzRDQ3NTciLz48cGF0aCBkPSJNMTMuMDg1IDEuMzE2bC0zLjgxNCA0YTEgMSAwIDAwMS40NTggMS4zNjhsMy44MTUtNGExIDEgMCAxMC0xLjQ1OS0xLjM2OHoiIGZpbGw9IiMzRDQ3NTciIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-insert-row-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiMzRDQ3NTciIGQ9Ik04LjUgNS41aDZ2NGgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNCA3djFoMlY3em0tMyAuNUw0IDV2NXpNMSAxaDEydjFIMXptMCAxMmgxMnYxSDF6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-top-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNOCA1SDd2M2gxem0tLjUtM0wxMCA1SDV6Ii8+PHJlY3Qgc3Ryb2tlPSIjM0Q0NzU3IiB4PSIxLjUiIHk9IjEwLjUiIHdpZHRoPSIxMiIgaGVpZ2h0PSIzIiByeD0iMSIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-insert-bottom-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNyAxMWgxVjhIN3ptLjUgM0w1IDExaDV6Ii8+PHJlY3Qgc3Ryb2tlPSIjM0Q0NzU3IiB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjMiIHJ4PSIxIi8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-left-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMTEgN3YxaDNWN3ptLTMgLjVMMTEgNXY1eiIvPjxyZWN0IHN0cm9rZT0iIzNENDc1NyIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNCA3LjUpIiB4PSItMiIgeT0iNiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjMiIHJ4PSIxIi8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-right-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNSA4VjdIMnYxem0zLS41TDUgMTBWNXoiLz48cmVjdCBzdHJva2U9IiMzRDQ3NTciIHRyYW5zZm9ybT0icm90YXRlKDkwIDEyIDcuNSkiIHg9IjYiIHk9IjYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIzIiByeD0iMSIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-row-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik04LjUgNi41aDZ2MmgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMiAxMmgxMXYxSDJ6TTIgMmgxMXYxSDJ6bS42MyAzTDcgOS4zNWwtLjYzNS42NUwyIDUuNjN6Ii8+PHBhdGggZmlsbD0iIzNENDc1NyIgZD0iTTIgOS4zNjNMNi4zNTUgNSA3IDUuNzA3IDIuNjk1IDEweiIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik04LjUgNS41aDZ2NGgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMSAxM2gxMnYxSDF6TTEgMWgxMnYxSDF6bTAgNGgxdjFIMXptMSAxaDF2MUgyem0xIDFoMXYxSDN6bTEtMWgxdjFINHptMS0xaDF2MUg1ek00IDhoMXYxSDR6TTIgOGgxdjFIMnptMyAxaDF2MUg1ek0xIDloMXYxSDF6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-delete-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik01LjUgNy41di02aDR2NnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMTMgMTVWM2gxdjEyek0xIDE1VjNoMXYxMnptNCAwdi0xaDF2MXptMS0xdi0xaDF2MXptMS0xdi0xaDF2MXptLTEtMXYtMWgxdjF6bS0xLTF2LTFoMXYxem0zIDF2LTFoMXYxem0wIDJ2LTFoMXYxem0xLTN2LTFoMXYxem0wIDR2LTFoMXYxeiIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-table{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTQgMTNoLTF2LTNIMnYzSDF2LTNhMSAxIDAgMDExLTFoMTFhMSAxIDAgMDExIDF2M3oiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik01LjYyNSAyTDEwIDYuMzc1IDkuMzc1IDcgNSAyLjYyNXoiLz48cGF0aCBkPSJNNSA2LjM3NUw5LjM3NSAybC42MjUuNjI1TDUuNjI1IDd6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-merge-cell{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNiAxdjFIMnYxMWg0djFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg0em0zIDBoNGExIDEgMCAwMTEgMXYxMWExIDEgMCAwMS0xIDFIOXYtMWg0VjJIOVYxeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYgMWgxdjRINnptMiAwaDF2NEg4eiIvPjxwYXRoIGQ9Ik04IDcuNUwxMCA2djN6bS0xIDBMNSA2djN6Ii8+PHBhdGggZD0iTTkgN2gzdjFIOXpNMyA3aDN2MUgzeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTggMTBoMXY0SDh6bS0yIDBoMXY0SDZ6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-merge-cancel-cell{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNiAxdjFIMnYxMWg0djFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg0em0zIDBoNGExIDEgMCAwMTEgMXYxMWExIDEgMCAwMS0xIDFIOXYtMWg0VjJIOVYxeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYgMWgxdjRINnptMiAwaDF2NEg4eiIvPjxwYXRoIGQ9Ik0zIDcuNUw1IDZ2M3ptOSAwTDEwIDZ2M3oiLz48cGF0aCBkPSJNNCA3aDN2MUg0em00IDBoM3YxSDh6Ii8+PHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOCAxMGgxdjRIOHptLTIgMGgxdjRINnoiLz48L2c+PC9zdmc+)}.ce-contextmenu-vertical-align{background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxM2gxMnYxSDJ6bTAtM2g4djFIMnptMC0zaDEydjFIMnptMC02aDEydjFIMnptMCAzaDh2MUgyeiIgZmlsbD0iIzNkNDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-top{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTggOEg3djZoMXptLS41LTNMMTAgOEg1ek0yIDNoMTF2MUgyeiIgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-middle{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAxMkg3djNoMXptLS41LTNsMi41IDNINXpNNyAzaDFWMEg3em0uNSAzTDUgM2g1ek0yIDdoMTF2MUgyeiIgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-bottom{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcgOWgxVjNIN3ptLjUgM0w1IDloNXpNMiAxM2gxMXYxSDJ6IiBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ce-contextmenu-border-all{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iIzNENDc1NyIvPjxwYXRoIGZpbGw9IiMzRDQ3NTciIGQ9Ik0zIDhoMTF2MUgzeiIvPjxwYXRoIGZpbGw9IiMzRDQ3NTciIGQ9Ik05IDN2MTFIOFYzeiIvPjwvc3ZnPg==)}.ce-contextmenu-border-empty{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzaC0xVjJoMWExIDEgMCAwMTEgMXYxaC0xVjN6bS0zLTF2MUg4LjV2MmgtMVYzSDZWMmg0ek00IDJ2MUgzdjFIMlYzYTEgMSAwIDAxMS0xaDF6TTIgNmgxdjEuNWgydjFIM1YxMEgyVjZ6bTAgNmgxdjFoMXYxSDNhMSAxIDAgMDEtMS0xdi0xem00IDJ2LTFoMS41di0yaDF2MkgxMHYxSDZ6bTYgMHYtMWgxdi0xaDF2MWExIDEgMCAwMS0xIDFoLTF6bTItNGgtMVY4LjVoLTJ2LTFoMlY2aDF2NHpNOC41IDcuNXYtMWgtMXYxaC0xdjFoMXYxaDF2LTFoMXYtMWgtMXoiIGZpbGw9IiNBQUFDQjAiLz48L3N2Zz4=)}.ce-contextmenu-border-external{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iIzNENDc1NyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSA1VjNIOHYyaDF6bTAgOXYtMkg4djJoMXpNNSA4SDN2MWgyVjh6bTkgMGgtMnYxaDJWOHpNOSA3djFoMXYxSDl2MUg4VjlIN1Y4aDFWN2gxeiIgZmlsbD0iI0FBQUNCMCIvPjwvc3ZnPg==)}.ce-hyperlink-popup{background:#fff;box-shadow:0 2px 12px #626b8433;border-radius:2px;color:#3d4757;padding:12px 16px;position:absolute;z-index:1;text-align:center;display:none}.ce-hyperlink-popup a{min-width:100px;max-width:300px;font-size:12px;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;text-decoration:none;border-bottom-width:1px;border-bottom-style:solid;color:#00f}.ce-header-indicator>div{padding:3px 6px;color:#000;font-size:12px;background:rgb(218 231 252);position:absolute;transform-origin:0 0}.ce-header-indicator-border__top,.ce-header-indicator-border__bottom,.ce-header-indicator-border__left,.ce-header-indicator-border__right{display:block;position:absolute}.ce-header-indicator-border__top{border-top:2px dashed rgb(238,238,238)}.ce-header-indicator-border__bottom{border-top:2px dashed rgb(238,238,238);width:100%}.ce-header-indicator-border__left{border-left:2px dashed rgb(238,238,238)}.ce-header-indicator-border__right{border-right:2px dashed rgb(238,238,238)}.ce-inputarea{width:1px;height:12px;min-width:0;min-height:0;margin:0;padding:0;left:0;right:0;letter-spacing:0;font-size:12px;position:absolute;z-index:-1;outline:none;resize:none;border:none;overflow:hidden;color:transparent;user-select:none;background-color:transparent}.ce-cursor{width:1px;height:20px;left:0;right:0;position:absolute;outline:none;background-color:#000;pointer-events:none}.ce-cursor.ce-cursor--animation{animation-duration:1s;animation-iteration-count:infinite;animation-name:cursorAnimation}@keyframes cursorAnimation{0%{opacity:1}13%{opacity:0}50%{opacity:0}63%{opacity:1}to{opacity:1}}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();})();
1
+ (()=>{(function(){"use strict";try{if(typeof document!="undefined"){var e=document.createElement("style");e.appendChild(document.createTextNode('.ce-select-control-popup{max-width:160px;min-width:69px;max-height:225px;position:absolute;z-index:1;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;box-shadow:0 2px 12px #0000001a;box-sizing:border-box;margin:5px 0;overflow-y:auto}.ce-select-control-popup ul{list-style:none;padding:3px 0;margin:0;box-sizing:border-box}.ce-select-control-popup ul li{font-size:13px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#666;height:36px;line-height:36px;box-sizing:border-box;cursor:pointer}.ce-select-control-popup ul li:hover{background-color:#eef2fd}.ce-select-control-popup ul li.active{color:var(--COLOR-HOVER, #5175f4);font-weight:700}.ce-date-container{display:none;width:300px;overflow:hidden;left:0;right:0;position:absolute;z-index:1;color:#606266;background:#ffffff;border-radius:4px;padding:10px;user-select:none;border:1px solid #e4e7ed;box-shadow:0 2px 12px #0000001a}.ce-date-container.active{display:block}.ce-date-wrap{display:none}.ce-date-wrap.active{display:block}.ce-date-title{display:flex;justify-content:center;align-items:center;text-align:center;color:#606266;font-size:16px}.ce-date-title>span{display:inline-block}.ce-date-title>span:not(.ce-date-title__now){font-family:cursive;cursor:pointer}.ce-date-title>span:not(.ce-date-title__now):hover{color:#5175f4}.ce-date-title .ce-date-title__pre-year,.ce-date-title .ce-date-title__pre-month{width:15%}.ce-date-title .ce-date-title__now{width:40%}.ce-date-title .ce-date-title__next-year,.ce-date-title .ce-date-title__next-month{width:15%}.ce-date-week{width:100%;display:flex;justify-content:center;margin-top:15px;padding-bottom:5px;border-bottom:1px solid #e4e7ed}.ce-date-week>span{list-style:none;width:14.28571%;text-align:center;color:#606266;font-size:14px}.ce-date-day{width:100%;display:flex;flex-wrap:wrap;align-items:center;margin-top:5px}.ce-date-day>div{width:14.28571%;height:40px;text-align:center;color:#606266;font-size:14px;cursor:pointer;line-height:40px;border-radius:4px}.ce-date-day>div:hover{color:#5175f4;opacity:.8}.ce-date-day>div.active{color:#5175f4;font-weight:700}.ce-date-day>div.disable{color:#c0c4cc}.ce-date-day>div.select{color:#fff;background-color:#5175f4}.ce-time-wrap{display:none;padding:10px;height:286px}.ce-time-wrap ::-webkit-scrollbar{width:0}.ce-time-wrap.active{display:flex}.ce-time-wrap li{list-style:none}.ce-time-wrap>li{width:33.3%;height:100%;text-align:center}.ce-time-wrap>li>span{transform:translateY(-5px);display:inline-block}.ce-time-wrap>li>ol{height:calc(100% - 20px);overflow-y:auto;border:1px solid #e2e2e2;position:relative}.ce-time-wrap>li:first-child>ol{border-right:0}.ce-time-wrap>li:last-child>ol{border-left:0}.ce-time-wrap>li>ol>li{line-height:30px;cursor:pointer;transition:all .3s}.ce-time-wrap>li>ol>li:hover{background-color:#eaeaea}.ce-time-wrap>li>ol>li.active{color:#fff;background:#5175F4}.ce-date-menu{width:100%;height:28px;display:flex;justify-content:flex-end;align-items:center;padding-top:10px;position:relative;border-top:1px solid #e4e7ed}.ce-date-menu button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;color:#606266;appearance:none;text-align:center;box-sizing:border-box;outline:none;transition:.1s;font-weight:500;user-select:none;padding:7px 15px;font-size:12px;border-radius:3px;margin:0 0 0 10px}.ce-date-menu button:hover{color:#5175f4;border-color:#5175f4}.ce-date-menu button.ce-date-menu__time{border:1px solid transparent;position:absolute;left:0;margin-left:0}.ce-date-menu button.ce-date-menu__time:hover{color:#5175f4}.ce-block-item{position:absolute;z-index:0;overflow:hidden;border-radius:8px;background-color:#fff;border:1px solid rgb(235 236 240)}.ce-table-tool__row{position:absolute;width:12px;border-radius:6.5px;overflow:hidden;background-color:#e2e6ed}.ce-table-tool__row .ce-table-tool__row__item{width:100%;position:relative}.ce-table-tool__row .ce-table-tool__row__item:after{content:"";position:absolute;bottom:0;left:2px;width:8px;height:1px;background-color:#c0c6cf}.ce-table-tool__row .ce-table-tool__row__item:last-child:after{display:none}.ce-table-tool__col{position:absolute;height:12px;border-radius:6.5px;overflow:hidden;background-color:#e2e6ed;display:flex}.ce-table-tool__col .ce-table-tool__col__item{height:100%;position:relative}.ce-table-tool__col .ce-table-tool__col__item:after{content:"";position:absolute;top:2px;left:-1px;width:1px;height:8px;z-index:1;background-color:#c0c6cf}.ce-table-tool__col .ce-table-tool__col__item:first-child:after{display:none}.ce-table-tool__row .ce-table-tool__row__item.active,.ce-table-tool__col .ce-table-tool__col__item.active{background-color:#c4d7fa}.ce-table-tool__col .ce-table-tool__anchor{right:-5px;width:10px;height:12px;z-index:9;position:absolute;cursor:col-resize}.ce-table-tool__row .ce-table-tool__anchor{bottom:-5px;left:0;width:12px;height:10px;z-index:9;position:absolute;cursor:row-resize}.ce-table-anchor__line{z-index:9;position:absolute;border:1px dotted #000000}.ce-table-tool__border{position:absolute;z-index:1;background:transparent;pointer-events:none}.ce-table-tool__border__row{position:absolute;cursor:row-resize;pointer-events:auto}.ce-table-tool__border__col{position:absolute;cursor:col-resize;pointer-events:auto}.ce-resizer-selection{position:absolute;border:1px solid}.ce-resizer-selection>div{position:absolute;z-index:9;width:10px;height:10px;box-shadow:0 1px 4px #0000004d;border-radius:5px;border:2px solid #ffffff;box-sizing:border-box}.ce-resizer-selection .handle-0{cursor:nw-resize}.ce-resizer-selection .handle-1{cursor:n-resize}.ce-resizer-selection .handle-2{cursor:ne-resize}.ce-resizer-selection .handle-3{cursor:e-resize}.ce-resizer-selection .handle-4{cursor:se-resize}.ce-resizer-selection .handle-5{cursor:s-resize}.ce-resizer-selection .handle-6{cursor:sw-resize}.ce-resizer-selection .handle-7{cursor:w-resize}.ce-resizer-image{position:absolute;opacity:.5}.ce-image-previewer{position:fixed;left:0;top:0;z-index:1000;width:100%;height:100%;overflow:hidden;background:#f2f4f7;display:flex;align-items:center;justify-content:center;animation:previewerAnimation .3s}@keyframes previewerAnimation{0%{opacity:.1}to{opacity:1}}.ce-image-previewer .image-close{width:24px;height:24px;display:inline-block;position:absolute;right:50px;top:30px;z-index:99;cursor:pointer;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIzLjk3IDdsMS40MTUgMS40MTQtNy43NzkgNy43NzggNy43NzkgNy43NzktMS40MTQgMS40MTQtNy43NzktNy43NzktNy43NzggNy43NzlMNyAyMy45N2w3Ljc3OC03Ljc3OUw3IDguNDE0IDguNDE0IDdsNy43NzggNy43NzhMMjMuOTcxIDd6IiBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) no-repeat;background-size:100% 100%;transition:all .3s;border-radius:50%}.ce-image-previewer .image-close:hover{background-color:#e2e6ed}.ce-image-previewer .ce-image-container{position:relative}.ce-image-previewer .ce-image-container img{cursor:move;position:relative}.ce-image-previewer .ce-image-menu{height:50px;position:absolute;bottom:50px;z-index:99;display:flex;align-items:center;justify-content:center}.ce-image-previewer .ce-image-menu i{width:32px;height:32px;margin:0 8px;cursor:pointer;display:inline-block;background-repeat:no-repeat;background-size:100% 100%;transition:all .3s;border-radius:50%}.ce-image-previewer .ce-image-menu i:hover{background-color:#e2e6ed}.ce-image-previewer .ce-image-menu i.zoom-in{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE0IDE0di00aDJ2NGg0djJoLTR2NGgtMnYtNGgtNHYtMmg0em04Ljc0OSAxMC4xNjNBMTEuOTUyIDExLjk1MiAwIDAxMTUgMjdDOC4zNzMgMjcgMyAyMS42MjcgMyAxNVM4LjM3MyAzIDE1IDNzMTIgNS4zNzMgMTIgMTJjMCAyLjk1NC0xLjA2NyA1LjY1OC0yLjgzNyA3Ljc0OWw0LjkwOCA0LjkwOC0xLjQxNCAxLjQxNC00LjkwOC00LjkwOHpNMTUgMjVjNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMyMC41MjMgNSAxNSA1IDUgOS40NzcgNSAxNXM0LjQ3NyAxMCAxMCAxMHoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.zoom-out{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIyLjc0OSAyNC4xNjNBMTEuOTUyIDExLjk1MiAwIDAxMTUgMjdDOC4zNzMgMjcgMyAyMS42MjcgMyAxNVM4LjM3MyAzIDE1IDNzMTIgNS4zNzMgMTIgMTJjMCAyLjk1NC0xLjA2NyA1LjY1OC0yLjgzNyA3Ljc0OWw0LjkwOCA0LjkwOC0xLjQxNCAxLjQxNC00LjkwOC00LjkwOHpNMTUgMjVjNS41MjMgMCAxMC00LjQ3NyAxMC0xMFMyMC41MjMgNSAxNSA1IDUgOS40NzcgNSAxNXM0LjQ3NyAxMCAxMCAxMHptLTUtMTFoMTB2MkgxMHYtMnoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.rotate{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTYgNGM2LjYyNyAwIDEyIDUuMzczIDEyIDEyYTExLjk3IDExLjk3IDAgMDEtNCA4Ljk0NFYyM2gtLjg2QTkuOTY4IDkuOTY4IDAgMDAyNiAxNmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZjMCA1LjE4NSAzLjk0NyA5LjQ0OSA5IDkuOTV2Mi4wMDlDOC44NCAyNy40NTEgNCAyMi4yOTEgNCAxNiA0IDkuMzczIDkuMzczIDQgMTYgNHoiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik0xOS44NzkgMjcuMzI4bDEuNzY3LTYuNzE3IDQuOTUgNC45NXoiLz48L2c+PC9zdmc+)}.ce-image-previewer .ce-image-menu i.original-size{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQgNGgyNHYyNEg0VjR6bTIgMnYyMGgyMFY2SDZ6bTQgNWgydjEwaC0yVjExem01IDJoMnYyaC0ydi0yem0wIDRoMnYyaC0ydi0yem01LTZoMnYxMGgtMlYxMXoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-image-previewer .ce-image-menu i.image-download{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuNSAxNXYzLjVoMTVWMTVIMjF2NUgzdi01aDEuNXptOC4yMzItMTEuMjI2djkuMTk2bDQuMDUtNC4wNSAxLjA2IDEuMDYtNS44MzQgNS44MzQtNS44MzMtNS44MzMgMS4wNi0xLjA2IDMuOTk4IDMuOTk2VjMuNzc0aDEuNXoiIGZpbGw9IiMzRDQ3NTciLz48L3N2Zz4=)}.ce-contextmenu-container{z-index:9;position:fixed;display:none;padding:4px;overflow-x:hidden;overflow-y:auto;background:#fff;box-shadow:0 2px 12px #38383833;border:1px solid #e2e6ed;border-radius:2px}.ce-contextmenu-content{display:flex;flex-direction:column}.ce-contextmenu-content .ce-contextmenu-sub-item:after{position:absolute;content:"";width:16px;height:16px;right:12px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwaDE2djE2SDB6Ii8+PGcgZmlsbD0iIzc2N0M4NSI+PHBhdGggZD0iTTcgMTIuMjQzbC0uNzA3LS43MDcgNC4yNDMtNC4yNDMuNzA3LjcwN3oiLz48cGF0aCBkPSJNNi4yOTMgNC40NjRMNyAzLjc1NyAxMS4yNDMgOGwtLjcwNy43MDd6Ii8+PC9nPjwvZz48L3N2Zz4=)}.ce-contextmenu-content .ce-contextmenu-item{min-width:140px;padding:0 32px 0 16px;height:30px;display:flex;align-items:center;white-space:nowrap;box-sizing:border-box;cursor:pointer}.ce-contextmenu-content .ce-contextmenu-item.hover{background:rgba(25,55,88,.04)}.ce-contextmenu-content .ce-contextmenu-item span{max-width:300px;font-size:12px;color:#3d4757;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ce-contextmenu-content .ce-contextmenu-item span.ce-shortcut{color:#767c85;height:30px;flex:1;text-align:right;line-height:30px;margin-left:20px}.ce-contextmenu-content .ce-contextmenu-item i{width:16px;height:16px;vertical-align:middle;display:inline-block;background-repeat:no-repeat;background-size:100% 100%;flex-shrink:0;margin-right:8px}.ce-contextmenu-divider{background-color:#e2e6ed;margin:4px 16px;height:1px}.ce-contextmenu-print{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMiA0aC0xVjJINXYySDRWMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJ6bTAgNXY0YTEgMSAwIDAxLTEgMUg1YTEgMSAwIDAxLTEtMVY5aDF2NGg2VjloMXoiLz48cGF0aCBkPSJNMTIgMTJ2LTFoMlY1SDJ2NmgydjFIMmExIDEgMCAwMS0xLTFWNWExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXY2YTEgMSAwIDAxLTEgMWgtMnoiLz48cGF0aCBkPSJNMyA4aDEwdjFIM3ptOC0yaDJ2MWgtMnoiLz48L2c+PC9zdmc+)}.ce-contextmenu-image{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZT4uc3Qwe2ZpbGw6IzNkNDc1N308L3N0eWxlPjxnIGlkPSJfeDMwXzAt5YWs5YWxX3gyRl8wMuW3peWFt+agj194MkZf5o+S5YWl5Zu+54mHLTE2cHgtIj48ZyBpZD0iR3JvdXAtMTkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMSkiPjxwYXRoIGlkPSJDb21iaW5lZC1TaGFwZSIgY2xhc3M9InN0MCIgZD0iTTEgMGgxMmMuNiAwIDEgLjQgMSAxdjExYzAgLjYtLjQgMS0xIDFIMWMtLjYgMC0xLS40LTEtMVYxYzAtLjYuNC0xIDEtMXptMCAxdjExaDEyVjFIMXoiLz48Y2lyY2xlIGlkPSLmpK3lnIblvaIiIGNsYXNzPSJzdDAiIGN4PSIxMCIgY3k9IjQiIHI9IjEiLz48cGF0aCBpZD0iUGF0aCIgY2xhc3M9InN0MCIgZD0iTTguNSAxMS4ybC00LTQuMUwxIDEwLjdWOS4yYzEuNy0xLjYgMi43LTIuNSAzLTIuOC40LS41LjctLjQgMSAwTDguNSAxMCAxMSA3LjNjLjQtLjUuNi0uNSAxLS4xbDIgMi44djEuNWwtMi41LTMuNC0zIDMuMXoiLz48L2c+PC9nPjwvc3ZnPg==)}.ce-contextmenu-image-change{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDQpIiBmaWxsPSIjM0Q0NzU3Ij48Y2lyY2xlIGZpbGwtcnVsZT0ibm9uemVybyIgY3g9IjMiIGN5PSIxIiByPSIxIi8+PHBhdGggZD0iTTcuNDczIDguMjIzTDMuNDcgNC4xMDcgMCA3LjY2N3YtMS41QzEuNzE1IDQuNiAyLjcwNyAzLjY2NCAyLjk3NSAzLjM1OGMuNDAyLS40NTcuNjUxLS4zOSAxLjA0MiAwTDcuNDczIDcgOS45NiA0LjM0OWMuNDE0LS40NjIuNjItLjQ2MiAxLjAxMS0uMDcxTDEzIDcuMDZ2MS41bC0yLjUxLTMuNDEtMy4wMTcgMy4wNzJ6Ii8+PC9nPjxwYXRoIGQ9Ik02IDEuNUgxLjV2MTJoMTN2LTRWMTNhLjUuNSAwIDAxLS41LjVIMmEuNS41IDAgMDEtLjUtLjVWMmEuNS41IDAgMDEuNS0uNWg0em04LjUgOFY2bC0uNS41aDFsLS41LS41djMuNXpNNiAxLjVoNEw5LjUgMXYxbC41LS41SDZ6IiBzdHJva2U9IiMzRDQ3NTciLz48cGF0aCBkPSJNMTMuMDg1IDEuMzE2bC0zLjgxNCA0YTEgMSAwIDAwMS40NTggMS4zNjhsMy44MTUtNGExIDEgMCAxMC0xLjQ1OS0xLjM2OHoiIGZpbGw9IiMzRDQ3NTciIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-insert-row-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiMzRDQ3NTciIGQ9Ik04LjUgNS41aDZ2NGgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNCA3djFoMlY3em0tMyAuNUw0IDV2NXpNMSAxaDEydjFIMXptMCAxMmgxMnYxSDF6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-top-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNOCA1SDd2M2gxem0tLjUtM0wxMCA1SDV6Ii8+PHJlY3Qgc3Ryb2tlPSIjM0Q0NzU3IiB4PSIxLjUiIHk9IjEwLjUiIHdpZHRoPSIxMiIgaGVpZ2h0PSIzIiByeD0iMSIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-insert-bottom-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNyAxMWgxVjhIN3ptLjUgM0w1IDExaDV6Ii8+PHJlY3Qgc3Ryb2tlPSIjM0Q0NzU3IiB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjMiIHJ4PSIxIi8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-left-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMTEgN3YxaDNWN3ptLTMgLjVMMTEgNXY1eiIvPjxyZWN0IHN0cm9rZT0iIzNENDc1NyIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNCA3LjUpIiB4PSItMiIgeT0iNiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjMiIHJ4PSIxIi8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-insert-right-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNNSA4VjdIMnYxem0zLS41TDUgMTBWNXoiLz48cmVjdCBzdHJva2U9IiMzRDQ3NTciIHRyYW5zZm9ybT0icm90YXRlKDkwIDEyIDcuNSkiIHg9IjYiIHk9IjYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIzIiByeD0iMSIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-row-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik04LjUgNi41aDZ2MmgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMiAxMmgxMXYxSDJ6TTIgMmgxMXYxSDJ6bS42MyAzTDcgOS4zNWwtLjYzNS42NUwyIDUuNjN6Ii8+PHBhdGggZmlsbD0iIzNENDc1NyIgZD0iTTIgOS4zNjNMNi4zNTUgNSA3IDUuNzA3IDIuNjk1IDEweiIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-row{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik04LjUgNS41aDZ2NGgtNnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMSAxM2gxMnYxSDF6TTEgMWgxMnYxSDF6bTAgNGgxdjFIMXptMSAxaDF2MUgyem0xIDFoMXYxSDN6bTEtMWgxdjFINHptMS0xaDF2MUg1ek00IDhoMXYxSDR6TTIgOGgxdjFIMnptMyAxaDF2MUg1ek0xIDloMXYxSDF6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-delete-col{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBzdHJva2U9IiM5MjlBQTgiIGQ9Ik01LjUgNy41di02aDR2NnoiLz48cGF0aCBmaWxsPSIjM0Q0NzU3IiBkPSJNMTMgMTVWM2gxdjEyek0xIDE1VjNoMXYxMnptNCAwdi0xaDF2MXptMS0xdi0xaDF2MXptMS0xdi0xaDF2MXptLTEtMXYtMWgxdjF6bS0xLTF2LTFoMXYxem0zIDF2LTFoMXYxem0wIDJ2LTFoMXYxem0xLTN2LTFoMXYxem0wIDR2LTFoMXYxeiIvPjwvZz48L3N2Zz4=)}.ce-contextmenu-delete-table{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMTQgMTNoLTF2LTNIMnYzSDF2LTNhMSAxIDAgMDExLTFoMTFhMSAxIDAgMDExIDF2M3oiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik01LjYyNSAyTDEwIDYuMzc1IDkuMzc1IDcgNSAyLjYyNXoiLz48cGF0aCBkPSJNNSA2LjM3NUw5LjM3NSAybC42MjUuNjI1TDUuNjI1IDd6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-merge-cell{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNiAxdjFIMnYxMWg0djFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg0em0zIDBoNGExIDEgMCAwMTEgMXYxMWExIDEgMCAwMS0xIDFIOXYtMWg0VjJIOVYxeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYgMWgxdjRINnptMiAwaDF2NEg4eiIvPjxwYXRoIGQ9Ik04IDcuNUwxMCA2djN6bS0xIDBMNSA2djN6Ii8+PHBhdGggZD0iTTkgN2gzdjFIOXpNMyA3aDN2MUgzeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTggMTBoMXY0SDh6bS0yIDBoMXY0SDZ6Ii8+PC9nPjwvc3ZnPg==)}.ce-contextmenu-merge-cancel-cell{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNiAxdjFIMnYxMWg0djFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg0em0zIDBoNGExIDEgMCAwMTEgMXYxMWExIDEgMCAwMS0xIDFIOXYtMWg0VjJIOVYxeiIvPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYgMWgxdjRINnptMiAwaDF2NEg4eiIvPjxwYXRoIGQ9Ik0zIDcuNUw1IDZ2M3ptOSAwTDEwIDZ2M3oiLz48cGF0aCBkPSJNNCA3aDN2MUg0em00IDBoM3YxSDh6Ii8+PHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOCAxMGgxdjRIOHptLTIgMGgxdjRINnoiLz48L2c+PC9zdmc+)}.ce-contextmenu-vertical-align{background-image:url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxM2gxMnYxSDJ6bTAtM2g4djFIMnptMC0zaDEydjFIMnptMC02aDEydjFIMnptMCAzaDh2MUgyeiIgZmlsbD0iIzNkNDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-top{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTggOEg3djZoMXptLS41LTNMMTAgOEg1ek0yIDNoMTF2MUgyeiIgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-middle{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAxMkg3djNoMXptLS41LTNsMi41IDNINXpNNyAzaDFWMEg3em0uNSAzTDUgM2g1ek0yIDdoMTF2MUgyeiIgZmlsbD0iIzNENDc1NyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.ce-contextmenu-vertical-align-bottom{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcgOWgxVjNIN3ptLjUgM0w1IDloNXpNMiAxM2gxMXYxSDJ6IiBmaWxsPSIjM0Q0NzU3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=)}.ce-contextmenu-border-all{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iIzNENDc1NyIvPjxwYXRoIGZpbGw9IiMzRDQ3NTciIGQ9Ik0zIDhoMTF2MUgzeiIvPjxwYXRoIGZpbGw9IiMzRDQ3NTciIGQ9Ik05IDN2MTFIOFYzeiIvPjwvc3ZnPg==)}.ce-contextmenu-border-empty{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzaC0xVjJoMWExIDEgMCAwMTEgMXYxaC0xVjN6bS0zLTF2MUg4LjV2MmgtMVYzSDZWMmg0ek00IDJ2MUgzdjFIMlYzYTEgMSAwIDAxMS0xaDF6TTIgNmgxdjEuNWgydjFIM1YxMEgyVjZ6bTAgNmgxdjFoMXYxSDNhMSAxIDAgMDEtMS0xdi0xem00IDJ2LTFoMS41di0yaDF2MkgxMHYxSDZ6bTYgMHYtMWgxdi0xaDF2MWExIDEgMCAwMS0xIDFoLTF6bTItNGgtMVY4LjVoLTJ2LTFoMlY2aDF2NHpNOC41IDcuNXYtMWgtMXYxaC0xdjFoMXYxaDF2LTFoMXYtMWgtMXoiIGZpbGw9IiNBQUFDQjAiLz48L3N2Zz4=)}.ce-contextmenu-border-external{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iIzNENDc1NyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSA1VjNIOHYyaDF6bTAgOXYtMkg4djJoMXpNNSA4SDN2MWgyVjh6bTkgMGgtMnYxaDJWOHpNOSA3djFoMXYxSDl2MUg4VjlIN1Y4aDFWN2gxeiIgZmlsbD0iI0FBQUNCMCIvPjwvc3ZnPg==)}.ce-hyperlink-popup{background:#fff;box-shadow:0 2px 12px #626b8433;border-radius:2px;color:#3d4757;padding:12px 16px;position:absolute;z-index:1;text-align:center;display:none}.ce-hyperlink-popup a{min-width:100px;max-width:300px;font-size:12px;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;text-decoration:none;border-bottom-width:1px;border-bottom-style:solid;color:#00f}.ce-zone-indicator>div{padding:3px 6px;color:#000;font-size:12px;background:rgb(218 231 252);position:absolute;transform-origin:0 0}.ce-zone-indicator-border__top,.ce-zone-indicator-border__bottom,.ce-zone-indicator-border__left,.ce-zone-indicator-border__right{display:block;position:absolute;z-index:0}.ce-zone-indicator-border__top{border-top:2px dashed rgb(238,238,238)}.ce-zone-indicator-border__bottom{border-top:2px dashed rgb(238,238,238);width:100%}.ce-zone-indicator-border__left{border-left:2px dashed rgb(238,238,238)}.ce-zone-indicator-border__right{border-right:2px dashed rgb(238,238,238)}.ce-inputarea{width:1px;height:12px;min-width:0;min-height:0;margin:0;padding:0;left:0;right:0;letter-spacing:0;font-size:12px;position:absolute;z-index:-1;outline:none;resize:none;border:none;overflow:hidden;color:transparent;user-select:none;background-color:transparent}.ce-cursor{width:1px;height:20px;left:0;right:0;position:absolute;outline:none;background-color:#000;pointer-events:none}.ce-cursor.ce-cursor--animation{animation-duration:1s;animation-iteration-count:infinite;animation-name:cursorAnimation}@keyframes cursorAnimation{0%{opacity:1}13%{opacity:0}50%{opacity:0}63%{opacity:1}to{opacity:1}}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();})();
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defProps = Object.defineProperties;
4
4
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
@@ -23,9 +23,21 @@ var __publicField = (obj, key, value) => {
23
23
  return value;
24
24
  };
25
25
  var index = "";
26
- const version = "0.9.26";
26
+ const version = "0.9.29";
27
+ var MaxHeightRatio;
28
+ (function(MaxHeightRatio2) {
29
+ MaxHeightRatio2["HALF"] = "half";
30
+ MaxHeightRatio2["ONE_THIRD"] = "one-third";
31
+ MaxHeightRatio2["QUARTER"] = "quarter";
32
+ })(MaxHeightRatio || (MaxHeightRatio = {}));
27
33
  const ZERO = "\u200B";
28
34
  const WRAP = "\n";
35
+ const PUNCTUATION_LIST = ["\xB7", "\u3001", ":", "\uFF1A", ",", "\uFF0C", ".", "\u3002", ";", "\uFF1B", "?", "\uFF1F", "!", "\uFF01"];
36
+ const maxHeightRadioMapping = {
37
+ [MaxHeightRatio.HALF]: 1 / 2,
38
+ [MaxHeightRatio.ONE_THIRD]: 1 / 3,
39
+ [MaxHeightRatio.QUARTER]: 1 / 4
40
+ };
29
41
  var RowFlex;
30
42
  (function(RowFlex2) {
31
43
  RowFlex2["LEFT"] = "left";
@@ -220,6 +232,12 @@ const TEXTLIKE_ELEMENT_TYPE = [
220
232
  ElementType.CONTROL,
221
233
  ElementType.DATE
222
234
  ];
235
+ const INLINE_ELEMENT_TYPE = [
236
+ ElementType.BLOCK,
237
+ ElementType.PAGE_BREAK,
238
+ ElementType.SEPARATOR,
239
+ ElementType.TABLE
240
+ ];
223
241
  var ControlType;
224
242
  (function(ControlType2) {
225
243
  ControlType2["TEXT"] = "text";
@@ -261,6 +279,7 @@ class ImageParticle {
261
279
  } else {
262
280
  const imageLoadPromise = new Promise((resolve, reject) => {
263
281
  const img = new Image();
282
+ img.setAttribute("crossOrigin", "Anonymous");
264
283
  img.src = element.value;
265
284
  img.onload = () => {
266
285
  ctx.drawImage(img, x, y, width, height);
@@ -3270,6 +3289,9 @@ function formatElementList(elementList, options) {
3270
3289
  const tr = el.trList[t];
3271
3290
  const trId = getUUID();
3272
3291
  tr.id = trId;
3292
+ if (!tr.minHeight || tr.minHeight < editorOptions.defaultTrMinHeight) {
3293
+ tr.minHeight = editorOptions.defaultTrMinHeight;
3294
+ }
3273
3295
  for (let d = 0; d < tr.tdList.length; d++) {
3274
3296
  const td = tr.tdList[d];
3275
3297
  const tdId = getUUID();
@@ -4556,6 +4578,15 @@ function keydown(evt, host) {
4556
4578
  evt.preventDefault();
4557
4579
  return;
4558
4580
  }
4581
+ const startElement = elementList[startIndex];
4582
+ if (isCollapsed && startElement.rowFlex && startElement.value === ZERO) {
4583
+ const rowList = draw.getRowList();
4584
+ const rowNo = positionList[startIndex].rowNo;
4585
+ const rowFlexElementList = rowList[rowNo].elementList;
4586
+ rowFlexElementList.forEach((element) => {
4587
+ delete element.rowFlex;
4588
+ });
4589
+ }
4559
4590
  if (!isCollapsed) {
4560
4591
  elementList.splice(startIndex + 1, endIndex - startIndex);
4561
4592
  } else {
@@ -4776,7 +4807,7 @@ function keydown(evt, host) {
4776
4807
  } else if (evt.key === KeyMap.ESC) {
4777
4808
  host.clearPainterStyle();
4778
4809
  const zoneManager = draw.getZone();
4779
- if (zoneManager.isHeaderActive()) {
4810
+ if (!zoneManager.isMainActive()) {
4780
4811
  zoneManager.setZone(EditorZone.MAIN);
4781
4812
  }
4782
4813
  evt.preventDefault();
@@ -4789,6 +4820,7 @@ function keydown(evt, host) {
4789
4820
  }
4790
4821
  }
4791
4822
  function input(data2, host) {
4823
+ var _a;
4792
4824
  const draw = host.getDraw();
4793
4825
  const isReadonly = draw.isReadonly();
4794
4826
  if (isReadonly)
@@ -4797,16 +4829,17 @@ function input(data2, host) {
4797
4829
  const cursorPosition = position.getCursorPosition();
4798
4830
  if (!data2 || !cursorPosition)
4799
4831
  return;
4832
+ const isComposing = host.isComposing;
4833
+ if (isComposing && ((_a = host.compositionInfo) == null ? void 0 : _a.value) === data2)
4834
+ return;
4800
4835
  const control = draw.getControl();
4801
4836
  if (control.isPartRangeInControlOutside()) {
4802
4837
  return;
4803
4838
  }
4804
- const isComposing = host.isComposing;
4839
+ removeComposingInput(host);
4805
4840
  if (!isComposing) {
4806
4841
  const cursor = draw.getCursor();
4807
4842
  cursor.clearAgentDomValue();
4808
- } else {
4809
- removeComposingInput(host);
4810
4843
  }
4811
4844
  const activeControl = control.getActiveControl();
4812
4845
  const { TEXT, HYPERLINK, SUBSCRIPT, SUPERSCRIPT, DATE } = ElementType;
@@ -4821,15 +4854,17 @@ function input(data2, host) {
4821
4854
  restArg = { tdId, trId, tableId };
4822
4855
  }
4823
4856
  const elementList = draw.getElementList();
4824
- const element = elementList[endIndex];
4857
+ const endElement = elementList[endIndex];
4858
+ const endNextElement = elementList[endIndex + 1];
4859
+ const copyElement = endElement.value === ZERO && endNextElement ? endNextElement : endElement;
4825
4860
  const inputData = splitText(text).map((value) => {
4826
4861
  const newElement = __spreadValues({
4827
4862
  value
4828
4863
  }, restArg);
4829
4864
  const nextElement = elementList[endIndex + 1];
4830
- if (element.type === TEXT || !element.type && element.value !== ZERO || element.type === HYPERLINK && (nextElement == null ? void 0 : nextElement.type) === HYPERLINK || element.type === DATE && (nextElement == null ? void 0 : nextElement.type) === DATE || element.type === SUBSCRIPT && (nextElement == null ? void 0 : nextElement.type) === SUBSCRIPT || element.type === SUPERSCRIPT && (nextElement == null ? void 0 : nextElement.type) === SUPERSCRIPT) {
4865
+ if (copyElement.type === TEXT || !copyElement.type && copyElement.value !== ZERO || copyElement.type === HYPERLINK && (nextElement == null ? void 0 : nextElement.type) === HYPERLINK || copyElement.type === DATE && (nextElement == null ? void 0 : nextElement.type) === DATE || copyElement.type === SUBSCRIPT && (nextElement == null ? void 0 : nextElement.type) === SUBSCRIPT || copyElement.type === SUPERSCRIPT && (nextElement == null ? void 0 : nextElement.type) === SUPERSCRIPT) {
4831
4866
  EDITOR_ELEMENT_COPY_ATTR.forEach((attr) => {
4832
- const value2 = element[attr];
4867
+ const value2 = copyElement[attr];
4833
4868
  if (value2 !== void 0) {
4834
4869
  newElement[attr] = value2;
4835
4870
  }
@@ -5042,21 +5077,23 @@ function compositionstart(host) {
5042
5077
  }
5043
5078
  function compositionend(host, evt) {
5044
5079
  host.isComposing = false;
5045
- removeComposingInput(host);
5046
5080
  const draw = host.getDraw();
5047
- const cursor = draw.getCursor();
5048
5081
  if (!evt.data) {
5049
- const agentText = cursor.getAgentDomValue();
5050
- if (agentText) {
5051
- input(agentText, host);
5052
- } else {
5053
- const rangeManager = draw.getRange();
5054
- const { endIndex: curIndex } = rangeManager.getRange();
5055
- draw.render({
5056
- curIndex
5057
- });
5058
- }
5082
+ removeComposingInput(host);
5083
+ const rangeManager = draw.getRange();
5084
+ const { endIndex: curIndex } = rangeManager.getRange();
5085
+ draw.render({
5086
+ curIndex,
5087
+ isSubmitHistory: false
5088
+ });
5089
+ } else {
5090
+ setTimeout(() => {
5091
+ if (host.compositionInfo) {
5092
+ input(evt.data, host);
5093
+ }
5094
+ });
5059
5095
  }
5096
+ const cursor = draw.getCursor();
5060
5097
  cursor.clearAgentDomValue();
5061
5098
  }
5062
5099
  var composition = {
@@ -5444,8 +5481,15 @@ class Position {
5444
5481
  }
5445
5482
  getOriginalPositionList() {
5446
5483
  const zoneManager = this.draw.getZone();
5447
- const header = this.draw.getHeader();
5448
- return zoneManager.isHeaderActive() ? header.getPositionList() : this.positionList;
5484
+ if (zoneManager.isHeaderActive()) {
5485
+ const header = this.draw.getHeader();
5486
+ return header.getPositionList();
5487
+ }
5488
+ if (zoneManager.isFooterActive()) {
5489
+ const footer = this.draw.getFooter();
5490
+ return footer.getPositionList();
5491
+ }
5492
+ return this.positionList;
5449
5493
  }
5450
5494
  getOriginalMainPositionList() {
5451
5495
  return this.positionList;
@@ -5510,7 +5554,7 @@ class Position {
5510
5554
  });
5511
5555
  if (td.verticalAlign === VerticalAlign.MIDDLE || td.verticalAlign == VerticalAlign.BOTTOM) {
5512
5556
  const rowsHeight = rowList2.reduce((pre, cur) => pre + cur.height, 0);
5513
- const blankHeight = td.height - tdGap - rowsHeight;
5557
+ const blankHeight = (td.height - tdGap) * scale - rowsHeight;
5514
5558
  const offsetHeight = td.verticalAlign === VerticalAlign.MIDDLE ? blankHeight / 2 : blankHeight;
5515
5559
  if (Math.floor(offsetHeight) > 0) {
5516
5560
  td.positionList.forEach((tdPosition) => {
@@ -5582,7 +5626,8 @@ class Position {
5582
5626
  }
5583
5627
  const zoneManager = this.draw.getZone();
5584
5628
  const curPageNo = this.draw.getPageNo();
5585
- const positionNo = zoneManager.isMainActive() ? curPageNo : 0;
5629
+ const isMainActive = zoneManager.isMainActive();
5630
+ const positionNo = isMainActive ? curPageNo : 0;
5586
5631
  for (let j = 0; j < positionList.length; j++) {
5587
5632
  const { index: index2, pageNo, coordinate: { leftTop, rightTop, leftBottom } } = positionList[j];
5588
5633
  if (positionNo !== pageNo)
@@ -5669,15 +5714,15 @@ class Position {
5669
5714
  }
5670
5715
  }
5671
5716
  }
5672
- const firstLetterList = positionList.filter((p) => p.isLastLetter && p.pageNo === positionNo);
5673
- for (let j = 0; j < firstLetterList.length; j++) {
5674
- const { index: index2, pageNo, coordinate: { leftTop, leftBottom } } = firstLetterList[j];
5717
+ const lastLetterList = positionList.filter((p) => p.isLastLetter && p.pageNo === positionNo);
5718
+ for (let j = 0; j < lastLetterList.length; j++) {
5719
+ const { index: index2, pageNo, coordinate: { leftTop, leftBottom } } = lastLetterList[j];
5675
5720
  if (positionNo !== pageNo)
5676
5721
  continue;
5677
5722
  if (y > leftTop[1] && y <= leftBottom[1]) {
5678
5723
  const isHead = x < this.options.margins[3];
5679
5724
  if (isHead) {
5680
- const headIndex = positionList.findIndex((p) => p.pageNo === positionNo && p.rowNo === firstLetterList[j].rowNo);
5725
+ const headIndex = positionList.findIndex((p) => p.pageNo === positionNo && p.rowNo === lastLetterList[j].rowNo);
5681
5726
  curPositionIndex = ~headIndex ? headIndex - 1 : index2;
5682
5727
  } else {
5683
5728
  curPositionIndex = index2;
@@ -5687,16 +5732,26 @@ class Position {
5687
5732
  }
5688
5733
  }
5689
5734
  if (!isLastArea) {
5690
- if (zoneManager.isMainActive()) {
5691
- if (y < firstLetterList[0].coordinate.leftTop[1]) {
5735
+ const header = this.draw.getHeader();
5736
+ const headerBottomY = header.getHeaderTop() + header.getHeight();
5737
+ const footer = this.draw.getFooter();
5738
+ const pageHeight = this.draw.getHeight();
5739
+ const footerTopY = pageHeight - (footer.getFooterBottom() + footer.getHeight());
5740
+ if (isMainActive) {
5741
+ if (y < headerBottomY) {
5692
5742
  return {
5693
5743
  index: -1,
5694
5744
  zone: EditorZone.HEADER
5695
5745
  };
5696
5746
  }
5697
- }
5698
- if (zoneManager.isHeaderActive()) {
5699
- if (y > firstLetterList[0].coordinate.leftTop[1]) {
5747
+ if (y > footerTopY) {
5748
+ return {
5749
+ index: -1,
5750
+ zone: EditorZone.FOOTER
5751
+ };
5752
+ }
5753
+ } else {
5754
+ if (y <= footerTopY && y >= headerBottomY) {
5700
5755
  return {
5701
5756
  index: -1,
5702
5757
  zone: EditorZone.MAIN
@@ -5704,7 +5759,7 @@ class Position {
5704
5759
  }
5705
5760
  }
5706
5761
  return {
5707
- index: ((_a = firstLetterList[firstLetterList.length - 1]) == null ? void 0 : _a.index) || positionList.length - 1
5762
+ index: ((_a = lastLetterList[lastLetterList.length - 1]) == null ? void 0 : _a.index) || positionList.length - 1
5708
5763
  };
5709
5764
  }
5710
5765
  return {
@@ -6397,6 +6452,11 @@ class TextParticle {
6397
6452
  this.curStyle = "";
6398
6453
  this.cacheMeasureText = new Map();
6399
6454
  }
6455
+ measurePunctuationWidth(ctx, element) {
6456
+ if (!element || !PUNCTUATION_LIST.includes(element.value))
6457
+ return 0;
6458
+ return this.measureText(ctx, element).width;
6459
+ }
6400
6460
  measureText(ctx, element) {
6401
6461
  const id = `${element.value}${ctx.font}`;
6402
6462
  const cacheTextMetrics = this.cacheMeasureText.get(id);
@@ -6461,7 +6521,7 @@ class PageNumber {
6461
6521
  const margins = this.draw.getMargins();
6462
6522
  const { width: textWidth } = ctx.measureText(text);
6463
6523
  if (rowFlex === RowFlex.CENTER) {
6464
- x = (width + textWidth) / 2;
6524
+ x = (width - textWidth) / 2;
6465
6525
  } else if (rowFlex === RowFlex.RIGHT) {
6466
6526
  x = width - textWidth - margins[1];
6467
6527
  } else {
@@ -6614,6 +6674,22 @@ class TableParticle {
6614
6674
  this.range = draw.getRange();
6615
6675
  this.options = draw.getOptions();
6616
6676
  }
6677
+ getTrListGroupByCol(payload) {
6678
+ const trList = deepClone(payload);
6679
+ for (let t = 0; t < payload.length; t++) {
6680
+ const tr = trList[t];
6681
+ for (let d = tr.tdList.length - 1; d >= 0; d--) {
6682
+ const td = tr.tdList[d];
6683
+ const { rowspan, rowIndex, colIndex } = td;
6684
+ const curRowIndex = rowIndex + rowspan - 1;
6685
+ if (curRowIndex !== d) {
6686
+ const changeTd = tr.tdList.splice(d, 1)[0];
6687
+ trList[curRowIndex].tdList.splice(colIndex, 0, changeTd);
6688
+ }
6689
+ }
6690
+ }
6691
+ return trList;
6692
+ }
6617
6693
  _drawBorder(payload) {
6618
6694
  const { ctx, startX, startY, width, height, isDrawFullBorder } = payload;
6619
6695
  ctx.beginPath();
@@ -6928,7 +7004,7 @@ class TableTool {
6928
7004
  this._mousedown({
6929
7005
  evt,
6930
7006
  element,
6931
- index: td2.rowIndex,
7007
+ index: td2.rowIndex + td2.rowspan - 1,
6932
7008
  order: TableOrder.ROW
6933
7009
  });
6934
7010
  };
@@ -6943,7 +7019,7 @@ class TableTool {
6943
7019
  this._mousedown({
6944
7020
  evt,
6945
7021
  element,
6946
- index: td2.colIndex,
7022
+ index: td2.colIndex + td2.colspan - 1,
6947
7023
  order: TableOrder.COL
6948
7024
  });
6949
7025
  };
@@ -7001,8 +7077,14 @@ class TableTool {
7001
7077
  var _a;
7002
7078
  let isChangeSize = false;
7003
7079
  if (order === TableOrder.ROW) {
7004
- element.trList[index2].height += dy;
7080
+ const tr = element.trList[index2];
7081
+ const { defaultTrMinHeight } = this.options;
7082
+ if (dy < 0 && tr.height + dy < defaultTrMinHeight) {
7083
+ dy = defaultTrMinHeight - tr.height;
7084
+ }
7005
7085
  if (dy) {
7086
+ tr.height += dy;
7087
+ tr.minHeight = tr.height;
7006
7088
  isChangeSize = true;
7007
7089
  }
7008
7090
  } else {
@@ -7010,11 +7092,14 @@ class TableTool {
7010
7092
  if (colgroup && dx) {
7011
7093
  const innerWidth = this.draw.getInnerWidth();
7012
7094
  const curColWidth = colgroup[index2].width;
7013
- const moveColWidth = curColWidth + dx;
7014
- const nextColWidth = ((_a = colgroup[index2 + 1]) == null ? void 0 : _a.width) || 0;
7015
- if (moveColWidth < this.MIN_TD_WIDTH || moveColWidth > curColWidth + nextColWidth) {
7095
+ if (dx < 0 && curColWidth + dx < this.MIN_TD_WIDTH) {
7016
7096
  dx = this.MIN_TD_WIDTH - curColWidth;
7017
7097
  }
7098
+ const nextColWidth = (_a = colgroup[index2 + 1]) == null ? void 0 : _a.width;
7099
+ if (dx > 0 && nextColWidth && nextColWidth - dx < this.MIN_TD_WIDTH) {
7100
+ dx = nextColWidth - this.MIN_TD_WIDTH;
7101
+ }
7102
+ const moveColWidth = curColWidth + dx;
7018
7103
  let moveTableWidth = 0;
7019
7104
  for (let c = 0; c < colgroup.length; c++) {
7020
7105
  const group2 = colgroup[c];
@@ -7127,21 +7212,6 @@ class HyperlinkParticle {
7127
7212
  ctx.restore();
7128
7213
  }
7129
7214
  }
7130
- var HeaderMaxHeightRatio;
7131
- (function(HeaderMaxHeightRatio2) {
7132
- HeaderMaxHeightRatio2["HALF"] = "half";
7133
- HeaderMaxHeightRatio2["ONE_THIRD"] = "one-third";
7134
- HeaderMaxHeightRatio2["QUARTER"] = "quarter";
7135
- })(HeaderMaxHeightRatio || (HeaderMaxHeightRatio = {}));
7136
- const defaultHeaderOption = {
7137
- top: 30,
7138
- maxHeightRadio: HeaderMaxHeightRatio.HALF
7139
- };
7140
- const maxHeightRadioMapping = {
7141
- [HeaderMaxHeightRatio.HALF]: 1 / 2,
7142
- [HeaderMaxHeightRatio.ONE_THIRD]: 1 / 3,
7143
- [HeaderMaxHeightRatio.QUARTER]: 1 / 4
7144
- };
7145
7215
  class Header {
7146
7216
  constructor(draw) {
7147
7217
  __publicField(this, "draw");
@@ -7157,6 +7227,9 @@ class Header {
7157
7227
  this.rowList = [];
7158
7228
  this.positionList = [];
7159
7229
  }
7230
+ getRowList() {
7231
+ return this.rowList;
7232
+ }
7160
7233
  setElementList(elementList) {
7161
7234
  this.elementList = elementList;
7162
7235
  }
@@ -9186,19 +9259,20 @@ class ImageObserver {
9186
9259
  }
9187
9260
  class Zone {
9188
9261
  constructor(draw) {
9262
+ __publicField(this, "INDICATOR_PADDING", 2);
9189
9263
  __publicField(this, "INDICATOR_TITLE_TRANSLATE", [20, 5]);
9190
9264
  __publicField(this, "draw");
9191
9265
  __publicField(this, "options");
9192
9266
  __publicField(this, "i18n");
9193
9267
  __publicField(this, "container");
9194
9268
  __publicField(this, "currentZone");
9195
- __publicField(this, "headerIndicatorContainer");
9269
+ __publicField(this, "indicatorContainer");
9196
9270
  this.draw = draw;
9197
9271
  this.i18n = draw.getI18n();
9198
9272
  this.options = draw.getOptions();
9199
9273
  this.container = draw.getContainer();
9200
9274
  this.currentZone = EditorZone.MAIN;
9201
- this.headerIndicatorContainer = null;
9275
+ this.indicatorContainer = null;
9202
9276
  }
9203
9277
  isHeaderActive() {
9204
9278
  return this.getZone() === EditorZone.HEADER;
@@ -9206,6 +9280,9 @@ class Zone {
9206
9280
  isMainActive() {
9207
9281
  return this.getZone() === EditorZone.MAIN;
9208
9282
  }
9283
+ isFooterActive() {
9284
+ return this.getZone() === EditorZone.FOOTER;
9285
+ }
9209
9286
  getZone() {
9210
9287
  return this.currentZone;
9211
9288
  }
@@ -9219,63 +9296,174 @@ class Zone {
9219
9296
  isSetCursor: false,
9220
9297
  isCompute: false
9221
9298
  });
9222
- if (this.isHeaderActive()) {
9223
- this.drawHeaderZoneIndicator();
9224
- } else {
9225
- this._clearHeaderZoneIndicator();
9226
- }
9299
+ this.drawZoneIndicator();
9227
9300
  }
9228
- drawHeaderZoneIndicator() {
9229
- this._clearHeaderZoneIndicator();
9301
+ drawZoneIndicator() {
9302
+ this._clearZoneIndicator();
9303
+ if (!this.isHeaderActive() && !this.isFooterActive())
9304
+ return;
9230
9305
  const { scale } = this.options;
9306
+ const isHeaderActive = this.isHeaderActive();
9231
9307
  const [offsetX, offsetY] = this.INDICATOR_TITLE_TRANSLATE;
9232
- this.headerIndicatorContainer = document.createElement("div");
9233
- this.headerIndicatorContainer.classList.add(`${EDITOR_PREFIX}-header-indicator`);
9234
9308
  const pageList = this.draw.getPageList();
9235
9309
  const margins = this.draw.getMargins();
9236
9310
  const innerWidth = this.draw.getInnerWidth();
9237
9311
  const pageHeight = this.draw.getHeight();
9238
9312
  const pageGap = this.draw.getPageGap();
9239
9313
  const preY = pageHeight + pageGap;
9314
+ this.indicatorContainer = document.createElement("div");
9315
+ this.indicatorContainer.classList.add(`${EDITOR_PREFIX}-zone-indicator`);
9240
9316
  const header = this.draw.getHeader();
9241
- const headerHeight = header.getHeight();
9242
- const headerTop = header.getHeaderTop();
9317
+ const footer = this.draw.getFooter();
9318
+ const indicatorHeight = isHeaderActive ? header.getHeight() : footer.getHeight();
9319
+ const indicatorTop = isHeaderActive ? header.getHeaderTop() : pageHeight - footer.getFooterBottom() - indicatorHeight;
9243
9320
  for (let p = 0; p < pageList.length; p++) {
9244
- const startY = preY * p + headerTop;
9321
+ const startY = preY * p + indicatorTop;
9322
+ const indicatorLeftX = margins[3] - this.INDICATOR_PADDING;
9323
+ const indicatorRightX = margins[3] + innerWidth + this.INDICATOR_PADDING;
9324
+ const indicatorTopY = isHeaderActive ? startY - this.INDICATOR_PADDING : startY + indicatorHeight + this.INDICATOR_PADDING;
9325
+ const indicatorBottomY = isHeaderActive ? startY + indicatorHeight + this.INDICATOR_PADDING : startY - this.INDICATOR_PADDING;
9245
9326
  const indicatorTitle = document.createElement("div");
9246
- indicatorTitle.innerText = this.i18n.t("frame.header");
9247
- indicatorTitle.style.top = `${startY + headerHeight}px`;
9327
+ indicatorTitle.innerText = this.i18n.t(`frame.${isHeaderActive ? "header" : "footer"}`);
9328
+ indicatorTitle.style.top = `${indicatorBottomY}px`;
9248
9329
  indicatorTitle.style.transform = `translate(${offsetX * scale}px, ${offsetY * scale}px) scale(${scale})`;
9249
- this.headerIndicatorContainer.append(indicatorTitle);
9330
+ this.indicatorContainer.append(indicatorTitle);
9250
9331
  const lineTop = document.createElement("span");
9251
- lineTop.classList.add(`${EDITOR_PREFIX}-header-indicator-border__top`);
9252
- lineTop.style.top = `${startY}px`;
9332
+ lineTop.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__top`);
9333
+ lineTop.style.top = `${indicatorTopY}px`;
9253
9334
  lineTop.style.width = `${innerWidth}px`;
9254
9335
  lineTop.style.marginLeft = `${margins[3]}px`;
9255
- this.headerIndicatorContainer.append(lineTop);
9336
+ this.indicatorContainer.append(lineTop);
9256
9337
  const lineLeft = document.createElement("span");
9257
- lineLeft.classList.add(`${EDITOR_PREFIX}-header-indicator-border__left`);
9338
+ lineLeft.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__left`);
9258
9339
  lineLeft.style.top = `${startY}px`;
9259
- lineLeft.style.height = `${headerHeight}px`;
9260
- lineLeft.style.left = `${margins[3]}px`;
9261
- this.headerIndicatorContainer.append(lineLeft);
9340
+ lineLeft.style.height = `${indicatorHeight}px`;
9341
+ lineLeft.style.left = `${indicatorLeftX}px`;
9342
+ this.indicatorContainer.append(lineLeft);
9262
9343
  const lineBottom = document.createElement("span");
9263
- lineBottom.classList.add(`${EDITOR_PREFIX}-header-indicator-border__bottom`);
9264
- lineBottom.style.top = `${startY + headerHeight}px`;
9265
- this.headerIndicatorContainer.append(lineBottom);
9344
+ lineBottom.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__bottom`);
9345
+ lineBottom.style.top = `${indicatorBottomY}px`;
9346
+ this.indicatorContainer.append(lineBottom);
9266
9347
  const lineRight = document.createElement("span");
9267
- lineRight.classList.add(`${EDITOR_PREFIX}-header-indicator-border__right`);
9348
+ lineRight.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__right`);
9268
9349
  lineRight.style.top = `${startY}px`;
9269
- lineRight.style.height = `${headerHeight}px`;
9270
- lineRight.style.left = `${margins[3] + innerWidth}px`;
9271
- this.headerIndicatorContainer.append(lineRight);
9350
+ lineRight.style.height = `${indicatorHeight}px`;
9351
+ lineRight.style.left = `${indicatorRightX}px`;
9352
+ this.indicatorContainer.append(lineRight);
9272
9353
  }
9273
- this.container.append(this.headerIndicatorContainer);
9354
+ this.container.append(this.indicatorContainer);
9274
9355
  }
9275
- _clearHeaderZoneIndicator() {
9356
+ _clearZoneIndicator() {
9276
9357
  var _a;
9277
- (_a = this.headerIndicatorContainer) == null ? void 0 : _a.remove();
9278
- this.headerIndicatorContainer = null;
9358
+ (_a = this.indicatorContainer) == null ? void 0 : _a.remove();
9359
+ this.indicatorContainer = null;
9360
+ }
9361
+ }
9362
+ class Footer {
9363
+ constructor(draw) {
9364
+ __publicField(this, "draw");
9365
+ __publicField(this, "position");
9366
+ __publicField(this, "options");
9367
+ __publicField(this, "elementList");
9368
+ __publicField(this, "rowList");
9369
+ __publicField(this, "positionList");
9370
+ this.draw = draw;
9371
+ this.position = draw.getPosition();
9372
+ this.options = draw.getOptions();
9373
+ this.elementList = draw.getFooterElementList();
9374
+ this.rowList = [];
9375
+ this.positionList = [];
9376
+ }
9377
+ getRowList() {
9378
+ return this.rowList;
9379
+ }
9380
+ setElementList(elementList) {
9381
+ this.elementList = elementList;
9382
+ }
9383
+ getElementList() {
9384
+ return this.elementList;
9385
+ }
9386
+ getPositionList() {
9387
+ return this.positionList;
9388
+ }
9389
+ compute() {
9390
+ this._recovery();
9391
+ this._computeRowList();
9392
+ this._computePositionList();
9393
+ }
9394
+ _recovery() {
9395
+ this.rowList = [];
9396
+ this.positionList = [];
9397
+ }
9398
+ _computeRowList() {
9399
+ const innerWidth = this.draw.getInnerWidth();
9400
+ this.rowList = this.draw.computeRowList(innerWidth, this.elementList);
9401
+ }
9402
+ _computePositionList() {
9403
+ const footerBottom = this.getFooterBottom();
9404
+ const innerWidth = this.draw.getInnerWidth();
9405
+ const margins = this.draw.getMargins();
9406
+ const startX = margins[3];
9407
+ const pageHeight = this.draw.getHeight();
9408
+ const footerHeight = this.getHeight();
9409
+ const startY = pageHeight - footerBottom - footerHeight;
9410
+ this.position.computePageRowPosition({
9411
+ positionList: this.positionList,
9412
+ rowList: this.rowList,
9413
+ pageNo: 0,
9414
+ startIndex: 0,
9415
+ startX,
9416
+ startY,
9417
+ innerWidth
9418
+ });
9419
+ }
9420
+ getFooterBottom() {
9421
+ const { footer: { bottom }, scale } = this.options;
9422
+ return Math.floor(bottom * scale);
9423
+ }
9424
+ getMaxHeight() {
9425
+ const { footer: { maxHeightRadio } } = this.options;
9426
+ const height = this.draw.getHeight();
9427
+ return Math.floor(height * maxHeightRadioMapping[maxHeightRadio]);
9428
+ }
9429
+ getHeight() {
9430
+ const maxHeight = this.getMaxHeight();
9431
+ const rowHeight = this.getRowHeight();
9432
+ return rowHeight > maxHeight ? maxHeight : rowHeight;
9433
+ }
9434
+ getRowHeight() {
9435
+ return this.rowList.reduce((pre, cur) => pre + cur.height, 0);
9436
+ }
9437
+ getExtraHeight() {
9438
+ const margins = this.draw.getMargins();
9439
+ const footerHeight = this.getHeight();
9440
+ const footerBottom = this.getFooterBottom();
9441
+ const extraHeight = footerBottom + footerHeight - margins[2];
9442
+ return extraHeight <= 0 ? 0 : extraHeight;
9443
+ }
9444
+ render(ctx, pageNo) {
9445
+ ctx.globalAlpha = 1;
9446
+ const innerWidth = this.draw.getInnerWidth();
9447
+ const maxHeight = this.getMaxHeight();
9448
+ const rowList = [];
9449
+ let curRowHeight = 0;
9450
+ for (let r = 0; r < this.rowList.length; r++) {
9451
+ const row = this.rowList[r];
9452
+ if (curRowHeight + row.height > maxHeight) {
9453
+ break;
9454
+ }
9455
+ rowList.push(row);
9456
+ curRowHeight += row.height;
9457
+ }
9458
+ this.draw.drawRow(ctx, {
9459
+ elementList: this.elementList,
9460
+ positionList: this.positionList,
9461
+ rowList,
9462
+ pageNo,
9463
+ startIndex: 0,
9464
+ innerWidth,
9465
+ zone: EditorZone.FOOTER
9466
+ });
9279
9467
  }
9280
9468
  }
9281
9469
  class Draw {
@@ -9314,6 +9502,7 @@ class Draw {
9314
9502
  __publicField(this, "pageNumber");
9315
9503
  __publicField(this, "waterMark");
9316
9504
  __publicField(this, "header");
9505
+ __publicField(this, "footer");
9317
9506
  __publicField(this, "hyperlinkParticle");
9318
9507
  __publicField(this, "dateParticle");
9319
9508
  __publicField(this, "separatorParticle");
@@ -9367,6 +9556,7 @@ class Draw {
9367
9556
  this.pageNumber = new PageNumber(this);
9368
9557
  this.waterMark = new Watermark(this);
9369
9558
  this.header = new Header(this);
9559
+ this.footer = new Footer(this);
9370
9560
  this.hyperlinkParticle = new HyperlinkParticle(this);
9371
9561
  this.dateParticle = new DateParticle(this);
9372
9562
  this.separatorParticle = new SeparatorParticle();
@@ -9419,9 +9609,13 @@ class Draw {
9419
9609
  }
9420
9610
  getMainHeight() {
9421
9611
  const pageHeight = this.getHeight();
9612
+ return pageHeight - this.getMainOuterHeight();
9613
+ }
9614
+ getMainOuterHeight() {
9422
9615
  const margins = this.getMargins();
9423
- const extraHeight = this.header.getExtraHeight();
9424
- return pageHeight - margins[0] - margins[2] - extraHeight;
9616
+ const headerExtraHeight = this.header.getExtraHeight();
9617
+ const footerExtraHeight = this.footer.getExtraHeight();
9618
+ return margins[0] + margins[2] + headerExtraHeight + footerExtraHeight;
9425
9619
  }
9426
9620
  getCanvasWidth(pageNo = -1) {
9427
9621
  const page = this.getPage(pageNo);
@@ -9500,9 +9694,25 @@ class Draw {
9500
9694
  getPageList() {
9501
9695
  return this.pageList;
9502
9696
  }
9503
- getRowList() {
9697
+ getTableRowList(sourceElementList) {
9698
+ const positionContext = this.position.getPositionContext();
9699
+ const { index: index2, trIndex, tdIndex } = positionContext;
9700
+ return sourceElementList[index2].trList[trIndex].tdList[tdIndex].rowList;
9701
+ }
9702
+ getOriginalRowList() {
9703
+ const zoneManager = this.getZone();
9704
+ if (zoneManager.isHeaderActive()) {
9705
+ return this.header.getRowList();
9706
+ }
9707
+ if (zoneManager.isFooterActive()) {
9708
+ return this.footer.getRowList();
9709
+ }
9504
9710
  return this.rowList;
9505
9711
  }
9712
+ getRowList() {
9713
+ const positionContext = this.position.getPositionContext();
9714
+ return positionContext.isTable ? this.getTableRowList(this.getOriginalElementList()) : this.getOriginalRowList();
9715
+ }
9506
9716
  getPageRowList() {
9507
9717
  return this.pageRowList;
9508
9718
  }
@@ -9546,7 +9756,13 @@ class Draw {
9546
9756
  }
9547
9757
  getOriginalElementList() {
9548
9758
  const zoneManager = this.getZone();
9549
- return zoneManager.isHeaderActive() ? this.header.getElementList() : this.elementList;
9759
+ if (zoneManager.isHeaderActive()) {
9760
+ return this.header.getElementList();
9761
+ }
9762
+ if (zoneManager.isFooterActive()) {
9763
+ return this.footer.getElementList();
9764
+ }
9765
+ return this.elementList;
9550
9766
  }
9551
9767
  getOriginalMainElementList() {
9552
9768
  return this.elementList;
@@ -9618,6 +9834,9 @@ class Draw {
9618
9834
  getHeader() {
9619
9835
  return this.header;
9620
9836
  }
9837
+ getFooter() {
9838
+ return this.footer;
9839
+ }
9621
9840
  getHyperlinkParticle() {
9622
9841
  return this.hyperlinkParticle;
9623
9842
  }
@@ -9775,7 +9994,8 @@ class Draw {
9775
9994
  const { width, height, margins, watermark } = this.options;
9776
9995
  const data2 = {
9777
9996
  header: zipElementList(this.headerElementList),
9778
- main: zipElementList(this.elementList)
9997
+ main: zipElementList(this.elementList),
9998
+ footer: zipElementList(this.footerElementList)
9779
9999
  };
9780
10000
  return {
9781
10001
  version,
@@ -9865,9 +10085,9 @@ class Draw {
9865
10085
  if (element.type === ElementType.IMAGE || element.type === ElementType.LATEX) {
9866
10086
  const elementWidth = element.width * scale;
9867
10087
  const elementHeight = element.height * scale;
9868
- const curRowWidth = element.imgDisplay === ImageDisplay.INLINE ? 0 : curRow.width;
9869
- if (curRowWidth + elementWidth > innerWidth) {
9870
- const surplusWidth = innerWidth - curRowWidth;
10088
+ const curRowWidth2 = element.imgDisplay === ImageDisplay.INLINE ? 0 : curRow.width;
10089
+ if (curRowWidth2 + elementWidth > innerWidth) {
10090
+ const surplusWidth = innerWidth - curRowWidth2;
9871
10091
  element.width = surplusWidth;
9872
10092
  element.height = elementHeight * surplusWidth / elementWidth;
9873
10093
  metrics.width = element.width;
@@ -9899,6 +10119,40 @@ class Draw {
9899
10119
  changeTd.height += extraHeight;
9900
10120
  });
9901
10121
  }
10122
+ let curTdMinHeight = 0;
10123
+ let curTdRealHeight = 0;
10124
+ let i2 = 0;
10125
+ while (i2 < td.rowspan) {
10126
+ const curTr = trList[i2 + t];
10127
+ curTdMinHeight += curTr.minHeight;
10128
+ curTdRealHeight += curTr.height;
10129
+ i2++;
10130
+ }
10131
+ td.realMinHeight = curTdMinHeight;
10132
+ td.realHeight = curTdRealHeight;
10133
+ td.mainHeight = curTdHeight;
10134
+ }
10135
+ }
10136
+ const reduceTrList = this.tableParticle.getTrListGroupByCol(trList);
10137
+ for (let t = 0; t < reduceTrList.length; t++) {
10138
+ const tr = reduceTrList[t];
10139
+ let reduceHeight = -1;
10140
+ for (let d = 0; d < tr.tdList.length; d++) {
10141
+ const td = tr.tdList[d];
10142
+ const curTdRealHeight = td.realHeight;
10143
+ const curTdHeight = td.mainHeight;
10144
+ const curTdMinHeight = td.realMinHeight;
10145
+ const curReduceHeight = curTdHeight < curTdMinHeight ? curTdRealHeight - curTdMinHeight : curTdRealHeight - curTdHeight;
10146
+ if (!~reduceHeight || curReduceHeight < reduceHeight) {
10147
+ reduceHeight = curReduceHeight;
10148
+ }
10149
+ }
10150
+ if (reduceHeight > 0) {
10151
+ const changeTr = trList[t];
10152
+ changeTr.height -= reduceHeight;
10153
+ changeTr.tdList.forEach((changeTd) => {
10154
+ changeTd.height -= reduceHeight;
10155
+ });
9902
10156
  }
9903
10157
  }
9904
10158
  this.tableParticle.computeRowColInfo(element);
@@ -9912,10 +10166,8 @@ class Draw {
9912
10166
  metrics.height = elementHeight;
9913
10167
  metrics.boundingBoxDescent = elementHeight;
9914
10168
  metrics.boundingBoxAscent = 0;
9915
- const margins = this.getMargins();
9916
10169
  const height2 = this.getHeight();
9917
- const headerExtraHeight = this.header.getExtraHeight();
9918
- const marginHeight = margins[0] + margins[2] + headerExtraHeight;
10170
+ const marginHeight = this.getMainOuterHeight();
9919
10171
  let curPagePreHeight = marginHeight;
9920
10172
  for (let r = 0; r < rowList.length; r++) {
9921
10173
  const row = rowList[r];
@@ -10025,8 +10277,13 @@ class Draw {
10025
10277
  style: this._getFont(element, scale)
10026
10278
  });
10027
10279
  const preElement = elementList[i - 1];
10028
- if ((preElement == null ? void 0 : preElement.type) === ElementType.TABLE || (preElement == null ? void 0 : preElement.type) === ElementType.BLOCK || element.type === ElementType.BLOCK || (preElement == null ? void 0 : preElement.imgDisplay) === ImageDisplay.INLINE || element.imgDisplay === ImageDisplay.INLINE || curRow.width + metrics.width > innerWidth || i !== 0 && element.value === ZERO) {
10029
- if ((preElement == null ? void 0 : preElement.rowFlex) === RowFlex.ALIGNMENT && curRow.width + metrics.width > innerWidth) {
10280
+ const nextElement = elementList[i + 1];
10281
+ const curRowWidth = curRow.width + metrics.width + this.textParticle.measurePunctuationWidth(ctx, nextElement);
10282
+ if (element.type === ElementType.TABLE || (preElement == null ? void 0 : preElement.type) === ElementType.TABLE || (preElement == null ? void 0 : preElement.type) === ElementType.BLOCK || element.type === ElementType.BLOCK || (preElement == null ? void 0 : preElement.imgDisplay) === ImageDisplay.INLINE || element.imgDisplay === ImageDisplay.INLINE || curRowWidth > innerWidth || i !== 0 && element.value === ZERO) {
10283
+ if (curRow.startIndex === 0 && curRow.elementList.length === 1 && INLINE_ELEMENT_TYPE.includes(element.type)) {
10284
+ curRow.height = defaultBasicRowMarginHeight;
10285
+ }
10286
+ if ((preElement == null ? void 0 : preElement.rowFlex) === RowFlex.ALIGNMENT && curRowWidth > innerWidth) {
10030
10287
  const gap = (innerWidth - curRow.width) / curRow.elementList.length;
10031
10288
  for (let e = 0; e < curRow.elementList.length; e++) {
10032
10289
  const el = curRow.elementList[e];
@@ -10063,9 +10320,7 @@ class Draw {
10063
10320
  const pageRowList = [[]];
10064
10321
  const { pageMode } = this.options;
10065
10322
  const height = this.getHeight();
10066
- const margins = this.getMargins();
10067
- const headerExtraHeight = this.header.getExtraHeight();
10068
- const marginHeight = margins[0] + margins[2] + headerExtraHeight;
10323
+ const marginHeight = this.getMainOuterHeight();
10069
10324
  let pageHeight = marginHeight;
10070
10325
  let pageNo = 0;
10071
10326
  if (pageMode === PageMode.CONTINUITY) {
@@ -10254,7 +10509,7 @@ class Draw {
10254
10509
  const { inactiveAlpha, pageMode } = this.options;
10255
10510
  const innerWidth = this.getInnerWidth();
10256
10511
  const ctx = this.ctxList[pageNo];
10257
- ctx.globalAlpha = this.zone.isHeaderActive() ? inactiveAlpha : 1;
10512
+ ctx.globalAlpha = !this.zone.isMainActive() ? inactiveAlpha : 1;
10258
10513
  this._clearPage(pageNo);
10259
10514
  this.background.render(ctx);
10260
10515
  this.margin.render(ctx, pageNo);
@@ -10270,6 +10525,7 @@ class Draw {
10270
10525
  });
10271
10526
  this.header.render(ctx, pageNo);
10272
10527
  this.pageNumber.render(ctx, pageNo);
10528
+ this.footer.render(ctx, pageNo);
10273
10529
  if (this.search.getSearchKeyword()) {
10274
10530
  this.search.render(ctx, pageNo);
10275
10531
  }
@@ -10286,7 +10542,6 @@ class Draw {
10286
10542
  entries.forEach((entry) => {
10287
10543
  if (entry.isIntersecting) {
10288
10544
  const index2 = Number(entry.target.dataset.index);
10289
- this.header.render(this.ctxList[index2], index2);
10290
10545
  this._drawPage({
10291
10546
  elementList,
10292
10547
  positionList,
@@ -10320,6 +10575,7 @@ class Draw {
10320
10575
  const innerWidth = this.getInnerWidth();
10321
10576
  if (isCompute) {
10322
10577
  this.header.compute();
10578
+ this.footer.compute();
10323
10579
  this.rowList = this.computeRowList(innerWidth, this.elementList);
10324
10580
  this.pageRowList = this._computePageList();
10325
10581
  this.position.computePositionList();
@@ -10368,6 +10624,7 @@ class Draw {
10368
10624
  const self = this;
10369
10625
  const oldElementList = deepClone(this.elementList);
10370
10626
  const oldHeaderElementList = deepClone(this.header.getElementList());
10627
+ const oldFooterElementList = deepClone(this.footer.getElementList());
10371
10628
  const { startIndex, endIndex } = this.range.getRange();
10372
10629
  const pageNo = this.pageNo;
10373
10630
  const oldPositionContext = deepClone(positionContext);
@@ -10375,8 +10632,9 @@ class Draw {
10375
10632
  this.historyManager.execute(function() {
10376
10633
  self.zone.setZone(zone);
10377
10634
  self.setPageNo(pageNo);
10378
- self.position.setPositionContext(oldPositionContext);
10379
- self.header.setElementList(oldHeaderElementList);
10635
+ self.position.setPositionContext(deepClone(oldPositionContext));
10636
+ self.header.setElementList(deepClone(oldHeaderElementList));
10637
+ self.footer.setElementList(deepClone(oldFooterElementList));
10380
10638
  self.elementList = deepClone(oldElementList);
10381
10639
  self.range.setRange(startIndex, endIndex);
10382
10640
  self.render({ curIndex, isSubmitHistory: false });
@@ -10386,8 +10644,8 @@ class Draw {
10386
10644
  if (isCompute && !this.isReadonly() && positionContext.isTable) {
10387
10645
  this.tableTool.render();
10388
10646
  }
10389
- if (isCompute && this.zone.isHeaderActive()) {
10390
- this.zone.drawHeaderZoneIndicator();
10647
+ if (isCompute && !this.zone.isMainActive()) {
10648
+ this.zone.drawZoneIndicator();
10391
10649
  }
10392
10650
  if (this.listener.pageSizeChange) {
10393
10651
  this.listener.pageSizeChange(this.pageRowList.length);
@@ -11276,7 +11534,7 @@ class CommandAdapt {
11276
11534
  }
11277
11535
  const element = {
11278
11536
  type: ElementType.TABLE,
11279
- value: ZERO,
11537
+ value: "",
11280
11538
  colgroup,
11281
11539
  trList
11282
11540
  };
@@ -12892,6 +13150,10 @@ class ContextMenu {
12892
13150
  this.contextMenuRelationShip.clear();
12893
13151
  }
12894
13152
  }
13153
+ const defaultHeaderOption = {
13154
+ top: 30,
13155
+ maxHeightRadio: MaxHeightRatio.HALF
13156
+ };
12895
13157
  const richtextKeys = [
12896
13158
  {
12897
13159
  key: KeyMap.X_UPPERCASE,
@@ -13043,6 +13305,10 @@ const defaultPageNumberOption = {
13043
13305
  color: "#000000",
13044
13306
  rowFlex: RowFlex.CENTER
13045
13307
  };
13308
+ const defaultFooterOption = {
13309
+ bottom: 30,
13310
+ maxHeightRadio: MaxHeightRatio.HALF
13311
+ };
13046
13312
  class Editor {
13047
13313
  constructor(container, data2, options = {}) {
13048
13314
  __publicField(this, "command");
@@ -13050,6 +13316,7 @@ class Editor {
13050
13316
  __publicField(this, "register");
13051
13317
  __publicField(this, "destroy");
13052
13318
  const headerOptions = __spreadValues(__spreadValues({}, defaultHeaderOption), options.header);
13319
+ const footerOptions = __spreadValues(__spreadValues({}, defaultFooterOption), options.footer);
13053
13320
  const pageNumberOptions = __spreadValues(__spreadValues({}, defaultPageNumberOption), options.pageNumber);
13054
13321
  const waterMarkOptions = __spreadValues(__spreadValues({}, defaultWatermarkOption), options.watermark);
13055
13322
  const controlOptions = __spreadValues(__spreadValues({}, defaultControlOption), options.control);
@@ -13085,12 +13352,13 @@ class Editor {
13085
13352
  margins: [100, 120, 100, 120],
13086
13353
  pageMode: PageMode.PAGING,
13087
13354
  tdPadding: 5,
13088
- defaultTdHeight: 40,
13355
+ defaultTrMinHeight: 40,
13089
13356
  defaultHyperlinkColor: "#0000FF",
13090
13357
  paperDirection: PaperDirection.VERTICAL,
13091
13358
  inactiveAlpha: 0.6
13092
13359
  }, options), {
13093
13360
  header: headerOptions,
13361
+ footer: footerOptions,
13094
13362
  pageNumber: pageNumberOptions,
13095
13363
  watermark: waterMarkOptions,
13096
13364
  control: controlOptions,
@@ -13099,22 +13367,24 @@ class Editor {
13099
13367
  });
13100
13368
  let headerElementList = [];
13101
13369
  let mainElementList = [];
13370
+ let footerElementList = [];
13102
13371
  if (Array.isArray(data2)) {
13103
13372
  mainElementList = data2;
13104
13373
  } else {
13105
13374
  headerElementList = data2.header || [];
13106
13375
  mainElementList = data2.main;
13376
+ footerElementList = data2.footer || [];
13107
13377
  }
13108
- formatElementList(headerElementList, {
13109
- editorOptions
13110
- });
13111
- formatElementList(mainElementList, {
13112
- editorOptions
13378
+ [headerElementList, mainElementList, footerElementList].forEach((elementList) => {
13379
+ formatElementList(elementList, {
13380
+ editorOptions
13381
+ });
13113
13382
  });
13114
13383
  this.listener = new Listener();
13115
13384
  const draw = new Draw(container, editorOptions, {
13116
13385
  header: headerElementList,
13117
- main: mainElementList
13386
+ main: mainElementList,
13387
+ footer: footerElementList
13118
13388
  }, this.listener);
13119
13389
  this.command = new Command(new CommandAdapt(draw));
13120
13390
  const contextMenu = new ContextMenu(draw, this.command);
@@ -13131,5 +13401,5 @@ class Editor {
13131
13401
  };
13132
13402
  }
13133
13403
  }
13134
- export { BlockType, Command, ControlType, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, ImageDisplay, KeyMap, PageMode, PaperDirection, RowFlex, TableBorder, VerticalAlign, Editor as default };
13404
+ export { BlockType, Command, ControlType, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, ImageDisplay, KeyMap, MaxHeightRatio, PageMode, PaperDirection, RowFlex, TableBorder, VerticalAlign, Editor as default };
13135
13405
  //# sourceMappingURL=canvas-editor.es.js.map