@hufe921/canvas-editor 0.9.24 → 0.9.28

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-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-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:translate(10px,10px)}.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,20 @@ var __publicField = (obj, key, value) => {
23
23
  return value;
24
24
  };
25
25
  var index = "";
26
- const version = "0.9.24";
26
+ const version = "0.9.28";
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 maxHeightRadioMapping = {
36
+ [MaxHeightRatio.HALF]: 1 / 2,
37
+ [MaxHeightRatio.ONE_THIRD]: 1 / 3,
38
+ [MaxHeightRatio.QUARTER]: 1 / 4
39
+ };
29
40
  var RowFlex;
30
41
  (function(RowFlex2) {
31
42
  RowFlex2["LEFT"] = "left";
@@ -201,6 +212,7 @@ const EDITOR_ELEMENT_ZIP_ATTR = [
201
212
  "rowMargin",
202
213
  "dashArray",
203
214
  "trList",
215
+ "borderType",
204
216
  "width",
205
217
  "height",
206
218
  "url",
@@ -3269,6 +3281,9 @@ function formatElementList(elementList, options) {
3269
3281
  const tr = el.trList[t];
3270
3282
  const trId = getUUID();
3271
3283
  tr.id = trId;
3284
+ if (!tr.minHeight || tr.minHeight < editorOptions.defaultTrMinHeight) {
3285
+ tr.minHeight = editorOptions.defaultTrMinHeight;
3286
+ }
3272
3287
  for (let d = 0; d < tr.tdList.length; d++) {
3273
3288
  const td = tr.tdList[d];
3274
3289
  const tdId = getUUID();
@@ -4319,9 +4334,7 @@ function mousedown(evt, host) {
4319
4334
  const tableTool = draw.getTableTool();
4320
4335
  tableTool.dispose();
4321
4336
  if (isTable && !isReadonly) {
4322
- const originalElementList = draw.getOriginalElementList();
4323
- const originalPositionList = position.getOriginalPositionList();
4324
- tableTool.render(originalElementList[index2], originalPositionList[index2]);
4337
+ tableTool.render();
4325
4338
  }
4326
4339
  const hyperlinkParticle = draw.getHyperlinkParticle();
4327
4340
  hyperlinkParticle.clearHyperlinkPopup();
@@ -4776,6 +4789,10 @@ function keydown(evt, host) {
4776
4789
  evt.preventDefault();
4777
4790
  } else if (evt.key === KeyMap.ESC) {
4778
4791
  host.clearPainterStyle();
4792
+ const zoneManager = draw.getZone();
4793
+ if (!zoneManager.isMainActive()) {
4794
+ zoneManager.setZone(EditorZone.MAIN);
4795
+ }
4779
4796
  evt.preventDefault();
4780
4797
  } else if (evt.key === KeyMap.TAB) {
4781
4798
  draw.insertElementList([{
@@ -5441,8 +5458,15 @@ class Position {
5441
5458
  }
5442
5459
  getOriginalPositionList() {
5443
5460
  const zoneManager = this.draw.getZone();
5444
- const header = this.draw.getHeader();
5445
- return zoneManager.isHeaderActive() ? header.getPositionList() : this.positionList;
5461
+ if (zoneManager.isHeaderActive()) {
5462
+ const header = this.draw.getHeader();
5463
+ return header.getPositionList();
5464
+ }
5465
+ if (zoneManager.isFooterActive()) {
5466
+ const footer = this.draw.getFooter();
5467
+ return footer.getPositionList();
5468
+ }
5469
+ return this.positionList;
5446
5470
  }
5447
5471
  getOriginalMainPositionList() {
5448
5472
  return this.positionList;
@@ -5579,7 +5603,8 @@ class Position {
5579
5603
  }
5580
5604
  const zoneManager = this.draw.getZone();
5581
5605
  const curPageNo = this.draw.getPageNo();
5582
- const positionNo = zoneManager.isMainActive() ? curPageNo : 0;
5606
+ const isMainActive = zoneManager.isMainActive();
5607
+ const positionNo = isMainActive ? curPageNo : 0;
5583
5608
  for (let j = 0; j < positionList.length; j++) {
5584
5609
  const { index: index2, pageNo, coordinate: { leftTop, rightTop, leftBottom } } = positionList[j];
5585
5610
  if (positionNo !== pageNo)
@@ -5651,13 +5676,14 @@ class Position {
5651
5676
  let isLastArea = false;
5652
5677
  let curPositionIndex = -1;
5653
5678
  if (isTable) {
5679
+ const { scale } = this.options;
5654
5680
  const { td, tablePosition } = payload;
5655
5681
  if (td && tablePosition) {
5656
5682
  const { leftTop } = tablePosition.coordinate;
5657
- const tdX = td.x + leftTop[0];
5658
- const tdY = td.y + leftTop[1];
5659
- const tdWidth = td.width;
5660
- const tdHeight = td.height;
5683
+ const tdX = td.x * scale + leftTop[0];
5684
+ const tdY = td.y * scale + leftTop[1];
5685
+ const tdWidth = td.width * scale;
5686
+ const tdHeight = td.height * scale;
5661
5687
  if (!(tdX < x && x < tdX + tdWidth && tdY < y && y < tdY + tdHeight)) {
5662
5688
  return {
5663
5689
  index: curPositionIndex
@@ -5665,15 +5691,15 @@ class Position {
5665
5691
  }
5666
5692
  }
5667
5693
  }
5668
- const firstLetterList = positionList.filter((p) => p.isLastLetter && p.pageNo === positionNo);
5669
- for (let j = 0; j < firstLetterList.length; j++) {
5670
- const { index: index2, pageNo, coordinate: { leftTop, leftBottom } } = firstLetterList[j];
5694
+ const lastLetterList = positionList.filter((p) => p.isLastLetter && p.pageNo === positionNo);
5695
+ for (let j = 0; j < lastLetterList.length; j++) {
5696
+ const { index: index2, pageNo, coordinate: { leftTop, leftBottom } } = lastLetterList[j];
5671
5697
  if (positionNo !== pageNo)
5672
5698
  continue;
5673
5699
  if (y > leftTop[1] && y <= leftBottom[1]) {
5674
5700
  const isHead = x < this.options.margins[3];
5675
5701
  if (isHead) {
5676
- const headIndex = positionList.findIndex((p) => p.pageNo === positionNo && p.rowNo === firstLetterList[j].rowNo);
5702
+ const headIndex = positionList.findIndex((p) => p.pageNo === positionNo && p.rowNo === lastLetterList[j].rowNo);
5677
5703
  curPositionIndex = ~headIndex ? headIndex - 1 : index2;
5678
5704
  } else {
5679
5705
  curPositionIndex = index2;
@@ -5683,16 +5709,26 @@ class Position {
5683
5709
  }
5684
5710
  }
5685
5711
  if (!isLastArea) {
5686
- if (zoneManager.isMainActive()) {
5687
- if (y < firstLetterList[0].coordinate.leftTop[1]) {
5712
+ const header = this.draw.getHeader();
5713
+ const headerBottomY = header.getHeaderTop() + header.getHeight();
5714
+ const footer = this.draw.getFooter();
5715
+ const pageHeight = this.draw.getHeight();
5716
+ const footerTopY = pageHeight - (footer.getFooterBottom() + footer.getHeight());
5717
+ if (isMainActive) {
5718
+ if (y < headerBottomY) {
5688
5719
  return {
5689
5720
  index: -1,
5690
5721
  zone: EditorZone.HEADER
5691
5722
  };
5692
5723
  }
5693
- }
5694
- if (zoneManager.isHeaderActive()) {
5695
- if (y > firstLetterList[0].coordinate.leftTop[1]) {
5724
+ if (y > footerTopY) {
5725
+ return {
5726
+ index: -1,
5727
+ zone: EditorZone.FOOTER
5728
+ };
5729
+ }
5730
+ } else {
5731
+ if (y <= footerTopY && y >= headerBottomY) {
5696
5732
  return {
5697
5733
  index: -1,
5698
5734
  zone: EditorZone.MAIN
@@ -5700,7 +5736,7 @@ class Position {
5700
5736
  }
5701
5737
  }
5702
5738
  return {
5703
- index: ((_a = firstLetterList[firstLetterList.length - 1]) == null ? void 0 : _a.index) || positionList.length - 1
5739
+ index: ((_a = lastLetterList[lastLetterList.length - 1]) == null ? void 0 : _a.index) || positionList.length - 1
5704
5740
  };
5705
5741
  }
5706
5742
  return {
@@ -6457,7 +6493,7 @@ class PageNumber {
6457
6493
  const margins = this.draw.getMargins();
6458
6494
  const { width: textWidth } = ctx.measureText(text);
6459
6495
  if (rowFlex === RowFlex.CENTER) {
6460
- x = (width + textWidth) / 2;
6496
+ x = (width - textWidth) / 2;
6461
6497
  } else if (rowFlex === RowFlex.RIGHT) {
6462
6498
  x = width - textWidth - margins[1];
6463
6499
  } else {
@@ -6610,14 +6646,35 @@ class TableParticle {
6610
6646
  this.range = draw.getRange();
6611
6647
  this.options = draw.getOptions();
6612
6648
  }
6613
- _drawBorder(ctx, startX, startY, width, height) {
6649
+ getTrListGroupByCol(payload) {
6650
+ const trList = deepClone(payload);
6651
+ for (let t = 0; t < payload.length; t++) {
6652
+ const tr = trList[t];
6653
+ for (let d = tr.tdList.length - 1; d >= 0; d--) {
6654
+ const td = tr.tdList[d];
6655
+ const { rowspan, rowIndex, colIndex } = td;
6656
+ const curRowIndex = rowIndex + rowspan - 1;
6657
+ if (curRowIndex !== d) {
6658
+ const changeTd = tr.tdList.splice(d, 1)[0];
6659
+ trList[curRowIndex].tdList.splice(colIndex, 0, changeTd);
6660
+ }
6661
+ }
6662
+ }
6663
+ return trList;
6664
+ }
6665
+ _drawBorder(payload) {
6666
+ const { ctx, startX, startY, width, height, isDrawFullBorder } = payload;
6614
6667
  ctx.beginPath();
6615
6668
  const x = Math.round(startX);
6616
6669
  const y = Math.round(startY);
6617
6670
  ctx.translate(0.5, 0.5);
6618
- ctx.moveTo(x, y + height);
6619
- ctx.lineTo(x, y);
6620
- ctx.lineTo(x + width, y);
6671
+ if (isDrawFullBorder) {
6672
+ ctx.rect(x, y, width, height);
6673
+ } else {
6674
+ ctx.moveTo(x, y + height);
6675
+ ctx.lineTo(x, y);
6676
+ ctx.lineTo(x + width, y);
6677
+ }
6621
6678
  ctx.stroke();
6622
6679
  ctx.translate(-0.5, -0.5);
6623
6680
  }
@@ -6739,29 +6796,39 @@ class TableParticle {
6739
6796
  ctx.restore();
6740
6797
  }
6741
6798
  render(ctx, element, startX, startY) {
6742
- const { colgroup, trList } = element;
6743
- if (!colgroup || !trList)
6799
+ const { colgroup, trList, borderType } = element;
6800
+ if (!colgroup || !trList || borderType === TableBorder.EMPTY)
6744
6801
  return;
6745
6802
  const { scale } = this.options;
6746
6803
  const tableWidth = element.width * scale;
6747
6804
  const tableHeight = element.height * scale;
6805
+ const isExternalBorderType = borderType === TableBorder.EXTERNAL;
6748
6806
  ctx.save();
6749
- this._drawBorder(ctx, startX, startY, tableWidth, tableHeight);
6750
- for (let t = 0; t < trList.length; t++) {
6751
- const tr = trList[t];
6752
- for (let d = 0; d < tr.tdList.length; d++) {
6753
- const td = tr.tdList[d];
6754
- const width = td.width * scale;
6755
- const height = td.height * scale;
6756
- const x = Math.round(td.x * scale + startX + width);
6757
- const y = Math.round(td.y * scale + startY);
6758
- ctx.translate(0.5, 0.5);
6759
- ctx.beginPath();
6760
- ctx.moveTo(x, y);
6761
- ctx.lineTo(x, y + height);
6762
- ctx.lineTo(x - width, y + height);
6763
- ctx.stroke();
6764
- ctx.translate(-0.5, -0.5);
6807
+ this._drawBorder({
6808
+ ctx,
6809
+ startX,
6810
+ startY,
6811
+ width: tableWidth,
6812
+ height: tableHeight,
6813
+ isDrawFullBorder: isExternalBorderType
6814
+ });
6815
+ if (!isExternalBorderType) {
6816
+ for (let t = 0; t < trList.length; t++) {
6817
+ const tr = trList[t];
6818
+ for (let d = 0; d < tr.tdList.length; d++) {
6819
+ const td = tr.tdList[d];
6820
+ const width = td.width * scale;
6821
+ const height = td.height * scale;
6822
+ const x = Math.round(td.x * scale + startX + width);
6823
+ const y = Math.round(td.y * scale + startY);
6824
+ ctx.translate(0.5, 0.5);
6825
+ ctx.beginPath();
6826
+ ctx.moveTo(x, y);
6827
+ ctx.lineTo(x, y + height);
6828
+ ctx.lineTo(x - width, y + height);
6829
+ ctx.stroke();
6830
+ ctx.translate(-0.5, -0.5);
6831
+ }
6765
6832
  }
6766
6833
  }
6767
6834
  ctx.restore();
@@ -6774,8 +6841,9 @@ var TableOrder;
6774
6841
  })(TableOrder || (TableOrder = {}));
6775
6842
  class TableTool {
6776
6843
  constructor(draw) {
6777
- __publicField(this, "translate", 18);
6778
- __publicField(this, "minTdWidth", 20);
6844
+ __publicField(this, "MIN_TD_WIDTH", 20);
6845
+ __publicField(this, "ROW_COL_OFFSET", 18);
6846
+ __publicField(this, "BORDER_VALUE", 4);
6779
6847
  __publicField(this, "draw");
6780
6848
  __publicField(this, "canvas");
6781
6849
  __publicField(this, "options");
@@ -6783,6 +6851,7 @@ class TableTool {
6783
6851
  __publicField(this, "container");
6784
6852
  __publicField(this, "toolRowContainer");
6785
6853
  __publicField(this, "toolColContainer");
6854
+ __publicField(this, "toolBorderContainer");
6786
6855
  __publicField(this, "anchorLine");
6787
6856
  __publicField(this, "mousedownX");
6788
6857
  __publicField(this, "mousedownY");
@@ -6793,34 +6862,46 @@ class TableTool {
6793
6862
  this.container = draw.getContainer();
6794
6863
  this.toolRowContainer = null;
6795
6864
  this.toolColContainer = null;
6865
+ this.toolBorderContainer = null;
6796
6866
  this.anchorLine = null;
6797
6867
  this.mousedownX = 0;
6798
6868
  this.mousedownY = 0;
6799
6869
  }
6800
6870
  dispose() {
6801
- var _a, _b;
6871
+ var _a, _b, _c;
6802
6872
  (_a = this.toolRowContainer) == null ? void 0 : _a.remove();
6803
6873
  (_b = this.toolColContainer) == null ? void 0 : _b.remove();
6874
+ (_c = this.toolBorderContainer) == null ? void 0 : _c.remove();
6875
+ this.toolRowContainer = null;
6876
+ this.toolColContainer = null;
6877
+ this.toolBorderContainer = null;
6804
6878
  }
6805
- render(element, position) {
6879
+ render() {
6880
+ const { isTable, index: index2, trIndex, tdIndex } = this.position.getPositionContext();
6881
+ if (!isTable)
6882
+ return;
6806
6883
  this.dispose();
6807
- const { trIndex, tdIndex } = this.position.getPositionContext();
6808
6884
  const { scale } = this.options;
6809
- const height = this.draw.getHeight();
6810
- const pageGap = this.draw.getPageGap();
6885
+ const elementList = this.draw.getOriginalElementList();
6886
+ const positionList = this.position.getOriginalPositionList();
6887
+ const element = elementList[index2];
6888
+ const position = positionList[index2];
6811
6889
  const { colgroup, trList } = element;
6812
6890
  const { coordinate: { leftTop } } = position;
6891
+ const height = this.draw.getHeight();
6892
+ const pageGap = this.draw.getPageGap();
6813
6893
  const prePageHeight = this.draw.getPageNo() * (height + pageGap);
6894
+ const tableX = leftTop[0];
6895
+ const tableY = leftTop[1] + prePageHeight;
6814
6896
  const td = element.trList[trIndex].tdList[tdIndex];
6815
6897
  const rowIndex = td.rowIndex;
6816
6898
  const colIndex = td.colIndex;
6817
- const rowList = trList.map((tr) => tr.height);
6818
- const colList = colgroup.map((col) => col.width);
6899
+ const rowHeightList = trList.map((tr) => tr.height);
6819
6900
  const rowContainer = document.createElement("div");
6820
6901
  rowContainer.classList.add(`${EDITOR_PREFIX}-table-tool__row`);
6821
- rowContainer.style.transform = `translateX(-${this.translate * scale}px)`;
6822
- for (let r = 0; r < rowList.length; r++) {
6823
- const rowHeight = rowList[r] * scale;
6902
+ rowContainer.style.transform = `translateX(-${this.ROW_COL_OFFSET * scale}px)`;
6903
+ for (let r = 0; r < rowHeightList.length; r++) {
6904
+ const rowHeight = rowHeightList[r] * scale;
6824
6905
  const rowItem = document.createElement("div");
6825
6906
  rowItem.classList.add(`${EDITOR_PREFIX}-table-tool__row__item`);
6826
6907
  if (r === rowIndex) {
@@ -6832,7 +6913,6 @@ class TableTool {
6832
6913
  this._mousedown({
6833
6914
  evt,
6834
6915
  element,
6835
- position,
6836
6916
  index: r,
6837
6917
  order: TableOrder.ROW
6838
6918
  });
@@ -6841,15 +6921,16 @@ class TableTool {
6841
6921
  rowItem.style.height = `${rowHeight}px`;
6842
6922
  rowContainer.append(rowItem);
6843
6923
  }
6844
- rowContainer.style.left = `${leftTop[0]}px`;
6845
- rowContainer.style.top = `${leftTop[1] + prePageHeight}px`;
6924
+ rowContainer.style.left = `${tableX}px`;
6925
+ rowContainer.style.top = `${tableY}px`;
6846
6926
  this.container.append(rowContainer);
6847
6927
  this.toolRowContainer = rowContainer;
6928
+ const colWidthList = colgroup.map((col) => col.width);
6848
6929
  const colContainer = document.createElement("div");
6849
6930
  colContainer.classList.add(`${EDITOR_PREFIX}-table-tool__col`);
6850
- colContainer.style.transform = `translateY(-${this.translate * scale}px)`;
6851
- for (let c = 0; c < colList.length; c++) {
6852
- const colHeight = colList[c] * scale;
6931
+ colContainer.style.transform = `translateY(-${this.ROW_COL_OFFSET * scale}px)`;
6932
+ for (let c = 0; c < colWidthList.length; c++) {
6933
+ const colWidth = colWidthList[c] * scale;
6853
6934
  const colItem = document.createElement("div");
6854
6935
  colItem.classList.add(`${EDITOR_PREFIX}-table-tool__col__item`);
6855
6936
  if (c === colIndex) {
@@ -6861,22 +6942,67 @@ class TableTool {
6861
6942
  this._mousedown({
6862
6943
  evt,
6863
6944
  element,
6864
- position,
6865
6945
  index: c,
6866
6946
  order: TableOrder.COL
6867
6947
  });
6868
6948
  };
6869
6949
  colItem.append(colItemAnchor);
6870
- colItem.style.width = `${colHeight}px`;
6950
+ colItem.style.width = `${colWidth}px`;
6871
6951
  colContainer.append(colItem);
6872
6952
  }
6873
- colContainer.style.left = `${leftTop[0]}px`;
6874
- colContainer.style.top = `${leftTop[1] + prePageHeight}px`;
6953
+ colContainer.style.left = `${tableX}px`;
6954
+ colContainer.style.top = `${tableY}px`;
6875
6955
  this.container.append(colContainer);
6876
6956
  this.toolColContainer = colContainer;
6957
+ const tableHeight = element.height * scale;
6958
+ const tableWidth = element.width * scale;
6959
+ const borderContainer = document.createElement("div");
6960
+ borderContainer.classList.add(`${EDITOR_PREFIX}-table-tool__border`);
6961
+ borderContainer.style.height = `${tableHeight}px`;
6962
+ borderContainer.style.width = `${tableWidth}px`;
6963
+ borderContainer.style.left = `${tableX}px`;
6964
+ borderContainer.style.top = `${tableY}px`;
6965
+ for (let r = 0; r < trList.length; r++) {
6966
+ const tr = trList[r];
6967
+ for (let d = 0; d < tr.tdList.length; d++) {
6968
+ const td2 = tr.tdList[d];
6969
+ const rowBorder = document.createElement("div");
6970
+ rowBorder.classList.add(`${EDITOR_PREFIX}-table-tool__border__row`);
6971
+ rowBorder.style.width = `${td2.width * scale}px`;
6972
+ rowBorder.style.height = `${this.BORDER_VALUE}px`;
6973
+ rowBorder.style.top = `${(td2.y + td2.height) * scale - this.BORDER_VALUE / 2}px`;
6974
+ rowBorder.style.left = `${td2.x * scale}px`;
6975
+ rowBorder.onmousedown = (evt) => {
6976
+ this._mousedown({
6977
+ evt,
6978
+ element,
6979
+ index: td2.rowIndex + td2.rowspan - 1,
6980
+ order: TableOrder.ROW
6981
+ });
6982
+ };
6983
+ borderContainer.appendChild(rowBorder);
6984
+ const colBorder = document.createElement("div");
6985
+ colBorder.classList.add(`${EDITOR_PREFIX}-table-tool__border__col`);
6986
+ colBorder.style.width = `${this.BORDER_VALUE}px`;
6987
+ colBorder.style.height = `${td2.height * scale}px`;
6988
+ colBorder.style.top = `${td2.y * scale}px`;
6989
+ colBorder.style.left = `${(td2.x + td2.width) * scale - this.BORDER_VALUE / 2}px`;
6990
+ colBorder.onmousedown = (evt) => {
6991
+ this._mousedown({
6992
+ evt,
6993
+ element,
6994
+ index: td2.colIndex + td2.colspan - 1,
6995
+ order: TableOrder.COL
6996
+ });
6997
+ };
6998
+ borderContainer.appendChild(colBorder);
6999
+ }
7000
+ }
7001
+ this.container.append(borderContainer);
7002
+ this.toolBorderContainer = borderContainer;
6877
7003
  }
6878
7004
  _mousedown(payload) {
6879
- const { evt, index: index2, order, element, position } = payload;
7005
+ const { evt, index: index2, order, element } = payload;
6880
7006
  this.canvas = this.draw.getPage();
6881
7007
  const { scale } = this.options;
6882
7008
  const width = this.draw.getWidth();
@@ -6920,10 +7046,17 @@ class TableTool {
6920
7046
  };
6921
7047
  document.addEventListener("mousemove", mousemoveFn);
6922
7048
  document.addEventListener("mouseup", () => {
7049
+ var _a;
6923
7050
  let isChangeSize = false;
6924
7051
  if (order === TableOrder.ROW) {
6925
- element.trList[index2].height += dy;
7052
+ const tr = element.trList[index2];
7053
+ const { defaultTrMinHeight } = this.options;
7054
+ if (dy < 0 && tr.height + dy < defaultTrMinHeight) {
7055
+ dy = defaultTrMinHeight - tr.height;
7056
+ }
6926
7057
  if (dy) {
7058
+ tr.height += dy;
7059
+ tr.minHeight = tr.height;
6927
7060
  isChangeSize = true;
6928
7061
  }
6929
7062
  } else {
@@ -6931,10 +7064,14 @@ class TableTool {
6931
7064
  if (colgroup && dx) {
6932
7065
  const innerWidth = this.draw.getInnerWidth();
6933
7066
  const curColWidth = colgroup[index2].width;
6934
- const moveColWidth = curColWidth + dx;
6935
- if (moveColWidth < this.minTdWidth) {
6936
- dx = this.minTdWidth - curColWidth;
7067
+ if (dx < 0 && curColWidth + dx < this.MIN_TD_WIDTH) {
7068
+ dx = this.MIN_TD_WIDTH - curColWidth;
6937
7069
  }
7070
+ const nextColWidth = (_a = colgroup[index2 + 1]) == null ? void 0 : _a.width;
7071
+ if (dx > 0 && nextColWidth && nextColWidth - dx < this.MIN_TD_WIDTH) {
7072
+ dx = nextColWidth - this.MIN_TD_WIDTH;
7073
+ }
7074
+ const moveColWidth = curColWidth + dx;
6938
7075
  let moveTableWidth = 0;
6939
7076
  for (let c = 0; c < colgroup.length; c++) {
6940
7077
  const group2 = colgroup[c];
@@ -6963,7 +7100,6 @@ class TableTool {
6963
7100
  }
6964
7101
  if (isChangeSize) {
6965
7102
  this.draw.render({ isSetCursor: false });
6966
- this.render(element, position);
6967
7103
  }
6968
7104
  anchorLine.remove();
6969
7105
  document.removeEventListener("mousemove", mousemoveFn);
@@ -7048,21 +7184,6 @@ class HyperlinkParticle {
7048
7184
  ctx.restore();
7049
7185
  }
7050
7186
  }
7051
- var HeaderMaxHeightRatio;
7052
- (function(HeaderMaxHeightRatio2) {
7053
- HeaderMaxHeightRatio2["HALF"] = "half";
7054
- HeaderMaxHeightRatio2["ONE_THIRD"] = "one-third";
7055
- HeaderMaxHeightRatio2["QUARTER"] = "quarter";
7056
- })(HeaderMaxHeightRatio || (HeaderMaxHeightRatio = {}));
7057
- const defaultHeaderOption = {
7058
- top: 30,
7059
- maxHeightRadio: HeaderMaxHeightRatio.HALF
7060
- };
7061
- const maxHeightRadioMapping = {
7062
- [HeaderMaxHeightRatio.HALF]: 1 / 2,
7063
- [HeaderMaxHeightRatio.ONE_THIRD]: 1 / 3,
7064
- [HeaderMaxHeightRatio.QUARTER]: 1 / 4
7065
- };
7066
7187
  class Header {
7067
7188
  constructor(draw) {
7068
7189
  __publicField(this, "draw");
@@ -8257,7 +8378,11 @@ const contextmenu$1 = {
8257
8378
  verticalAlign: "\u5782\u76F4\u5BF9\u9F50",
8258
8379
  verticalAlignTop: "\u9876\u7AEF\u5BF9\u9F50",
8259
8380
  verticalAlignMiddle: "\u5782\u76F4\u5C45\u4E2D",
8260
- verticalAlignBottom: "\u5E95\u7AEF\u5BF9\u9F50"
8381
+ verticalAlignBottom: "\u5E95\u7AEF\u5BF9\u9F50",
8382
+ border: "\u8868\u683C\u8FB9\u6846",
8383
+ borderAll: "\u6240\u6709\u6846\u7EBF",
8384
+ borderEmpty: "\u65E0\u6846\u7EBF",
8385
+ borderExternal: "\u5916\u4FA7\u6846\u7EBF"
8261
8386
  }
8262
8387
  };
8263
8388
  const datePicker$1 = {
@@ -8280,9 +8405,14 @@ const datePicker$1 = {
8280
8405
  minute: "\u5206",
8281
8406
  second: "\u79D2"
8282
8407
  };
8408
+ const frame$1 = {
8409
+ header: "\u9875\u7709",
8410
+ footer: "\u9875\u811A"
8411
+ };
8283
8412
  var zhCN = {
8284
8413
  contextmenu: contextmenu$1,
8285
- datePicker: datePicker$1
8414
+ datePicker: datePicker$1,
8415
+ frame: frame$1
8286
8416
  };
8287
8417
  class DatePicker {
8288
8418
  constructor(options = {}) {
@@ -9011,7 +9141,11 @@ const contextmenu = {
9011
9141
  verticalAlign: "Vertical align",
9012
9142
  verticalAlignTop: "Top",
9013
9143
  verticalAlignMiddle: "Middle",
9014
- verticalAlignBottom: "Bottom"
9144
+ verticalAlignBottom: "Bottom",
9145
+ border: "Table border",
9146
+ borderAll: "All",
9147
+ borderEmpty: "Empty",
9148
+ borderExternal: "External"
9015
9149
  }
9016
9150
  };
9017
9151
  const datePicker = {
@@ -9034,9 +9168,14 @@ const datePicker = {
9034
9168
  minute: "Minute",
9035
9169
  second: "Second"
9036
9170
  };
9171
+ const frame = {
9172
+ header: "Header",
9173
+ footer: "Footer"
9174
+ };
9037
9175
  var en = {
9038
9176
  contextmenu,
9039
- datePicker
9177
+ datePicker,
9178
+ frame
9040
9179
  };
9041
9180
  class I18n {
9042
9181
  constructor() {
@@ -9089,14 +9228,20 @@ class ImageObserver {
9089
9228
  }
9090
9229
  class Zone {
9091
9230
  constructor(draw) {
9231
+ __publicField(this, "INDICATOR_PADDING", 2);
9232
+ __publicField(this, "INDICATOR_TITLE_TRANSLATE", [20, 5]);
9092
9233
  __publicField(this, "draw");
9234
+ __publicField(this, "options");
9235
+ __publicField(this, "i18n");
9093
9236
  __publicField(this, "container");
9094
9237
  __publicField(this, "currentZone");
9095
- __publicField(this, "headerIndicatorContainer");
9238
+ __publicField(this, "indicatorContainer");
9096
9239
  this.draw = draw;
9240
+ this.i18n = draw.getI18n();
9241
+ this.options = draw.getOptions();
9097
9242
  this.container = draw.getContainer();
9098
9243
  this.currentZone = EditorZone.MAIN;
9099
- this.headerIndicatorContainer = null;
9244
+ this.indicatorContainer = null;
9100
9245
  }
9101
9246
  isHeaderActive() {
9102
9247
  return this.getZone() === EditorZone.HEADER;
@@ -9104,6 +9249,9 @@ class Zone {
9104
9249
  isMainActive() {
9105
9250
  return this.getZone() === EditorZone.MAIN;
9106
9251
  }
9252
+ isFooterActive() {
9253
+ return this.getZone() === EditorZone.FOOTER;
9254
+ }
9107
9255
  getZone() {
9108
9256
  return this.currentZone;
9109
9257
  }
@@ -9117,30 +9265,171 @@ class Zone {
9117
9265
  isSetCursor: false,
9118
9266
  isCompute: false
9119
9267
  });
9120
- if (this.isHeaderActive()) {
9121
- this._drawHeaderZoneIndicator();
9122
- } else {
9123
- this._clearHeaderZoneIndicator();
9124
- }
9268
+ this.drawZoneIndicator();
9125
9269
  }
9126
- _drawHeaderZoneIndicator() {
9127
- this.headerIndicatorContainer = document.createElement("div");
9128
- this.headerIndicatorContainer.classList.add(`${EDITOR_PREFIX}-header-indicator`);
9270
+ drawZoneIndicator() {
9271
+ this._clearZoneIndicator();
9272
+ if (!this.isHeaderActive() && !this.isFooterActive())
9273
+ return;
9274
+ const { scale } = this.options;
9275
+ const isHeaderActive = this.isHeaderActive();
9276
+ const [offsetX, offsetY] = this.INDICATOR_TITLE_TRANSLATE;
9129
9277
  const pageList = this.draw.getPageList();
9278
+ const margins = this.draw.getMargins();
9279
+ const innerWidth = this.draw.getInnerWidth();
9130
9280
  const pageHeight = this.draw.getHeight();
9131
9281
  const pageGap = this.draw.getPageGap();
9132
9282
  const preY = pageHeight + pageGap;
9283
+ this.indicatorContainer = document.createElement("div");
9284
+ this.indicatorContainer.classList.add(`${EDITOR_PREFIX}-zone-indicator`);
9285
+ const header = this.draw.getHeader();
9286
+ const footer = this.draw.getFooter();
9287
+ const indicatorHeight = isHeaderActive ? header.getHeight() : footer.getHeight();
9288
+ const indicatorTop = isHeaderActive ? header.getHeaderTop() : pageHeight - footer.getFooterBottom() - indicatorHeight;
9133
9289
  for (let p = 0; p < pageList.length; p++) {
9134
- const indicator = document.createElement("div");
9135
- indicator.innerText = `\u7F16\u8F91\u9875\u7709`;
9136
- indicator.style.top = `${preY * p}px`;
9137
- this.headerIndicatorContainer.append(indicator);
9138
- }
9139
- this.container.append(this.headerIndicatorContainer);
9140
- }
9141
- _clearHeaderZoneIndicator() {
9290
+ const startY = preY * p + indicatorTop;
9291
+ const indicatorLeftX = margins[3] - this.INDICATOR_PADDING;
9292
+ const indicatorRightX = margins[3] + innerWidth + this.INDICATOR_PADDING;
9293
+ const indicatorTopY = isHeaderActive ? startY - this.INDICATOR_PADDING : startY + indicatorHeight + this.INDICATOR_PADDING;
9294
+ const indicatorBottomY = isHeaderActive ? startY + indicatorHeight + this.INDICATOR_PADDING : startY - this.INDICATOR_PADDING;
9295
+ const indicatorTitle = document.createElement("div");
9296
+ indicatorTitle.innerText = this.i18n.t(`frame.${isHeaderActive ? "header" : "footer"}`);
9297
+ indicatorTitle.style.top = `${indicatorBottomY}px`;
9298
+ indicatorTitle.style.transform = `translate(${offsetX * scale}px, ${offsetY * scale}px) scale(${scale})`;
9299
+ this.indicatorContainer.append(indicatorTitle);
9300
+ const lineTop = document.createElement("span");
9301
+ lineTop.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__top`);
9302
+ lineTop.style.top = `${indicatorTopY}px`;
9303
+ lineTop.style.width = `${innerWidth}px`;
9304
+ lineTop.style.marginLeft = `${margins[3]}px`;
9305
+ this.indicatorContainer.append(lineTop);
9306
+ const lineLeft = document.createElement("span");
9307
+ lineLeft.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__left`);
9308
+ lineLeft.style.top = `${startY}px`;
9309
+ lineLeft.style.height = `${indicatorHeight}px`;
9310
+ lineLeft.style.left = `${indicatorLeftX}px`;
9311
+ this.indicatorContainer.append(lineLeft);
9312
+ const lineBottom = document.createElement("span");
9313
+ lineBottom.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__bottom`);
9314
+ lineBottom.style.top = `${indicatorBottomY}px`;
9315
+ this.indicatorContainer.append(lineBottom);
9316
+ const lineRight = document.createElement("span");
9317
+ lineRight.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__right`);
9318
+ lineRight.style.top = `${startY}px`;
9319
+ lineRight.style.height = `${indicatorHeight}px`;
9320
+ lineRight.style.left = `${indicatorRightX}px`;
9321
+ this.indicatorContainer.append(lineRight);
9322
+ }
9323
+ this.container.append(this.indicatorContainer);
9324
+ }
9325
+ _clearZoneIndicator() {
9142
9326
  var _a;
9143
- (_a = this.headerIndicatorContainer) == null ? void 0 : _a.remove();
9327
+ (_a = this.indicatorContainer) == null ? void 0 : _a.remove();
9328
+ this.indicatorContainer = null;
9329
+ }
9330
+ }
9331
+ class Footer {
9332
+ constructor(draw) {
9333
+ __publicField(this, "draw");
9334
+ __publicField(this, "position");
9335
+ __publicField(this, "options");
9336
+ __publicField(this, "elementList");
9337
+ __publicField(this, "rowList");
9338
+ __publicField(this, "positionList");
9339
+ this.draw = draw;
9340
+ this.position = draw.getPosition();
9341
+ this.options = draw.getOptions();
9342
+ this.elementList = draw.getFooterElementList();
9343
+ this.rowList = [];
9344
+ this.positionList = [];
9345
+ }
9346
+ setElementList(elementList) {
9347
+ this.elementList = elementList;
9348
+ }
9349
+ getElementList() {
9350
+ return this.elementList;
9351
+ }
9352
+ getPositionList() {
9353
+ return this.positionList;
9354
+ }
9355
+ compute() {
9356
+ this._recovery();
9357
+ this._computeRowList();
9358
+ this._computePositionList();
9359
+ }
9360
+ _recovery() {
9361
+ this.rowList = [];
9362
+ this.positionList = [];
9363
+ }
9364
+ _computeRowList() {
9365
+ const innerWidth = this.draw.getInnerWidth();
9366
+ this.rowList = this.draw.computeRowList(innerWidth, this.elementList);
9367
+ }
9368
+ _computePositionList() {
9369
+ const footerBottom = this.getFooterBottom();
9370
+ const innerWidth = this.draw.getInnerWidth();
9371
+ const margins = this.draw.getMargins();
9372
+ const startX = margins[3];
9373
+ const pageHeight = this.draw.getHeight();
9374
+ const footerHeight = this.getHeight();
9375
+ const startY = pageHeight - footerBottom - footerHeight;
9376
+ this.position.computePageRowPosition({
9377
+ positionList: this.positionList,
9378
+ rowList: this.rowList,
9379
+ pageNo: 0,
9380
+ startIndex: 0,
9381
+ startX,
9382
+ startY,
9383
+ innerWidth
9384
+ });
9385
+ }
9386
+ getFooterBottom() {
9387
+ const { footer: { bottom }, scale } = this.options;
9388
+ return Math.floor(bottom * scale);
9389
+ }
9390
+ getMaxHeight() {
9391
+ const { footer: { maxHeightRadio } } = this.options;
9392
+ const height = this.draw.getHeight();
9393
+ return Math.floor(height * maxHeightRadioMapping[maxHeightRadio]);
9394
+ }
9395
+ getHeight() {
9396
+ const maxHeight = this.getMaxHeight();
9397
+ const rowHeight = this.getRowHeight();
9398
+ return rowHeight > maxHeight ? maxHeight : rowHeight;
9399
+ }
9400
+ getRowHeight() {
9401
+ return this.rowList.reduce((pre, cur) => pre + cur.height, 0);
9402
+ }
9403
+ getExtraHeight() {
9404
+ const margins = this.draw.getMargins();
9405
+ const footerHeight = this.getHeight();
9406
+ const footerBottom = this.getFooterBottom();
9407
+ const extraHeight = footerBottom + footerHeight - margins[2];
9408
+ return extraHeight <= 0 ? 0 : extraHeight;
9409
+ }
9410
+ render(ctx, pageNo) {
9411
+ ctx.globalAlpha = 1;
9412
+ const innerWidth = this.draw.getInnerWidth();
9413
+ const maxHeight = this.getMaxHeight();
9414
+ const rowList = [];
9415
+ let curRowHeight = 0;
9416
+ for (let r = 0; r < this.rowList.length; r++) {
9417
+ const row = this.rowList[r];
9418
+ if (curRowHeight + row.height > maxHeight) {
9419
+ break;
9420
+ }
9421
+ rowList.push(row);
9422
+ curRowHeight += row.height;
9423
+ }
9424
+ this.draw.drawRow(ctx, {
9425
+ elementList: this.elementList,
9426
+ positionList: this.positionList,
9427
+ rowList,
9428
+ pageNo,
9429
+ startIndex: 0,
9430
+ innerWidth,
9431
+ zone: EditorZone.FOOTER
9432
+ });
9144
9433
  }
9145
9434
  }
9146
9435
  class Draw {
@@ -9179,6 +9468,7 @@ class Draw {
9179
9468
  __publicField(this, "pageNumber");
9180
9469
  __publicField(this, "waterMark");
9181
9470
  __publicField(this, "header");
9471
+ __publicField(this, "footer");
9182
9472
  __publicField(this, "hyperlinkParticle");
9183
9473
  __publicField(this, "dateParticle");
9184
9474
  __publicField(this, "separatorParticle");
@@ -9232,6 +9522,7 @@ class Draw {
9232
9522
  this.pageNumber = new PageNumber(this);
9233
9523
  this.waterMark = new Watermark(this);
9234
9524
  this.header = new Header(this);
9525
+ this.footer = new Footer(this);
9235
9526
  this.hyperlinkParticle = new HyperlinkParticle(this);
9236
9527
  this.dateParticle = new DateParticle(this);
9237
9528
  this.separatorParticle = new SeparatorParticle();
@@ -9284,9 +9575,13 @@ class Draw {
9284
9575
  }
9285
9576
  getMainHeight() {
9286
9577
  const pageHeight = this.getHeight();
9578
+ return pageHeight - this.getMainOuterHeight();
9579
+ }
9580
+ getMainOuterHeight() {
9287
9581
  const margins = this.getMargins();
9288
- const extraHeight = this.header.getExtraHeight();
9289
- return pageHeight - margins[0] - margins[2] - extraHeight;
9582
+ const headerExtraHeight = this.header.getExtraHeight();
9583
+ const footerExtraHeight = this.footer.getExtraHeight();
9584
+ return margins[0] + margins[2] + headerExtraHeight + footerExtraHeight;
9290
9585
  }
9291
9586
  getCanvasWidth(pageNo = -1) {
9292
9587
  const page = this.getPage(pageNo);
@@ -9320,9 +9615,6 @@ class Draw {
9320
9615
  const { pageNumber: { bottom }, scale } = this.options;
9321
9616
  return bottom * scale;
9322
9617
  }
9323
- getHeaderTop() {
9324
- return this.options.headerTop * this.options.scale;
9325
- }
9326
9618
  getMarginIndicatorSize() {
9327
9619
  return this.options.marginIndicatorSize * this.options.scale;
9328
9620
  }
@@ -9414,7 +9706,13 @@ class Draw {
9414
9706
  }
9415
9707
  getOriginalElementList() {
9416
9708
  const zoneManager = this.getZone();
9417
- return zoneManager.isHeaderActive() ? this.header.getElementList() : this.elementList;
9709
+ if (zoneManager.isHeaderActive()) {
9710
+ return this.header.getElementList();
9711
+ }
9712
+ if (zoneManager.isFooterActive()) {
9713
+ return this.footer.getElementList();
9714
+ }
9715
+ return this.elementList;
9418
9716
  }
9419
9717
  getOriginalMainElementList() {
9420
9718
  return this.elementList;
@@ -9486,6 +9784,9 @@ class Draw {
9486
9784
  getHeader() {
9487
9785
  return this.header;
9488
9786
  }
9787
+ getFooter() {
9788
+ return this.footer;
9789
+ }
9489
9790
  getHyperlinkParticle() {
9490
9791
  return this.hyperlinkParticle;
9491
9792
  }
@@ -9643,7 +9944,8 @@ class Draw {
9643
9944
  const { width, height, margins, watermark } = this.options;
9644
9945
  const data2 = {
9645
9946
  header: zipElementList(this.headerElementList),
9646
- main: zipElementList(this.elementList)
9947
+ main: zipElementList(this.elementList),
9948
+ footer: zipElementList(this.footerElementList)
9647
9949
  };
9648
9950
  return {
9649
9951
  version,
@@ -9767,6 +10069,40 @@ class Draw {
9767
10069
  changeTd.height += extraHeight;
9768
10070
  });
9769
10071
  }
10072
+ let curTdMinHeight = 0;
10073
+ let curTdRealHeight = 0;
10074
+ let i2 = 0;
10075
+ while (i2 < td.rowspan) {
10076
+ const curTr = trList[i2 + t];
10077
+ curTdMinHeight += curTr.minHeight;
10078
+ curTdRealHeight += curTr.height;
10079
+ i2++;
10080
+ }
10081
+ td.realMinHeight = curTdMinHeight;
10082
+ td.realHeight = curTdRealHeight;
10083
+ td.mainHeight = curTdHeight;
10084
+ }
10085
+ }
10086
+ const reduceTrList = this.tableParticle.getTrListGroupByCol(trList);
10087
+ for (let t = 0; t < reduceTrList.length; t++) {
10088
+ const tr = reduceTrList[t];
10089
+ let reduceHeight = -1;
10090
+ for (let d = 0; d < tr.tdList.length; d++) {
10091
+ const td = tr.tdList[d];
10092
+ const curTdRealHeight = td.realHeight;
10093
+ const curTdHeight = td.mainHeight;
10094
+ const curTdMinHeight = td.realMinHeight;
10095
+ const curReduceHeight = curTdHeight < curTdMinHeight ? curTdRealHeight - curTdMinHeight : curTdRealHeight - curTdHeight;
10096
+ if (!~reduceHeight || curReduceHeight < reduceHeight) {
10097
+ reduceHeight = curReduceHeight;
10098
+ }
10099
+ }
10100
+ if (reduceHeight > 0) {
10101
+ const changeTr = trList[t];
10102
+ changeTr.height -= reduceHeight;
10103
+ changeTr.tdList.forEach((changeTd) => {
10104
+ changeTd.height -= reduceHeight;
10105
+ });
9770
10106
  }
9771
10107
  }
9772
10108
  this.tableParticle.computeRowColInfo(element);
@@ -9780,10 +10116,8 @@ class Draw {
9780
10116
  metrics.height = elementHeight;
9781
10117
  metrics.boundingBoxDescent = elementHeight;
9782
10118
  metrics.boundingBoxAscent = 0;
9783
- const margins = this.getMargins();
9784
10119
  const height2 = this.getHeight();
9785
- const headerExtraHeight = this.header.getExtraHeight();
9786
- const marginHeight = margins[0] + margins[2] + headerExtraHeight;
10120
+ const marginHeight = this.getMainOuterHeight();
9787
10121
  let curPagePreHeight = marginHeight;
9788
10122
  for (let r = 0; r < rowList.length; r++) {
9789
10123
  const row = rowList[r];
@@ -9931,9 +10265,7 @@ class Draw {
9931
10265
  const pageRowList = [[]];
9932
10266
  const { pageMode } = this.options;
9933
10267
  const height = this.getHeight();
9934
- const margins = this.getMargins();
9935
- const headerExtraHeight = this.header.getExtraHeight();
9936
- const marginHeight = margins[0] + margins[2] + headerExtraHeight;
10268
+ const marginHeight = this.getMainOuterHeight();
9937
10269
  let pageHeight = marginHeight;
9938
10270
  let pageNo = 0;
9939
10271
  if (pageMode === PageMode.CONTINUITY) {
@@ -10122,7 +10454,7 @@ class Draw {
10122
10454
  const { inactiveAlpha, pageMode } = this.options;
10123
10455
  const innerWidth = this.getInnerWidth();
10124
10456
  const ctx = this.ctxList[pageNo];
10125
- ctx.globalAlpha = this.zone.isHeaderActive() ? inactiveAlpha : 1;
10457
+ ctx.globalAlpha = !this.zone.isMainActive() ? inactiveAlpha : 1;
10126
10458
  this._clearPage(pageNo);
10127
10459
  this.background.render(ctx);
10128
10460
  this.margin.render(ctx, pageNo);
@@ -10138,6 +10470,7 @@ class Draw {
10138
10470
  });
10139
10471
  this.header.render(ctx, pageNo);
10140
10472
  this.pageNumber.render(ctx, pageNo);
10473
+ this.footer.render(ctx, pageNo);
10141
10474
  if (this.search.getSearchKeyword()) {
10142
10475
  this.search.render(ctx, pageNo);
10143
10476
  }
@@ -10154,7 +10487,6 @@ class Draw {
10154
10487
  entries.forEach((entry) => {
10155
10488
  if (entry.isIntersecting) {
10156
10489
  const index2 = Number(entry.target.dataset.index);
10157
- this.header.render(this.ctxList[index2], index2);
10158
10490
  this._drawPage({
10159
10491
  elementList,
10160
10492
  positionList,
@@ -10188,6 +10520,7 @@ class Draw {
10188
10520
  const innerWidth = this.getInnerWidth();
10189
10521
  if (isCompute) {
10190
10522
  this.header.compute();
10523
+ this.footer.compute();
10191
10524
  this.rowList = this.computeRowList(innerWidth, this.elementList);
10192
10525
  this.pageRowList = this._computePageList();
10193
10526
  this.position.computePositionList();
@@ -10215,9 +10548,9 @@ class Draw {
10215
10548
  } else {
10216
10549
  this._immediateRender();
10217
10550
  }
10551
+ const positionContext = this.position.getPositionContext();
10218
10552
  if (isSetCursor) {
10219
10553
  const positionList = this.position.getPositionList();
10220
- const positionContext = this.position.getPositionContext();
10221
10554
  if (positionContext.isTable) {
10222
10555
  const { index: index2, trIndex, tdIndex } = positionContext;
10223
10556
  const elementList = this.getOriginalElementList();
@@ -10236,21 +10569,29 @@ class Draw {
10236
10569
  const self = this;
10237
10570
  const oldElementList = deepClone(this.elementList);
10238
10571
  const oldHeaderElementList = deepClone(this.header.getElementList());
10572
+ const oldFooterElementList = deepClone(this.footer.getElementList());
10239
10573
  const { startIndex, endIndex } = this.range.getRange();
10240
10574
  const pageNo = this.pageNo;
10241
- const oldPositionContext = deepClone(this.position.getPositionContext());
10575
+ const oldPositionContext = deepClone(positionContext);
10242
10576
  const zone = this.zone.getZone();
10243
10577
  this.historyManager.execute(function() {
10244
10578
  self.zone.setZone(zone);
10245
10579
  self.setPageNo(pageNo);
10246
- self.position.setPositionContext(oldPositionContext);
10247
- self.header.setElementList(oldHeaderElementList);
10580
+ self.position.setPositionContext(deepClone(oldPositionContext));
10581
+ self.header.setElementList(deepClone(oldHeaderElementList));
10582
+ self.footer.setElementList(deepClone(oldFooterElementList));
10248
10583
  self.elementList = deepClone(oldElementList);
10249
10584
  self.range.setRange(startIndex, endIndex);
10250
10585
  self.render({ curIndex, isSubmitHistory: false });
10251
10586
  });
10252
10587
  }
10253
10588
  nextTick(() => {
10589
+ if (isCompute && !this.isReadonly() && positionContext.isTable) {
10590
+ this.tableTool.render();
10591
+ }
10592
+ if (isCompute && !this.zone.isMainActive()) {
10593
+ this.zone.drawZoneIndicator();
10594
+ }
10254
10595
  if (this.listener.pageSizeChange) {
10255
10596
  this.listener.pageSizeChange(this.pageRowList.length);
10256
10597
  }
@@ -10308,6 +10649,7 @@ const _Command = class {
10308
10649
  _Command.mergeTableCell = adapt.mergeTableCell.bind(adapt);
10309
10650
  _Command.cancelMergeTableCell = adapt.cancelMergeTableCell.bind(adapt);
10310
10651
  _Command.tableTdVerticalAlign = adapt.tableTdVerticalAlign.bind(adapt);
10652
+ _Command.tableBorderType = adapt.tableBorderType.bind(adapt);
10311
10653
  _Command.image = adapt.image.bind(adapt);
10312
10654
  _Command.hyperlink = adapt.hyperlink.bind(adapt);
10313
10655
  _Command.deleteHyperlink = adapt.deleteHyperlink.bind(adapt);
@@ -10462,6 +10804,9 @@ const _Command = class {
10462
10804
  executeTableTdVerticalAlign(payload) {
10463
10805
  return _Command.tableTdVerticalAlign(payload);
10464
10806
  }
10807
+ executeTableBorderType(payload) {
10808
+ return _Command.tableBorderType(payload);
10809
+ }
10465
10810
  executeHyperlink(payload) {
10466
10811
  return _Command.hyperlink(payload);
10467
10812
  }
@@ -10603,6 +10948,7 @@ __publicField(Command, "deleteTable");
10603
10948
  __publicField(Command, "mergeTableCell");
10604
10949
  __publicField(Command, "cancelMergeTableCell");
10605
10950
  __publicField(Command, "tableTdVerticalAlign");
10951
+ __publicField(Command, "tableBorderType");
10606
10952
  __publicField(Command, "image");
10607
10953
  __publicField(Command, "hyperlink");
10608
10954
  __publicField(Command, "deleteHyperlink");
@@ -10643,6 +10989,12 @@ const defaultWatermarkOption = {
10643
10989
  size: 200,
10644
10990
  font: "Yahei"
10645
10991
  };
10992
+ var TableBorder;
10993
+ (function(TableBorder2) {
10994
+ TableBorder2["ALL"] = "all";
10995
+ TableBorder2["EMPTY"] = "empty";
10996
+ TableBorder2["EXTERNAL"] = "external";
10997
+ })(TableBorder || (TableBorder = {}));
10646
10998
  var VerticalAlign;
10647
10999
  (function(VerticalAlign2) {
10648
11000
  VerticalAlign2["TOP"] = "top";
@@ -11127,7 +11479,7 @@ class CommandAdapt {
11127
11479
  }
11128
11480
  const element = {
11129
11481
  type: ElementType.TABLE,
11130
- value: ZERO,
11482
+ value: !startIndex ? "" : ZERO,
11131
11483
  colgroup,
11132
11484
  trList
11133
11485
  };
@@ -11201,8 +11553,7 @@ class CommandAdapt {
11201
11553
  });
11202
11554
  this.range.setRange(0, 0);
11203
11555
  this.draw.render({ curIndex: 0 });
11204
- const position = this.position.getOriginalPositionList();
11205
- this.tableTool.render(element, position[index2]);
11556
+ this.tableTool.render();
11206
11557
  }
11207
11558
  insertTableBottomRow() {
11208
11559
  const isReadonly = this.draw.isReadonly();
@@ -11263,8 +11614,7 @@ class CommandAdapt {
11263
11614
  });
11264
11615
  this.range.setRange(0, 0);
11265
11616
  this.draw.render({ curIndex: 0 });
11266
- const position = this.position.getOriginalPositionList();
11267
- this.tableTool.render(element, position[index2]);
11617
+ this.tableTool.render();
11268
11618
  }
11269
11619
  insertTableLeftCol() {
11270
11620
  const isReadonly = this.draw.isReadonly();
@@ -11318,8 +11668,7 @@ class CommandAdapt {
11318
11668
  });
11319
11669
  this.range.setRange(0, 0);
11320
11670
  this.draw.render({ curIndex: 0 });
11321
- const position = this.position.getOriginalPositionList();
11322
- this.tableTool.render(element, position[index2]);
11671
+ this.tableTool.render();
11323
11672
  }
11324
11673
  insertTableRightCol() {
11325
11674
  const isReadonly = this.draw.isReadonly();
@@ -11373,8 +11722,7 @@ class CommandAdapt {
11373
11722
  });
11374
11723
  this.range.setRange(0, 0);
11375
11724
  this.draw.render({ curIndex: 0 });
11376
- const position = this.position.getOriginalPositionList();
11377
- this.tableTool.render(element, position[index2]);
11725
+ this.tableTool.render();
11378
11726
  }
11379
11727
  deleteTableRow() {
11380
11728
  const isReadonly = this.draw.isReadonly();
@@ -11593,8 +11941,7 @@ class CommandAdapt {
11593
11941
  const curIndex = startTd.value.length - 1;
11594
11942
  this.range.setRange(curIndex, curIndex);
11595
11943
  this.draw.render();
11596
- const position = this.position.getOriginalPositionList();
11597
- this.tableTool.render(element, position[index2]);
11944
+ this.tableTool.render();
11598
11945
  }
11599
11946
  cancelMergeTableCell() {
11600
11947
  const isReadonly = this.draw.isReadonly();
@@ -11654,8 +12001,7 @@ class CommandAdapt {
11654
12001
  const curIndex = curTd.value.length - 1;
11655
12002
  this.range.setRange(curIndex, curIndex);
11656
12003
  this.draw.render();
11657
- const position = this.position.getOriginalPositionList();
11658
- this.tableTool.render(element, position[index2]);
12004
+ this.tableTool.render();
11659
12005
  }
11660
12006
  tableTdVerticalAlign(payload) {
11661
12007
  var _a, _b, _c;
@@ -11678,6 +12024,25 @@ class CommandAdapt {
11678
12024
  curIndex: endIndex
11679
12025
  });
11680
12026
  }
12027
+ tableBorderType(payload) {
12028
+ const isReadonly = this.draw.isReadonly();
12029
+ if (isReadonly)
12030
+ return;
12031
+ const positionContext = this.position.getPositionContext();
12032
+ if (!positionContext.isTable)
12033
+ return;
12034
+ const { index: index2 } = positionContext;
12035
+ const originalElementList = this.draw.getOriginalElementList();
12036
+ const element = originalElementList[index2];
12037
+ if (!element.borderType && payload === TableBorder.ALL || element.borderType === payload) {
12038
+ return;
12039
+ }
12040
+ element.borderType = payload;
12041
+ const { endIndex } = this.range.getRange();
12042
+ this.draw.render({
12043
+ curIndex: endIndex
12044
+ });
12045
+ }
11681
12046
  hyperlink(payload) {
11682
12047
  const isReadonly = this.draw.isReadonly();
11683
12048
  if (isReadonly)
@@ -12346,6 +12711,39 @@ const tableMenus = [
12346
12711
  {
12347
12712
  isDivider: true
12348
12713
  },
12714
+ {
12715
+ i18nPath: "contextmenu.table.border",
12716
+ icon: "border-all",
12717
+ when: (payload) => {
12718
+ return !payload.isReadonly && payload.isInTable;
12719
+ },
12720
+ childMenus: [
12721
+ {
12722
+ i18nPath: "contextmenu.table.borderAll",
12723
+ icon: "border-all",
12724
+ when: () => true,
12725
+ callback: (command) => {
12726
+ command.executeTableBorderType(TableBorder.ALL);
12727
+ }
12728
+ },
12729
+ {
12730
+ i18nPath: "contextmenu.table.borderEmpty",
12731
+ icon: "border-empty",
12732
+ when: () => true,
12733
+ callback: (command) => {
12734
+ command.executeTableBorderType(TableBorder.EMPTY);
12735
+ }
12736
+ },
12737
+ {
12738
+ i18nPath: "contextmenu.table.borderExternal",
12739
+ icon: "border-external",
12740
+ when: () => true,
12741
+ callback: (command) => {
12742
+ command.executeTableBorderType(TableBorder.EXTERNAL);
12743
+ }
12744
+ }
12745
+ ]
12746
+ },
12349
12747
  {
12350
12748
  i18nPath: "contextmenu.table.verticalAlign",
12351
12749
  icon: "vertical-align",
@@ -12697,6 +13095,10 @@ class ContextMenu {
12697
13095
  this.contextMenuRelationShip.clear();
12698
13096
  }
12699
13097
  }
13098
+ const defaultHeaderOption = {
13099
+ top: 30,
13100
+ maxHeightRadio: MaxHeightRatio.HALF
13101
+ };
12700
13102
  const richtextKeys = [
12701
13103
  {
12702
13104
  key: KeyMap.X_UPPERCASE,
@@ -12848,6 +13250,10 @@ const defaultPageNumberOption = {
12848
13250
  color: "#000000",
12849
13251
  rowFlex: RowFlex.CENTER
12850
13252
  };
13253
+ const defaultFooterOption = {
13254
+ bottom: 30,
13255
+ maxHeightRadio: MaxHeightRatio.HALF
13256
+ };
12851
13257
  class Editor {
12852
13258
  constructor(container, data2, options = {}) {
12853
13259
  __publicField(this, "command");
@@ -12855,6 +13261,7 @@ class Editor {
12855
13261
  __publicField(this, "register");
12856
13262
  __publicField(this, "destroy");
12857
13263
  const headerOptions = __spreadValues(__spreadValues({}, defaultHeaderOption), options.header);
13264
+ const footerOptions = __spreadValues(__spreadValues({}, defaultFooterOption), options.footer);
12858
13265
  const pageNumberOptions = __spreadValues(__spreadValues({}, defaultPageNumberOption), options.pageNumber);
12859
13266
  const waterMarkOptions = __spreadValues(__spreadValues({}, defaultWatermarkOption), options.watermark);
12860
13267
  const controlOptions = __spreadValues(__spreadValues({}, defaultControlOption), options.control);
@@ -12890,13 +13297,13 @@ class Editor {
12890
13297
  margins: [100, 120, 100, 120],
12891
13298
  pageMode: PageMode.PAGING,
12892
13299
  tdPadding: 5,
12893
- defaultTdHeight: 40,
13300
+ defaultTrMinHeight: 40,
12894
13301
  defaultHyperlinkColor: "#0000FF",
12895
- headerTop: 50,
12896
13302
  paperDirection: PaperDirection.VERTICAL,
12897
13303
  inactiveAlpha: 0.6
12898
13304
  }, options), {
12899
13305
  header: headerOptions,
13306
+ footer: footerOptions,
12900
13307
  pageNumber: pageNumberOptions,
12901
13308
  watermark: waterMarkOptions,
12902
13309
  control: controlOptions,
@@ -12905,22 +13312,24 @@ class Editor {
12905
13312
  });
12906
13313
  let headerElementList = [];
12907
13314
  let mainElementList = [];
13315
+ let footerElementList = [];
12908
13316
  if (Array.isArray(data2)) {
12909
13317
  mainElementList = data2;
12910
13318
  } else {
12911
13319
  headerElementList = data2.header || [];
12912
13320
  mainElementList = data2.main;
13321
+ footerElementList = data2.footer || [];
12913
13322
  }
12914
- formatElementList(headerElementList, {
12915
- editorOptions
12916
- });
12917
- formatElementList(mainElementList, {
12918
- editorOptions
13323
+ [headerElementList, mainElementList, footerElementList].forEach((elementList) => {
13324
+ formatElementList(elementList, {
13325
+ editorOptions
13326
+ });
12919
13327
  });
12920
13328
  this.listener = new Listener();
12921
13329
  const draw = new Draw(container, editorOptions, {
12922
13330
  header: headerElementList,
12923
- main: mainElementList
13331
+ main: mainElementList,
13332
+ footer: footerElementList
12924
13333
  }, this.listener);
12925
13334
  this.command = new Command(new CommandAdapt(draw));
12926
13335
  const contextMenu = new ContextMenu(draw, this.command);
@@ -12937,5 +13346,5 @@ class Editor {
12937
13346
  };
12938
13347
  }
12939
13348
  }
12940
- export { BlockType, Command, ControlType, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, ImageDisplay, KeyMap, PageMode, PaperDirection, RowFlex, VerticalAlign, Editor as default };
13349
+ export { BlockType, Command, ControlType, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, ImageDisplay, KeyMap, MaxHeightRatio, PageMode, PaperDirection, RowFlex, TableBorder, VerticalAlign, Editor as default };
12941
13350
  //# sourceMappingURL=canvas-editor.es.js.map