@agile_jy/word-editor 0.0.1-beta.17 → 0.0.1-beta.19

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,6 +1,6 @@
1
1
  (function(){"use strict";try{if(typeof document!="undefined"){var e=document.createElement("style");e.id="canvas-editor-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-calculator{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;padding:8px;width:200px}.ce-calculator-display{width:100%;height:40px;line-height:40px;text-align:right;padding:0 10px;margin-bottom:8px;border:1px solid #e4e7ed;border-radius:4px;background-color:#f5f7fa;font-size:16px;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis}.ce-calculator-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}.ce-calculator-button{width:100%;height:36px;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer;transition:all .2s;box-sizing:border-box}.ce-calculator-button:hover{background-color:#eef2fd;border-color:#c6d1ff}.ce-calculator-button:active{background-color:#e1e8ff}.ce-calculator-button.operator{background-color:#f5f7fa}.ce-calculator-button.operator:hover{background-color:#eef2fd}.ce-calculator-button.equal{background-color:var(--COLOR-HOVER, #5175f4);color:#fff;border-color:var(--COLOR-HOVER, #5175f4)}.ce-calculator-button.equal:hover{background-color:var(--COLOR-HOVER, #6a84ff);border-color:var(--COLOR-HOVER, #6a84ff)}.ce-calculator-button.utility{background-color:#f0f2f5}.ce-calculator-button.utility:hover{background-color:#e6e8eb}.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:calc(100%/7);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:calc(100%/7);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;background-color:#fff;border:1px solid rgb(235 236 240)}.ce-block-item .ce-resizer-selection{width:100%;height:100%}.ce-block-item .ce-resizer-mask{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background-color:transparent}.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;cursor:pointer;transition:all .3s}.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:hover{background-color:#dadce0}.ce-table-tool__row .ce-table-tool__row__item:last-child:after{display:none}.ce-table-tool__quick__add{width:16px;height:16px;position:absolute;border-radius:50%;background-color:#e2e6ed;cursor:pointer}.ce-table-tool__quick__add:after{content:"+";color:#fff;position:absolute;top:50%;left:50%;transform:translate(-50%,-55%)}.ce-table-tool__select{width:16px;height:18px;position:absolute;border-radius:3px;cursor:pointer}.ce-table-tool__select:hover{background-color:#e2e6ed}.ce-table-tool__select:after{content:":::";color:#aaaaab;position:absolute;top:50%;left:50%;transform:translate(-75%,-50%) rotate(-90deg)}.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;cursor:pointer;transition:all .3s}.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:hover{background-color:#dadce0}.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;pointer-events:none}.ce-resizer-selection .resizer-handle{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;pointer-events:initial}.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-size-view{display:flex;align-items:center;height:20px;white-space:nowrap;position:absolute;z-index:9;top:-30px;left:0;opacity:.9;background-color:#000;padding:0 5px;border-radius:4px}.ce-resizer-size-view span{color:#fff;font-size:12px}.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-image-previewer .ce-image-menu .image-navigate{display:flex;align-items:center;justify-content:center}.ce-image-previewer .ce-image-menu i.image-pre{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyLjUgNC4wNjNMNi44NzUgMTBsNS42MjUgNS45MzgiIHN0cm9rZT0iIzNENDc1NyIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==)}.ce-image-previewer .ce-image-menu i.image-next{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuNSA0LjA2M0wxMy4xMjUgMTAgNy41IDE1LjkzOCIgc3Ryb2tlPSIjM0Q0NzU3IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+)}.ce-image-previewer .ce-image-menu .image-count{color:#000;font-size:20px}.ce-image-previewer .ce-image-menu i.disabled{cursor:not-allowed;opacity:.5}.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-dash{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzaC0xVjJoMWExIDEgMCAwMTEgMXYxaC0xVjN6bS0zLTF2MUg4LjV2MmgtMVYzSDZWMmg0ek00IDJ2MUgzdjFIMlYzYTEgMSAwIDAxMS0xaDF6TTIgNmgxdjEuNWgydjFIM1YxMEgyVjZ6bTAgNmgxdjFoMXYxSDNhMSAxIDAgMDEtMS0xdi0xem00IDJ2LTFoMS41di0yaDF2MkgxMHYxSDZ6bTYgMHYtMWgxdi0xaDF2MWExIDEgMCAwMS0xIDFoLTF6bTItNGgtMVY4LjVoLTJ2LTFoMlY2aDF2NHpNOC41IDcuNXYtMWgtMXYxaC0xdjFoMXYxaDF2LTFoMXYtMWgtMXoiIGZpbGw9IiMwMDAwMDAiLz48L3N2Zz4=)}.ce-contextmenu-border-external{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iIzNENDc1NyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSA1VjNIOHYyaDF6bTAgOXYtMkg4djJoMXpNNSA4SDN2MWgyVjh6bTkgMGgtMnYxaDJWOHpNOSA3djFoMXYxSDl2MUg4VjlIN1Y4aDFWN2gxeiIgZmlsbD0iI0FBQUNCMCIvPjwvc3ZnPg==)}.ce-contextmenu-border-internal{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSA1VjNIOHYyaDF6bTAgOXYtMkg4djJoMXpNNSA4SDN2MWgyVjh6bTkgMGgtMnYxaDJWOHpNOSA3djFoMXYxSDl2MUg4VjlIN1Y4aDFWN2gxeiIgZmlsbD0iIzNENDc1NyIvPjwvc3ZnPg==)}.ce-contextmenu-border-td{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIHN0cm9rZT0iIzNENDc1NyIgZD0iTTguNSAyLjUgdjYgaC02Ii8+PC9zdmc+)}.ce-contextmenu-border-td-top{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIHN0cm9rZT0iIzNENDc1NyIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi41IDMgaDEyIi8+PC9zdmc+)}.ce-contextmenu-border-td-left{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIHN0cm9rZT0iIzNENDc1NyIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMyAzIHYxMSIvPjwvc3ZnPg==)}.ce-contextmenu-border-td-bottom{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIHN0cm9rZT0iIzNENDc1NyIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMi41IDE0IGgxMiIvPjwvc3ZnPg==)}.ce-contextmenu-border-td-right{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIvPjxwYXRoIHN0cm9rZT0iIzNENDc1NyIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTQgMyB2MTEiLz48L3N2Zz4=)}.ce-contextmenu-border-td-forward{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIgLz48cGF0aCBzdHJva2U9IiMzRDQ3NTciIGQ9Ik0xNCAzIGwtMTEgMTEiIC8+PC9zdmc+)}.ce-contextmenu-border-td-back{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNSAzYS41LjUgMCAwMS41LS41aDExYS41LjUgMCAwMS41LjV2MTFhLjUuNSAwIDAxLS41LjVIM2EuNS41IDAgMDEtLjUtLjVWM3oiIHN0cm9rZT0iI0FBQUNCMCIgLz48cGF0aCBzdHJva2U9IiMzRDQ3NTciIGQ9Ik0zIDMgbDExIDExIiAvPjwvc3ZnPg==)}.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-zone-tip{display:none;align-items:center;height:30px;white-space:nowrap;position:fixed;opacity:.9;background-color:#000;padding:0 5px;border-radius:4px;z-index:9;transition:all .3s;outline:none;user-select:none;pointer-events:none;transform:translate(10px,10px)}.ce-zone-tip.show{display:flex}.ce-zone-tip span{color:#fff;font-size:12px}.ce-inputarea{width:100px;height:30px;min-width:0;min-height:0;margin:0;padding:0;left:0;top: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;caret-color:transparent;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}}.ce-float-image{position:absolute;opacity:.5;pointer-events:none}.dialog-mask{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000000;z-index:99}.dialog-container{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;z-index:999;margin:0;display:flex;justify-content:center;align-items:center}.dialog{position:absolute;padding:0 30px 30px;background:#ffffff;box-shadow:0 2px 12px #38383833;border:1px solid #e2e6ed;border-radius:2px}.dialog-title{position:relative;border-bottom:1px solid #e2e6ed;margin-bottom:30px;height:60px;display:flex;align-items:center;justify-content:space-between}.dialog-title i{width:16px;height:16px;cursor:pointer;display:inline-block;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOC45IDguMTkybDQuMjQyIDQuMjQzLS43MDcuNzA3TDguMTkyIDguOSAzLjk1IDEzLjE0MmwtLjcwNy0uNzA3IDQuMjQyLTQuMjQzTDMuMjQzIDMuOTVsLjcwNy0uNzA3IDQuMjQyIDQuMjQyIDQuMjQzLTQuMjQyLjcwNy43MDdMOC45IDguMTkyeiIgZmlsbD0iIzZBNkE2QSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.dialog-option__item{margin-bottom:18px;display:flex;align-items:center;justify-content:space-between}.dialog-option__item span{margin-right:12px;font-size:14px;color:#3d4757;position:relative}.dialog-option__item input,.dialog-option__item select{width:276px;height:28px;border-radius:2px;border:1px solid #d3d3d3;min-height:28px;padding:5px;box-sizing:border-box;outline:none;appearance:none;user-select:none;font-family:inherit}.dialog-option__item textarea{width:276px;height:58px;border-radius:2px;border:1px solid #d3d3d3;min-height:58px;padding:5px;box-sizing:border-box;outline:none;appearance:none;user-select:none;font-family:inherit}.dialog-option__item input:focus,.dialog-option__item textarea:focus{border-color:#4991f2}.dialog-option__item--require:before{content:"*";color:#f56c6c;margin-right:4px;position:absolute;left:-8px}.dialog-menu{display:flex;align-items:center;justify-content:flex-end}.dialog-menu button{position:relative;display:inline-block;border:1px solid #e2e6ed;border-radius:2px;background:#ffffff;line-height:22px;padding:0 16px;white-space:nowrap;cursor:pointer}.dialog-menu button:hover{background:rgba(25,55,88,.04)}.dialog-menu__cancel{margin-right:16px}.dialog-menu button[type=submit]{color:#fff;background:#4991f2;border-color:#4991f2}.dialog-menu button[type=submit]:hover{background:#5b9cf3;border-color:#5b9cf3}.searchable-select{position:relative;width:276px;height:30px;box-sizing:border-box}.searchable-select__input-wrapper{position:relative;display:flex;align-items:center;width:100%;height:100%;border:1px solid #d3d3d3}.searchable-select__input-wrapper .searchable-select__input{border:none}.searchable-select__input-wrapper .searchable-select__arrow{margin-right:0;margin-top:-12px}.searchable-select__input{width:100%;height:30px;border-radius:2px;border:1px solid #d3d3d3;padding:5px 30px 5px 5px;box-sizing:border-box;outline:none;font-family:inherit;font-size:14px;cursor:pointer;background-color:#fff}.searchable-select__input:focus{border-color:#4991f2}.searchable-select__arrow{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10px;color:#666;cursor:pointer;user-select:none;line-height:1;z-index:1}.searchable-select__dropdown{position:absolute;top:calc(100% + 4px);left:0;width:100%;background:#ffffff;border:1px solid #d3d3d3;border-radius:2px;box-shadow:0 2px 8px #00000026;max-height:200px;overflow-y:auto;z-index:1000}.searchable-select__option{padding:8px 12px;cursor:pointer;font-size:14px;color:#3d4757;transition:background-color .2s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.searchable-select__option:hover{background-color:#f5f7fa}.searchable-select__option--selected{background-color:#ecf5ff;color:#4991f2;font-weight:500}.searchable-select__option--empty{color:#999;cursor:not-allowed;text-align:center;padding:12px}.searchable-select__option--empty:hover{background-color:transparent}.searchable-select__dropdown::-webkit-scrollbar{width:6px}.searchable-select__dropdown::-webkit-scrollbar-thumb{background-color:#c0c4cc;border-radius:3px}.searchable-select__dropdown::-webkit-scrollbar-thumb:hover{background-color:#909399}.searchable-select__dropdown::-webkit-scrollbar-track{background-color:#f5f7fa}')),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
2
2
  var index = "";
3
- const version = "0.0.1-beta.17";
3
+ const version = "0.0.1-beta.19";
4
4
  var MaxHeightRatio;
5
5
  (function(MaxHeightRatio2) {
6
6
  MaxHeightRatio2["HALF"] = "half";
@@ -507,7 +507,16 @@ const EDITOR_ELEMENT_STYLE_ATTR = [
507
507
  "strikeout",
508
508
  "textDecoration"
509
509
  ];
510
- const EDITOR_ROW_ATTR = ["rowFlex", "rowMargin"];
510
+ const EDITOR_ROW_ATTR = [
511
+ "rowFlex",
512
+ "rowMargin",
513
+ "textIndent",
514
+ "marginLeft",
515
+ "marginRight",
516
+ "marginTop",
517
+ "minHeight",
518
+ "whiteSpace"
519
+ ];
511
520
  const EDITOR_ELEMENT_COPY_ATTR = [
512
521
  "type",
513
522
  "font",
@@ -526,6 +535,12 @@ const EDITOR_ELEMENT_COPY_ATTR = [
526
535
  "dateFormat",
527
536
  "groupIds",
528
537
  "rowMargin",
538
+ "textIndent",
539
+ "marginLeft",
540
+ "marginRight",
541
+ "marginTop",
542
+ "minHeight",
543
+ "whiteSpace",
529
544
  "textDecoration"
530
545
  ];
531
546
  const EDITOR_ELEMENT_ZIP_ATTR = [
@@ -540,6 +555,12 @@ const EDITOR_ELEMENT_ZIP_ATTR = [
540
555
  "strikeout",
541
556
  "rowFlex",
542
557
  "rowMargin",
558
+ "textIndent",
559
+ "marginLeft",
560
+ "marginRight",
561
+ "marginTop",
562
+ "minHeight",
563
+ "whiteSpace",
543
564
  "dashArray",
544
565
  "trList",
545
566
  "tableToolDisabled",
@@ -4174,7 +4195,8 @@ const defaultLineBreak = {
4174
4195
  const defaultPageBreakOption = {
4175
4196
  font: "Microsoft YaHei",
4176
4197
  fontSize: 12,
4177
- lineDash: [3, 1]
4198
+ lineDash: [3, 1],
4199
+ visible: true
4178
4200
  };
4179
4201
  const FORMAT_PLACEHOLDER = {
4180
4202
  PAGE_NO: "{pageNo}",
@@ -5196,6 +5218,68 @@ function convertRowFlexToJustifyContent(rowFlex) {
5196
5218
  return "flex-start";
5197
5219
  }
5198
5220
  }
5221
+ function isFloatOverlayImage(element) {
5222
+ return !!element && element.type === ElementType.IMAGE && (element.imgDisplay === ImageDisplay.SURROUND || element.imgDisplay === ImageDisplay.FLOAT_TOP || element.imgDisplay === ImageDisplay.FLOAT_BOTTOM);
5223
+ }
5224
+ function isFloatOverlayOnlyParagraph(p) {
5225
+ var _a, _b;
5226
+ let hasFloatImg = false;
5227
+ for (const node of Array.from(p.childNodes)) {
5228
+ if (node.nodeType === Node.TEXT_NODE) {
5229
+ if ((_a = node.textContent) == null ? void 0 : _a.trim())
5230
+ return false;
5231
+ continue;
5232
+ }
5233
+ if (node.nodeType !== Node.ELEMENT_NODE)
5234
+ continue;
5235
+ const el = node;
5236
+ if (el.nodeName === "IMG") {
5237
+ const display = el.getAttribute("data-img-display");
5238
+ if (display === ImageDisplay.FLOAT_TOP || display === ImageDisplay.FLOAT_BOTTOM || display === ImageDisplay.SURROUND) {
5239
+ hasFloatImg = true;
5240
+ continue;
5241
+ }
5242
+ return false;
5243
+ }
5244
+ if ((_b = el.textContent) == null ? void 0 : _b.trim())
5245
+ return false;
5246
+ }
5247
+ return hasFloatImg;
5248
+ }
5249
+ function groupElementListByRowFlex(elementList) {
5250
+ var _a;
5251
+ const elementListGroupList = [];
5252
+ if (!elementList.length)
5253
+ return elementListGroupList;
5254
+ let currentRowFlex = ((_a = elementList[0]) == null ? void 0 : _a.rowFlex) || null;
5255
+ elementListGroupList.push({
5256
+ rowFlex: currentRowFlex,
5257
+ data: [elementList[0]]
5258
+ });
5259
+ for (let e = 1; e < elementList.length; e++) {
5260
+ const element = elementList[e];
5261
+ const prev = elementList[e - 1];
5262
+ const rowFlex = element.rowFlex || null;
5263
+ const curIsFloatOverlay = isFloatOverlayImage(element);
5264
+ const prevIsFloatOverlay = isFloatOverlayImage(prev);
5265
+ const bothImages = element.type === ElementType.IMAGE && (prev == null ? void 0 : prev.type) === ElementType.IMAGE;
5266
+ if (currentRowFlex === rowFlex && !getIsBlockElement(element) && !getIsBlockElement(prev) || bothImages || curIsFloatOverlay || prevIsFloatOverlay) {
5267
+ const lastElementListGroup = elementListGroupList[elementListGroupList.length - 1];
5268
+ lastElementListGroup.data.push(element);
5269
+ } else {
5270
+ elementListGroupList.push({
5271
+ rowFlex,
5272
+ data: [element]
5273
+ });
5274
+ currentRowFlex = rowFlex;
5275
+ }
5276
+ }
5277
+ for (let g = 0; g < elementListGroupList.length; g++) {
5278
+ const elementListGroup = elementListGroupList[g];
5279
+ elementListGroup.data = zipElementList(elementListGroup.data);
5280
+ }
5281
+ return elementListGroupList;
5282
+ }
5199
5283
  function isTextLikeElement(element) {
5200
5284
  return !element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type);
5201
5285
  }
@@ -5291,9 +5375,72 @@ function convertElementToDom(element, options) {
5291
5375
  if (element.rowMargin) {
5292
5376
  dom.style.lineHeight = ((_b = element.rowMargin) != null ? _b : options.defaultRowMargin).toString();
5293
5377
  }
5378
+ if (element.textIndent) {
5379
+ dom.style.textIndent = `${element.textIndent}px`;
5380
+ }
5381
+ if (element.marginLeft) {
5382
+ dom.style.marginInlineStart = `${element.marginLeft}px`;
5383
+ }
5384
+ if (element.marginRight) {
5385
+ dom.style.marginInlineEnd = `${element.marginRight}px`;
5386
+ }
5387
+ if (element.marginTop) {
5388
+ dom.style.marginTop = `${element.marginTop}px`;
5389
+ }
5390
+ if (element.minHeight) {
5391
+ dom.style.minHeight = `${element.minHeight}px`;
5392
+ }
5393
+ if (element.whiteSpace) {
5394
+ dom.style.whiteSpace = element.whiteSpace;
5395
+ }
5294
5396
  dom.innerText = element.value.replace(new RegExp(`${ZERO}`, "g"), "\n");
5295
5397
  return dom;
5296
5398
  }
5399
+ function applyParagraphStyleToDom(dom, element) {
5400
+ dom.style.margin = "0";
5401
+ if (element.rowFlex) {
5402
+ dom.style.textAlign = convertRowFlexToTextAlign(element.rowFlex);
5403
+ }
5404
+ if (element.rowMargin) {
5405
+ dom.style.lineHeight = String(element.rowMargin);
5406
+ }
5407
+ if (element.textIndent) {
5408
+ dom.style.textIndent = `${element.textIndent}px`;
5409
+ }
5410
+ if (element.marginLeft) {
5411
+ dom.style.marginInlineStart = `${element.marginLeft}px`;
5412
+ }
5413
+ if (element.marginRight) {
5414
+ dom.style.marginInlineEnd = `${element.marginRight}px`;
5415
+ }
5416
+ if (element.marginTop) {
5417
+ dom.style.marginTop = `${element.marginTop}px`;
5418
+ }
5419
+ const minHeight = element.minHeight || element.size;
5420
+ if (minHeight) {
5421
+ dom.style.minHeight = `${minHeight}px`;
5422
+ }
5423
+ if (element.whiteSpace) {
5424
+ dom.style.whiteSpace = element.whiteSpace;
5425
+ } else {
5426
+ dom.style.whiteSpace = "pre-wrap";
5427
+ }
5428
+ }
5429
+ function convertInlineElementToDom(element, options) {
5430
+ const dom = convertElementToDom(element, options);
5431
+ dom.style.textIndent = "";
5432
+ dom.style.marginInlineStart = "";
5433
+ dom.style.marginInlineEnd = "";
5434
+ dom.style.marginTop = "";
5435
+ dom.style.textAlign = "";
5436
+ dom.style.minHeight = "";
5437
+ if (element.whiteSpace) {
5438
+ dom.style.whiteSpace = element.whiteSpace;
5439
+ } else {
5440
+ dom.style.whiteSpace = "pre-wrap";
5441
+ }
5442
+ return dom;
5443
+ }
5297
5444
  function splitListElement(elementList) {
5298
5445
  let curListIndex = 0;
5299
5446
  const listElementListMap = /* @__PURE__ */ new Map();
@@ -5326,44 +5473,319 @@ function splitListElement(elementList) {
5326
5473
  }
5327
5474
  return listElementListMap;
5328
5475
  }
5329
- function groupElementListByRowFlex(elementList) {
5330
- var _a;
5331
- const elementListGroupList = [];
5332
- if (!elementList.length)
5333
- return elementListGroupList;
5334
- let currentRowFlex = ((_a = elementList[0]) == null ? void 0 : _a.rowFlex) || null;
5335
- elementListGroupList.push({
5336
- rowFlex: currentRowFlex,
5337
- data: [elementList[0]]
5338
- });
5339
- for (let e = 1; e < elementList.length; e++) {
5340
- const element = elementList[e];
5341
- const rowFlex = element.rowFlex || null;
5342
- if (currentRowFlex === rowFlex && !getIsBlockElement(element) && !getIsBlockElement(elementList[e - 1])) {
5343
- const lastElementListGroup = elementListGroupList[elementListGroupList.length - 1];
5344
- lastElementListGroup.data.push(element);
5345
- } else {
5346
- elementListGroupList.push({
5347
- rowFlex,
5348
- data: [element]
5349
- });
5350
- currentRowFlex = rowFlex;
5476
+ const IMAGE_DISPLAY_VALUES = Object.values(ImageDisplay);
5477
+ const htmlFloatOffsetMap = /* @__PURE__ */ new Map();
5478
+ function getHtmlFloatOffsetKey(element) {
5479
+ var _a, _b, _c;
5480
+ const p = element.imgFloatPosition;
5481
+ return [
5482
+ element.imgDisplay || "",
5483
+ element.width || 0,
5484
+ element.height || 0,
5485
+ (_a = p == null ? void 0 : p.x) != null ? _a : "",
5486
+ (_b = p == null ? void 0 : p.y) != null ? _b : "",
5487
+ (_c = p == null ? void 0 : p.pageNo) != null ? _c : "",
5488
+ typeof element.value === "string" ? element.value.slice(0, 80) : ""
5489
+ ].join("|");
5490
+ }
5491
+ function isParagraphBreakElement(element) {
5492
+ if (element.type === ElementType.PAGE_BREAK)
5493
+ return true;
5494
+ if (element.type === ElementType.TABLE)
5495
+ return true;
5496
+ if (element.type === ElementType.TITLE)
5497
+ return true;
5498
+ if (element.type === ElementType.LIST)
5499
+ return true;
5500
+ if (element.type === ElementType.SEPARATOR)
5501
+ return true;
5502
+ const value = element.value;
5503
+ return value === WRAP || value === "\n" || value === ZERO;
5504
+ }
5505
+ function getParagraphPageOrigin(elementList, positionList, imageIndex) {
5506
+ var _a, _b;
5507
+ let start = imageIndex;
5508
+ while (start > 0) {
5509
+ if (isParagraphBreakElement(elementList[start - 1]))
5510
+ break;
5511
+ start--;
5512
+ }
5513
+ let originX = Number.POSITIVE_INFINITY;
5514
+ let originY = Number.POSITIVE_INFINITY;
5515
+ for (let i = start; i < elementList.length; i++) {
5516
+ if (i > start && isParagraphBreakElement(elementList[i]))
5517
+ break;
5518
+ if (elementList[i].imgDisplay === ImageDisplay.FLOAT_TOP || elementList[i].imgDisplay === ImageDisplay.FLOAT_BOTTOM || elementList[i].imgDisplay === ImageDisplay.SURROUND) {
5519
+ continue;
5351
5520
  }
5521
+ const pos = positionList[i];
5522
+ if (!((_a = pos == null ? void 0 : pos.coordinate) == null ? void 0 : _a.leftTop))
5523
+ continue;
5524
+ const [x, y] = pos.coordinate.leftTop;
5525
+ originX = Math.min(originX, x);
5526
+ originY = Math.min(originY, y);
5352
5527
  }
5353
- for (let g = 0; g < elementListGroupList.length; g++) {
5354
- const elementListGroup = elementListGroupList[g];
5355
- elementListGroup.data = zipElementList(elementListGroup.data);
5528
+ if (!Number.isFinite(originX) || !Number.isFinite(originY)) {
5529
+ const flowPos = positionList[imageIndex];
5530
+ if ((_b = flowPos == null ? void 0 : flowPos.coordinate) == null ? void 0 : _b.leftTop) {
5531
+ return {
5532
+ x: flowPos.coordinate.leftTop[0],
5533
+ y: flowPos.coordinate.leftTop[1]
5534
+ };
5535
+ }
5536
+ return { x: 0, y: 0 };
5537
+ }
5538
+ return { x: originX, y: originY };
5539
+ }
5540
+ function attachHtmlFloatOffset(elementList, positionList, scale = 1) {
5541
+ const safeScale = scale || 1;
5542
+ for (let i = 0; i < elementList.length; i++) {
5543
+ const element = elementList[i];
5544
+ if (element.type !== ElementType.IMAGE || element.imgDisplay !== ImageDisplay.FLOAT_TOP && element.imgDisplay !== ImageDisplay.FLOAT_BOTTOM && element.imgDisplay !== ImageDisplay.SURROUND || !element.imgFloatPosition) {
5545
+ continue;
5546
+ }
5547
+ const origin = getParagraphPageOrigin(elementList, positionList, i);
5548
+ htmlFloatOffsetMap.set(getHtmlFloatOffsetKey(element), {
5549
+ left: (element.imgFloatPosition.x - origin.x) / safeScale,
5550
+ top: (element.imgFloatPosition.y - origin.y) / safeScale
5551
+ });
5552
+ }
5553
+ }
5554
+ function clearHtmlFloatOffset() {
5555
+ htmlFloatOffsetMap.clear();
5556
+ }
5557
+ const HTML_FLOAT_TOP_ADJUST_PX = -6;
5558
+ function buildImageWrapStyle(element) {
5559
+ const styles = ["vertical-align: text-top"];
5560
+ const { imgDisplay, imgFloatPosition } = element;
5561
+ const offset = htmlFloatOffsetMap.get(getHtmlFloatOffsetKey(element));
5562
+ const leftPx = offset ? offset.left : imgFloatPosition ? imgFloatPosition.x : void 0;
5563
+ const topBase = offset ? offset.top : imgFloatPosition ? imgFloatPosition.y : void 0;
5564
+ const topPx = topBase !== void 0 ? topBase + HTML_FLOAT_TOP_ADJUST_PX : void 0;
5565
+ if (imgDisplay === ImageDisplay.SURROUND) {
5566
+ styles.push("position: absolute", "z-index: 1");
5567
+ if (leftPx !== void 0) {
5568
+ styles.push(`left: ${leftPx}px`);
5569
+ }
5570
+ if (topPx !== void 0) {
5571
+ styles.push(`top: ${topPx}px`);
5572
+ }
5573
+ } else if (imgDisplay === ImageDisplay.FLOAT_TOP) {
5574
+ styles.push("position: absolute", "z-index: 2");
5575
+ if (leftPx !== void 0) {
5576
+ styles.push(`left: ${leftPx}px`);
5577
+ }
5578
+ if (topPx !== void 0) {
5579
+ styles.push(`top: ${topPx}px`);
5580
+ }
5581
+ } else if (imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
5582
+ styles.push("position: absolute", "z-index: -1");
5583
+ if (leftPx !== void 0) {
5584
+ styles.push(`left: ${leftPx}px`);
5585
+ }
5586
+ if (topPx !== void 0) {
5587
+ styles.push(`top: ${topPx}px`);
5588
+ }
5589
+ } else if (imgDisplay === ImageDisplay.BLOCK) {
5590
+ styles.push("display: block");
5591
+ } else if (imgDisplay === ImageDisplay.INLINE) {
5592
+ styles.push("display: block", "clear: both");
5593
+ }
5594
+ return styles.join("; ");
5595
+ }
5596
+ function applyImageWrapToDom(img, element) {
5597
+ img.setAttribute("style", buildImageWrapStyle(element));
5598
+ if (element.imgDisplay) {
5599
+ img.setAttribute("data-img-display", element.imgDisplay);
5600
+ }
5601
+ if (element.imgFloatPosition) {
5602
+ img.setAttribute("data-img-float-position", JSON.stringify(element.imgFloatPosition));
5603
+ }
5604
+ }
5605
+ function relocateFloatOverlayImages(root) {
5606
+ const imgs = Array.from(root.querySelectorAll('img[data-img-display="float-top"], img[data-img-display="float-bottom"], img[data-img-display="surround"]'));
5607
+ for (const img of imgs) {
5608
+ const parent = img.parentElement;
5609
+ if (parent && (parent.nodeName === "P" || /^H[1-6]$/.test(parent.nodeName))) {
5610
+ parent.style.position = "relative";
5611
+ continue;
5612
+ }
5613
+ let target = null;
5614
+ let next = img.nextElementSibling;
5615
+ while (next) {
5616
+ if (next.nodeName === "P" || /^H[1-6]$/.test(next.nodeName)) {
5617
+ target = next;
5618
+ break;
5619
+ }
5620
+ if (next.nodeName === "DIV") {
5621
+ const innerP = next.querySelector("p,h1,h2,h3,h4,h5,h6");
5622
+ if (innerP) {
5623
+ target = innerP;
5624
+ break;
5625
+ }
5626
+ }
5627
+ if (next.getAttribute("data-type") === ElementType.PAGE_BREAK) {
5628
+ break;
5629
+ }
5630
+ next = next.nextElementSibling;
5631
+ }
5632
+ if (!target) {
5633
+ let prev = img.previousElementSibling;
5634
+ while (prev) {
5635
+ if (prev.nodeName === "P" || /^H[1-6]$/.test(prev.nodeName)) {
5636
+ target = prev;
5637
+ break;
5638
+ }
5639
+ if (prev.nodeName === "DIV") {
5640
+ const paras = prev.querySelectorAll("p,h1,h2,h3,h4,h5,h6");
5641
+ if (paras.length) {
5642
+ target = paras[paras.length - 1];
5643
+ break;
5644
+ }
5645
+ }
5646
+ prev = prev.previousElementSibling;
5647
+ }
5648
+ }
5649
+ if (target) {
5650
+ const targetEl = target;
5651
+ targetEl.style.position = "relative";
5652
+ targetEl.append(img);
5653
+ } else if (parent) {
5654
+ const p = document.createElement("p");
5655
+ p.style.position = "relative";
5656
+ p.style.margin = "0";
5657
+ parent.insertBefore(p, img);
5658
+ p.append(img);
5659
+ }
5660
+ }
5661
+ mergeFloatOnlyParagraphs(root);
5662
+ }
5663
+ function mergeFloatOnlyParagraphs(root) {
5664
+ let i = 0;
5665
+ while (i < root.children.length) {
5666
+ const el = root.children[i];
5667
+ if (el.nodeName !== "P" || !isFloatOverlayOnlyParagraph(el)) {
5668
+ i++;
5669
+ continue;
5670
+ }
5671
+ const host = el;
5672
+ host.style.position = "relative";
5673
+ const j = i + 1;
5674
+ while (j < root.children.length) {
5675
+ const next = root.children[j];
5676
+ if (next.nodeName === "P" && isFloatOverlayOnlyParagraph(next)) {
5677
+ Array.from(next.querySelectorAll("img")).forEach((img) => host.append(img));
5678
+ next.remove();
5679
+ continue;
5680
+ }
5681
+ if (next.nodeName === "P") {
5682
+ next.style.position = "relative";
5683
+ Array.from(host.querySelectorAll("img")).forEach((img) => {
5684
+ next.insertBefore(img, next.firstChild);
5685
+ });
5686
+ host.remove();
5687
+ break;
5688
+ }
5689
+ break;
5690
+ }
5691
+ i++;
5692
+ }
5693
+ }
5694
+ function applyImageWrapFromDom(img, element) {
5695
+ const displayAttr = img.getAttribute("data-img-display");
5696
+ if (displayAttr && IMAGE_DISPLAY_VALUES.includes(displayAttr)) {
5697
+ element.imgDisplay = displayAttr;
5698
+ } else {
5699
+ const { float, position, zIndex, display, clear } = img.style;
5700
+ if (float === "left" || float === "right") {
5701
+ element.imgDisplay = ImageDisplay.SURROUND;
5702
+ } else if (position === "absolute") {
5703
+ const z = Number.parseInt(zIndex || "0", 10);
5704
+ element.imgDisplay = z < 0 ? ImageDisplay.FLOAT_BOTTOM : ImageDisplay.FLOAT_TOP;
5705
+ } else if (display === "block" && clear === "both") {
5706
+ element.imgDisplay = ImageDisplay.INLINE;
5707
+ } else if (display === "block") {
5708
+ element.imgDisplay = ImageDisplay.BLOCK;
5709
+ }
5710
+ }
5711
+ const floatPosAttr = img.getAttribute("data-img-float-position");
5712
+ if (floatPosAttr) {
5713
+ try {
5714
+ element.imgFloatPosition = JSON.parse(floatPosAttr);
5715
+ } catch {
5716
+ }
5717
+ } else if (element.imgDisplay === ImageDisplay.SURROUND || element.imgDisplay === ImageDisplay.FLOAT_TOP || element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
5718
+ const left2 = Number.parseFloat(img.style.left);
5719
+ const top = Number.parseFloat(img.style.top);
5720
+ if (!Number.isNaN(left2) && !Number.isNaN(top)) {
5721
+ element.imgFloatPosition = { x: left2, y: top };
5722
+ }
5356
5723
  }
5357
- return elementListGroupList;
5358
5724
  }
5359
5725
  function createDomFromElementList(elementList, options) {
5360
5726
  const editorOptions = mergeOption(options);
5361
5727
  function buildDom(payload) {
5362
5728
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
5363
5729
  const clipboardDom2 = document.createElement("div");
5730
+ clipboardDom2.style.position = "relative";
5731
+ let paragraphDom = null;
5732
+ const flushParagraph = () => {
5733
+ if (paragraphDom) {
5734
+ clipboardDom2.append(paragraphDom);
5735
+ paragraphDom = null;
5736
+ }
5737
+ };
5738
+ const ensureParagraph = (styleSource) => {
5739
+ if (!paragraphDom) {
5740
+ paragraphDom = document.createElement("p");
5741
+ applyParagraphStyleToDom(paragraphDom, styleSource);
5742
+ }
5743
+ };
5744
+ const appendInlineNode = (node, styleSource) => {
5745
+ ensureParagraph(styleSource);
5746
+ paragraphDom.append(node);
5747
+ };
5748
+ const appendTextRuns = (element, rawText) => {
5749
+ let text = rawText;
5750
+ if (!text)
5751
+ return;
5752
+ text = text.replace(new RegExp(`${ZERO}`, "g"), "\n");
5753
+ if (/^\n+$/.test(text)) {
5754
+ for (let i = 0; i < text.length; i++) {
5755
+ if (paragraphDom && paragraphDom.childNodes.length > 0) {
5756
+ if (isFloatOverlayOnlyParagraph(paragraphDom)) {
5757
+ continue;
5758
+ }
5759
+ flushParagraph();
5760
+ } else {
5761
+ ensureParagraph(element);
5762
+ flushParagraph();
5763
+ }
5764
+ }
5765
+ return;
5766
+ }
5767
+ const parts = text.split("\n");
5768
+ for (let i = 0; i < parts.length; i++) {
5769
+ if (i > 0) {
5770
+ flushParagraph();
5771
+ }
5772
+ const part = parts[i];
5773
+ if (!part) {
5774
+ if (i < parts.length - 1) {
5775
+ ensureParagraph(element);
5776
+ flushParagraph();
5777
+ }
5778
+ continue;
5779
+ }
5780
+ const dom = convertInlineElementToDom(element, editorOptions);
5781
+ dom.innerText = part;
5782
+ appendInlineNode(dom, element);
5783
+ }
5784
+ };
5364
5785
  for (let e = 0; e < payload.length; e++) {
5365
5786
  const element = payload[e];
5366
5787
  if (element.type === ElementType.TABLE) {
5788
+ flushParagraph();
5367
5789
  const tableDom = document.createElement("table");
5368
5790
  tableDom.setAttribute("cellSpacing", "0");
5369
5791
  tableDom.setAttribute("cellpadding", "0");
@@ -5426,13 +5848,16 @@ function createDomFromElementList(elementList, options) {
5426
5848
  if (element.url) {
5427
5849
  a.href = element.url;
5428
5850
  }
5429
- clipboardDom2.append(a);
5851
+ appendInlineNode(a, element);
5430
5852
  } else if (element.type === ElementType.TITLE) {
5853
+ flushParagraph();
5431
5854
  const h = document.createElement(`h${titleOrderNumberMapping[element.level]}`);
5855
+ applyParagraphStyleToDom(h, element);
5432
5856
  const childDom = buildDom(element.valueList);
5433
5857
  h.innerHTML = childDom.innerHTML;
5434
5858
  clipboardDom2.append(h);
5435
5859
  } else if (element.type === ElementType.LIST) {
5860
+ flushParagraph();
5436
5861
  const list = document.createElement(listTypeElementMapping[element.listType]);
5437
5862
  if (element.listStyle) {
5438
5863
  list.style.listStyleType = listStyleCSSMapping[element.listStyle];
@@ -5448,17 +5873,32 @@ function createDomFromElementList(elementList, options) {
5448
5873
  clipboardDom2.append(list);
5449
5874
  } else if (element.type === ElementType.IMAGE) {
5450
5875
  const img = document.createElement("img");
5451
- console.log(element);
5452
5876
  if (element.value) {
5453
5877
  img.src = element.value;
5454
5878
  img.width = element.width;
5455
5879
  img.height = element.height;
5456
5880
  img.id = getUUID();
5457
- img.setAttribute("data-form-input", JSON.stringify(element.formInput));
5458
- img.setAttribute("style", "vertical-align: text-top;");
5881
+ if (element.formInput) {
5882
+ img.setAttribute("data-form-input", JSON.stringify(element.formInput));
5883
+ }
5884
+ applyImageWrapToDom(img, element);
5885
+ }
5886
+ if (element.imgDisplay === ImageDisplay.SURROUND || element.imgDisplay === ImageDisplay.FLOAT_TOP || element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {
5887
+ ensureParagraph(element);
5888
+ paragraphDom.style.position = "relative";
5889
+ paragraphDom.append(img);
5890
+ } else if (element.imgDisplay === ImageDisplay.BLOCK || element.imgDisplay === ImageDisplay.INLINE) {
5891
+ const prev = payload[e - 1];
5892
+ const prevIsSameKind = (prev == null ? void 0 : prev.type) === ElementType.IMAGE && (prev.imgDisplay === ImageDisplay.BLOCK || prev.imgDisplay === ImageDisplay.INLINE);
5893
+ if (!prevIsSameKind) {
5894
+ flushParagraph();
5895
+ }
5896
+ clipboardDom2.append(img);
5897
+ } else {
5898
+ appendInlineNode(img, element);
5459
5899
  }
5460
- clipboardDom2.append(img);
5461
5900
  } else if (element.type === ElementType.BLOCK) {
5901
+ flushParagraph();
5462
5902
  if (((_e = element.block) == null ? void 0 : _e.type) === BlockType.VIDEO) {
5463
5903
  const src = (_f = element.block.videoBlock) == null ? void 0 : _f.src;
5464
5904
  if (src) {
@@ -5489,6 +5929,7 @@ function createDomFromElementList(elementList, options) {
5489
5929
  }
5490
5930
  }
5491
5931
  } else if (element.type === ElementType.SEPARATOR) {
5932
+ flushParagraph();
5492
5933
  const hr = document.createElement("hr");
5493
5934
  if ((_h = element.dashArray) == null ? void 0 : _h.length) {
5494
5935
  hr.setAttribute("data-dash-array", element.dashArray.join(","));
@@ -5500,26 +5941,28 @@ function createDomFromElementList(elementList, options) {
5500
5941
  if ((_i = element.checkbox) == null ? void 0 : _i.value) {
5501
5942
  checkbox.setAttribute("checked", "true");
5502
5943
  }
5503
- clipboardDom2.append(checkbox);
5944
+ appendInlineNode(checkbox, element);
5504
5945
  } else if (element.type === ElementType.RADIO) {
5505
5946
  const radio = document.createElement("input");
5506
5947
  radio.type = "radio";
5507
5948
  if ((_j = element.radio) == null ? void 0 : _j.value) {
5508
5949
  radio.setAttribute("checked", "true");
5509
5950
  }
5510
- clipboardDom2.append(radio);
5951
+ appendInlineNode(radio, element);
5511
5952
  } else if (element.type === ElementType.TAB) {
5512
5953
  const tab2 = document.createElement("span");
5513
5954
  tab2.innerHTML = `${NON_BREAKING_SPACE}${NON_BREAKING_SPACE}`;
5514
- clipboardDom2.append(tab2);
5955
+ appendInlineNode(tab2, element);
5515
5956
  } else if (element.type === ElementType.CONTROL) {
5516
5957
  const controlElement = document.createElement("span");
5517
5958
  const childDom = buildDom(((_k = element.control) == null ? void 0 : _k.value) || []);
5518
5959
  controlElement.innerHTML = childDom.innerHTML;
5519
- clipboardDom2.append(controlElement);
5960
+ appendInlineNode(controlElement, element);
5520
5961
  } else if (element.type === ElementType.PAGE_BREAK) {
5962
+ flushParagraph();
5521
5963
  const pageBreakElement = document.createElement("div");
5522
5964
  pageBreakElement.style.breakAfter = "page";
5965
+ pageBreakElement.setAttribute("data-type", ElementType.PAGE_BREAK);
5523
5966
  clipboardDom2.append(pageBreakElement);
5524
5967
  } else if (!element.type || element.type === ElementType.LATEX || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {
5525
5968
  let text = "";
@@ -5530,14 +5973,13 @@ function createDomFromElementList(elementList, options) {
5530
5973
  }
5531
5974
  if (!text)
5532
5975
  continue;
5533
- const dom = convertElementToDom(element, editorOptions);
5534
5976
  if (((_m = payload[e - 1]) == null ? void 0 : _m.type) === ElementType.TITLE) {
5535
5977
  text = text.replace(/^\n/, "");
5536
5978
  }
5537
- dom.innerText = text.replace(new RegExp(`${ZERO}`, "g"), "\n");
5538
- clipboardDom2.append(dom);
5979
+ appendTextRuns(element, text);
5539
5980
  }
5540
5981
  }
5982
+ flushParagraph();
5541
5983
  return clipboardDom2;
5542
5984
  }
5543
5985
  const clipboardDom = document.createElement("div");
@@ -5567,6 +6009,7 @@ function createDomFromElementList(elementList, options) {
5567
6009
  });
5568
6010
  }
5569
6011
  }
6012
+ relocateFloatOverlayImages(clipboardDom);
5570
6013
  return clipboardDom;
5571
6014
  }
5572
6015
  function convertTextNodeToElement(textNode) {
@@ -5639,6 +6082,13 @@ function getElementListByHTML(htmlText, options) {
5639
6082
  elementList.push({
5640
6083
  value: "\n"
5641
6084
  });
6085
+ } else if (node.nodeName === "DIV" && node.getAttribute("data-ce-clear") === "both") {
6086
+ continue;
6087
+ } else if (node.nodeName === "DIV" && node.getAttribute("data-type") === ElementType.PAGE_BREAK) {
6088
+ elementList.push({
6089
+ type: ElementType.PAGE_BREAK,
6090
+ value: "\n"
6091
+ });
5642
6092
  } else if (node.nodeName === "A") {
5643
6093
  const aElement = node;
5644
6094
  const value = aElement.innerText;
@@ -5701,7 +6151,9 @@ function getElementListByHTML(htmlText, options) {
5701
6151
  });
5702
6152
  } else if (node.nodeName === "IMG") {
5703
6153
  const imgElement = node;
5704
- const { src, width, height } = imgElement;
6154
+ const { src } = imgElement;
6155
+ const width = imgElement.width || Number.parseFloat(imgElement.getAttribute("width") || "") || Number.parseFloat(imgElement.style.width) || 0;
6156
+ const height = imgElement.height || Number.parseFloat(imgElement.getAttribute("height") || "") || Number.parseFloat(imgElement.style.height) || 0;
5705
6157
  if (src && width && height) {
5706
6158
  const element = {
5707
6159
  width,
@@ -5711,8 +6163,8 @@ function getElementListByHTML(htmlText, options) {
5711
6163
  rowFlex: convertTextAlignToRowFlex(node.parentElement),
5712
6164
  verticalAlign: "text-top"
5713
6165
  };
6166
+ applyImageWrapFromDom(imgElement, element);
5714
6167
  const formInputAttr = imgElement.getAttribute("data-form-input");
5715
- console.log("data-form-input", formInputAttr);
5716
6168
  if (formInputAttr) {
5717
6169
  try {
5718
6170
  element.formInput = JSON.parse(formInputAttr);
@@ -5975,11 +6427,17 @@ function getNonHideElementIndex(elementList, index2, position = LocationPosition
5975
6427
  }
5976
6428
  return i;
5977
6429
  }
5978
- function convertToXHTML(dom) {
6430
+ function convertToXHTML(dom, options) {
6431
+ var _a;
5979
6432
  if (!dom)
5980
6433
  return "";
5981
6434
  const serializer = new XMLSerializer();
5982
- const xhtml = serializer.serializeToString(dom);
6435
+ let xhtml = serializer.serializeToString(dom);
6436
+ xhtml = xhtml.replace(/\sxmlns="http:\/\/www\.w3\.org\/1999\/xhtml"/g, "");
6437
+ const keepRoot = (options == null ? void 0 : options.keepRoot) || ((_a = dom.classList) == null ? void 0 : _a.contains("ce-export-page"));
6438
+ if (keepRoot) {
6439
+ return xhtml;
6440
+ }
5983
6441
  const match = xhtml.match(/<[^>]+>([\s\S]*)<\/[^>]+>$/i);
5984
6442
  return match ? match[1] : xhtml;
5985
6443
  }
@@ -15540,7 +15998,7 @@ function WorkerWrapper$1() {
15540
15998
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
15541
15999
  }
15542
16000
  }
15543
- const encodedJs = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBSPShlPT4oZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIiLGUpKShSfHx7fSksZz0oZT0+KGUuQVJBQklDPSJhcmFiaWMiLGUuQ0hJTkVTRT0iY2hpbmVzZSIsZSkpKGd8fHt9KTtjb25zdCB2PSJcdTIwMEIiO1IuSEFMRisiIiwxLzIsUi5PTkVfVEhJUkQrIiIsMS8zLFIuUVVBUlRFUisiIiwxLzQ7ZnVuY3Rpb24gUyhlKXtpZih0eXBlb2Ygc3RydWN0dXJlZENsb25lPT0iZnVuY3Rpb24iKXJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUoZSk7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm4gZTtsZXQgbj17fTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9uPWUubWFwKHU9PlModSkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2godT0+e25bdV09UyhlW3VdKX0pLG59ZnVuY3Rpb24geShlLG4pe2NvbnN0IHU9e307Zm9yKGNvbnN0IGYgaW4gZSluLmluY2x1ZGVzKGYpJiYodVtmXT1lW2ZdKTtyZXR1cm4gdX1mdW5jdGlvbiBYKGUsbil7cmV0dXJuIGUubGVuZ3RoIT09bi5sZW5ndGg/ITE6IWUuc29tZSh1PT4hbi5pbmNsdWRlcyh1KSl9dmFyIGE9KGU9PihlLlRFWFQ9InRleHQiLGUuSU1BR0U9ImltYWdlIixlLlRBQkxFPSJ0YWJsZSIsZS5IWVBFUkxJTks9Imh5cGVybGluayIsZS5TVVBFUlNDUklQVD0ic3VwZXJzY3JpcHQiLGUuU1VCU0NSSVBUPSJzdWJzY3JpcHQiLGUuU0VQQVJBVE9SPSJzZXBhcmF0b3IiLGUuUEFHRV9CUkVBSz0icGFnZUJyZWFrIixlLkNPTlRST0w9ImNvbnRyb2wiLGUuQVJFQT0iYXJlYSIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUuUkFESU89InJhZGlvIixlLkxBVEVYPSJsYXRleCIsZS5UQUI9InRhYiIsZS5EQVRFPSJkYXRlIixlLkJMT0NLPSJibG9jayIsZS5USVRMRT0idGl0bGUiLGUuTElTVD0ibGlzdCIsZS5MQUJFTD0ibGFiZWwiLGUpKShhfHx7fSk7Y29uc3QgXz1bInJvd0ZsZXgiLCJyb3dNYXJnaW4iXSxCPVsidHlwZSIsImZvbnQiLCJzaXplIiwiYm9sZCIsImNvbG9yIiwiaXRhbGljIiwiaGlnaGxpZ2h0IiwidW5kZXJsaW5lIiwic3RyaWtlb3V0Iiwicm93RmxleCIsInJvd01hcmdpbiIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwidHJhbnNsYXRlWCIsIndpZHRoIiwiaGVpZ2h0IiwidXJsIiwiY29sZ3JvdXAiLCJ2YWx1ZUxpc3QiLCJjb250cm9sIiwiY2hlY2tib3giLCJyYWRpbyIsImRhdGVGb3JtYXQiLCJibG9jayIsImxldmVsIiwidGl0bGUiLCJsaXN0VHlwZSIsImxpc3RTdHlsZSIsImxpc3RXcmFwIiwiZ3JvdXBJZHMiLCJjb25jZXB0SWQiLCJpbWdEaXNwbGF5IiwiaW1nRmxvYXRQb3NpdGlvbiIsImltZ1Rvb2xEaXNhYmxlZCIsImltZ1ByZXZpZXdEaXNhYmxlZCIsImltZ0Nyb3AiLCJpbWdDYXB0aW9uIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSIsImhpZGUiLCJsYWJlbCIsImxhYmVsSWQiLCJsaW5lV2lkdGgiLCJmb3JtSW5wdXQiXSxVPVsiY29uY2VwdElkIiwiZXh0ZW5zaW9uIiwiZXh0ZXJuYWxJZCIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJUeXBlcyIsInNsYXNoVHlwZXMiLCJkaXNhYmxlZCIsImRlbGV0YWJsZSJdLHc9WyJmb250Iiwic2l6ZSIsImJvbGQiLCJoaWdobGlnaHQiLCJpdGFsaWMiLCJzdHJpa2VvdXQiXTthLlRFWFQsYS5IWVBFUkxJTkssYS5TVUJTQ1JJUFQsYS5TVVBFUlNDUklQVCxhLkNPTlRST0wsYS5EQVRFLGEuSU1BR0UsYS5MQVRFWCxhLkJMT0NLLGEuUEFHRV9CUkVBSyxhLlNFUEFSQVRPUixhLlRBQkxFLGEuVElUTEUsYS5MSVNUO3ZhciBQPShlPT4oZS5VTD0idWwiLGUuT0w9Im9sIixlKSkoUHx8e30pLE89KGU9PihlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlKSkoT3x8e30pLHA9KGU9PihlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuREVDSU1BTD0iZGVjaW1hbCIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUpKShwfHx7fSk7Ty5ESVNDKyIiLE8uQ0lSQ0xFKyIiLE8uU1FVQVJFKyIiLE8uQ0hFQ0tCT1grIiIsUC5PTCsiIixQLlVMKyIiLHAuRElTQysiIixwLkNJUkNMRSsiIixwLlNRVUFSRSsiIixwLkRFQ0lNQUwrIiIscC5DSEVDS0JPWCsiIjt2YXIgRT0oZT0+KGUuRklSU1Q9ImZpcnN0IixlLlNFQ09ORD0ic2Vjb25kIixlLlRISVJEPSJ0aGlyZCIsZS5GT1VSVEg9ImZvdXJ0aCIsZS5GSUZUSD0iZmlmdGgiLGUuU0lYVEg9InNpeHRoIixlKSkoRXx8e30pO0UuRklSU1QrIiIsRS5TRUNPTkQrIiIsRS5USElSRCsiIixFLkZPVVJUSCsiIixFLkZJRlRIKyIiLEUuU0lYVEgrIiIsRS5GSVJTVCsiIixFLlNFQ09ORCsiIixFLlRISVJEKyIiLEUuRk9VUlRIKyIiLEUuRklGVEgrIiIsRS5TSVhUSCsiIixFLkZJUlNULEUuU0VDT05ELEUuVEhJUkQsRS5GT1VSVEgsRS5GSUZUSCxFLlNJWFRIO3ZhciBBPShlPT4oZS5QUkVGSVg9InByZWZpeCIsZS5QT1NURklYPSJwb3N0Zml4IixlLlBSRV9URVhUPSJwcmVUZXh0IixlLlBPU1RfVEVYVD0icG9zdFRleHQiLGUuUExBQ0VIT0xERVI9InBsYWNlaG9sZGVyIixlLlZBTFVFPSJ2YWx1ZSIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUuUkFESU89InJhZGlvIixlKSkoQXx8e30pLEQ9KGU9PihlLkxFRlQ9ImxlZnQiLGUuQ0VOVEVSPSJjZW50ZXIiLGUuUklHSFQ9InJpZ2h0IixlLkFMSUdOTUVOVD0iYWxpZ25tZW50IixlLkpVU1RJRlk9Imp1c3RpZnkiLGUpKShEfHx7fSksTj0oZT0+KGUuQ09OVEFJTj0iY29udGFpbiIsZS5DT1ZFUj0iY292ZXIiLGUpKShOfHx7fSksaz0oZT0+KGUuUkVQRUFUPSJyZXBlYXQiLGUuTk9fUkVQRUFUPSJuby1yZXBlYXQiLGUuUkVQRUFUX1g9InJlcGVhdC14IixlLlJFUEVBVF9ZPSJyZXBlYXQteSIsZSkpKGt8fHt9KTtOLkNPVkVSLGsuTk9fUkVQRUFUO3ZhciBiPShlPT4oZS5UT1A9InRvcCIsZS5NSURETEU9Im1pZGRsZSIsZS5CT1RUT009ImJvdHRvbSIsZSkpKGJ8fHt9KTtiLkJPVFRPTSxSLkhBTEYsUi5IQUxGO2NvbnN0IEs9e1BBR0VfTk86IntwYWdlTm99IixQQUdFX0NPVU5UOiJ7cGFnZUNvdW50fSJ9O0QuQ0VOVEVSLEsuUEFHRV9OTyxnLkFSQUJJQyxiLkJPVFRPTTt2YXIgbT0oZT0+KGUuVEVYVD0idGV4dCIsZS5JTUFHRT0iaW1hZ2UiLGUpKShtfHx7fSk7bS5URVhULGcuQVJBQklDO3ZhciB4PShlPT4oZS5QQUdFPSJwYWdlIixlLkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkiLGUpKSh4fHx7fSk7eC5DT05USU5VSVRZO2Z1bmN0aW9uIE0oZSxuKXtjb25zdCB1PU9iamVjdC5rZXlzKGUpLGY9T2JqZWN0LmtleXMobik7aWYodS5sZW5ndGghPT1mLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IEk9MDtJPHUubGVuZ3RoO0krKyl7Y29uc3QgbD11W0ldO2lmKGwhPT0idmFsdWUiJiYhKGw9PT0iZ3JvdXBJZHMiJiZBcnJheS5pc0FycmF5KGVbbF0pJiZBcnJheS5pc0FycmF5KG5bbF0pJiZYKGVbbF0sbltsXSkpJiZlW2xdIT09bltsXSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBIKGUsbj17fSl7Y29uc3R7ZXh0cmFQaWNrQXR0cnM6dX09bixmPVsuLi5CXTt1JiZmLnB1c2goLi4udSk7Y29uc3QgST17dmFsdWU6ZS52YWx1ZT09PXY/YApgOmUudmFsdWV9O3JldHVybiBmLmZvckVhY2gobD0+e2NvbnN0IEM9ZVtsXTtDIT09dm9pZCAwJiYoSVtsXT1DKX0pLEl9ZnVuY3Rpb24gVChlLG49e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOnUsaXNDbGFzc2lmeUFyZWE6Zj0hMSxpc0Nsb25lOkk9ITB9PW4sbD1JP1MoZSk6ZSxDPVtdO2xldCBpPTA7Zm9yKDtpPGwubGVuZ3RoOyl7bGV0IHQ9bFtpXTtpZihpPT09MCYmdC52YWx1ZT09PXYmJiF0Lmxpc3RJZCYmKCF0LnR5cGV8fHQudHlwZT09PWEuVEVYVCkpe2krKztjb250aW51ZX1pZih0LmFyZWFJZCl7Y29uc3Qgcj10LmFyZWFJZCxkPXQuYXJlYSxjPVtdO2Zvcig7aTxsLmxlbmd0aDspe2NvbnN0IG89bFtpXTtpZihyIT09by5hcmVhSWQpe2ktLTticmVha31kZWxldGUgby5hcmVhLGRlbGV0ZSBvLmFyZWFJZCxjLnB1c2gobyksaSsrfWNvbnN0IHM9VChjLG4pO2lmKGYpe2NvbnN0IG89e3R5cGU6YS5BUkVBLHZhbHVlOiIiLGFyZWFJZDpyLGFyZWE6ZH07by52YWx1ZUxpc3Q9cyx0PW99ZWxzZXtDLnNwbGljZShpLDAsLi4ucyk7Y29udGludWV9fWVsc2UgaWYodC50aXRsZUlkJiZ0LmxldmVsKXtjb25zdCByPXQudGl0bGVJZDtpZihyKXtjb25zdCBkPXQubGV2ZWwsYz17dHlwZTphLlRJVExFLHRpdGxlOnQudGl0bGUsdGl0bGVJZDpyLHZhbHVlOiIiLGxldmVsOmR9LHM9W107Zm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgbz1sW2ldO2lmKHIhPT1vLnRpdGxlSWQpe2ktLTticmVha31kZWxldGUgby5sZXZlbCxkZWxldGUgby50aXRsZSxzLnB1c2gobyksaSsrfWMudmFsdWVMaXN0PVQocyxuKSx0PWN9fWVsc2UgaWYodC5saXN0SWQmJnQubGlzdFR5cGUpe2NvbnN0IHI9dC5saXN0SWQ7aWYocil7Y29uc3QgZD10Lmxpc3RUeXBlLGM9dC5saXN0U3R5bGUscz17dHlwZTphLkxJU1QsdmFsdWU6IiIsbGlzdElkOnIsbGlzdFR5cGU6ZCxsaXN0U3R5bGU6Y30sbz1bXTtmb3IoO2k8bC5sZW5ndGg7KXtjb25zdCBoPWxbaV07aWYociE9PWgubGlzdElkKXtpLS07YnJlYWt9ZGVsZXRlIGgubGlzdFR5cGUsZGVsZXRlIGgubGlzdFN0eWxlLG8ucHVzaChoKSxpKyt9cy52YWx1ZUxpc3Q9VChvLG4pLHQ9c319ZWxzZSBpZih0LnR5cGU9PT1hLlRBQkxFKXtpZih0LnBhZ2luZ0lkKXtsZXQgcj1pKzEsZD0wO2Zvcig7cjxsLmxlbmd0aDspe2NvbnN0IGM9bFtyXTtpZihjLnBhZ2luZ0lkPT09dC5wYWdpbmdJZCl0LmhlaWdodCs9Yy5oZWlnaHQsdC50ckxpc3QucHVzaCguLi5jLnRyTGlzdCkscisrLGQrKztlbHNlIGJyZWFrfWkrPWR9aWYodC50ckxpc3QpZm9yKGxldCByPTA7cjx0LnRyTGlzdC5sZW5ndGg7cisrKXtjb25zdCBkPXQudHJMaXN0W3JdO2RlbGV0ZSBkLmlkO2ZvcihsZXQgYz0wO2M8ZC50ZExpc3QubGVuZ3RoO2MrKyl7Y29uc3Qgcz1kLnRkTGlzdFtjXSxvPXtjb2xzcGFuOnMuY29sc3Bhbixyb3dzcGFuOnMucm93c3Bhbix2YWx1ZTpUKHMudmFsdWUsey4uLm4saXNDbGFzc2lmeUFyZWE6ITF9KX07VS5mb3JFYWNoKGg9Pntjb25zdCBMPXNbaF07TCE9PXZvaWQgMCYmKG9baF09TCl9KSxkLnRkTGlzdFtjXT1vfX19ZWxzZSBpZih0LnR5cGU9PT1hLkhZUEVSTElOSyl7Y29uc3Qgcj10Lmh5cGVybGlua0lkO2lmKHIpe2NvbnN0IGQ9e3R5cGU6YS5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOnQudXJsfSxjPVtdO2Zvcig7aTxsLmxlbmd0aDspe2NvbnN0IHM9bFtpXTtpZihyIT09cy5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSBzLnR5cGUsZGVsZXRlIHMudXJsLGMucHVzaChzKSxpKyt9ZC52YWx1ZUxpc3Q9VChjLG4pLHQ9ZH19ZWxzZSBpZih0LnR5cGU9PT1hLkRBVEUpe2NvbnN0IHI9dC5kYXRlSWQ7aWYocil7Y29uc3QgZD17dHlwZTphLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDp0LmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgcz1sW2ldO2lmKHIhPT1zLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBzLnR5cGUsZGVsZXRlIHMuZGF0ZUZvcm1hdCxjLnB1c2gocyksaSsrfWQudmFsdWVMaXN0PVQoYyxuKSx0PWR9fWVsc2UgaWYodC5jb250cm9sSWQpe2NvbnN0IHI9dC5jb250cm9sSWQ7aWYodC5jb250cm9sQ29tcG9uZW50PT09QS5QUkVGSVgpe2NvbnN0IGQ9W107bGV0IGM9ITEscz1pO2Zvcig7czxsLmxlbmd0aDspe2NvbnN0IG89bFtzXTtpZihyIT09by5jb250cm9sSWQpYnJlYWs7by5jb250cm9sQ29tcG9uZW50PT09QS5WQUxVRSYmKGRlbGV0ZSBvLmNvbnRyb2wsZGVsZXRlIG8uY29udHJvbElkLGQucHVzaChvKSksby5jb250cm9sQ29tcG9uZW50PT09QS5QT1NURklYJiYoYz0hMCkscysrfWlmKGMpe2NvbnN0IG89eSh0LHcpLGg9ey4uLnQuY29udHJvbCwuLi5vfSxMPXsuLi55KHQsXyksdHlwZTphLkNPTlRST0wsdmFsdWU6IiIsY29udHJvbDpoLGNvbnRyb2xJZDpyfTtMLmNvbnRyb2wudmFsdWU9VChkLG4pLHQ9SChMLHtleHRyYVBpY2tBdHRyczp1fSksaSs9cy1pLTF9fWlmKHQuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSB0LmNvbnRyb2wsZGVsZXRlIHQuY29udHJvbElkLHQuY29udHJvbENvbXBvbmVudCE9PUEuVkFMVUUmJnQuY29udHJvbENvbXBvbmVudCE9PUEuUFJFX1RFWFQmJnQuY29udHJvbENvbXBvbmVudCE9PUEuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBGPUgodCx7ZXh0cmFQaWNrQXR0cnM6dX0pO2lmKCF0LnR5cGV8fHQudHlwZT09PWEuVEVYVHx8dC50eXBlPT09YS5TVUJTQ1JJUFR8fHQudHlwZT09PWEuU1VQRVJTQ1JJUFQpZm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgcj1sW2krMV07aWYoaSsrLHImJk0oRixIKHIse2V4dHJhUGlja0F0dHJzOnV9KSkpe2NvbnN0IGQ9ci52YWx1ZT09PXY/YApgOnIudmFsdWU7Ri52YWx1ZSs9ZH1lbHNlIGJyZWFrfWVsc2UgaSsrO0MucHVzaChGKX1yZXR1cm4gQ31vbm1lc3NhZ2U9ZT0+e2NvbnN0IG49ZS5kYXRhLHtvcHRpb25zOnUsZGF0YTpmfT1uLHtleHRyYVBpY2tBdHRyczpJPVtdfT11fHx7fSxsPXtoZWFkZXI6VChmLmhlYWRlcix7ZXh0cmFQaWNrQXR0cnM6SSxpc0Nsb25lOiExfSksbWFpbjpUKGYubWFpbix7ZXh0cmFQaWNrQXR0cnM6SSxpc0NsYXNzaWZ5QXJlYTohMCxpc0Nsb25lOiExfSksZm9vdGVyOlQoZi5mb290ZXIse2V4dHJhUGlja0F0dHJzOkksaXNDbG9uZTohMX0pfTtwb3N0TWVzc2FnZShsKX19KSgpOwo=";
16001
+ const encodedJs = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBSPShlPT4oZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIiLGUpKShSfHx7fSksZz0oZT0+KGUuQVJBQklDPSJhcmFiaWMiLGUuQ0hJTkVTRT0iY2hpbmVzZSIsZSkpKGd8fHt9KSxtPShlPT4oZS5JTkxJTkU9ImlubGluZSIsZS5CTE9DSz0iYmxvY2siLGUuU1VSUk9VTkQ9InN1cnJvdW5kIixlLkZMT0FUX1RPUD0iZmxvYXQtdG9wIixlLkZMT0FUX0JPVFRPTT0iZmxvYXQtYm90dG9tIixlKSkobXx8e30pO2NvbnN0IHY9Ilx1MjAwQiI7Ui5IQUxGKyIiLDEvMixSLk9ORV9USElSRCsiIiwxLzMsUi5RVUFSVEVSKyIiLDEvNDtmdW5jdGlvbiBTKGUpe2lmKHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiIpcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShlKTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBvPXt9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP289ZS5tYXAoZD0+UyhkKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChkPT57b1tkXT1TKGVbZF0pfSksb31mdW5jdGlvbiBOKGUsbyl7Y29uc3QgZD17fTtmb3IoY29uc3QgZiBpbiBlKW8uaW5jbHVkZXMoZikmJihkW2ZdPWVbZl0pO3JldHVybiBkfWZ1bmN0aW9uIF8oZSxvKXtyZXR1cm4gZS5sZW5ndGghPT1vLmxlbmd0aD8hMTohZS5zb21lKGQ9PiFvLmluY2x1ZGVzKGQpKX12YXIgYT0oZT0+KGUuVEVYVD0idGV4dCIsZS5JTUFHRT0iaW1hZ2UiLGUuVEFCTEU9InRhYmxlIixlLkhZUEVSTElOSz0iaHlwZXJsaW5rIixlLlNVUEVSU0NSSVBUPSJzdXBlcnNjcmlwdCIsZS5TVUJTQ1JJUFQ9InN1YnNjcmlwdCIsZS5TRVBBUkFUT1I9InNlcGFyYXRvciIsZS5QQUdFX0JSRUFLPSJwYWdlQnJlYWsiLGUuQ09OVFJPTD0iY29udHJvbCIsZS5BUkVBPSJhcmVhIixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8iLGUuTEFURVg9ImxhdGV4IixlLlRBQj0idGFiIixlLkRBVEU9ImRhdGUiLGUuQkxPQ0s9ImJsb2NrIixlLlRJVExFPSJ0aXRsZSIsZS5MSVNUPSJsaXN0IixlLkxBQkVMPSJsYWJlbCIsZSkpKGF8fHt9KTtjb25zdCBCPVsicm93RmxleCIsInJvd01hcmdpbiIsInRleHRJbmRlbnQiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Ub3AiLCJtaW5IZWlnaHQiLCJ3aGl0ZVNwYWNlIl0sVT1bInR5cGUiLCJmb250Iiwic2l6ZSIsImJvbGQiLCJjb2xvciIsIml0YWxpYyIsImhpZ2hsaWdodCIsInVuZGVybGluZSIsInN0cmlrZW91dCIsInJvd0ZsZXgiLCJyb3dNYXJnaW4iLCJ0ZXh0SW5kZW50IiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luVG9wIiwibWluSGVpZ2h0Iiwid2hpdGVTcGFjZSIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwidHJhbnNsYXRlWCIsIndpZHRoIiwiaGVpZ2h0IiwidXJsIiwiY29sZ3JvdXAiLCJ2YWx1ZUxpc3QiLCJjb250cm9sIiwiY2hlY2tib3giLCJyYWRpbyIsImRhdGVGb3JtYXQiLCJibG9jayIsImxldmVsIiwidGl0bGUiLCJsaXN0VHlwZSIsImxpc3RTdHlsZSIsImxpc3RXcmFwIiwiZ3JvdXBJZHMiLCJjb25jZXB0SWQiLCJpbWdEaXNwbGF5IiwiaW1nRmxvYXRQb3NpdGlvbiIsImltZ1Rvb2xEaXNhYmxlZCIsImltZ1ByZXZpZXdEaXNhYmxlZCIsImltZ0Nyb3AiLCJpbWdDYXB0aW9uIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSIsImhpZGUiLCJsYWJlbCIsImxhYmVsSWQiLCJsaW5lV2lkdGgiLCJmb3JtSW5wdXQiXSx3PVsiY29uY2VwdElkIiwiZXh0ZW5zaW9uIiwiZXh0ZXJuYWxJZCIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJUeXBlcyIsInNsYXNoVHlwZXMiLCJkaXNhYmxlZCIsImRlbGV0YWJsZSJdLEs9WyJmb250Iiwic2l6ZSIsImJvbGQiLCJoaWdobGlnaHQiLCJpdGFsaWMiLCJzdHJpa2VvdXQiXTthLlRFWFQsYS5IWVBFUkxJTkssYS5TVUJTQ1JJUFQsYS5TVVBFUlNDUklQVCxhLkNPTlRST0wsYS5EQVRFLGEuSU1BR0UsYS5MQVRFWCxhLkJMT0NLLGEuUEFHRV9CUkVBSyxhLlNFUEFSQVRPUixhLlRBQkxFLGEuVElUTEUsYS5MSVNUO3ZhciBiPShlPT4oZS5VTD0idWwiLGUuT0w9Im9sIixlKSkoYnx8e30pLEw9KGU9PihlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlKSkoTHx8e30pLE89KGU9PihlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuREVDSU1BTD0iZGVjaW1hbCIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUpKShPfHx7fSk7TC5ESVNDKyIiLEwuQ0lSQ0xFKyIiLEwuU1FVQVJFKyIiLEwuQ0hFQ0tCT1grIiIsYi5PTCsiIixiLlVMKyIiLE8uRElTQysiIixPLkNJUkNMRSsiIixPLlNRVUFSRSsiIixPLkRFQ0lNQUwrIiIsTy5DSEVDS0JPWCsiIjt2YXIgRT0oZT0+KGUuRklSU1Q9ImZpcnN0IixlLlNFQ09ORD0ic2Vjb25kIixlLlRISVJEPSJ0aGlyZCIsZS5GT1VSVEg9ImZvdXJ0aCIsZS5GSUZUSD0iZmlmdGgiLGUuU0lYVEg9InNpeHRoIixlKSkoRXx8e30pO0UuRklSU1QrIiIsRS5TRUNPTkQrIiIsRS5USElSRCsiIixFLkZPVVJUSCsiIixFLkZJRlRIKyIiLEUuU0lYVEgrIiIsRS5GSVJTVCsiIixFLlNFQ09ORCsiIixFLlRISVJEKyIiLEUuRk9VUlRIKyIiLEUuRklGVEgrIiIsRS5TSVhUSCsiIixFLkZJUlNULEUuU0VDT05ELEUuVEhJUkQsRS5GT1VSVEgsRS5GSUZUSCxFLlNJWFRIO3ZhciBBPShlPT4oZS5QUkVGSVg9InByZWZpeCIsZS5QT1NURklYPSJwb3N0Zml4IixlLlBSRV9URVhUPSJwcmVUZXh0IixlLlBPU1RfVEVYVD0icG9zdFRleHQiLGUuUExBQ0VIT0xERVI9InBsYWNlaG9sZGVyIixlLlZBTFVFPSJ2YWx1ZSIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUuUkFESU89InJhZGlvIixlKSkoQXx8e30pLHk9KGU9PihlLkxFRlQ9ImxlZnQiLGUuQ0VOVEVSPSJjZW50ZXIiLGUuUklHSFQ9InJpZ2h0IixlLkFMSUdOTUVOVD0iYWxpZ25tZW50IixlLkpVU1RJRlk9Imp1c3RpZnkiLGUpKSh5fHx7fSksaz0oZT0+KGUuQ09OVEFJTj0iY29udGFpbiIsZS5DT1ZFUj0iY292ZXIiLGUpKShrfHx7fSksRD0oZT0+KGUuUkVQRUFUPSJyZXBlYXQiLGUuTk9fUkVQRUFUPSJuby1yZXBlYXQiLGUuUkVQRUFUX1g9InJlcGVhdC14IixlLlJFUEVBVF9ZPSJyZXBlYXQteSIsZSkpKER8fHt9KTtrLkNPVkVSLEQuTk9fUkVQRUFUO3ZhciBQPShlPT4oZS5UT1A9InRvcCIsZS5NSURETEU9Im1pZGRsZSIsZS5CT1RUT009ImJvdHRvbSIsZSkpKFB8fHt9KTtQLkJPVFRPTSxSLkhBTEYsUi5IQUxGO2NvbnN0IE09e1BBR0VfTk86IntwYWdlTm99IixQQUdFX0NPVU5UOiJ7cGFnZUNvdW50fSJ9O3kuQ0VOVEVSLE0uUEFHRV9OTyxnLkFSQUJJQyxQLkJPVFRPTTt2YXIgeD0oZT0+KGUuVEVYVD0idGV4dCIsZS5JTUFHRT0iaW1hZ2UiLGUpKSh4fHx7fSk7eC5URVhULGcuQVJBQklDO3ZhciBYPShlPT4oZS5QQUdFPSJwYWdlIixlLkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkiLGUpKShYfHx7fSk7WC5DT05USU5VSVRZO2Z1bmN0aW9uIHooZSxvKXtjb25zdCBkPU9iamVjdC5rZXlzKGUpLGY9T2JqZWN0LmtleXMobyk7aWYoZC5sZW5ndGghPT1mLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IFQ9MDtUPGQubGVuZ3RoO1QrKyl7Y29uc3QgbD1kW1RdO2lmKGwhPT0idmFsdWUiJiYhKGw9PT0iZ3JvdXBJZHMiJiZBcnJheS5pc0FycmF5KGVbbF0pJiZBcnJheS5pc0FycmF5KG9bbF0pJiZfKGVbbF0sb1tsXSkpJiZlW2xdIT09b1tsXSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBIKGUsbz17fSl7Y29uc3R7ZXh0cmFQaWNrQXR0cnM6ZH09byxmPVsuLi5VXTtkJiZmLnB1c2goLi4uZCk7Y29uc3QgVD17dmFsdWU6ZS52YWx1ZT09PXY/YApgOmUudmFsdWV9O3JldHVybiBmLmZvckVhY2gobD0+e2NvbnN0IHA9ZVtsXTtwIT09dm9pZCAwJiYoVFtsXT1wKX0pLFR9ZnVuY3Rpb24gSShlLG89e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOmQsaXNDbGFzc2lmeUFyZWE6Zj0hMSxpc0Nsb25lOlQ9ITB9PW8sbD1UP1MoZSk6ZSxwPVtdO2xldCBpPTA7Zm9yKDtpPGwubGVuZ3RoOyl7bGV0IHQ9bFtpXTtpZihpPT09MCYmdC52YWx1ZT09PXYmJiF0Lmxpc3RJZCYmKCF0LnR5cGV8fHQudHlwZT09PWEuVEVYVCkpe2krKztjb250aW51ZX1pZih0LmFyZWFJZCl7Y29uc3Qgcj10LmFyZWFJZCx1PXQuYXJlYSxjPVtdO2Zvcig7aTxsLmxlbmd0aDspe2NvbnN0IHM9bFtpXTtpZihyIT09cy5hcmVhSWQpe2ktLTticmVha31kZWxldGUgcy5hcmVhLGRlbGV0ZSBzLmFyZWFJZCxjLnB1c2gocyksaSsrfWNvbnN0IG49SShjLG8pO2lmKGYpe2NvbnN0IHM9e3R5cGU6YS5BUkVBLHZhbHVlOiIiLGFyZWFJZDpyLGFyZWE6dX07cy52YWx1ZUxpc3Q9bix0PXN9ZWxzZXtwLnNwbGljZShpLDAsLi4ubik7Y29udGludWV9fWVsc2UgaWYodC50aXRsZUlkJiZ0LmxldmVsKXtjb25zdCByPXQudGl0bGVJZDtpZihyKXtjb25zdCB1PXQubGV2ZWwsYz17dHlwZTphLlRJVExFLHRpdGxlOnQudGl0bGUsdGl0bGVJZDpyLHZhbHVlOiIiLGxldmVsOnV9LG49W107Zm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgcz1sW2ldO2lmKHIhPT1zLnRpdGxlSWQpe2ktLTticmVha31kZWxldGUgcy5sZXZlbCxkZWxldGUgcy50aXRsZSxuLnB1c2gocyksaSsrfWMudmFsdWVMaXN0PUkobixvKSx0PWN9fWVsc2UgaWYodC5saXN0SWQmJnQubGlzdFR5cGUpe2NvbnN0IHI9dC5saXN0SWQ7aWYocil7Y29uc3QgdT10Lmxpc3RUeXBlLGM9dC5saXN0U3R5bGUsbj17dHlwZTphLkxJU1QsdmFsdWU6IiIsbGlzdElkOnIsbGlzdFR5cGU6dSxsaXN0U3R5bGU6Y30scz1bXTtmb3IoO2k8bC5sZW5ndGg7KXtjb25zdCBoPWxbaV07aWYociE9PWgubGlzdElkKXtpLS07YnJlYWt9ZGVsZXRlIGgubGlzdFR5cGUsZGVsZXRlIGgubGlzdFN0eWxlLHMucHVzaChoKSxpKyt9bi52YWx1ZUxpc3Q9SShzLG8pLHQ9bn19ZWxzZSBpZih0LnR5cGU9PT1hLlRBQkxFKXtpZih0LnBhZ2luZ0lkKXtsZXQgcj1pKzEsdT0wO2Zvcig7cjxsLmxlbmd0aDspe2NvbnN0IGM9bFtyXTtpZihjLnBhZ2luZ0lkPT09dC5wYWdpbmdJZCl0LmhlaWdodCs9Yy5oZWlnaHQsdC50ckxpc3QucHVzaCguLi5jLnRyTGlzdCkscisrLHUrKztlbHNlIGJyZWFrfWkrPXV9aWYodC50ckxpc3QpZm9yKGxldCByPTA7cjx0LnRyTGlzdC5sZW5ndGg7cisrKXtjb25zdCB1PXQudHJMaXN0W3JdO2RlbGV0ZSB1LmlkO2ZvcihsZXQgYz0wO2M8dS50ZExpc3QubGVuZ3RoO2MrKyl7Y29uc3Qgbj11LnRkTGlzdFtjXSxzPXtjb2xzcGFuOm4uY29sc3Bhbixyb3dzcGFuOm4ucm93c3Bhbix2YWx1ZTpJKG4udmFsdWUsey4uLm8saXNDbGFzc2lmeUFyZWE6ITF9KX07dy5mb3JFYWNoKGg9Pntjb25zdCBDPW5baF07QyE9PXZvaWQgMCYmKHNbaF09Qyl9KSx1LnRkTGlzdFtjXT1zfX19ZWxzZSBpZih0LnR5cGU9PT1hLkhZUEVSTElOSyl7Y29uc3Qgcj10Lmh5cGVybGlua0lkO2lmKHIpe2NvbnN0IHU9e3R5cGU6YS5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOnQudXJsfSxjPVtdO2Zvcig7aTxsLmxlbmd0aDspe2NvbnN0IG49bFtpXTtpZihyIT09bi5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSBuLnR5cGUsZGVsZXRlIG4udXJsLGMucHVzaChuKSxpKyt9dS52YWx1ZUxpc3Q9SShjLG8pLHQ9dX19ZWxzZSBpZih0LnR5cGU9PT1hLkRBVEUpe2NvbnN0IHI9dC5kYXRlSWQ7aWYocil7Y29uc3QgdT17dHlwZTphLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDp0LmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgbj1sW2ldO2lmKHIhPT1uLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBuLnR5cGUsZGVsZXRlIG4uZGF0ZUZvcm1hdCxjLnB1c2gobiksaSsrfXUudmFsdWVMaXN0PUkoYyxvKSx0PXV9fWVsc2UgaWYodC5jb250cm9sSWQpe2NvbnN0IHI9dC5jb250cm9sSWQ7aWYodC5jb250cm9sQ29tcG9uZW50PT09QS5QUkVGSVgpe2NvbnN0IHU9W107bGV0IGM9ITEsbj1pO2Zvcig7bjxsLmxlbmd0aDspe2NvbnN0IHM9bFtuXTtpZihyIT09cy5jb250cm9sSWQpYnJlYWs7cy5jb250cm9sQ29tcG9uZW50PT09QS5WQUxVRSYmKGRlbGV0ZSBzLmNvbnRyb2wsZGVsZXRlIHMuY29udHJvbElkLHUucHVzaChzKSkscy5jb250cm9sQ29tcG9uZW50PT09QS5QT1NURklYJiYoYz0hMCksbisrfWlmKGMpe2NvbnN0IHM9Tih0LEspLGg9ey4uLnQuY29udHJvbCwuLi5zfSxDPXsuLi5OKHQsQiksdHlwZTphLkNPTlRST0wsdmFsdWU6IiIsY29udHJvbDpoLGNvbnRyb2xJZDpyfTtDLmNvbnRyb2wudmFsdWU9SSh1LG8pLHQ9SChDLHtleHRyYVBpY2tBdHRyczpkfSksaSs9bi1pLTF9fWlmKHQuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSB0LmNvbnRyb2wsZGVsZXRlIHQuY29udHJvbElkLHQuY29udHJvbENvbXBvbmVudCE9PUEuVkFMVUUmJnQuY29udHJvbENvbXBvbmVudCE9PUEuUFJFX1RFWFQmJnQuY29udHJvbENvbXBvbmVudCE9PUEuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBGPUgodCx7ZXh0cmFQaWNrQXR0cnM6ZH0pO2lmKCF0LnR5cGV8fHQudHlwZT09PWEuVEVYVHx8dC50eXBlPT09YS5TVUJTQ1JJUFR8fHQudHlwZT09PWEuU1VQRVJTQ1JJUFQpZm9yKDtpPGwubGVuZ3RoOyl7Y29uc3Qgcj1sW2krMV07aWYoaSsrLHImJnooRixIKHIse2V4dHJhUGlja0F0dHJzOmR9KSkpe2NvbnN0IHU9ci52YWx1ZT09PXY/YApgOnIudmFsdWU7Ri52YWx1ZSs9dX1lbHNlIGJyZWFrfWVsc2UgaSsrO3AucHVzaChGKX1yZXR1cm4gcH1PYmplY3QudmFsdWVzKG0pLG9ubWVzc2FnZT1lPT57Y29uc3Qgbz1lLmRhdGEse29wdGlvbnM6ZCxkYXRhOmZ9PW8se2V4dHJhUGlja0F0dHJzOlQ9W119PWR8fHt9LGw9e2hlYWRlcjpJKGYuaGVhZGVyLHtleHRyYVBpY2tBdHRyczpULGlzQ2xvbmU6ITF9KSxtYWluOkkoZi5tYWluLHtleHRyYVBpY2tBdHRyczpULGlzQ2xhc3NpZnlBcmVhOiEwLGlzQ2xvbmU6ITF9KSxmb290ZXI6SShmLmZvb3Rlcix7ZXh0cmFQaWNrQXR0cnM6VCxpc0Nsb25lOiExfSl9O3Bvc3RNZXNzYWdlKGwpfX0pKCk7Cg==";
15544
16002
  const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
15545
16003
  function WorkerWrapper() {
15546
16004
  const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
@@ -15805,9 +16263,7 @@ class Dialog {
15805
16263
  const renderOptions = (filterText = "") => {
15806
16264
  var _a2;
15807
16265
  dropdown.innerHTML = "";
15808
- const filteredOptions = ((_a2 = option.options) == null ? void 0 : _a2.filter(
15809
- (opt) => !filterText || opt.label.toLowerCase().includes(filterText.toLowerCase())
15810
- )) || [];
16266
+ const filteredOptions = ((_a2 = option.options) == null ? void 0 : _a2.filter((opt) => !filterText || opt.label.toLowerCase().includes(filterText.toLowerCase()))) || [];
15811
16267
  const dropdownInfo2 = this.searchDropdowns.get(option.name);
15812
16268
  const currentValue2 = (dropdownInfo2 == null ? void 0 : dropdownInfo2.selectedValue) || option.value || "";
15813
16269
  if (filteredOptions.length === 0) {
@@ -21549,6 +22005,11 @@ class Draw {
21549
22005
  let listId;
21550
22006
  let listIndex = 0;
21551
22007
  let controlRealWidth = 0;
22008
+ const getParagraphOffsetX = (el, isFirstLine) => {
22009
+ const marginLeft = el.marginLeft || 0;
22010
+ const textIndent = isFirstLine ? el.textIndent || 0 : 0;
22011
+ return (marginLeft + textIndent) * scale;
22012
+ };
21552
22013
  for (let i = 0; i < elementList.length; i++) {
21553
22014
  const curRow = rowList[rowList.length - 1];
21554
22015
  const element = elementList[i];
@@ -21559,8 +22020,17 @@ class Draw {
21559
22020
  boundingBoxAscent: 0,
21560
22021
  boundingBoxDescent: 0
21561
22022
  };
22023
+ if (curRow.offsetX === void 0 && !element.listId && (element.marginLeft || element.textIndent || element.marginRight || element.marginTop)) {
22024
+ const preElement2 = elementList[i - 1];
22025
+ const isFirstLine = i === 0 || (preElement2 == null ? void 0 : preElement2.value) === ZERO || (preElement2 == null ? void 0 : preElement2.type) === ElementType.PAGE_BREAK;
22026
+ curRow.offsetX = getParagraphOffsetX(element, isFirstLine);
22027
+ if (isFirstLine && element.marginTop) {
22028
+ curRow.offsetY = (curRow.offsetY || 0) + element.marginTop * scale;
22029
+ }
22030
+ }
21562
22031
  const offsetX = curRow.offsetX || element.listId && listStyleMap.get(element.listId) || 0;
21563
- const availableWidth = innerWidth - offsetX;
22032
+ const marginRight = (element.marginRight || 0) * scale;
22033
+ const availableWidth = innerWidth - offsetX - marginRight;
21564
22034
  const isStartElement = curRow.elementList.length === 1;
21565
22035
  x += isStartElement ? offsetX : 0;
21566
22036
  y += isStartElement ? curRow.offsetY || 0 : 0;
@@ -21803,7 +22273,7 @@ class Draw {
21803
22273
  } else if (element.type === ElementType.PAGE_BREAK) {
21804
22274
  element.width = availableWidth / scale;
21805
22275
  metrics.width = availableWidth;
21806
- metrics.height = defaultSize;
22276
+ metrics.height = this.options.pageBreak.visible ? defaultSize : 0;
21807
22277
  } else if (element.type === ElementType.RADIO || element.controlComponent === ControlComponent.RADIO) {
21808
22278
  const { width, height: height2, gap } = this.options.radio;
21809
22279
  const elementWidth = width + gap * 2;
@@ -21957,8 +22427,13 @@ class Draw {
21957
22427
  row.isList = true;
21958
22428
  row.offsetX = listStyleMap.get(element.listId);
21959
22429
  row.listIndex = listIndex;
22430
+ } else if (element.marginLeft || element.textIndent || element.marginRight) {
22431
+ row.offsetX = getParagraphOffsetX(element, isForceBreak);
21960
22432
  }
21961
22433
  row.offsetY = !isFromTable && ((_s = element.area) == null ? void 0 : _s.top) && element.areaId !== ((_t = elementList[i - 1]) == null ? void 0 : _t.areaId) ? element.area.top * scale : 0;
22434
+ if (isForceBreak && element.marginTop) {
22435
+ row.offsetY = (row.offsetY || 0) + element.marginTop * scale;
22436
+ }
21962
22437
  rowList.push(row);
21963
22438
  } else {
21964
22439
  curRow.width += metrics.width;
@@ -21973,6 +22448,16 @@ class Draw {
21973
22448
  }
21974
22449
  if (isWrap || i === elementList.length - 1) {
21975
22450
  curRow.isWidthNotEnough = isWidthNotEnough && !isForceBreak;
22451
+ let rowMinHeight = 0;
22452
+ for (let e = 0; e < curRow.elementList.length; e++) {
22453
+ const el = curRow.elementList[e];
22454
+ const mh = (el.minHeight || 0) * scale;
22455
+ if (mh > rowMinHeight)
22456
+ rowMinHeight = mh;
22457
+ }
22458
+ if (rowMinHeight > curRow.height) {
22459
+ curRow.height = rowMinHeight;
22460
+ }
21976
22461
  if (!curRow.isSurround && ((preElement == null ? void 0 : preElement.rowFlex) === RowFlex.JUSTIFY || (preElement == null ? void 0 : preElement.rowFlex) === RowFlex.ALIGNMENT && curRow.isWidthNotEnough)) {
21977
22462
  const rowElementList = ((_v = curRow.elementList[0]) == null ? void 0 : _v.value) === ZERO ? curRow.elementList.slice(1) : curRow.elementList;
21978
22463
  const gap = (availableWidth - curRow.width) / (rowElementList.length - 1);
@@ -22153,7 +22638,7 @@ class Draw {
22153
22638
  } else if (element.type === ElementType.SEPARATOR) {
22154
22639
  this.separatorParticle.render(ctx, element, x, y);
22155
22640
  } else if (element.type === ElementType.PAGE_BREAK) {
22156
- if (this.mode !== EditorMode.CLEAN && !isPrintMode) {
22641
+ if (this.mode !== EditorMode.CLEAN && !isPrintMode && this.options.pageBreak.visible) {
22157
22642
  this.pageBreakParticle.render(ctx, element, x, y);
22158
22643
  }
22159
22644
  } else if (element.type === ElementType.CHECKBOX || element.controlComponent === ControlComponent.CHECKBOX) {
@@ -22707,6 +23192,7 @@ class Command {
22707
23192
  this.executeLocationCatalog = adapt.locationCatalog.bind(adapt);
22708
23193
  this.executeWordTool = adapt.wordTool.bind(adapt);
22709
23194
  this.executeSetHTML = adapt.setHTML.bind(adapt);
23195
+ this.executeSetHtmlDocx = adapt.setHtmlDocx.bind(adapt);
22710
23196
  this.executeSetGroup = adapt.setGroup.bind(adapt);
22711
23197
  this.executeDeleteGroup = adapt.deleteGroup.bind(adapt);
22712
23198
  this.executeLocationGroup = adapt.locationGroup.bind(adapt);
@@ -22765,6 +23251,320 @@ function getParagraphNo(elementList, index2) {
22765
23251
  }
22766
23252
  return paragraphNo;
22767
23253
  }
23254
+ function parsePx(value) {
23255
+ const n = Number.parseFloat(value);
23256
+ return Number.isFinite(n) ? n : 0;
23257
+ }
23258
+ function parseDocxPaperMeta(section) {
23259
+ const style = window.getComputedStyle(section);
23260
+ const width = Math.round(parsePx(style.width)) || Math.round(section.clientWidth);
23261
+ const height = Math.round(parsePx(style.minHeight || style.height)) || Math.round(section.clientHeight);
23262
+ const margins = [
23263
+ Math.round(parsePx(style.paddingTop)),
23264
+ Math.round(parsePx(style.paddingRight)),
23265
+ Math.round(parsePx(style.paddingBottom)),
23266
+ Math.round(parsePx(style.paddingLeft))
23267
+ ];
23268
+ return {
23269
+ width: width || 794,
23270
+ height: height || 1123,
23271
+ margins
23272
+ };
23273
+ }
23274
+ function parseLineHeightAsRowMargin(lineHeight, fontSizePx) {
23275
+ const trimmed = lineHeight.trim();
23276
+ if (!trimmed || trimmed === "normal")
23277
+ return void 0;
23278
+ if (/^\d+(\.\d+)?$/.test(trimmed)) {
23279
+ const ratio = Number.parseFloat(trimmed);
23280
+ return Number.isFinite(ratio) && ratio > 0 ? ratio : void 0;
23281
+ }
23282
+ const px = parsePx(trimmed);
23283
+ if (px > 0 && fontSizePx > 0) {
23284
+ return px / fontSizePx;
23285
+ }
23286
+ return void 0;
23287
+ }
23288
+ function getParagraphStyle(p) {
23289
+ const style = window.getComputedStyle(p);
23290
+ const fontSize = parsePx(style.fontSize) || 14;
23291
+ const rowFlex = convertTextAlignToRowFlex(p);
23292
+ const rowMargin = parseLineHeightAsRowMargin(style.lineHeight, fontSize);
23293
+ const textIndent = parsePx(style.textIndent);
23294
+ const marginLeft = parsePx(style.marginInlineStart || style.marginLeft);
23295
+ const marginRight = parsePx(style.marginInlineEnd || style.marginRight);
23296
+ const marginTop = parsePx(style.marginTop);
23297
+ let minHeight = parsePx(style.minHeight);
23298
+ if (!minHeight && fontSize) {
23299
+ minHeight = fontSize;
23300
+ }
23301
+ let whiteSpace = style.whiteSpace;
23302
+ if (!whiteSpace || whiteSpace === "normal") {
23303
+ const span = p.querySelector("span");
23304
+ if (span) {
23305
+ const spanWhiteSpace = window.getComputedStyle(span).whiteSpace;
23306
+ if (spanWhiteSpace && spanWhiteSpace !== "normal") {
23307
+ whiteSpace = spanWhiteSpace;
23308
+ }
23309
+ }
23310
+ }
23311
+ if ((!whiteSpace || whiteSpace === "normal") && p.closest(".docx, .docx-wrapper")) {
23312
+ whiteSpace = "pre-wrap";
23313
+ }
23314
+ const result = {};
23315
+ if (rowFlex !== RowFlex.LEFT)
23316
+ result.rowFlex = rowFlex;
23317
+ if (rowMargin !== void 0)
23318
+ result.rowMargin = rowMargin;
23319
+ if (textIndent)
23320
+ result.textIndent = textIndent;
23321
+ if (marginLeft)
23322
+ result.marginLeft = marginLeft;
23323
+ if (marginRight)
23324
+ result.marginRight = marginRight;
23325
+ if (marginTop)
23326
+ result.marginTop = marginTop;
23327
+ if (minHeight)
23328
+ result.minHeight = minHeight;
23329
+ if (whiteSpace && whiteSpace !== "normal") {
23330
+ result.whiteSpace = whiteSpace;
23331
+ }
23332
+ return result;
23333
+ }
23334
+ function applyParagraphStyle(elements, paragraphStyle) {
23335
+ if (!elements.length)
23336
+ return;
23337
+ const keys = Object.keys(paragraphStyle);
23338
+ if (!keys.length)
23339
+ return;
23340
+ for (const el of elements) {
23341
+ Object.assign(el, paragraphStyle);
23342
+ }
23343
+ }
23344
+ function styleFromComputed(el) {
23345
+ var _a, _b;
23346
+ const style = window.getComputedStyle(el);
23347
+ const element = {
23348
+ color: style.color,
23349
+ bold: Number(style.fontWeight) > 500,
23350
+ italic: style.fontStyle.includes("italic"),
23351
+ size: Math.floor(parsePx(style.fontSize)) || void 0,
23352
+ font: (_b = (_a = style.fontFamily) == null ? void 0 : _a.split(",")[0]) == null ? void 0 : _b.replace(/['"]/g, "").trim()
23353
+ };
23354
+ if (style.backgroundColor && style.backgroundColor !== "rgba(0, 0, 0, 0)") {
23355
+ element.highlight = style.backgroundColor;
23356
+ }
23357
+ if (style.textDecorationLine.includes("underline")) {
23358
+ element.underline = true;
23359
+ }
23360
+ if (style.textDecorationLine.includes("line-through")) {
23361
+ element.strikeout = true;
23362
+ }
23363
+ const letterSpacing = parsePx(style.letterSpacing);
23364
+ if (letterSpacing)
23365
+ element.letterSpacing = letterSpacing;
23366
+ if (style.whiteSpace && style.whiteSpace !== "normal") {
23367
+ element.whiteSpace = style.whiteSpace;
23368
+ }
23369
+ const spanMinHeight = parsePx(style.minHeight);
23370
+ if (spanMinHeight)
23371
+ element.minHeight = spanMinHeight;
23372
+ return element;
23373
+ }
23374
+ function parseTextFromNode(node) {
23375
+ if (node.nodeType === 3) {
23376
+ const text = node.textContent || "";
23377
+ if (!text)
23378
+ return [];
23379
+ const parent = node.parentElement;
23380
+ const base = parent ? styleFromComputed(parent) : {};
23381
+ return splitText(text).map((ch) => ({
23382
+ value: ch,
23383
+ ...base
23384
+ }));
23385
+ }
23386
+ if (node.nodeType !== 1)
23387
+ return [];
23388
+ const el = node;
23389
+ const name = el.nodeName;
23390
+ if (name === "BR") {
23391
+ return [{ value: WRAP }];
23392
+ }
23393
+ if (name === "IMG") {
23394
+ return parseImage(el);
23395
+ }
23396
+ if (name === "A") {
23397
+ const value = el.innerText;
23398
+ if (!value)
23399
+ return [];
23400
+ return [
23401
+ {
23402
+ type: ElementType.HYPERLINK,
23403
+ value: "",
23404
+ valueList: splitText(value).map((ch) => ({ value: ch })),
23405
+ url: el.href
23406
+ }
23407
+ ];
23408
+ }
23409
+ const result = [];
23410
+ el.childNodes.forEach((child) => {
23411
+ result.push(...parseTextFromNode(child));
23412
+ });
23413
+ return result;
23414
+ }
23415
+ function parseImage(img) {
23416
+ const { src, width, height } = img;
23417
+ const w = width || parsePx(window.getComputedStyle(img).width);
23418
+ const h = height || parsePx(window.getComputedStyle(img).height);
23419
+ if (!src || !w || !h)
23420
+ return [];
23421
+ const element = {
23422
+ width: w,
23423
+ height: h,
23424
+ value: src,
23425
+ type: ElementType.IMAGE,
23426
+ rowFlex: convertTextAlignToRowFlex(img.parentElement || img),
23427
+ verticalAlign: "text-top"
23428
+ };
23429
+ applyImageWrapFromDom(img, element);
23430
+ const formInputAttr = img.getAttribute("data-form-input");
23431
+ if (formInputAttr) {
23432
+ try {
23433
+ element.formInput = JSON.parse(formInputAttr);
23434
+ } catch {
23435
+ }
23436
+ }
23437
+ return [element];
23438
+ }
23439
+ function parseParagraph(p) {
23440
+ const paragraphStyle = getParagraphStyle(p);
23441
+ const children = [];
23442
+ p.childNodes.forEach((child) => {
23443
+ children.push(...parseTextFromNode(child));
23444
+ });
23445
+ if (!children.length) {
23446
+ return [{ value: WRAP, ...paragraphStyle }];
23447
+ }
23448
+ applyParagraphStyle(children, paragraphStyle);
23449
+ children.push({ value: WRAP, ...paragraphStyle });
23450
+ return children;
23451
+ }
23452
+ function parseTable(table, innerWidth) {
23453
+ var _a;
23454
+ const element = {
23455
+ type: ElementType.TABLE,
23456
+ value: WRAP,
23457
+ colgroup: [],
23458
+ trList: []
23459
+ };
23460
+ const colElements = table.querySelectorAll("colgroup col");
23461
+ table.querySelectorAll("tr").forEach((trElement) => {
23462
+ const trHeight = parsePx(window.getComputedStyle(trElement).height) || 0;
23463
+ const tr = {
23464
+ height: trHeight,
23465
+ minHeight: trHeight,
23466
+ tdList: []
23467
+ };
23468
+ trElement.querySelectorAll("th,td").forEach((tdElement) => {
23469
+ const tableCell = tdElement;
23470
+ const valueList = parseBlockChildren(tableCell, innerWidth);
23471
+ const td = {
23472
+ colspan: tableCell.colSpan,
23473
+ rowspan: tableCell.rowSpan,
23474
+ value: valueList,
23475
+ verticalAlign: window.getComputedStyle(tdElement).verticalAlign,
23476
+ width: parsePx(window.getComputedStyle(tdElement).width)
23477
+ };
23478
+ if (tableCell.style.backgroundColor) {
23479
+ td.backgroundColor = tableCell.style.backgroundColor;
23480
+ }
23481
+ tr.tdList.push(td);
23482
+ });
23483
+ element.trList.push(tr);
23484
+ });
23485
+ if (!element.trList.length)
23486
+ return [];
23487
+ const tdCount = element.trList[0].tdList.reduce((pre, cur) => pre + cur.colspan, 0);
23488
+ const defaultColWidth = Math.ceil(innerWidth / Math.max(tdCount, 1));
23489
+ for (let i = 0; i < tdCount; i++) {
23490
+ const colWidth = (_a = colElements[i]) == null ? void 0 : _a.getAttribute("width");
23491
+ element.colgroup.push({
23492
+ width: colWidth ? parseFloat(colWidth) : defaultColWidth
23493
+ });
23494
+ }
23495
+ return [element];
23496
+ }
23497
+ function parseBlockChildren(root, innerWidth) {
23498
+ const result = [];
23499
+ root.childNodes.forEach((node) => {
23500
+ var _a;
23501
+ if (node.nodeType !== 1) {
23502
+ if (node.nodeType === 3 && ((_a = node.textContent) == null ? void 0 : _a.trim())) {
23503
+ result.push(...parseTextFromNode(node));
23504
+ result.push({ value: WRAP });
23505
+ }
23506
+ return;
23507
+ }
23508
+ const el = node;
23509
+ const name = el.nodeName;
23510
+ if (name === "P" || /^H[1-6]$/.test(name)) {
23511
+ result.push(...parseParagraph(el));
23512
+ } else if (name === "TABLE") {
23513
+ result.push(...parseTable(el, innerWidth));
23514
+ } else if (name === "IMG") {
23515
+ result.push(...parseImage(el));
23516
+ result.push({ value: WRAP });
23517
+ } else if (name === "BR") {
23518
+ result.push({ value: WRAP });
23519
+ } else if (name === "DIV" && el.getAttribute("data-type") === ElementType.PAGE_BREAK) {
23520
+ result.push({
23521
+ type: ElementType.PAGE_BREAK,
23522
+ value: WRAP
23523
+ });
23524
+ } else if (name === "DIV" && el.getAttribute("data-ce-clear") === "both") {
23525
+ return;
23526
+ } else if (name === "ARTICLE" || name === "DIV" || name === "SECTION") {
23527
+ result.push(...parseBlockChildren(el, innerWidth));
23528
+ } else {
23529
+ const nested = parseBlockChildren(el, innerWidth);
23530
+ if (nested.length) {
23531
+ result.push(...nested);
23532
+ } else {
23533
+ const inline = parseTextFromNode(el);
23534
+ if (inline.length) {
23535
+ result.push(...inline);
23536
+ result.push({ value: WRAP });
23537
+ }
23538
+ }
23539
+ }
23540
+ });
23541
+ return result;
23542
+ }
23543
+ function parseSectionContent(section, innerWidth) {
23544
+ const article = section.querySelector("article") || section;
23545
+ return parseBlockChildren(article, innerWidth);
23546
+ }
23547
+ function parseDocxDom(container) {
23548
+ const sections = Array.from(container.querySelectorAll("section.docx"));
23549
+ const exportPages = Array.from(container.querySelectorAll(".ce-export-page"));
23550
+ const targets = sections.length ? sections : exportPages.length ? exportPages : [container];
23551
+ const paper = parseDocxPaperMeta(targets[0]);
23552
+ const contentWidth = Math.max(paper.width - paper.margins[1] - paper.margins[3], 1);
23553
+ const main = [];
23554
+ targets.forEach((section, index2) => {
23555
+ const sectionElements = parseSectionContent(section, contentWidth);
23556
+ if (sectionElements.length) {
23557
+ main.push(...sectionElements);
23558
+ }
23559
+ if (index2 < targets.length - 1) {
23560
+ main.push({
23561
+ type: ElementType.PAGE_BREAK,
23562
+ value: WRAP
23563
+ });
23564
+ }
23565
+ });
23566
+ return { paper, main };
23567
+ }
22768
23568
  function convertPxToPaperSize(width, height) {
22769
23569
  if (width === 1125 && height === 1593) {
22770
23570
  return {
@@ -24033,11 +24833,37 @@ class CommandAdapt {
24033
24833
  const headerElementList = this.draw.getHeaderElementList();
24034
24834
  const mainElementList = this.draw.getOriginalMainElementList();
24035
24835
  const footerElementList = this.draw.getFooterElementList();
24036
- return {
24037
- header: convertToXHTML(createDomFromElementList(headerElementList, options)),
24038
- main: convertToXHTML(createDomFromElementList(mainElementList, options)),
24039
- footer: convertToXHTML(createDomFromElementList(footerElementList, options))
24836
+ const headerPositionList = this.draw.getHeader().getPositionList();
24837
+ const mainPositionList = this.position.getOriginalMainPositionList();
24838
+ const footerPositionList = this.draw.getFooter().getPositionList();
24839
+ const { scale } = options;
24840
+ attachHtmlFloatOffset(headerElementList, headerPositionList, scale);
24841
+ attachHtmlFloatOffset(mainElementList, mainPositionList, scale);
24842
+ attachHtmlFloatOffset(footerElementList, footerPositionList, scale);
24843
+ const wrapPaper = (dom) => {
24844
+ const { width, height, margins } = options;
24845
+ const wrapper = document.createElement("div");
24846
+ wrapper.className = "ce-export-page";
24847
+ wrapper.style.width = `${width}px`;
24848
+ wrapper.style.minHeight = `${height}px`;
24849
+ wrapper.style.padding = `${margins[0]}px ${margins[1]}px ${margins[2]}px ${margins[3]}px`;
24850
+ wrapper.style.boxSizing = "border-box";
24851
+ wrapper.style.position = "relative";
24852
+ wrapper.style.background = "#fff";
24853
+ while (dom.firstChild) {
24854
+ wrapper.append(dom.firstChild);
24855
+ }
24856
+ return convertToXHTML(wrapper, { keepRoot: true });
24040
24857
  };
24858
+ try {
24859
+ return {
24860
+ header: wrapPaper(createDomFromElementList(headerElementList, options)),
24861
+ main: wrapPaper(createDomFromElementList(mainElementList, options)),
24862
+ footer: wrapPaper(createDomFromElementList(footerElementList, options))
24863
+ };
24864
+ } finally {
24865
+ clearHtmlFloatOffset();
24866
+ }
24041
24867
  }
24042
24868
  getText() {
24043
24869
  const headerElementList = this.draw.getHeaderElementList();
@@ -24652,6 +25478,15 @@ class CommandAdapt {
24652
25478
  footer: getElementList(footer)
24653
25479
  });
24654
25480
  }
25481
+ setHtmlDocx(payload) {
25482
+ const { container, margins } = payload;
25483
+ if (!container)
25484
+ return;
25485
+ const { paper, main } = parseDocxDom(container);
25486
+ this.options.margins = margins != null ? margins : paper.margins;
25487
+ this.draw.setPaperSize(paper.width, paper.height);
25488
+ this.setValue({ main });
25489
+ }
24655
25490
  setGroup() {
24656
25491
  const isReadonly = this.draw.isReadonly();
24657
25492
  if (isReadonly)
@@ -26239,5 +27074,5 @@ class Editor {
26239
27074
  Reflect.set(window, "editor", this);
26240
27075
  }
26241
27076
  }
26242
- export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlComponent, ControlIndentation, ControlState, ControlType, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, INTERNAL_SHORTCUT_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WatermarkType, WordBreak, createDomFromElementList, Editor as default, formCheckboxPropertiesConfigDialog, formImagePropertiesConfigDialog, formInputPropertiesConfigDialog, formRadioPropertiesConfigDialog, formRiskCopyConfigDialog, formSealConfigDialog, formSignatureConfigDialog, getElementListByHTML, getTextFromElementList, splitText };
27077
+ export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlComponent, ControlIndentation, ControlState, ControlType, Dialog, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, INTERNAL_SHORTCUT_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WatermarkType, WordBreak, createDomFromElementList, Editor as default, formCheckboxPropertiesConfigDialog, formImagePropertiesConfigDialog, formInputPropertiesConfigDialog, formRadioPropertiesConfigDialog, formRiskCopyConfigDialog, formSealConfigDialog, formSignatureConfigDialog, getElementListByHTML, getTextFromElementList, splitText };
26243
27078
  //# sourceMappingURL=canvas-editor.es.js.map