diff --git a/examples/html/ddei-editor.umd.cjs b/examples/html/ddei-editor.umd.cjs new file mode 100644 index 0000000..116c1fa --- /dev/null +++ b/examples/html/ddei-editor.umd.cjs @@ -0,0 +1,84111 @@ +var __defProp3 = Object.defineProperty; +var __defNormalProp3 = (obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField3 = (obj, key, value) => { + __defNormalProp3(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +(function(global2, factory) { + typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("vue")) : typeof define === "function" && define.amd ? define(["exports", "vue"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["ddei-editor"] = {}, global2.Vue)); +})(this, function(exports, vue) { + var _a2; + "use strict"; + var __vite_style__ = document.createElement("style"); + __vite_style__.textContent = `/**以下为菜单的样式 */ +.ddei-editor-menu-dialog[data-v-1cde0d47] { + width: 200px; + background-color: var(--panel-background); + font-size: 13px; + color: var(--panel-title); + display: none; + position: absolute; + font-weight: bolder; + z-index: 999; + border-radius: 4px; + border: 0.3px solid var(--panel-border); + box-shadow: -3px 3px 3px hsla(0, 0%, 0%, 0.25); +} +.ddei-editor-menu-dialog-item[data-v-1cde0d47] { + height: 34px; + width: 100%; + display: flex; +} +.ddei-editor-menu-dialog-item[data-v-1cde0d47]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-editor-menu-dialog-item-icon[data-v-1cde0d47] { + flex: 0 0 34px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-menu-dialog-item-icon .icon[data-v-1cde0d47] { + width: 22px; + height: 22px; + margin: 0px 3px 0px 3px; +} +.ddei-editor-menu-dialog-item-content[data-v-1cde0d47] { + flex: 1; + display: flex; + justify-content: start; + align-items: center; +} +.ddei-editor-menu-dialog-item-desc[data-v-1cde0d47] { + flex: 0 0 34px; +} +.ddei-editor-menu-dialog-item-hr[data-v-1cde0d47] { + border: 0.5px solid var(--panel-border); + width: 93%; + margin: 1px auto; +} +.ddei-core-panel-topmenu[data-v-fefbc1f9] { + background: var(--topmenu-background); +} +.ddei-core-panel-topmenu-quickbox[data-v-fefbc1f9] { + background-color: var(--topmenu-header); + width: 100%; + height: 103px; + display: flex; +} +.icon[data-v-ea668126] { + color: var(--icon); +} +.ddei-core-panel-toolbox[data-v-ea668126] { + user-select: none; + text-align: center; + display: flex; + flex-flow: column; + height: 100%; + /**以下为收折框 */ +} +.ddei-core-panel-toolbox-header[data-v-ea668126] { + background: var(--toolbox-header); + border-bottom: 1px solid var(--toolbox-header); + flex: 0 0 30px; + display: flex; + justify-content: center; + align-items: center; + padding: 0px 8px; +} +.ddei-core-panel-toolbox-header-morecontrol[data-v-ea668126] { + display: flex; + justify-content: center; + align-items: center; + flex: 0 1 100px; +} +.ddei-core-panel-toolbox-header-morecontrol .header-3[data-v-ea668126] { + flex: 0 1 8px; +} +.ddei-core-panel-toolbox-header-morecontrol .header-4[data-v-ea668126] { + font-size: 16px; + flex: 0 1 70px; + font-weight: bold; + color: var(--toolbox-title); +} +.ddei-core-panel-toolbox-header-morecontrol[data-v-ea668126]:hover { + background-color: var(--toolbox-hover); + cursor: pointer; +} +.ddei-core-panel-toolbox-header .header-1[data-v-ea668126] { + flex: 0 1 17px; +} +.ddei-core-panel-toolbox-header .header-2[data-v-ea668126] { + font-size: 14px; +} +.ddei-core-panel-toolbox-header .header-7[data-v-ea668126] { + font-size: 18px; +} +.ddei-core-panel-toolbox-header .header-7[data-v-ea668126]:hover { + background-color: var(--toolbox-hover); + cursor: pointer; +} +.ddei-core-panel-toolbox-header .icon1[data-v-ea668126] { + font-size: 23px; +} +.ddei-core-panel-toolbox-header .icon2[data-v-ea668126] { + font-size: 16px; +} +.ddei-core-panel-toolbox-searchbox[data-v-ea668126] { + flex: 0 0 52px; + display: flex; + justify-content: center; + align-items: center; + background: var(--toolbox-background); +} +.ddei-core-panel-toolbox-searchbox-group[data-v-ea668126] { + flex: 1; + margin: 0 25px; + height: 32px; + background: var(--toolbox-header); + border: 1px solid var(--toolbox-header); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-toolbox-searchbox-group .icon[data-v-ea668126] { + font-size: 24px; + margin: 0 6px; +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126] { + flex: 1 1 140px; + height: 28px; + width: 100%; + border: transparent; + outline: none; + background: transparent; + font-size: 16px; + font-weight: 400; + color: var(--toolbox-title); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]::placeholder { + /* Chrome, Firefox, Opera, Safari 10.1+ */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]::-webkit-input-placeholder { + /* WebKit browsers,webkit内核浏览器 */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]:-ms-input-placeholder { + /* Internet Explorer 10-11 */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-searchbox-group .input[data-v-ea668126]::-ms-input-placeholder { + /* Microsoft Edge */ + color: var(--placeholder); +} +.ddei-core-panel-toolbox-groups[data-v-ea668126] { + text-align: center; + background: var(--toolbox-background, --panel-background); + overflow-y: auto; + display: flex; + flex-flow: column; + flex: 1 1 auto; +} +.ddei-core-panel-toolbox-groups-group[data-v-ea668126] { + text-align: center; + margin-bottom: 1px; +} +.ddei-core-panel-toolbox-groups-group-box[data-v-ea668126] { + display: flex; + height: 35px; + background: var(--toolbox-header); + user-select: none; + justify-content: center; + align-items: center; +} +.ddei-core-panel-toolbox-groups-group-box[data-v-ea668126]:hover { + background-color: var(--toolbox-header); +} +.ddei-core-panel-toolbox-groups-group-box[data-v-ea668126]:active { + background-color: var(--toolbox-header); +} +.ddei-core-panel-toolbox-groups-group-box .title[data-v-ea668126] { + flex: 1; + color: var(--toolbox-title); + text-align: left; + margin-left: 25px; + font-size: 16px; + font-weight: bold; +} +.ddei-core-panel-toolbox-groups-group-box .close[data-v-ea668126] { + margin-right: 10px; + font-size: 18px; +} +.ddei-core-panel-toolbox-groups-group-box .close[data-v-ea668126]:hover { + color: var(--toolbox-title) hover; + cursor: pointer; +} +.ddei-core-panel-toolbox-groups-group-itempanel[data-v-ea668126] { + display: flex; + flex-flow: row wrap; + background: var(--toolbox-background); + padding: 15px 15px 15px 15px; +} +.ddei-core-panel-toolbox-groups-group-itempanel-item[data-v-ea668126] { + flex: 0 0 62px !important; + height: 60px; + margin: 15px 0px; + display: flex; + overflow: hidden; + justify-content: center; + align-items: center; + flex-flow: column; +} +.ddei-core-panel-toolbox-groups-group-itempanel-item[data-v-ea668126]:hover { + background: var(--toolbox-control-hover); + outline: var(--toolbox-control-hover-outline); + cursor: all-scroll; +} +.ddei-core-panel-toolbox-groups-group-itempanel-item .text[data-v-ea668126] { + white-space: nowrap; + text-align: center; + font-size: 13px; + font-weight: 400; + color: var(--toolbox-control-title); +} +.ddei-core-panel-toolbox-groups-group-itempanel-item .icon[data-v-ea668126] { + width: 90%; + height: 90%; + object-fit: contain; +} +.ddei-core-panel-toolbox-groups-group--expanded[data-v-ea668126] { + background-color: var(--toolbox-header); +} +.ddei-editor-qcview[data-v-f305cac8] { + height: 16px; + background: var(--panel-header); + border: 0.5pt solid var(--panel-border); + display: flex; + position: relative; +} +.ddei-editor-qcview-type[data-v-f305cac8] { + flex: 0 0 30px; + height: 14px; + width: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-qcview-type[data-v-f305cac8]:hover { + background: var(--panel-hover); + cursor: pointer; +} +.ddei-editor-qcview-type img[data-v-f305cac8] { + display: block; + float: left; +} +.ddei-editor-qcview-color[data-v-f305cac8] { + flex: 1 1 15px; + height: 13px; + margin-left: 2px; + margin-top: 1px; +} +.ddei-editor-qcview-color[data-v-f305cac8]:hover { + outline: 0.5px solid var(--dot); + box-sizing: border-box; + outline-offset: 0.5px; +} +.ddei-editor-qcview-color--disabled[data-v-f305cac8] { + background-color: var(--panel-disabled) !important; +} +.propertyview[data-v-156d5ed6] { + flex-direction: column; + background: var(--panel-background); + display: flex; + user-select: none; + height: 100%; +} +.propertyview-header[data-v-156d5ed6] { + background: var(--panel-header); + border-bottom: 1px solid #D5D5DF; + flex: 0 0 30px; + display: flex; + justify-content: center; + align-items: center; +} +.propertyview-header .header-7[data-v-156d5ed6] { + font-size: 18px; + margin-left: 8px; + margin-right: 4px; +} +.propertyview-header .header-7-expand[data-v-156d5ed6] { + font-size: 18px; + margin-left: 4px; + margin-right: 4px; +} +.propertyview-header .ding[data-v-156d5ed6] { + font-size: 20px; + margin-right: 4px; +} +.propertyview .content[data-v-156d5ed6] { + flex: 1; + display: flex; +} +.propertyview-subgroup[data-v-156d5ed6] { + flex: 1; + display: flex; + flex-flow: column; +} +.propertyview-subgroup-tabtitle[data-v-156d5ed6] { + flex: 0 0 46px; + display: flex; + border-bottom: 1pt solid #ebebef; + color: grey; +} +.propertyview-subgroup-tabtitle-item[data-v-156d5ed6] { + flex: 1; + text-align: center; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + display: flex; + justify-content: center; + align-items: center; +} +.propertyview-subgroup-tabtitle-item--selected[data-v-156d5ed6] { + flex: 1; + text-align: center; + font-size: 16px; + background-color: var(--background); + font-weight: 400; + color: var(--dot); + border-bottom: 4px solid var(--dot); + display: flex; + justify-content: center; + align-items: center; +} +.propertyview-subgroup-tabtitle-item[data-v-156d5ed6]:hover { + color: var(--dot); + cursor: pointer; +} +.propertyview-subgroup-tabpanel[data-v-156d5ed6] { + text-align: center; + background: var(--panel-background); + overflow-y: auto; + display: flex; + flex-flow: column; + flex: 1 1 auto; + color: var(--panel-title); + font-size: 15px; + height: 100px; +} +.propertyview-subgroup-tabpanel span[data-v-156d5ed6] { + color: red; +} +.propertyview-subgroup-tabpanel-editors-column[data-v-156d5ed6] { + display: flex; + flex-flow: column; + margin-top: 10px; + margin-bottom: 10px; +} +.propertyview-subgroup-tabpanel-editors-column .title[data-v-156d5ed6] { + background: var(--panel-background); + color: var(--panel-title); + text-align: left; + padding-left: 10px; + margin: auto 0; + margin-bottom: 5px; + font-size: 15px; +} +.propertyview-subgroup-tabpanel-editors-column .editor[data-v-156d5ed6] { + text-align: left; + padding-left: 10px; +} +.propertyview-subgroup-tabpanel-editors-row[data-v-156d5ed6] { + display: flex; + margin-top: 10px; + margin-bottom: 10px; +} +.propertyview-subgroup-tabpanel-editors-row .title[data-v-156d5ed6] { + text-align: left; + padding-left: 10px; + flex: 0 0 100px; + white-space: nowrap; + /*文字不换行*/ + overflow: hidden; + /*超出部分隐藏*/ + text-overflow: ellipsis; + /*溢出部分用省略号表示*/ + margin: auto 0; + font-size: 15px; +} +.propertyview-subgroup-tabpanel-editors-row .editor[data-v-156d5ed6] { + text-align: center; + flex: 1; +} +.propertyview .empty-value[data-v-156d5ed6] { + filter: opacity(50%); +} +.propertyview-groupview[data-v-156d5ed6] { + flex: 0 0 28px; + display: flex; + flex-flow: column; + border-left: 1px solid #E0E3E9; +} +.propertyview-groupview-items[data-v-156d5ed6] { + flex: 1; + display: flex; + flex-flow: column; +} +.propertyview-groupview-items-item[data-v-156d5ed6] { + flex: 0 0 16px; + margin-top: 8px; + margin-bottom: 8px; + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; +} +.propertyview-groupview-items-item--selected[data-v-156d5ed6] { + flex: 0 0 16px; + margin-top: 8px; + margin-bottom: 8px; + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; +} +.propertyview-groupview-items-item--selected > svg[data-v-156d5ed6] { + color: #1F72FF; +} +.propertyview--disabled[data-v-156d5ed6] { + pointer-events: none !important; + user-select: none !important; + filter: opacity(70%); +} +.propertyview--disabled .propertyview-subgroup-tabpanel[data-v-156d5ed6] { + pointer-events: none !important; + user-select: none !important; + filter: opacity(70%) !important; +} +.icon[data-v-cf0859cc] { + color: var(--icon); +} +.ddei-core-panel-openfilesview[data-v-cf0859cc] { + flex: 0 0 30.5px; + background: var(--panel-background); + border-top: 1px solid var(--panel-border); + border-bottom: 1px solid var(--panel-border); + display: flex; + user-select: none; + align-items: center; +} +.ddei-core-panel-openfilesview-expandbox[data-v-cf0859cc] { + flex: 0 0 28px; + display: flex; + justify-content: center; + align-items: center; + height: 100%; +} +.ddei-core-panel-openfilesview-expandbox[data-v-cf0859cc]:hover { + background: var(--panel-hover); + cursor: pointer; +} +.ddei-core-panel-openfilesview-expandbox .icon[data-v-cf0859cc] { + font-size: 18px; +} +.ddei-core-panel-openfilesview .addfile[data-v-cf0859cc] { + margin: 0px 10px; + font-size: 24px; +} +.ddei-core-panel-openfilesview-movebox[data-v-cf0859cc] { + flex: 0 0 25px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-openfilesview-movebox[data-v-cf0859cc]:hover { + background: var(--panel-hover); + cursor: pointer; +} +.ddei-core-panel-openfilesview-movebox img[data-v-cf0859cc] { + filter: brightness(60%); + margin-top: 4px; +} +.ddei-core-panel-openfilesview-item[data-v-cf0859cc] { + height: 100%; + flex: 0 0 195px; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--panel-background); + border-right: 1px solid var(--panel-hover); +} +.ddei-core-panel-openfilesview-item .icon[data-v-cf0859cc] { + font-size: 16px; + flex: 0 0 42px; + text-align: center; +} +.ddei-core-panel-openfilesview-item .close[data-v-cf0859cc] { + font-size: 18px; + flex: 0 0 24px; + margin-left: -5px; +} +.ddei-core-panel-openfilesview-item .textcontent[data-v-cf0859cc] { + font-size: 15px; + flex: 0 0 130px; + width: 130px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-openfilesview-item .textcontent .text[data-v-cf0859cc] { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: var(--panel-title); + flex: 1; + font-size: 16px; + font-weight: 400; +} +.ddei-core-panel-openfilesview-item span .dirty[data-v-cf0859cc] { + color: red; + width: 10px; + flex: 0 0 10px; + font-size: 18px; + text-align: right; +} +.ddei-core-panel-openfilesview-item[data-v-cf0859cc]:hover { + background: var(--panel-hover); +} +.ddei-core-panel-openfilesview-item--selected[data-v-cf0859cc] { + background: var(--panel-selected); +} +.ddei-core-panel-openfilesview-item--selected .textcontent .text[data-v-cf0859cc] { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + flex: 1; + color: var(--panel-title); +} +.ddei-editor-canvasview { + flex: 1; + overflow: hidden; + position: relative; + background-color: var(--panel-header); +} +.ddei-editor-canvasview-contentlayer { + overflow: hidden; + width: 100%; + height: 100%; + z-index: 50; + position: absolute; + pointer-events: none; +} +.ddei-core-panel-bottommenu[data-v-5ec138cc] { + height: 30px; + display: flex; + color: var(--text); + background: var(--background); + justify-content: center; + align-items: center; + font-size: 16px; +} +.ddei-core-panel-eimport[data-v-9c97ea48] { + height: 103px; + width: 260px; + flex: 0 1 260px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-eimport .content[data-v-9c97ea48] { + display: flex; + justify-content: center; + align-items: center; + padding: 0px 4px; +} +.ddei-core-panel-eimport .content .part[data-v-9c97ea48] { + flex: 1; + padding: 0px 2px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-eimport .content .part .button-v[data-v-9c97ea48] { + flex: 1; + height: 50px; + border-radius: 4px; + display: flex; + flex-direction: column; + align-items: center; +} +.ddei-core-panel-eimport .content .part .button-v[data-v-9c97ea48]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-eimport .content .part .button-v-selected[data-v-9c97ea48] { + flex: 1; + height: 50px; + background-color: var(--panel-selected); + border-radius: 4px; + display: flex; + flex-direction: column; + align-items: center; +} +.ddei-core-panel-eimport .content .part .button-v-selected .text[data-v-9c97ea48] { + color: var(--panel-title-selected); +} +.ddei-core-panel-eimport .content .part .button-v-disabled[data-v-9c97ea48] { + flex: 1; + height: 50px; + cursor: not-allowed; + display: flex; + flex-direction: column; + align-items: center; + background-color: var(--panel-disabled); +} +.ddei-core-panel-eimport .content .part .button-v-disabled > span[data-v-9c97ea48] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-eimport .content .part .button-v-disabled .text[data-v-9c97ea48] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-eimport .content .part .text[data-v-9c97ea48] { + flex: 0 0 20px; + white-space: nowrap; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-eimport .tail[data-v-9c97ea48] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-fileinfo[data-v-b1753b91] { + height: 103px; + width: 230px; + flex: 0 1 230px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-fileinfo .content[data-v-b1753b91] { + display: flex; + justify-content: center; + align-items: center; + border-right: 1px solid var(--panel-border); + padding: 0px 4px; +} +.ddei-core-panel-fileinfo .content .part[data-v-b1753b91] { + padding: 0px 2px; + flex: 1; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-fileinfo .content .part .button-v[data-v-b1753b91] { + flex: 1; + height: 50px; + display: flex; + flex-direction: column; + align-items: center; +} +.ddei-core-panel-fileinfo .content .part .button-v .text[data-v-b1753b91] { + white-space: nowrap; + flex: 0 0 13px; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-fileinfo .content .part .button-v[data-v-b1753b91]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-fileinfo .content .part .button-h[data-v-b1753b91] { + flex: 1; + display: flex; + flex-direction: column; + margin-top: -2px; +} +.ddei-core-panel-fileinfo .content .part .button-h .button[data-v-b1753b91] { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + border-radius: 4px; +} +.ddei-core-panel-fileinfo .content .part .button-h .button .icon[data-v-b1753b91] { + font-size: 28px; + flex: 1; +} +.ddei-core-panel-fileinfo .content .part .button-h .button .text[data-v-b1753b91] { + white-space: nowrap; + flex: 0 0 25px; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-fileinfo .content .part .button-h .button[data-v-b1753b91]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-fileinfo .tail[data-v-b1753b91] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-fileoperate[data-v-891d9231] { + width: 150px; + height: 90px; + border-right: 1px solid #e0e0e0; + grid-template-rows: 30px 30px 20px; + grid-template-columns: 1fr; + display: grid; + gap: 4px; + padding-right: 4px; +} +.ddei-core-panel-fileoperate-item[data-v-891d9231] { + margin: auto; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 4px; +} +.ddei-core-panel-fileoperate-item-text[data-v-891d9231] { + text-align: center; + font-size: 12px; + grid-column: 1/5; + color: var(--panel-title); +} +.ddei-core-panel-fileoperate-item-box[data-v-891d9231] { + width: 30px; + height: 50px; + color: var(--panel-title); + border-radius: 4px; + font-size: 12px; + display: grid; + grid-template-rows: 25px 25px 10px; + grid-template-columns: 1fr; +} +.ddei-core-panel-fileoperate-item-box div[data-v-891d9231] { + margin: auto; +} +.ddei-core-panel-fileoperate-item-box img[data-v-891d9231] { + filter: brightness(45%) drop-shadow(0.2px 0px 0.2px var(--panel-title)); + width: 16px; + height: 16px; + margin: auto; +} +.ddei-core-panel-fileoperate-item-box[data-v-891d9231]:hover { + background-color: var(--panel-hover); + border-radius: 4px; +} +.ddei-core-panel-fontandtext[data-v-84f4d012] { + height: 103px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-fontandtext .content[data-v-84f4d012] { + display: flex; + flex-direction: column; + padding-left: 16px; + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-fontandtext .content .buttons[data-v-84f4d012] { + flex: 1; +} +.ddei-core-panel-fontandtext .content .buttons > div[data-v-84f4d012] { + float: left; + margin-right: 10px; +} +.ddei-core-panel-fontandtext .content .buttons .mg16[data-v-84f4d012] { + margin-right: 3px; +} +.ddei-core-panel-fontandtext .content .buttons .mg165[data-v-84f4d012] { + margin-right: 5px; +} +.ddei-core-panel-fontandtext .content .buttons .mg14[data-v-84f4d012] { + margin-right: 3px; + margin-left: -3px; +} +.ddei-core-panel-fontandtext .content .buttons .mg17[data-v-84f4d012] { + margin-right: 8px; +} +.ddei-core-panel-fontandtext .content .buttons .b1[data-v-84f4d012] { + width: 152px; + margin-right: 0px; +} +.ddei-core-panel-fontandtext .content .buttons .b2[data-v-84f4d012] { + width: 64px; +} +.ddei-core-panel-fontandtext .content .buttons .b4[data-v-84f4d012] { + margin-right: 33px; +} +.ddei-core-panel-fontandtext .content .buttons .b5[data-v-84f4d012] { + margin-top: 1px; + margin-right: 17px; +} +.ddei-core-panel-fontandtext .content .buttons .b6[data-v-84f4d012] { + margin-top: 1px; + margin-right: 15px; +} +.ddei-core-panel-fontandtext .tail[data-v-84f4d012] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-operate[data-v-fc2f1000] { + height: 103px; + width: 230px; + flex: 0 1 230px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-operate .content[data-v-fc2f1000] { + display: flex; + justify-content: center; + align-items: center; + border-right: 1px solid var(--panel-border); + padding: 0px 4px; +} +.ddei-core-panel-operate .content .part[data-v-fc2f1000] { + padding: 0px 2px; + flex: 1; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-operate .content .part .button-v[data-v-fc2f1000] { + display: flex; + flex-direction: column; + flex: 1; + height: 50px; + border-radius: 4px; + align-items: center; +} +.ddei-core-panel-operate .content .part .button-v[data-v-fc2f1000]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-operate .content .part .button-v--selected[data-v-fc2f1000] { + flex: 1; + height: 50px; + display: flex; + flex-direction: column; + background-color: var(--panel-selected); + border-radius: 4px; +} +.ddei-core-panel-operate .content .part .button-v--selected .text[data-v-fc2f1000] { + color: var(--panel-title-selected); +} +.ddei-core-panel-operate .content .part .button-v--disabled[data-v-fc2f1000] { + flex: 1; + height: 50px; + display: flex; + flex-direction: column; + cursor: not-allowed; + align-items: center; + background-color: var(--panel-disabled); +} +.ddei-core-panel-operate .content .part .button-v--disabled .icon[data-v-fc2f1000] { + filter: grayscale(1); + opacity: 40%; +} +.ddei-core-panel-operate .content .part .button-v--disabled .text[data-v-fc2f1000] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-operate .content .part .text[data-v-fc2f1000] { + font-size: 14px; + white-space: nowrap; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-operate .tail[data-v-fc2f1000] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-sort[data-v-9f739241] { + height: 103px; + width: 230px; + flex: 0 1 230px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-sort .content[data-v-9f739241] { + display: flex; + justify-content: center; + align-items: center; + padding: 0px 4px; + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-sort .content .part[data-v-9f739241] { + flex: 1; + padding: 0px 2px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-sort .content .part .button-v[data-v-9f739241] { + flex: 1; + height: 50px; + border-radius: 4px; +} +.ddei-core-panel-sort .content .part .button-v[data-v-9f739241]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-sort .content .part .button-v--selected[data-v-9f739241] { + flex: 1; + height: 50px; + background-color: var(--panel-selected); + border-radius: 4px; +} +.ddei-core-panel-sort .content .part .button-v--selected .text[data-v-9f739241] { + color: var(--panel-title-selected); +} +.ddei-core-panel-sort .content .part .button-v--disabled[data-v-9f739241] { + flex: 1; + height: 50px; + cursor: not-allowed; + background-color: var(--panel-disabled); +} +.ddei-core-panel-sort .content .part .button-v--disabled > span[data-v-9f739241] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-sort .content .part .button-v--disabled .icon[data-v-9f739241] { + filter: grayscale(1); + opacity: 40%; +} +.ddei-core-panel-sort .content .part .button-v--disabled .text[data-v-9f739241] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-sort .content .part .text[data-v-9f739241] { + height: 20px; + font-size: 14px; + white-space: nowrap; + font-weight: 400; + color: var(--panel-title); + margin-top: -3px; +} +.ddei-core-panel-sort .content .part .extbtn[data-v-9f739241] { + font-size: 12px; + vertical-align: top; +} +.ddei-core-panel-sort .tail[data-v-9f739241] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-quickstyle[data-v-109430c5] { + width: 430px; + height: 90px; + border-right: 1px solid #e0e0e0; + grid-template-rows: 20px 20px 20px 20px; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + display: grid; + padding-right: 10px; +} +.ddei-core-panel-quickstyle-item[data-v-109430c5] { + margin: auto; +} +.ddei-core-panel-quickstyle-item-box[data-v-109430c5] { + width: 60px; + height: 20px; + color: black; + text-align: center; + border-radius: 4px; + font-size: 14px; + margin-top: 2px; +} +.ddei-core-panel-quickstyle-item-box img[data-v-109430c5] { + margin-top: 3px; + filter: brightness(45%) drop-shadow(0.2px 0px 0.2px #000); + float: left; + margin-left: 2px; +} +.ddei-core-panel-quickstyle-item-box div[data-v-109430c5] { + float: left; + margin-left: 3px; +} +.ddei-core-panel-quickstyle-item-box-selected[data-v-109430c5] { + width: 25px; + height: 25px; + text-align: center; + background-color: #e4e4e8; + border-radius: 4px; +} +.ddei-core-panel-quickstyle-item-box-selected img[data-v-109430c5] { + margin-top: 4px; + filter: brightness(45%) drop-shadow(0.2px 0px 0.2px #000); +} +.ddei-core-panel-quickstyle-item-box[data-v-109430c5]:hover { + background-color: #e9e9ee; + border-radius: 4px; +} +.ddei-core-panel-quickstyle-item-box-template[data-v-109430c5] { + width: 350px; + height: 55px; + margin-top: 4px; + border-radius: 4px; + padding-left: 5px; + background: white; + display: flex; +} +.ddei-core-panel-quickstyle-item-box-template-item[data-v-109430c5] { + height: 34px; + margin: auto; + flex: 0 0 34px; + color: black; + border-radius: 4px; + border: 1px solid black; + text-align: center; + padding-top: 3px; +} +.ddei-core-panel-quickstyle-item-box-template-item[data-v-109430c5]:hover { + outline: 0.5px solid #017fff; + box-sizing: border-box; + outline-offset: 3px; +} +.ddei-core-panel-quickstyle-item-box-template-icon[data-v-109430c5] { + width: 20px; + grid-template-rows: 17px 17px 17px; + grid-template-columns: 1fr; + margin: auto; + display: grid; + margin-top: -2px; + margin-right: 5px; +} +.ddei-core-panel-quickstyle-item-box-template-icon img[data-v-109430c5] { + margin-top: 5px; + margin-left: 8px; + filter: brightness(80%) drop-shadow(0.1px 0px 0.1px #000); +} +.ddei-core-panel-quickstyle-item-text[data-v-109430c5] { + text-align: center; + font-family: "Microsoft YaHei"; + font-size: 12px; + color: #787878; + margin-top: 8px; +} +.ddei-core-panel-tool[data-v-d02823f2] { + height: 103px; + width: 200px; + flex: 0 1 200px; + display: grid; + grid-template-rows: 20px 57px 26px; + grid-template-columns: 1fr; + text-align: center; +} +.ddei-core-panel-tool .content[data-v-d02823f2] { + display: flex; + justify-content: center; + align-items: center; + border-right: 1px solid var(--panel-border); + padding: 0px 4px; +} +.ddei-core-panel-tool .content .part[data-v-d02823f2] { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + padding: 0px 2px; +} +.ddei-core-panel-tool .content .part .button-v[data-v-d02823f2] { + display: flex; + flex-direction: column; + flex: 1; + height: 50px; + border-radius: 4px; + align-items: center; +} +.ddei-core-panel-tool .content .part .button-v[data-v-d02823f2]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-core-panel-tool .content .part .button-v--selected[data-v-d02823f2] { + flex: 1; + display: flex; + flex-direction: column; + height: 50px; + background-color: var(--panel-selected); + border-radius: 4px; + align-items: center; +} +.ddei-core-panel-tool .content .part .button-v--selected .text[data-v-d02823f2] { + color: var(--panel-title-selected); +} +.ddei-core-panel-tool .content .part .button-v--disabled[data-v-d02823f2] { + flex: 1; + height: 50px; + display: flex; + flex-direction: column; + cursor: not-allowed; + align-items: center; + background-color: var(--panel-disabled); +} +.ddei-core-panel-tool .content .part .button-v--disabled .icon[data-v-d02823f2] { + filter: grayscale(1); + opacity: 40%; +} +.ddei-core-panel-tool .content .part .button-v--disabled .text[data-v-d02823f2] { + color: var(--panel-title-disabled); +} +.ddei-core-panel-tool .content .part .text[data-v-d02823f2] { + flex: 0 0 13px; + font-size: 14px; + white-space: nowrap; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-panel-tool .tail[data-v-d02823f2] { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + font-weight: 400; + color: var(--panel-title); + border-right: 1px solid var(--panel-border); +} +.ddei-core-panel-bottom-shapecount[data-v-91252de3] { + flex: 0 0 100px; + display: block; + font-size: 15px; + text-align: center; +} +.ddei-core-panel-bottom-managelayers[data-v-e3adc5da] { + flex: 0 0 30px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-panel-bottom-managelayers .icon[data-v-e3adc5da] { + font-size: 20px; +} +.ddei-core-panel-bottom-managelayers[data-v-e3adc5da]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-panel-bottom-play[data-v-7e2fc5b7] { + flex: 0 0 35px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-panel-bottom-suitratio[data-v-4eeb5012] { + flex: 0 0 30px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-panel-bottom-suitratio .icon[data-v-4eeb5012] { + font-size: 20px; +} +.ddei-core-panel-bottom-suitratio[data-v-4eeb5012]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.expbtn[data-v-f8d489b0] { + width: 14px; + font-size: 14px; +} +.icon[data-v-f8d489b0] { + font-size: 20px; + width: 20px; + height: 20px; +} +.ddei-core-panel-bottom-changeratio[data-v-f8d489b0] { + flex: 0 0 157px; + display: flex; + justify-content: center; + align-items: center; + font-size: 15px; +} +.ddei-core-panel-bottom-changeratio span[data-v-f8d489b0] { + float: left; + width: 36px; + text-align: center; + margin-left: 5px; + margin-right: 5px; +} +.ddei-core-panel-bottom-changeratio div[data-v-f8d489b0] { + float: left; + padding-left: 5px; + padding-right: 5px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-panel-bottom-changeratio input[data-v-f8d489b0] { + float: left; + width: 100px; + border-radius: 4px; +} +.ddei-core-panel-bottom-changeratio__combox[data-v-f8d489b0] { + float: left; + padding-left: 5px; + padding-right: 5px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-bottom-changeratio__combox__dialog[data-v-f8d489b0]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-panel-bottom-addpage[data-v-d059d47d] { + flex: 0 0 40px; + display: flex; + justify-content: center; + align-items: center; + margin-left: 10px; +} +.ddei-core-panel-bottom-addpage .icon[data-v-d059d47d] { + font-size: 20px; +} +.ddei-core-panel-bottom-pages[data-v-d059d47d] { + font-size: 15px; + flex: 1; + display: block; + text-align: center; +} +.ddei-core-panel-bottom-pages-movebox[data-v-d059d47d] { + width: 25px; + height: 27px; + float: left; + text-align: center; +} +.ddei-core-panel-bottom-pages-movebox .icon[data-v-d059d47d] { + font-size: 20px; +} +.ddei-core-panel-bottom-pages-movebox[data-v-d059d47d]:hover { + background: #ebebef; + cursor: pointer; +} +.ddei-core-panel-bottom-pages-movebox .icon[data-v-d059d47d] { + height: 27px; +} +.ddei-core-panel-bottom-pages-page[data-v-d059d47d] { + float: left; + height: 27px; + border-right: 1px solid var(--panel-border); + padding: 0 10px; + text-align: center; +} +.ddei-core-panel-bottom-pages-page span[data-v-d059d47d] { + height: 27px; + width: 80px; + padding-left: 3px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: inline-flex; + align-items: center; + background: var(--panel-background); +} +.ddei-core-panel-bottom-pages-page span[data-v-d059d47d]:hover { + color: var(--dot); + cursor: pointer; + background: var(--background); +} +.ddei-core-panel-bottom-pages-page--selected[data-v-d059d47d] { + float: left; + height: 27px; + border-right: 1px solid var(--panel-border); + padding: 0 10px; + text-align: center; +} +.ddei-core-panel-bottom-pages-page--selected span[data-v-d059d47d] { + height: 27px; + width: 80px; + padding-left: 3px; + background: var(--panel-selected); + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: var(--dot); + font-weight: bold; + display: inline-flex; + align-items: center; +} +.ddei-core-panel-toolbox-simple[data-v-bd214554] { + text-align: center; + position: absolute; + z-index: 99999; + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 5px; + overflow: hidden; + background-color: var(--panel-background); + display: flex; + justify-content: start; + align-items: center; +} +.ddei-core-panel-toolbox-simple .item[data-v-bd214554] { + width: 30px; + height: 30px; + border-radius: 3px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-toolbox-simple .item > img[data-v-bd214554] { + margin-top: 2px; + margin-left: 2px; +} +.ddei-core-panel-toolbox-simple .item[data-v-bd214554]:hover { + background-color: #e2dede; + cursor: pointer; +} +.ddei-core-panel-toolbox-simple .item-icon-html[data-v-bd214554] { + width: 30px; + height: 30px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-panel-toolbox-simple .item-icon-html[data-v-bd214554] > * { + width: 28px !important; + height: 28px !important; +} +.ddei-core-panel-toolbox-simple .item-selected[data-v-bd214554] { + background-color: #e2dede; +} +.ddei-core-panel-toolbox-simple .item-block[data-v-bd214554] { + width: 10px; + height: 10px; +} +.ddei-core-panel-toolbox-simple .item-drag[data-v-bd214554] { + width: 100%; + height: 10px; + background-color: #efefef; +} +.ddei-core-panel-toolbox-simple .item-drag[data-v-bd214554]:hover { + background-color: var(--dot); + cursor: grab; +} +.ddei-core-panel-toolbox-simple .item-drag-2[data-v-bd214554] { + height: 100%; + width: 10px; + background-color: #efefef; +} +.ddei-core-panel-toolbox-simple .item-drag-2[data-v-bd214554]:hover { + background-color: var(--dot); + cursor: grab; +} +.ddei-core-panel-topmenu-simple[data-v-52f75ccc] { + text-align: center; + position: absolute; + color: var(--text); + z-index: 99999; + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 5px; + overflow: hidden; + background-color: var(--panel-background); + display: flex; + font-size: 14px; + justify-content: start; + align-items: center; +} +.ddei-core-panel-topmenu-simple .item[data-v-52f75ccc] { + min-width: 60px; + padding: 0 10px; + height: 24px; + border-radius: 3px; + display: flex; + justify-content: center; + align-items: center; + border-right: 0.5px solid #e2dede; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ddei-core-panel-topmenu-simple .item > div[data-v-52f75ccc] { + width: 100%; +} +.ddei-core-panel-topmenu-simple .item[data-v-52f75ccc]:hover { + background-color: #e2dede; + cursor: pointer; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.ddei-core-panel-topmenu-simple .item-selected[data-v-52f75ccc] { + background-color: #e2dede; +} +.ddei-core-panel-topmenu-simple .item-block[data-v-52f75ccc] { + width: 10px; + height: 10px; +} +.ddei-core-panel-topmenu-simple .item-drag[data-v-52f75ccc] { + width: 100%; + height: 10px; + background-color: #efefef; +} +.ddei-core-panel-topmenu-simple .item-drag[data-v-52f75ccc]:hover { + background-color: var(--dot); + cursor: grab; +} +.ddei-core-panel-topmenu-simple .item-drag-2[data-v-52f75ccc] { + height: 100%; + width: 10px; + background-color: #efefef; +} +.ddei-core-panel-topmenu-simple .item-drag-2[data-v-52f75ccc]:hover { + background-color: var(--dot); + cursor: grab; +} +.ddei-editor-quickifat-item-box[data-v-4ef00c85] { + width: 22px; + display: flex; + text-align: center; +} +.ddei-editor-quickifat-item-box--disabled[data-v-4ef00c85] { + pointer-events: none; + filter: grayscale(1); + opacity: 40%; + background: var(--panel-disabled); + cursor: not-allowed; +} +.ddei-editor-quickifat-item-box[data-v-4ef00c85]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-editor-quickifat-item-box .magtop-1[data-v-4ef00c85] { + margin-top: -1px; +} +.ddei-editor-quickifat-item-box .magtop-2[data-v-4ef00c85] { + margin-top: -2px; +} +.ddei-editor-quickifat-item-box .magtop-3[data-v-4ef00c85] { + margin-top: -3px; +} +.ddei-pv-border-dash-combox[data-v-8ff63c75] { + height: 28px; +} +.ddei-pv-border-dash-combox--disabled .textinput[data-v-8ff63c75] { + background-color: var(--panel-background); + height: 28px; + justify-content: center; + align-items: center; +} +.ddei-pv-border-dash-combox .textinput[data-v-8ff63c75] { + width: 100%; + padding-right: 5px; + border: 0.5px solid var(--panel-border); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; + height: 28px; +} +.ddei-pv-border-dash-combox .textinput[data-v-8ff63c75]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-border-dash-combox .textinput .div_input[data-v-8ff63c75] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + height: 3px; +} +.ddei-pv-border-dash-combox .textinput div[data-v-8ff63c75] { + flex: 0 0 20px; +} +.icon[data-v-8ff63c75] { + font-size: 16px; +} +.ddei_pv_border_weight_combox[data-v-e7c6034b] { + height: 28px; +} +.ddei_pv_border_weight_combox_disabled .textinput[data-v-e7c6034b] { + background-color: #d2d2d2; + height: 28px; + justify-content: center; + align-items: center; +} +.ddei_pv_border_weight_combox .textinput[data-v-e7c6034b] { + width: 100%; + padding-right: 5px; + border: 0.5px solid #d2d2d2; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; + height: 28px; +} +.ddei_pv_border_weight_combox .textinput[data-v-e7c6034b]:hover { + border: 1px solid #017fff; + box-sizing: border-box; +} +.ddei_pv_border_weight_combox .textinput .div_input[data-v-e7c6034b] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + height: 3px; +} +.ddei_pv_border_weight_combox .textinput div[data-v-e7c6034b] { + flex: 0 0 20px; +} +.icon[data-v-e7c6034b] { + font-size: 16px; +} +.ddei-editor-quick-fat-item-box[data-v-b43b0371] { + width: 24px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-quick-fat-item-box[data-v-b43b0371]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-editor-quick-fat-item-box--selected[data-v-b43b0371] { + background-color: var(--panel-selected); +} +.ddei-editor-quick-fat-item-box--disabled[data-v-b43b0371] { + background-color: var(--panel-disabled); + pointer-events: none; + cursor: not-allowed; + filter: grayscale(1); + opacity: 40%; +} +.ddei-editor-quick-fat-item-box .rotate-90[data-v-b43b0371] { + transform: rotate(90deg); +} +.ddei-editor-quick-fat-item-box .ext-underline[data-v-b43b0371] { + margin-top: 5.5px; + font-size: 16px; +} +.ddei-editor-quick-fat-item-box .magtop-1[data-v-b43b0371] { + margin-top: -1px; +} +.ddei-editor-quick-fat-item-box .magtop-2[data-v-b43b0371] { + margin-top: -2px; +} +.ddei-editor-quick-fat-item-box .magtop-3[data-v-b43b0371] { + margin-top: -3px; +} +.ddei-editor-quick-fat-item-box[data-v-019ae087] { + width: 15px; + height: 24px; + overflow: hidden; + display: flex; + align-items: center; + flex-direction: column; +} +.ddei-editor-quick-fat-item-box .icon[data-v-019ae087] { + flex: 0 0 16px; +} +.ddei-editor-quick-fat-item-box .colorbar[data-v-019ae087] { + width: 100%; + flex: 0 0 3px; +} +.ddei-editor-quick-fat-item-box .colinput[data-v-019ae087] { + border: none; + outline: none; + display: block; + margin-top: 5px; +} +.ddei-editor-quick-fat-item-box .magtop-1[data-v-019ae087] { + margin-top: -1px; +} +.ddei-editor-quick-fat-item-box[data-v-019ae087]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-editor-quick-fat-item-box--disabled[data-v-019ae087] { + background-color: var(--panel-disabled); + pointer-events: none; + cursor: not-allowed; + filter: grayscale(1); + opacity: 40%; +} +/*字体选择框*/ +.ddei-editor-quick-fat-item-fontfamily[data-v-ec936992] { + background-color: var(--panel-background); + height: 24px; + display: flex; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + justify-content: center; + align-items: center; + border: 1px solid var(--panel-border); + border-right: none; + box-sizing: border-box; +} +.ddei-editor-quick-fat-item-fontfamily[data-v-ec936992]:hover { + border: 0.5px solid var(--dot); + box-sizing: border-box; +} +.ddei-editor-quick-fat-item-fontfamily--disabled[data-v-ec936992]:hover { + background-color: var(--panel-disabled); + cursor: not-allowed !important; +} +.ddei-editor-quick-fat-item-fontfamily_input[data-v-ec936992] { + width: calc(100% - 20px); + border: transparent; + outline: none; + font-size: 15px; + color: var(--panel-title); + background: transparent; +} +.ddei-editor-quick-fat-item-fontfamily_combox[data-v-ec936992] { + height: 24px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-quick-fat-item-fontfamily_combox .iconfont-45[data-v-ec936992] { + font-size: 13px; +} +/*字体大小设置框 */ +.ddei-editor-quick-fat-item-fontsize[data-v-4fcf2a95] { + background-color: var(--panel-background); + height: 24px; + display: flex; + justify-content: center; + align-items: center; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border: 1px solid var(--panel-border); +} +.ddei-editor-quick-fat-item-fontsize[data-v-4fcf2a95]:hover { + border: 0.5px solid var(--dot); +} +.ddei-editor-quick-fat-item-fontsize--disabled[data-v-4fcf2a95]:hover { + background-color: var(--panel-disabled); + cursor: not-allowed !important; +} +.ddei-editor-quick-fat-item-fontsize_input[data-v-4fcf2a95] { + width: calc(100% - 20px); + border: transparent; + outline: none; + color: var(--panel-title); + font-size: 15px; + background: transparent; +} +.ddei-editor-quick-fat-item-fontsize_combox[data-v-4fcf2a95] { + height: 24px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-quick-fat-item-fontsize_combox .iconfont-45[data-v-4fcf2a95] { + font-size: 13px; +} +.ddei-editor-quick-fat-item-box[data-v-4fcf2a95] { + width: 25px; + height: 25px; + text-align: center; +} +.ddei-editor-quick-fat-item-box--disabled[data-v-4fcf2a95] { + color: var(--panel-title-disabled); + filter: brightness(200%) !important; +} +.ddei-editor-quick-fat-item-box--disabled[data-v-4fcf2a95]:hover { + background-color: var(--panel-disabled); + cursor: not-allowed; +} +.ddei-editor-quick-fat-item-box[data-v-4fcf2a95]:hover { + background-color: var(--panel-hover); + border-radius: 4px; +} +.ddei_pv_line_point_combox[data-v-5b25a083] { + height: 28px; +} +.ddei_pv_line_point_combox_disabled .textinput[data-v-5b25a083] { + background-color: var(--panel-background); + height: 28px; + justify-content: center; + align-items: center; +} +.ddei_pv_line_point_combox .textinput[data-v-5b25a083] { + width: 100%; + padding-right: 5px; + border: 0.5px solid var(--panel-border); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; + height: 28px; +} +.ddei_pv_line_point_combox .textinput[data-v-5b25a083]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei_pv_line_point_combox .textinput .div_input[data-v-5b25a083] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + text-overflow: ellipsis; + overflow: hidden; +} +.ddei_pv_line_point_combox .textinput div[data-v-5b25a083] { + flex: 0 0 20px; +} +.icon[data-v-5b25a083] { + font-size: 16px; +} +.ddei-pv-line-type-combox[data-v-739c83c3] { + width: 24px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-pv-line-type-combox[data-v-739c83c3]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-pv-line-type-combox--disabled[data-v-739c83c3] { + pointer-events: none; + background-color: var(--panel-disabled); + color: var(--panel-title-disabled); + cursor: not-allowed; +} +.ddei-editor-quick-fat-item-box[data-v-781d8566] { + width: 24px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-editor-quick-fat-item-box[data-v-781d8566]:hover { + cursor: pointer; + background-color: var(--panel-hover); +} +.ddei-editor-quick-fat-item-box--selected[data-v-781d8566] { + background-color: var(--panel-selected); +} +.ddei-editor-quick-fat-item-box--disabled[data-v-781d8566] { + pointer-events: none; + color: var(--panel-title-selected); + cursor: not-allowed; + background-color: var(--panel-selected); +} +.ddei-editor-quick-fat-item-box .rotate-90[data-v-781d8566] { + transform: rotate(90deg); +} +.ddei-editor-quick-fat-item-box .ext-underline[data-v-781d8566] { + margin-top: 5.5px; + font-size: 16px; +} +.ddei-editor-quick-fat-item-box .magtop-1[data-v-781d8566] { + margin-top: -1px; +} +.ddei-editor-quick-fat-item-box .magtop-2[data-v-781d8566] { + margin-top: -2px; +} +.ddei-editor-quick-fat-item-box .magtop-3[data-v-781d8566] { + margin-top: -3px; +} +.ddei-editor-layout-standrad[data-v-43088579] { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.ddei-editor-layout-standrad .top[data-v-43088579] { + border: 0.5px solid var(--border); + border-bottom: none; +} +.ddei-editor-layout-standrad .bottom[data-v-43088579] { + border: 0.5px solid var(--border); + border-top: none; +} +.ddei-editor-layout-standrad .body[data-v-43088579] { + display: flex; + overflow: hidden; + flex: 1 1 calc(100vh - 134px); +} +.ddei-editor-layout-standrad .body .left[data-v-43088579] { + flex: 0 1 292px; + border: 1px solid var(--border); + overflow: hidden; +} +.ddei-editor-layout-standrad .body .middle[data-v-43088579] { + flex: 1 1 auto; + display: flex; + flex-direction: column; +} +.ddei-editor-layout-standrad .body .right[data-v-43088579] { + flex: 0 1 292px; + border: 1px solid var(--border); + overflow: hidden; +} +.ddei-editor-layout-standrad > img { + -webkit-user-drag: none; + user-drag: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-editor-layout-standrad > div { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-editor-layout-simple[data-v-4920d2e1] { + width: 100%; + height: 100vh; + display: flex; + flex-direction: column; +} +.ddei-editor-layout-simple .top[data-v-4920d2e1] { + flex: 0 1 auto; +} +.ddei-editor-layout-simple .middle[data-v-4920d2e1] { + flex: 1 1 auto; + display: flex; +} +.ddei-editor-layout-simple .bottom[data-v-4920d2e1] { + flex: 0 1 auto; +} +.ddei-editor-layout-simple .bottom[data-v-4920d2e1] > * { + height: 30px; + border-top: 0.5px solid var(--border); +} +.ddei-editor-layout-simple > img { + -webkit-user-drag: none; + user-drag: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-editor-layout-simple > div { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-core-dialog-align[data-v-6574182d] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 180px; + position: absolute; + background-color: var(--panel-background); + height: 180px; + z-index: 999; +} +.ddei-core-dialog-align .content[data-v-6574182d] { + width: 100%; + max-height: 180px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-align .content .title[data-v-6574182d] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; +} +.ddei-core-dialog-align .content .group[data-v-6574182d] { + color: black; + flex: 1 1 40px; + width: 100%; + border-top: 1px solid var(--panel-border); +} +.ddei-core-dialog-align .content .group .title[data-v-6574182d] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; +} +.ddei-core-dialog-align .content .group .group_content[data-v-6574182d] { + width: 100%; + display: grid; + gap: 10px; + grid-template-columns: 1fr 1fr 1fr; + padding: 3px 0px; +} +.ddei-core-dialog-align .content .group .group_content .item[data-v-6574182d] { + outline: none; + width: 30px; + height: 25px; + margin: auto; + background: transparent; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} +.ddei-core-dialog-align .content .group .group_content .itembox_disabled[data-v-6574182d] { + color: var(--panel-title-disabled); + text-decoration: line-through; +} +.ddei-core-dialog-align .content .group .group_content .itembox_disabled[data-v-6574182d]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-align .content .group .group_content .item[data-v-6574182d]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-align .content .group .group_content .text[data-v-6574182d] { + flex: 1; + text-align: center; + white-space: nowrap; + width: 100%; +} +.ddei-core-dialog-align .content .group .group_content .icon[data-v-6574182d] { + font-size: 28px; +} +/**以下是设置缩放比例的弹出框 */ +.ddei-core-dialog-changeratio[data-v-561a0908] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 180px; + position: absolute; + background-color: var(--panel-background); + z-index: 999; +} +.ddei-core-dialog-changeratio .content[data-v-561a0908] { + width: 180px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.ddei-core-dialog-changeratio .content .title[data-v-561a0908] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + border-bottom: 1px solid var(--panel-border); +} +.ddei-core-dialog-changeratio .content .group[data-v-561a0908] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; +} +.ddei-core-dialog-changeratio .content .group .group_content[data-v-561a0908] { + width: 100%; + display: flex; + flex-direction: column; +} +.ddei-core-dialog-changeratio .content .group .group_content .item[data-v-561a0908] { + flex: 0 0 30px; + padding: 0 10px; + display: flex; + justify-content: start; + align-items: center; + cursor: pointer; +} +.ddei-core-dialog-changeratio .content .group .group_content .item > input[data-v-561a0908] { + border: none; + outline: none; + background: var(--panel-background); + color: var(--panel-title); +} +.ddei-core-dialog-changeratio .content .group .group_content .item_selected[data-v-561a0908] { + font-weight: bold; +} +.ddei-core-dialog-changeratio .content .group .group_content .item[data-v-561a0908]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-choosecontrolgroup[data-v-d0e0cfd9] { + display: none; + overflow: hidden; + width: 420px; + position: absolute; + height: 400px; + z-index: 999; +} +.ddei-core-dialog-choosecontrolgroup .content[data-v-d0e0cfd9] { + width: 210px; + border: 1px solid var(--panel-border); + background-color: var(--panel-background); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + height: 400px; + overflow-y: auto; + overflow-x: hidden; + user-select: none; +} +.ddei-core-dialog-choosecontrolgroup .content .title[data-v-d0e0cfd9] { + color: var(--panel-title); + height: 36px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + font-size: 16px; + padding-left: 10px; + border-bottom: 1px solid var(--panel-border); +} +.ddei-core-dialog-choosecontrolgroup .content .group[data-v-d0e0cfd9] { + color: var(--panel-title); + flex: 1; + width: 100%; + display: flex; + flex-direction: column; + justify-content: start; + align-items: center; +} +.ddei-core-dialog-choosecontrolgroup .content .group .item[data-v-d0e0cfd9] { + flex: 0 0 36px; + width: 210px; + padding: 0 20px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-choosecontrolgroup .content .group .item .groupicon[data-v-d0e0cfd9] { + width: 34px; + font-size: 26px; +} +.ddei-core-dialog-choosecontrolgroup .content .group .item .groupname[data-v-d0e0cfd9] { + white-space: nowrap; + flex: 0 1 160px; + margin: 0 10px; + font-size: 16px; +} +.ddei-core-dialog-choosecontrolgroup .content .group .item .expand[data-v-d0e0cfd9] { + font-size: 22px; +} +.ddei-core-dialog-choosecontrolgroup .content .group .item[data-v-d0e0cfd9]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-choosecontrolgroup .subcontent[data-v-d0e0cfd9] { + display: none; + position: absolute; + width: 160px; + border: 1px solid var(--panel-border); + background-color: var(--panel-background); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + max-height: 400px; + overflow-y: auto; + overflow-x: hidden; + user-select: none; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .title[data-v-d0e0cfd9] { + color: var(--panel-title); + height: 36px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + font-size: 16px; + padding-left: 10px; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .group[data-v-d0e0cfd9] { + color: var(--panel-title); + flex: 1; + width: 100%; + display: flex; + flex-direction: column; + justify-content: start; + align-items: center; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .group .item[data-v-d0e0cfd9] { + flex: 0 0 36px; + width: 160px; + padding: 0 10px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .group .item > input[data-v-d0e0cfd9] { + flex: 0 0 20px; + width: 14px; + height: 14px; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .group .item .groupname[data-v-d0e0cfd9] { + white-space: nowrap; + flex: 0 1 120px; + margin-left: 10px; + font-size: 16px; +} +.ddei-core-dialog-choosecontrolgroup .subcontent .group .item[data-v-d0e0cfd9]:hover { + background-color: var(--panel-hover); +} +/**以下为询问框的样式 */ +.ddei-core-dialog-closefile[data-v-929ef917] { + width: 420px; + height: 165px; + background: var(--panel-background); + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 12px; + display: none; + position: absolute; + overflow: hidden; + z-index: 999; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.ddei-core-dialog-closefile .content[data-v-929ef917] { + width: 420px; + height: 165px; + display: flex; + flex-direction: column; + padding: 0 24px; +} +.ddei-core-dialog-closefile .content .header[data-v-929ef917] { + flex: 0 0 55px; + display: flex; + align-items: center; + font-size: 18px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-closefile .content .header > span[data-v-929ef917] { + margin: 0 2px; +} +.ddei-core-dialog-closefile .content .header .close[data-v-929ef917] { + font-size: 22px; +} +.ddei-core-dialog-closefile .content .header .warn[data-v-929ef917] { + font-size: 20px !important; + color: #F05B13; +} +.ddei-core-dialog-closefile .content .msg[data-v-929ef917] { + flex: 0 0 55px; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-closefile .content .tail[data-v-929ef917] { + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + justify-content: end; +} +.ddei-core-dialog-closefile .content .button[data-v-929ef917] { + flex: 0 0 70px; + height: 32px; + background: var(--panel-header); + border: 1px solid var(--panel-border); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-closefile .content .button[data-v-929ef917]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-closefile .content .button-main[data-v-929ef917] { + color: white; + background: var(--dot); +} +/**以下为询问框的样式 */ +.ddei-core-dialog-collfile[data-v-068f2102] { + width: 420px; + height: 165px; + background: var(--panel-background); + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 12px; + display: none; + position: absolute; + overflow: hidden; + z-index: 999; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.ddei-core-dialog-collfile .content[data-v-068f2102] { + width: 420px; + height: 165px; + display: flex; + flex-direction: column; + padding: 0 24px; +} +.ddei-core-dialog-collfile .content .header[data-v-068f2102] { + flex: 0 0 55px; + display: flex; + align-items: center; + font-size: 18px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-collfile .content .header > span[data-v-068f2102] { + margin: 0 2px; +} +.ddei-core-dialog-collfile .content .header .close[data-v-068f2102] { + font-size: 22px; +} +.ddei-core-dialog-collfile .content .header .warn[data-v-068f2102] { + font-size: 20px !important; +} +.ddei-core-dialog-collfile .content .msg[data-v-068f2102] { + flex: 0 0 55px; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-collfile .content .tail[data-v-068f2102] { + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + justify-content: end; +} +.ddei-core-dialog-collfile .content .button[data-v-068f2102] { + flex: 0 0 70px; + height: 32px; + white-space: nowrap; + background: var(--panel-header); + border: 1px solid var(--panel-border); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-collfile .content .button[data-v-068f2102]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-collfile .content .button-main[data-v-068f2102] { + color: white; + background: var(--dot); +} +/**以下是选择颜色的弹出框 */ +.ddei-core-dialog-linepointtype[data-v-ec516138] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 240px; + position: absolute; + background-color: var(--panel-background); + height: 250px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-linepointtype .content[data-v-ec516138] { + width: 100%; + max-height: 250px; + overflow-y: auto; +} +.ddei-core-dialog-linepointtype .content .group[data-v-ec516138] { + color: var(--panel-title); + width: 100%; +} +.ddei-core-dialog-linepointtype .content .group .title[data-v-ec516138] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; + margin-top: 5px; + margin-bottom: 5px; +} +.ddei-core-dialog-linepointtype .content .group .group_content[data-v-ec516138] { + width: 100%; + padding: 0px 15px; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr; +} +.ddei-core-dialog-linepointtype .content .group .item[data-v-ec516138] { + height: 30px; + background: transparent; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 0.5px solid var(--panel-border); +} +.ddei-core-dialog-linepointtype .content .group .item .div_input[data-v-ec516138] { + width: calc(100% - 10px); + height: 3px; +} +.ddei-core-dialog-linepointtype .content .group .item[data-v-ec516138]:hover { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-linepointtype .content .group .item-selected[data-v-ec516138] { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-linepointtype .tail[data-v-ec516138] { + margin-top: 5px; + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + padding: 0 15px; + justify-content: end; +} +.ddei-core-dialog-linepointtype .button[data-v-ec516138] { + flex: 0 0 70px; + height: 32px; + background: var(--panel-header); + border: 1px solid var(--panel-border); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-linepointtype .button[data-v-ec516138]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-linepointtype .button-main[data-v-ec516138] { + color: white; + background: var(--dot); +} +.ddei-core-dialog-linetype[data-v-5fc9eaad] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 240px; + position: absolute; + background-color: var(--panel-background); + height: 90px; + z-index: 999; +} +.ddei-core-dialog-linetype .content[data-v-5fc9eaad] { + width: 100%; + max-height: 90px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-linetype .content .title[data-v-5fc9eaad] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; +} +.ddei-core-dialog-linetype .content .group[data-v-5fc9eaad] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; + padding: 10px; + border-top: 1px solid var(--panel-border); +} +.ddei-core-dialog-linetype .content .group .group_content[data-v-5fc9eaad] { + width: 96%; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr 1fr; +} +.ddei-core-dialog-linetype .content .group .group_content .item[data-v-5fc9eaad] { + outline: none; + width: 70px; + height: 40px; + margin: auto; + background: transparent; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 1px solid var(--panel-border); +} +.ddei-core-dialog-linetype .content .group .group_content .selected[data-v-5fc9eaad] { + background-color: var(--panel-selected); +} +.ddei-core-dialog-linetype .content .group .group_content .item[data-v-5fc9eaad]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-linetype .content .group .group_content .icon[data-v-5fc9eaad] { + font-size: 28px; +} +/**以下是编辑图层的弹出框 */ +.ddei-core-dialog-managerlayers[data-v-f8156347] { + width: 240px; + position: absolute; + background-color: var(--panel-background); + height: 320px; + z-index: 999; + display: none; + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + user-select: none; +} +.ddei-core-dialog-managerlayers .content[data-v-f8156347] { + width: 240px; + height: 320px; + display: flex; + flex-direction: column; + justify-content: center; +} +.ddei-core-dialog-managerlayers .content .title[data-v-f8156347] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + border-bottom: 1px solid var(--panel-border); +} +.ddei-core-dialog-managerlayers .content .group[data-v-f8156347] { + color: var(--panel-title); + flex: 1 1 40px; +} +.ddei-core-dialog-managerlayers .content .group .group_content[data-v-f8156347] { + width: 100%; + height: 280px; + display: flex; + flex-direction: column; + overflow-y: auto; +} +.ddei-core-dialog-managerlayers .content .group .group_content .item[data-v-f8156347] { + width: 100%; + flex: 0 0 30px; + display: grid; + gap: 2px; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + padding: 3px 10px; +} +.ddei-core-dialog-managerlayers .content .group .group_content .item > span[data-v-f8156347] { + font-size: 14px; + font-weight: bold; +} +.ddei-core-dialog-managerlayers .content .group .group_content .item .icon[data-v-f8156347] { + font-size: 22px; +} +.ddei-core-dialog-managerlayers .content .group .group_content .item > input[data-v-f8156347] { + height: 16px; + margin-top: 4px; +} +.ddei-core-dialog-managerlayers .content .group .group_content .current[data-v-f8156347] { + background-color: var(--panel-header); +} +.ddei-core-dialog-managerlayers .content .group .group_content .item_selected[data-v-f8156347] { + font-weight: bold; +} +.ddei-core-dialog-managerlayers .content .group .group_content .item[data-v-f8156347]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-mergecompose[data-v-eb54102e] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 140px; + position: absolute; + background-color: var(--panel-background); + height: 110px; + z-index: 999; +} +.ddei-core-dialog-mergecompose .content[data-v-eb54102e] { + width: 100%; + max-height: 110px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-mergecompose .content .title[data-v-eb54102e] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; + border-bottom: 1px solid var(--panel-border); +} +.ddei-core-dialog-mergecompose .content .group[data-v-eb54102e] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; +} +.ddei-core-dialog-mergecompose .content .group .group_content[data-v-eb54102e] { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.ddei-core-dialog-mergecompose .content .group .group_content .item[data-v-eb54102e] { + outline: none; + font-size: 16px; + background: transparent; + border-radius: 4px; + width: 100%; + flex: 0 0 36px; + display: flex; + justify-content: start; + align-items: center; + padding: 0px 10px; + cursor: pointer; +} +.ddei-core-dialog-mergecompose .content .group .group_content .item_disabled[data-v-eb54102e] { + outline: none; + font-size: 16px; + background: transparent; + border-radius: 4px; + width: 100%; + flex: 0 0 36px; + display: flex; + justify-content: start; + align-items: center; + padding: 0px 10px; + color: var(--panel-title-disabled); + text-decoration: line-through; +} +.ddei-core-dialog-mergecompose .content .group .group_content .item_disabled[data-v-eb54102e]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-mergecompose .content .group .group_content .item[data-v-eb54102e]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-mergecompose .content .group .group_content .text[data-v-eb54102e] { + flex: 1; + text-align: left; + padding-left: 15px; + white-space: nowrap; + width: 100%; +} +.ddei-core-dialog-mergecompose .content .group .group_content .icon[data-v-eb54102e] { + font-size: 22px; +} +.ddei-core-dialog-changeposition[data-v-70a473a4] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 140px; + position: absolute; + background-color: var(--panel-background); + height: 180px; + z-index: 999; +} +.ddei-core-dialog-changeposition .content[data-v-70a473a4] { + width: 100%; + max-height: 180px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-changeposition .content .title[data-v-70a473a4] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; + border-bottom: 1px solid var(--panel-border); +} +.ddei-core-dialog-changeposition .content .group[data-v-70a473a4] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; +} +.ddei-core-dialog-changeposition .content .group .group_content[data-v-70a473a4] { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.ddei-core-dialog-changeposition .content .group .group_content .item[data-v-70a473a4] { + outline: none; + font-size: 16px; + margin: auto; + background: transparent; + border-radius: 4px; + width: 100%; + flex: 0 0 36px; + display: flex; + justify-content: start; + align-items: center; + padding: 0px 10px; + cursor: pointer; +} +.ddei-core-dialog-changeposition .content .group .group_content .item_disabled[data-v-70a473a4] { + color: var(--panel-title-disabled); + text-decoration: line-through; +} +.ddei-core-dialog-changeposition .content .group .group_content .item_disabled[data-v-70a473a4]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-changeposition .content .group .group_content .item[data-v-70a473a4]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-changeposition .content .group .group_content .text[data-v-70a473a4] { + flex: 1; + text-align: center; + white-space: nowrap; + width: 100%; +} +.ddei-core-dialog-changeposition .content .group .group_content .icon[data-v-70a473a4] { + font-size: 22px; +} +/**以下为询问框的样式 */ +.ddei-core-dialog-publishfile[data-v-251feafa] { + width: 420px; + height: 165px; + background: var(--panel-background); + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 12px; + display: none; + position: absolute; + overflow: hidden; + z-index: 999; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.ddei-core-dialog-publishfile .content[data-v-251feafa] { + width: 420px; + height: 165px; + display: flex; + flex-direction: column; + padding: 0 24px; +} +.ddei-core-dialog-publishfile .content .header[data-v-251feafa] { + flex: 0 0 55px; + display: flex; + align-items: center; + font-size: 18px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-publishfile .content .header > span[data-v-251feafa] { + margin: 0 2px; +} +.ddei-core-dialog-publishfile .content .header .close[data-v-251feafa] { + font-size: 22px; +} +.ddei-core-dialog-publishfile .content .header .warn[data-v-251feafa] { + font-size: 20px !important; +} +.ddei-core-dialog-publishfile .content .msg[data-v-251feafa] { + flex: 0 0 55px; + display: flex; + justify-content: center; + align-items: center; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); +} +.ddei-core-dialog-publishfile .content .tail[data-v-251feafa] { + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + justify-content: end; +} +.ddei-core-dialog-publishfile .content .button[data-v-251feafa] { + flex: 0 0 70px; + height: 32px; + background: var(--panel-header); + border: 1px solid var(--panel-border); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-publishfile .content .button[data-v-251feafa]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-publishfile .content .button-main[data-v-251feafa] { + color: white; + background: var(--dot); +} +.ddei-core-dialog-qcview[data-v-6bab58c9] { + width: 80px; + position: absolute; + background-color: var(--panel-background); + left: 0px; + display: none; + bottom: 16px; + height: 48px; +} +.ddei-core-dialog-qcview .icon[data-v-6bab58c9] { + font-size: 18px; + width: 18px; + height: 18px; +} +.ddei-core-dialog-qcview .items .item[data-v-6bab58c9] { + height: 24px; + width: 80px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-dialog-qcview .items .item > div[data-v-6bab58c9] { + color: var(--panel-title); + font-size: 13px; + flex: 1; +} +.ddei-core-dialog-qcview .items .item[data-v-6bab58c9]:hover { + background: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-setstyle[data-v-a2a1cbf5] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 440px; + position: absolute; + background-color: var(--panel-background); + height: 230px; + z-index: 999; +} +.ddei-core-dialog-setstyle .content[data-v-a2a1cbf5] { + width: 100%; + max-height: 230px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-setstyle .content .title[data-v-a2a1cbf5] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; +} +.ddei-core-dialog-setstyle .content .group[data-v-a2a1cbf5] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; + padding: 10px; + border-top: 1px solid var(--panel-border); +} +.ddei-core-dialog-setstyle .content .group .group_content[data-v-a2a1cbf5] { + width: 95%; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; +} +.ddei-core-dialog-setstyle .content .group .group_content .item[data-v-a2a1cbf5] { + outline: none; + width: 80px; + height: 40px; + margin: auto; + background: transparent; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 1px solid var(--panel-border); +} +.ddei-core-dialog-setstyle .content .group .group_content .item[data-v-a2a1cbf5]:hover { + filter: brightness(150%); +} +.ddei-core-dialog-setstyle .content .group .group_content .text[data-v-a2a1cbf5] { + flex: 1; + text-align: center; + white-space: nowrap; + width: 100%; +} +.ddei-core-dialog-setstyle .content .group .group_content .icon[data-v-a2a1cbf5] { + font-size: 28px; +} +.ddei-core-dialog-changerotate[data-v-2fcc5441] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 180px; + position: absolute; + background-color: var(--panel-background); + height: 150px; + z-index: 999; +} +.ddei-core-dialog-changerotate .content[data-v-2fcc5441] { + width: 100%; + max-height: 150px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-changerotate .content .title[data-v-2fcc5441] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; +} +.ddei-core-dialog-changerotate .content .group[data-v-2fcc5441] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; + border-top: 1px solid var(--panel-border); +} +.ddei-core-dialog-changerotate .content .group .title[data-v-2fcc5441] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; +} +.ddei-core-dialog-changerotate .content .group .group_content[data-v-2fcc5441] { + width: 100%; + display: grid; + gap: 10px; + grid-template-columns: 1fr 1fr 1fr; + padding: 3px 0px; +} +.ddei-core-dialog-changerotate .content .group .group_content .item[data-v-2fcc5441] { + outline: none; + width: 30px; + height: 25px; + margin: auto; + background: transparent; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} +.ddei-core-dialog-changerotate .content .group .group_content .item_disabled[data-v-2fcc5441] { + color: var(--panel-title-disabled); + outline: none; + width: 30px; + height: 25px; + margin: auto; + background: transparent; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + text-decoration: line-through; +} +.ddei-core-dialog-changerotate .content .group .group_content .item_disabled .icon[data-v-2fcc5441] { + color: var(--panel-title-disabled); +} +.ddei-core-dialog-changerotate .content .group .group_content .item_disabled[data-v-2fcc5441]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-changerotate .content .group .group_content .item[data-v-2fcc5441]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-changerotate .content .group .group_content .text[data-v-2fcc5441] { + flex: 1; + text-align: center; + white-space: nowrap; + width: 100%; +} +.ddei-core-dialog-changerotate .content .group .group_content .icon[data-v-2fcc5441] { + font-size: 28px; +} +/**以下是选择颜色的弹出框 */ +.ddei-core-dialog-selectborderdash[data-v-143dc703] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 290px; + position: absolute; + background-color: var(--panel-background); + height: 250px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-selectborderdash .content[data-v-143dc703] { + width: 100%; + max-height: 250px; + overflow-y: auto; +} +.ddei-core-dialog-selectborderdash .content .group[data-v-143dc703] { + color: var(--panel-title); + width: 100%; +} +.ddei-core-dialog-selectborderdash .content .group .title[data-v-143dc703] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; + margin-top: 5px; + margin-bottom: 5px; + box-sizing: border-box; +} +.ddei-core-dialog-selectborderdash .content .group .group_content[data-v-143dc703] { + width: 100%; + padding: 0px 15px; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr; + box-sizing: border-box; +} +.ddei-core-dialog-selectborderdash .content .group .item[data-v-143dc703] { + height: 24px; + margin: 0px 2px; + margin: auto; + background: transparent; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 0.5px solid var(--panel-title); +} +.ddei-core-dialog-selectborderdash .content .group .item .div_input[data-v-143dc703] { + width: calc(100% - 10px); + height: 3px; +} +.ddei-core-dialog-selectborderdash .content .group .item .div_input[data-v-143dc703] > * { + stroke: var(--panel-title); + fill: var(--panel-background); +} +.ddei-core-dialog-selectborderdash .content .group .item[data-v-143dc703]:hover { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-selectborderdash .content .group .item-selected[data-v-143dc703] { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-selectborderdash .tail[data-v-143dc703] { + margin-top: 5px; + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + padding: 0 15px; + justify-content: end; +} +.ddei-core-dialog-selectborderdash .button[data-v-143dc703] { + flex: 0 0 70px; + height: 32px; + white-space: nowrap; + background: var(--panel-background); + border: 1px solid var(--panel-title); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-selectborderdash .button[data-v-143dc703]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-selectborderdash .button-main[data-v-143dc703] { + color: white; + border: 1px solid var(--panel-background); + background: var(--dot); +} +/**以下是选择颜色的弹出框 */ +.ddei-core-dialog-selectboderweight[data-v-b939438e] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 290px; + position: absolute; + background-color: var(--panel-background); + height: 250px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-selectboderweight .content[data-v-b939438e] { + width: 100%; + max-height: 250px; + overflow-y: auto; +} +.ddei-core-dialog-selectboderweight .content .group[data-v-b939438e] { + color: var(--panel-title); + width: 100%; +} +.ddei-core-dialog-selectboderweight .content .group .title[data-v-b939438e] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; + margin-top: 5px; + margin-bottom: 5px; +} +.ddei-core-dialog-selectboderweight .content .group .group_content[data-v-b939438e] { + width: 100%; + padding: 0px 15px; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr; +} +.ddei-core-dialog-selectboderweight .content .group .item[data-v-b939438e] { + height: 24px; + margin: 0px 2px; + margin: auto; + background: transparent; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 0.5px solid var(--panel-border); +} +.ddei-core-dialog-selectboderweight .content .group .item .div_input[data-v-b939438e] { + width: calc(100% - 10px); + height: 100%; +} +.ddei-core-dialog-selectboderweight .content .group .item .div_input[data-v-b939438e] > * { + stroke: var(--panel-title); + fill: var(--panel-background); +} +.ddei-core-dialog-selectboderweight .content .group .item[data-v-b939438e]:hover { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-selectboderweight .content .group .item-selected[data-v-b939438e] { + outline: 1px solid var(--dot); +} +.ddei-core-dialog-selectboderweight .tail[data-v-b939438e] { + margin-top: 5px; + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + padding: 0 15px; + justify-content: end; +} +.ddei-core-dialog-selectboderweight .button[data-v-b939438e] { + flex: 0 0 70px; + height: 32px; + white-space: nowrap; + background: #FFFFFF; + border: 1px solid var(--panel-border); + border-radius: 6px; + font-size: 16px; + font-family: "Microsoft YaHei"; + font-weight: 400; + color: #040404; + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-selectboderweight .button[data-v-b939438e]:hover { + color: white; + background: #176EFF; + cursor: pointer; +} +.ddei-core-dialog-selectboderweight .button-main[data-v-b939438e] { + color: white; + background: #176EFF; +} +/**以下是选择颜色的弹出框 */ +.ddei-core-dialog-selectcolor[data-v-cd291105] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 290px; + position: absolute; + background-color: var(--panel-background); + height: 380px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-selectcolor .content[data-v-cd291105] { + width: 100%; + max-height: 380px; + overflow-y: auto; +} +.ddei-core-dialog-selectcolor .content .group[data-v-cd291105] { + color: var(--panel-title); + width: 100%; +} +.ddei-core-dialog-selectcolor .content .group .title[data-v-cd291105] { + color: var(--panel-title); + flex: 0 0 30px; + width: 100%; + box-sizing: border-box; + display: flex; + justify-content: start; + align-items: center; + padding-left: 10px; + font-size: 15px; + border: none; + margin-top: 5px; + margin-bottom: 5px; +} +.ddei-core-dialog-selectcolor .content .group .color1[data-v-cd291105] { + display: grid; + gap: 1px; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; +} +.ddei-core-dialog-selectcolor .content .group .color2[data-v-cd291105] { + display: grid; + grid-template-rows: 20px 20px 20px 20px 20px 20px 20px; + gap: 1px; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + margin: 10px 0px; +} +.ddei-core-dialog-selectcolor .content .group .color3[data-v-cd291105] { + display: flex; + justify-content: start; + align-items: center; + margin-top: -5px; + margin-left: 10px; +} +.ddei-core-dialog-selectcolor .content .group .color3 > input[data-v-cd291105] { + width: 80px; + height: 24px; + background: var(--panel-background); + border: 1px solid var(--panel-title); + color: var(--panel-title); +} +.ddei-core-dialog-selectcolor .content .group .color3 .colorinput[data-v-cd291105] { + outline: none; + border: none; + width: 60px; + height: 34px; + margin-right: 5px; + background: none; +} +.ddei-core-dialog-selectcolor .content .group .group_content[data-v-cd291105] { + width: 100%; + padding: 0px 15px; + box-sizing: border-box; +} +.ddei-core-dialog-selectcolor .content .group .item[data-v-cd291105] { + width: 25px; + height: 20px; + margin: 0px 2px; + margin: auto; + background: transparent; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 0.5px solid var(--panel-title); +} +.ddei-core-dialog-selectcolor .content .group .item[data-v-cd291105]:hover { + outline: 1px solid var(--panel-hover); +} +.ddei-core-dialog-selectcolor .content .group .item-selected[data-v-cd291105] { + outline: 1px solid var(--panel-selected); +} +.ddei-core-dialog-selectcolor .tail[data-v-cd291105] { + margin-top: 5px; + flex: 0 0 55px; + display: flex; + align-items: center; + text-align: center; + padding: 0 15px; + justify-content: end; +} +.ddei-core-dialog-selectcolor .button[data-v-cd291105] { + flex: 0 0 70px; + white-space: nowrap; + height: 32px; + background: var(--panel-background); + border: 1px solid var(--panel-title); + border-radius: 6px; + font-size: 16px; + font-weight: 400; + color: var(--panel-title); + margin-left: 13px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-core-dialog-selectcolor .button[data-v-cd291105]:hover { + color: white; + background: var(--dot); + cursor: pointer; +} +.ddei-core-dialog-selectcolor .button-main[data-v-cd291105] { + color: white; + border: 1px solid var(--panel-background); + background: var(--dot); +} +.ddei-core-dialog-selectcolor .button-small[data-v-cd291105] { + height: 26px; + flex: 0 0 55px; + font-size: 15px; + border: 1px solid var(--panel-title); + color: var(--panel-title); +} +.ddei-core-dialog-selectcolor .button-small[data-v-cd291105]:hover { + color: var(--panel-title); + font-weight: bold; + background: var(--panel-background); + cursor: pointer; +} +/**以下是选择字体的弹出框 */ +.ddei-core-dialog-selectfont[data-v-64fcb708] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 170px; + position: absolute; + background-color: var(--panel-background); + height: 310px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-selectfont .content[data-v-64fcb708] { + width: 100%; + max-height: 310px; + overflow-y: auto; +} +.ddei-core-dialog-selectfont .content .group[data-v-64fcb708] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; +} +.ddei-core-dialog-selectfont .content .group .group_content[data-v-64fcb708] { + font-size: 14px; + width: 100%; + grid-template-columns: 1fr 1fr; + grid-template-rows: 30px 30px 30px 30px 30px; + display: grid; +} +.ddei-core-dialog-selectfont .content .group .group_content .item[data-v-64fcb708] { + outline: none; + font-size: 15px; + margin: auto; + background: transparent; + border-radius: 4px; + width: 80px; + height: 30px; + display: flex; + justify-content: start; + align-items: center; + cursor: pointer; +} +.ddei-core-dialog-selectfont .content .group .group_content .item .text[data-v-64fcb708] { + text-align: center; + white-space: nowrap; + display: table-cell; + width: 100%; + vertical-align: middle; +} +.ddei-core-dialog-selectfont .content .group .group_content .itembox_deleted[data-v-64fcb708] { + text-decoration: line-through; +} +.ddei-core-dialog-selectfont .content .group .group_content .itembox_disabled[data-v-64fcb708] { + color: var(--panel-title-disabled); + text-decoration: line-through; +} +.ddei-core-dialog-selectfont .content .group .group_content .itembox_disabled[data-v-64fcb708]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-selectfont .content .group .group_content .itembox_underline[data-v-64fcb708] { + text-decoration: underline; +} +.ddei-core-dialog-selectfont .content .group .group_content .item_selected[data-v-64fcb708] { + font-weight: bold; + background-color: var(--panel-selected); +} +.ddei-core-dialog-selectfont .content .group .group_content .item[data-v-64fcb708]:hover { + background-color: var(--panel-hover); +} +/**以下是选择字号的弹出框 */ +.ddei-core-dialog-selectfontsize[data-v-9fc02a16] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 170px; + position: absolute; + background-color: var(--panel-background); + height: 310px; + z-index: 999; + user-select: none; +} +.ddei-core-dialog-selectfontsize .content[data-v-9fc02a16] { + width: 100%; + max-height: 310px; + overflow-y: auto; +} +.ddei-core-dialog-selectfontsize .content .group[data-v-9fc02a16] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; +} +.ddei-core-dialog-selectfontsize .content .group .group_content[data-v-9fc02a16] { + font-size: 14px; + width: 100%; + grid-template-columns: 1fr 1fr; + grid-template-rows: 30px 30px 30px 30px 30px; + display: grid; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox[data-v-9fc02a16] { + outline: none; + font-size: 15px; + margin: auto; + background: transparent; + border-radius: 4px; + width: 80px; + height: 30px; + display: flex; + justify-content: start; + align-items: center; + cursor: pointer; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox .itembox_text[data-v-9fc02a16] { + text-align: center; + white-space: nowrap; + display: table-cell; + width: 100%; + vertical-align: middle; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox_deleted[data-v-9fc02a16] { + text-decoration: line-through; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox_disabled[data-v-9fc02a16] { + color: var(--panel-title-disabled); + text-decoration: line-through; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox_disabled[data-v-9fc02a16]:hover { + cursor: not-allowed !important; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox_underline[data-v-9fc02a16] { + text-decoration: underline; +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox_selected[data-v-9fc02a16] { + font-weight: bold; + background-color: var(--panel-selected); +} +.ddei-core-dialog-selectfontsize .content .group .group_content .itembox[data-v-9fc02a16]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-textalign[data-v-fe33bdea] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + width: 240px; + position: absolute; + background-color: var(--panel-background); + height: 180px; + z-index: 999; +} +.ddei-core-dialog-textalign .content[data-v-fe33bdea] { + width: 100%; + max-height: 240px; + overflow-y: auto; + user-select: none; +} +.ddei-core-dialog-textalign .content .title[data-v-fe33bdea] { + color: var(--panel-title); + font-weight: bold; + flex: 0 0 30px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 17px; +} +.ddei-core-dialog-textalign .content .group[data-v-fe33bdea] { + color: var(--panel-title); + flex: 1 1 40px; + width: 100%; + padding: 10px; + border-top: 1px solid var(--panel-border); +} +.ddei-core-dialog-textalign .content .group .group_content[data-v-fe33bdea] { + width: 96%; + display: grid; + gap: 5px; + grid-template-columns: 1fr 1fr 1fr; +} +.ddei-core-dialog-textalign .content .group .group_content .item[data-v-fe33bdea] { + outline: none; + width: 70px; + height: 40px; + margin: auto; + background: transparent; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: 1px solid var(--panel-border); +} +.ddei-core-dialog-textalign .content .group .group_content .selected[data-v-fe33bdea] { + background-color: var(--panel-selected); +} +.ddei-core-dialog-textalign .content .group .group_content .item[data-v-fe33bdea]:hover { + background-color: var(--panel-hover); +} +.ddei-core-dialog-textalign .content .group .group_content .icon[data-v-fe33bdea] { + font-size: 28px; +} +.ddei-core-dialog-choosecontrol[data-v-5962d4b2] { + display: none; + overflow: hidden; + max-width: 220px; + position: absolute; + max-height: 220px; + z-index: 999999; +} +.ddei-core-dialog-choosecontrol-content[data-v-5962d4b2] { + max-width: 220px; + border: 1px solid var(--panel-border); + background-color: var(--panel-background); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + max-height: 220px; + overflow-y: auto; + overflow-x: hidden; + user-select: none; +} +.ddei-core-dialog-choosecontrol-content-itempanel[data-v-5962d4b2] { + display: flex; + flex-flow: row wrap; + background: var(--toolbox-background); + padding: 5px 5px 5px 5px; +} +.ddei-core-dialog-choosecontrol-content-itempanel-item[data-v-5962d4b2] { + flex: 0 0 50px !important; + height: 45px; + margin: 5px 0px; + display: flex; + overflow: hidden; + justify-content: center; + align-items: center; + flex-flow: column; +} +.ddei-core-dialog-choosecontrol-content-itempanel-item[data-v-5962d4b2]:hover { + background: var(--toolbox-control-hover); + outline: var(--toolbox-control-hover-outline); + cursor: all-scroll; +} +.ddei-core-dialog-choosecontrol-content-itempanel-item .text[data-v-5962d4b2] { + white-space: nowrap; + text-align: center; + font-size: 0.7vw; + font-weight: 400; + color: var(--toolbox-control-title); +} +.ddei-core-dialog-choosecontrol-content-itempanel-item .icon[data-v-5962d4b2] { + width: 90%; + height: 90%; + object-fit: contain; +} +.ddei-core-dialog-choosecontrol-content-itempanel-item .icon-html[data-v-5962d4b2] { + width: 50px; + height: 45px; + object-fit: contain; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-core-dialog-choosecontrol-content-itempanel-item .icon-html[data-v-5962d4b2] > * { + width: 28px !important; + height: 28px !important; + object-fit: contain; +} + +/**以下为text属性编辑器 */ +.ddei-pv-editor-text[data-v-48447048] { + border-radius: 4px; + border: 0.5px solid var(--panel-title); + height: 28px; + margin-right: 10px; + padding: 0 5px; + box-sizing: border-box; +} +.ddei-pv-editor-text--disabled[data-v-48447048] { + background-color: var(--panel-disabled) !important; +} +.ddei-pv-editor-text--disabled[data-v-48447048]:hover { + border: 1px solid var(--panel-disabled) !important; +} +.ddei-pv-editor-text[data-v-48447048]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-editor-text input[data-v-48447048] { + height: 24px; + width: 100%; + border: transparent; + outline: none; + color:var(--panel-title); + font-size: 15px; + background: transparent; +} + +.ddei-pv-base-combox[data-v-b36dc5e7] { + height: 28px; + padding-right: 10px; +} +.ddei-pv-base-combox--disabled .textinput[data-v-b36dc5e7] { + background-color: var(--panel-disabled); + height: 28px; +} +.ddei-pv-base-combox .textinput[data-v-b36dc5e7] { + width: 100%; + padding-right: 5px; + box-sizing: border-box; + border: 0.5px solid var(--panel-title); + border-radius: 4px; + display: flex; + padding-left: 5px; + height: 28px; +} +.ddei-pv-base-combox .textinput[data-v-b36dc5e7]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-base-combox .textinput input[data-v-b36dc5e7] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + border: transparent; + outline: none; + font-size: 15px; + background: transparent; + margin-top: 1px; +} +.ddei-pv-base-combox .textinput div[data-v-b36dc5e7] { + flex: 0 0 20px; +} +.ddei-pv-base-combox .display_img input[data-v-b36dc5e7] { + display: none; +} +.ddei-pv-base-combox .display_img img[data-v-b36dc5e7] { + width: 20px; + height: 20px; +} +.ddei-pv-base-combox .display_img_text input[data-v-b36dc5e7] { + width: calc(100% - 30px); +} +.ddei-pv-base-combox .display_img_text img[data-v-b36dc5e7] { + float: left; + width: 20px; + height: 20px; +} +.ddei-combox-show-dialog[data-v-b36dc5e7] { + font-size: 13px; + background: var(--panel-background); + display: none; + position: absolute; + z-index: 999; + border-radius: 4px; +} +.ddei-combox-show-dialog-content[data-v-b36dc5e7] { + width: 100%; + height: 100%; + background: var(--panel-background); + padding: 10px; + box-shadow: 4px 4px 4px hsl(0deg 0% 0% /0.25); + display:flex; + justify-content: center; + align-items: center; +} +.icon[data-v-b36dc5e7] { + font-size: 16px +} +/**以下为aligntype属性编辑器 */ +.ddei-pv-editor-aligntype-items[data-v-135fda87] { + width: 200px; + height: 150px; + display: grid; + padding: 2%; + grid-template-rows: 30% 30% 30%; + grid-template-columns: 1fr 1fr 1fr; + gap: 4px; +} +.ddei-pv-editor-aligntype-item[data-v-135fda87] { + text-align: center; + font-size: 16px; + display: table; + color: var(--panel-title); + border: 0.5px solid var(--panel-title); + background-color: var(--panel-background); + padding: 5px; +} +.ddei-pv-editor-aligntype-item div[data-v-135fda87] { + display: table-cell; +} +.ddei-pv-editor-aligntype-item[data-v-135fda87]:hover { + border: 1px solid var(--dot); + background: var(--panel-hover); + cursor: pointer; +} +.ddei-pv-editor-aligntype-item--selected[data-v-135fda87] { + border: 1px solid var(--dot); +} +.ddei-pv-border-dash-combox[data-v-2e01e102] { + height: 28px; + padding-right: 10px; +} +.ddei-pv-border-dash-combox .textinput[data-v-2e01e102] { + width: 100%; + padding-right: 5px; + border: 0.5px solid var(--panel-title); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; + height: 28px; + box-sizing: border-box; +} +.ddei-pv-border-dash-combox .textinput[data-v-2e01e102]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-border-dash-combox .textinput .div_input[data-v-2e01e102] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + height: 3px; +} +.ddei-pv-border-dash-combox .textinput .div_input div[data-v-2e01e102] { + flex: 0 0 20px; +} +.ddei-pv-border-dash-combox .textinput .div_input[data-v-2e01e102] > * { + stroke: var(--panel-title); + fill: var(--panel-background); +} +.ddei-pv-border-dash-combox--disabled .textinput[data-v-2e01e102] { + background-color: var(--panel-disabled); + height: 28px; + justify-content: center; + align-items: center; +} +.icon[data-v-2e01e102] { + font-size: 16px; +} + +/**以下为radio属性编辑器 */ +.ddei_pv_editor_bordertype[data-v-ea9f8fdd] { + border-radius: 4px; + margin-right: 10px; +} +.ddei_pv_editor_bordertype_disabled[data-v-ea9f8fdd] { + background-color: rgb(210, 210, 210) !important; +} +.ddei_pv_editor_bordertype .itembox[data-v-ea9f8fdd] { + display: flex; + justify-content: start; + align-items: center; + height: 24px; + outline: none; + font-size: 15px; + margin: 0; + padding-top: 2px; + box-sizing: border-box; + background: transparent; +} +.ddei_pv_editor_bordertype .itembox input[data-v-ea9f8fdd] { + width: 16px; + height: 16px; +} +.ddei_pv_editor_bordertype .itembox div[data-v-ea9f8fdd] { + margin-left: 15px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox[data-v-ea9f8fdd] { + float: left; + margin-right: 10px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-column .itembox[data-v-ea9f8fdd] { + margin-top: 10px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox div[data-v-ea9f8fdd] { + float: left; + margin-left: 5px; +} +.ddei-pv-color-combox[data-v-22680f1e] { + height: 28px; + padding-right: 10px; +} +.ddei-pv-color-combox .textinput[data-v-22680f1e] { + width: 100%; + padding-right: 5px; + box-sizing: border-box; + border: 0.5px solid var(--panel-title); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + padding-left: 5px; + height: 28px; +} +.ddei-pv-color-combox .textinput[data-v-22680f1e]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-color-combox .textinput input[data-v-22680f1e] { + flex: 1 1 calc(100% - 10px); + width: calc(100% - 10px); + border: transparent; + outline: none; + font-size: 15px; + background: transparent; + user-select: none; + pointer-events: none; +} +.ddei-pv-color-combox .textinput div[data-v-22680f1e] { + flex: 0 0 20px; +} +.ddei-pv-color-combox--disabled .textinput[data-v-22680f1e] { + background-color: #d2d2d2; + height: 28px; + justify-content: center; + align-items: center; +} +.icon[data-v-22680f1e] { + font-size: 16px; +} +/**以下为color属性编辑器 */ +.ddei-pv-editor-color[data-v-ec0fa5a7] { + border-radius: 4px; + height: 28px; + margin-right: 10px; + display: flex; +} +.ddei-pv-editor-color .color[data-v-ec0fa5a7] { + height: 36px; + width: 60%; + border: transparent; + outline: none; + background: transparent; + flex: 1; + margin: -4px -4px 0px -4px; +} +.ddei-pv-editor-color--disabled .textinput[data-v-ec0fa5a7] { + flex: 0 0 80px; + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + background-color: var(--panel-disabled); + border: 0.5px solid var(--panel-disabled); + border-radius: 4px; +} +.ddei-pv-editor-color--disabled .textinput[data-v-ec0fa5a7]:hover { + border: 1px solid var(--panel-disabled) !important; + box-sizing: border-box; +} +.ddei-pv-editor-color--disabled .color[data-v-ec0fa5a7] { + height: 32px; + width: 60%; + border: transparent; + outline: none; + background-color: var(--panel-title) !important; + flex: 1; + margin: -4px -4px 0px -4px; +} +.ddei-pv-editor-color .textinput[data-v-ec0fa5a7] { + flex: 0 0 80px; + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + border: 0.5px solid var(--panel-title); + border-radius: 4px; +} +.ddei-pv-editor-color .textinput[data-v-ec0fa5a7]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-editor-color .textinput input[data-v-ec0fa5a7] { + width: 100%; + border: transparent; + outline: none; + font-size: 15px; + margin: 0px 2%; + background: transparent; +} + +/**以下为combox属性编辑器 */ +.ddei-combox-show-dialog-content .itemboxs[data-v-e318138d] { + border-radius: 4px; + margin-top: 4px; + display: grid; + gap: 4px; + overflow: auto; + color: var(--panel-title); + font-size: 13px; +} +.ddei-combox-show-dialog-content .itemboxs .itembox[data-v-e318138d] { + outline: none; + font-size: 13px; + margin: auto; + background: transparent; + border:1px solid var(--panel-title); + display: flex; + border-radius: 4px; +} +.ddei-combox-show-dialog-content .itemboxs .itembox[data-v-e318138d]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_img[data-v-e318138d] { + display: table-cell; + padding-left: 5px; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_img img[data-v-e318138d] { + text-align: center; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_text[data-v-e318138d] { + text-align: center; + display: table-cell; + flex: 1; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_desc[data-v-e318138d] { + text-align: left; + display: table-cell; + font-size: 11px; + filter: brightness(60%); + padding-top: 2px; + flex: 1; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itembox--selected[data-v-e318138d] { + background-color: var(panel-title) !important; +} +.ddei-combox-show-dialog-content .itembox--deleted[data-v-e318138d] { + text-decoration: line-through; +} +.ddei-combox-show-dialog-content .itembox--disabled[data-v-e318138d] { + color: rgb(210, 210, 210); + text-decoration: line-through; +} +.ddei-combox-show-dialog-content .itembox--disabled[data-v-e318138d]:hover { + cursor: not-allowed !important; +} +.ddei-combox-show-dialog-content .itembox--underline[data-v-e318138d] { + text-decoration: underline; +} +.ddei-combox-show-dialog-content .itembox--bold .itembox_text[data-v-e318138d] { + font-weight: bold; +} + +/**以下为combox属性编辑器 */ +.ddei-pv-editor-excheckbox[data-v-4960d25a] { + margin-top: 4px; +} +.ddei-pv-editor-excheckbox--disabled[data-v-4960d25a] {} +.ddei-combox-show-dialog-content .itemboxs[data-v-4960d25a] { + border-radius: 4px; + margin-top: 4px; + display: grid; + gap: 4px; + overflow: auto; + color: var(--panel-title); + font-size: 13px; +} +.ddei-combox-show-dialog-content .itemboxs .itembox[data-v-4960d25a] { + outline: none; + font-size: 13px; + margin: auto; + background: transparent; + border: 1px solid var(--panel-title); + display: table; + border-radius: 4px; +} +.ddei-combox-show-dialog-content .itemboxs .itembox[data-v-4960d25a]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_img[data-v-4960d25a] { + display: table-cell; + padding-left: 5px; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_img img[data-v-4960d25a] { + text-align: center; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itemboxs .itembox .itembox_text[data-v-4960d25a] { + text-align: center; + display: table-cell; + width: 100%; + vertical-align: middle; +} +.ddei-combox-show-dialog-content .itembox--selected[data-v-4960d25a] { + border: 1px solid var(--dot); + overflow: hidden; + position: relative; +} +.ddei-combox-show-dialog-content .itembox--selected[data-v-4960d25a]::before { + position: absolute; + content: ""; + -webkit-font-smoothing: antialiased; + background-color: var(--dot); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + right: -8px; + bottom: -8px; + width: 15px; + height: 15px; +} +.ddei-combox-show-dialog-content .itembox--selected[data-v-4960d25a]::after { + font-size: 12px; + line-height: 12px; + right: -3px; + bottom: -2px; + position: absolute; + -webkit-font-smoothing: antialiased; + content: "✓"; + -webkit-transform: scale(0.5); + -ms-transform: scale(0.5); + transform: scale(0.5); + color: #fff; +} +.ddei-combox-show-dialog-content .itembox--deleted[data-v-4960d25a] { + text-decoration: line-through; +} +.ddei-combox-show-dialog-content .itembox--disabled[data-v-4960d25a] { + color: rgb(210, 210, 210); +} +.ddei-combox-show-dialog-content .itembox--disabled[data-v-4960d25a]:hover { + cursor: not-allowed !important; +} +.ddei-combox-show-dialog-content .itembox--underline[data-v-4960d25a] { + text-decoration: underline; +} +.ddei-combox-show-dialog-content .itembox--bold .itembox_text[data-v-4960d25a] { + font-weight: bold; +} + +/**以下为radio属性编辑器 */ +.ddei-pv-editor-filltype[data-v-64114ba5] { + border-radius: 4px; + margin-right: 10px; +} +.ddei-pv-editor-filltype--disabled[data-v-64114ba5] { + background-color: var(--panel-disabled) !important; +} +.ddei-pv-editor-filltype .itembox[data-v-64114ba5] { + display: flex; + justify-content: start; + align-items: center; + height: 24px; + outline: none; + font-size: 15px; + margin: 0; + padding-top: 2px; + background: transparent; +} +.ddei-pv-editor-filltype .itembox input[data-v-64114ba5] { + width: 16px; + height: 16px; +} +.ddei-pv-editor-filltype .itembox div[data-v-64114ba5] { + margin-left: 15px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox[data-v-64114ba5] { + float: left; + margin-right: 10px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-column .itembox[data-v-64114ba5] { + margin-top: 10px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox div[data-v-64114ba5] { + float: left; + margin-left: 5px; +} + +/**以下为range属性编辑器 */ +.ddei-pv-editor-fontsize[data-v-b2ded6b2] { + border-radius: 4px; + height: 28px; + margin-right: 10px; + display: flex; +} +.ddei-pv-editor-fontsize .range[data-v-b2ded6b2] { + height: 7px; + width: 60%; + border: transparent; + outline: none; + background: transparent; + flex: 1; + margin: auto; +} +.ddei-pv-editor-fontsize--disabled .range[data-v-b2ded6b2] { + height: 7px; + width: 60%; + border: transparent; + outline: none; + background-color: var(--panel-disabled) !important; + flex: 1; + margin: auto; +} +.ddei-pv-editor-fontsize .textinput[data-v-b2ded6b2] { + flex: 0 0 80px; + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + color:var(--panel-title); + border: 0.5px solid var(--panel-title); + border-radius: 4px; + box-sizing: border-box; + display: flex; +} +.ddei-pv-editor-fontsize .textinput[data-v-b2ded6b2]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-editor-fontsize--disabled .textinput[data-v-b2ded6b2] { + flex: 0 0 80px; + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + background-color: var(--panel-disabled); + border: 0.5px solid var(--panel-disabled); + border-radius: 4px; + display: flex; +} +.ddei-pv-editor-fontsize--disabled .textinput[data-v-b2ded6b2]:hover { + border: 1px solid var(--panel-disabled) !important; +} +.ddei-pv-editor-fontsize .textinput input[data-v-b2ded6b2] { + flex: 1 1 50px; + border: transparent; + outline: none; + font-size: 15px; + color:var(--panel-title); + margin: 0px 2%; + background: transparent; +} + +/**以下为range属性编辑器 */ +.ddei-pv-editor-image[data-v-d7cc496a] { + border-radius: 4px; + height: 28px; + margin-right: 10px; +} +.ddei-pv-editor-image .textinput[data-v-d7cc496a] { + width: 100%; + height: 28px; + padding-left: 5px; + padding-right: 5px; + border: 0.5px solid var(--panel-title); + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-pv-editor-image .textinput[data-v-d7cc496a]:hover { + border: 1px solid var(--dot); +} +.ddei-pv-editor-image--disabled .textinput[data-v-d7cc496a] { + width: 100%; + height: 28px; + padding-left: 5px; + padding-right: 5px; + border: 0.5px solid var(--panel-disabled); + border-radius: 4px; + display: flex; + background-color: var(--panel-disabled); + justify-content: center; + align-items: center; +} +.ddei-pv-editor-image--disabled .textinput[data-v-d7cc496a]:hover { + border: 1px solid var(--panel-disabled) !important; + box-sizing: border-box; +} +.ddei-pv-editor-image .textinput input[data-v-d7cc496a] { + flex: 1 1 calc(100% - 20px); + width: calc(100% - 20px); + border: transparent; + outline: none; + color:var(--panel-title); + font-size: 16px; + margin: 0px 2%; + background: transparent; +} +.ddei-pv-editor-image .textinput .icon[data-v-d7cc496a] { + flex: 0 0 20px; + font-size: 16px +} +.ddei-pv-editor-image .textinput .icon[data-v-d7cc496a]:hover { + cursor: pointer; + background: var(--panel-hover); +} +.textinput .fileinput[data-v-d7cc496a] { + display: none; +} +/**以下为radio属性编辑器 */ +.ddei-pv-editor-radio[data-v-d06209f3] { + border-radius: 4px; + margin-right: 10px; +} +.ddei-pv-editor-radio--disabled[data-v-d06209f3] { + background-color: #d2d2d2 !important; +} +.ddei-pv-editor-radio .itembox[data-v-d06209f3] { + display: flex; + justify-content: start; + align-items: center; + height: 24px; + outline: none; + font-size: 15px; + margin: 0; + padding-top: 2px; + background: transparent; +} +.ddei-pv-editor-radio .itembox input[data-v-d06209f3] { + width: 16px; + height: 16px; +} +.ddei-pv-editor-radio .itembox div[data-v-d06209f3] { + margin-left: 15px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox[data-v-d06209f3] { + float: left; + margin-right: 10px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-row .itembox div[data-v-d06209f3] { + float: left; + margin-left: 5px; +} +.ddei-editor-pv-subgroup-view-tab-panel-editors-column .itembox[data-v-d06209f3] { + margin-top: 10px; +} +/**以下为range属性编辑器 */ +.ddei-pv-editor-range[data-v-713ecc9b] { + border-radius: 4px; + height: 28px; + margin-right: 10px; + display: flex; +} +.ddei-pv-editor-range .range[data-v-713ecc9b] { + height: 7px; + width: 60%; + border: transparent; + outline: none; + background: transparent; + flex: 1; + margin: auto; +} +.ddei-pv-editor-range .textinput[data-v-713ecc9b] { + flex: 0 0 80px; + margin-left: 10px; + padding: 2px 5px 0px 5px; + border: 0.5px solid var(--panel-title); + border-radius: 4px; +} +.ddei-pv-editor-range .textinput input[data-v-713ecc9b] { + width: 100%; + border: transparent; + outline: none; + font-size: 15px; + margin: 0px 2%; + color: var(--panel-title); + background: transparent; +} +.ddei-pv-editor-range .textinput[data-v-713ecc9b]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-editor-range--disabled .range[data-v-713ecc9b] { + height: 7px; + width: 60%; + border: transparent; + outline: none; + background-color: var(--panel-disabled) !important; + flex: 1; + margin: auto; +} +.ddei-pv-editor-range--disabled .textinput[data-v-713ecc9b] { + flex: 0 0 80px; + margin-left: 10px; + padding-left: 5px; + padding-right: 5px; + background-color: var(--panel-disabled); + border: 0.5px solid var(--panel-disabled); + border-radius: 4px; +} +.ddei-pv-editor-range--disabled .textinput[data-v-713ecc9b]:hover { + border: 1px solid var(--panel-disabled) !important; + box-sizing: border-box; +} +.ddei-pv-editor-range--disabled .textinput input[data-v-713ecc9b] { + width: 100%; + border: transparent; + outline: none; + font-size: 15px; + margin: 0px 2%; + color: var(--panel-title); + background: transparent; +} + +/**以下为checkbox属性编辑器 */ +.ddei-pv-editor-switch-excheckbox[data-v-5a394c0d] { + border-radius: 4px; + margin-right: 10px; + box-sizing: border-box; +} +.ddei-pv-editor-switch-excheckbox--disabled[data-v-5a394c0d] { + background-color: var(--panel-disabled) !important; +} +.ddei-pv-editor-switch-excheckbox .title[data-v-5a394c0d] { + float: left; + color:var(--panel-title); +} +.ddei-pv-editor-switch-excheckbox .chk_state[data-v-5a394c0d] { + border: 1px solid var(--panel-title); + width: 14px; + height: 14px; + margin-right: 10px; + margin-top: 4px; + float: left; + box-sizing: border-box; +} +.ddei-pv-editor-switch-excheckbox:hover .chk_state[data-v-5a394c0d] { + background: var(--dot); +} +.ddei-pv-editor-switch-excheckbox .chk_state_checked[data-v-5a394c0d] { + border: 1px solid var(--panel-title); + width: 14px; + height: 14px; + margin-right: 10px; + margin-top: 4px; + float: left; + background-color: var(--dot); + box-sizing: border-box; + color: #fff; +} +.ddei-pv-editor-switch-excheckbox .chk_state_checked span[data-v-5a394c0d] { + margin-top: -4.5px; + margin-left: 0.5px; + display: block; +} + +/**以下为text属性编辑器 */ +.ddei-pv-editor-textarea[data-v-ac742ab1] { + border-radius: 4px; + border: 0.5px solid var(--panel-title); + height: 80px; + margin-right: 10px; + padding: 0 5px; + display: flex; + box-sizing: border-box; +} +.ddei-pv-editor-textarea--disabled[data-v-ac742ab1] { + background-color: var(--panel-disabled) !important; +} +.ddei-pv-editor-textarea--disabled[data-v-ac742ab1]:hover { + border: 1px solid var(--panel-disabled) !important; +} +.ddei-pv-editor-textarea[data-v-ac742ab1]:hover { + border: 1px solid var(--dot); + box-sizing: border-box; +} +.ddei-pv-editor-textarea textarea[data-v-ac742ab1] { + flex: 1; + border: transparent; + outline: none; + font-size: 15px; + margin: 1px 0; + color:var(--panel-title); + width: 100%; + background: transparent; +} +.ddei-editor[theme='ddei-core-theme-default'] { + --background: white; + --theme: #F5F5F5; + --text: black; + --dot: #176eff; + --hover: #e7e7e7; + --icon: #424242; + --border:#D5D5DF; + --placeholder: #AdAdAd; + --scroll-background: var(--theme); + --scroll-hover: var(--hover); + --scroll-border: var(--border); + + --panel-header:var(--theme); + --panel-background: var(--background); + --panel-title: var(--text); + --panel-border: var(--border); + --panel-hover: var(--hover); + --panel-disabled: var(--theme); + --panel-selected: var(--hover); + --panel-title-disabled: #AdAdAd; + --panel-title-selected: var(--text); + + + --toolbox-header:var(--theme); + --toolbox-background:var(--background); + --toolbox-title:var(--text); + --toolbox-hover:var(--hover); + --toolbox-control-hover: #EDEFFF; + --toolbox-control-hover-outline: 2px solid #BED0EF; + --toolbox-control-title: var(--text); + + + --topmenu-background: var(--background); + --topmenu-header: var(--theme); + + + + --canvas-rule-background: var(--background); + --canvas-rule-border: #E0E3E9; + --canvas-scroll-background: var(--background); + --canvas-scroll-border: #E0E3E9; + --canvas-grid-line: rgb(220, 220, 220); + --canvas-grid-dot: rgb(121, 121, 121); + --canvas-control-border: black; + --canvas-control-background: white; + --canvas-control-title: #252525; + + --canvas-mark-title: #252525; + --canvas-text-selection: #97bdf2; + --canvas-text-cursor: black; +}.ddei-editor[theme='ddei-core-theme-black'] { + --background: #212121; + --theme: #2c2c2c; + --text: white; + --dot: #176eff; + --hover: rgb(60,60,60); + --icon: white; + --border: #DFDFDF; + --placeholder: #A1A1A1; + --scroll-background: var(--theme); + --scroll-hover: var(--hover); + --scroll-border: white; + + --panel-header: var(--theme); + --panel-background: var(--background); + --panel-title: var(--text); + --panel-border: var(--border); + --panel-hover: var(--hover); + --panel-disabled: var(--theme); + --panel-selected: var(--hover); + --panel-title-disabled: #A1A1A1; + --panel-title-selected: var(--text); + + + + --toolbox-header: var(--theme); + --toolbox-background: var(--background); + --toolbox-title: var(--text); + --toolbox-hover: var(--hover); + --toolbox-control-hover: var(--dot); + --toolbox-control-hover-outline: 2px solid #BED0EF; + --toolbox-control-title: var(--text); + + + --canvas-rule-background: var(--theme); + --canvas-rule-border: white; + --canvas-scroll-background: var(--theme); + --canvas-scroll-border: white; + --canvas-grid-line: rgb(121, 121, 121); + --canvas-grid-dot: rgb(121, 121, 121); + --canvas-control-border: white; + --canvas-control-background: var(--theme); + --canvas-control-title: white; + + --canvas-mark-title: white; + --canvas-text-selection: #97bdf2; + --canvas-text-cursor: white; + +}.iconfont { + font-family: 'iconfont' !important; + font-size: 24px; + color: #424242; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.iconfont-small { + font-size: 6px !important; +}@font-face { + font-family: "iconfont"; /* Project id 4428875 */ + src: url('data:font/woff2;base64,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') format('woff2'), + url('data:font/woff;base64,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') format('woff'), + url('data:font/ttf;base64,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5j8AAAARAADmQAAA5kAAAAASAADmQQAA5kEAAAAPAADmQgAA5kIAAAATAADmRQAA5kUAAAAOAADmXQAA5l0AAABhAADmXgAA5l4AAAByAADmXwAA5l8AAACIAADmYAAA5mAAAACFAADmYQAA5mEAAACGAADmYgAA5mIAAACHAADmYwAA5mMAAACJAADmZAAA5mQAAABmAADmZQAA5mUAAABnAADmZgAA5mYAAABoAADmZwAA5mcAAAB7AADmaAAA5mgAAAB6AADmaQAA5mkAAAB8AADmagAA5moAAAB9AADmawAA5msAAAB+AADmbAAA5mwAAAB/AADmbQAA5m0AAACAAADmbgAA5m4AAACBAADmbwAA5m8AAACCAADmcAAA5nAAAACDAADmcQAA5nEAAACEAADmcgAA5nIAAABpAADmcwAA5nMAAABqAADmdAAA5nQAAABrAADmdQAA5nUAAABsAADmdgAA5nYAAAAqAADmdwAA5ncAAABtAADmeAAA5ngAAABuAADmeQAA5nkAAABvAADmegAA5noAAABwAADmewAA5nsAAABxAADmfAAA5nwAAABzAADmfQAA5n0AAAB0AADmfgAA5n4AAAB1AADmfwAA5n8AAAB2AADmgAAA5oAAAAB3AADmgQAA5oEAAAB4AADmggAA5oIAAAB5AADmgwAA5oMAAABeAADmhAAA5oQAAABfAADmhQAA5oUAAABgAADmhgAA5oYAAABiAADmhwAA5ocAAABjAADmiAAA5ogAAABkAADmiQAA5okAAABlAADmigAA5ooAAAAVAADmiwAA5osAAAAWAADmjAAA5owAAAAXAADmjQAA5o0AAAAYAADmjgAA5o4AAAAZAADmjwAA5o8AAAAaAADmkAAA5pAAAAAbAADmkQAA5pEAAAAcAADmkgAA5pIAAAAdAADmkwAA5pMAAAAeAADmlAAA5pQAAAAfAADmlQAA5pUAAAAgAADmlgAA5pYAAAAhAADmlwAA5pcAAAAiAADmmAAA5pgAAAAjAADmmQAA5pkAAAAkAADmmgAA5poAAAAlAADmmwAA5psAAAAmAADmnAAA5pwAAAAnAADmnQAA5p0AAAAoAADmngAA5p4AAAApAADmnwAA5p8AAAAqAADmoAAA5qAAAAArAADmoQAA5qEAAAAsAADmogAA5qIAAAAtAADmowAA5qMAAAAuAADmpAAA5qQAAAAvAADmpQAA5qUAAAAwAADmpgAA5qYAAAAxAADmpwAA5qcAAAAyAADmqAAA5qgAAAAzAADmqQAA5qkAAAA0AADmqgAA5qoAAAA1AADmqwAA5qsAAAA2AADmrAAA5qwAAAA3AADmrQAA5q0AAAA4AADmrgAA5q4AAAArAADmrwAA5q8AAAA5AADmsAAA5rAAAAA6AADmsQAA5rEAAAA7AADmsgAA5rIAAAA8AADmswAA5rMAAAA9AADmtAAA5rQAAAA+AADmtQAA5rUAAAA/AADmtgAA5rYAAABAAADmtwAA5rcAAABBAADmuAAA5rgAAABCAADmuQAA5rkAAABDAADmugAA5roAAABEAADmuwAA5rsAAABFAADmvAAA5rwAAABGAADmvQAA5r0AAABHAADmvgAA5r4AAABIAADmvwAA5r8AAABJAADmwAAA5sAAAABKAADmwQAA5sEAAABLAADmwgAA5sIAAABMAADmwwAA5sMAAABNAADmxAAA5sQAAABOAADmxQAA5sUAAABPAADmxgAA5sYAAABQAADmxwAA5scAAABRAADmyAAA5sgAAABSAADmyQAA5skAAABTAADmygAA5soAAABUAADmywAA5ssAAABVAADmzAAA5swAAABWAADmzQAA5s0AAABXAADmzgAA5s4AAABYAADmzwAA5s8AAABZAADm0AAA5tAAAABaAADm0QAA5tEAAABbAADm0gAA5tIAAABcAADm0wAA5tMAAABdAADm1AAA5tQAAAAIAADm1QAA5tUAAAAJAADm1gAA5tYAAAAKAADm1wAA5tcAAAALAADm2AAA5tgAAAAMAADm2QAA5tkAAAANAADm2gAA5toAAAAPAADm4AAA5uAAAAAFAADm4wAA5uMAAAAEAADm6AAA5ugAAAADAADm6gAA5uoAAAACAADm7wAA5u8AAAABAADnAAAA5wAAAAAHAAAAAAAAAJwBRAGiAmgCrAM+A4QEEgR8BMwFdgX2BmwGqgb4B5AH2ghqCOAJEgmcCiYKkgryC3gMDgySDRINag26DjgOrg8UD0QPmg++ECAQdhHGEd4SLhK2EwITUhQAFNwVJBVuFcoWVBbYFzIXzBgmGIIY1BkiGboaBhpWGpoa6Bs4G3QbxBwKHFgcpB0AHVwdoB3IHhAeUB6SHvgfGB88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AVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsACWFsbC1tYXRjaAdyZXBsYWNlCHNob3VjYW5nC3JlcGxhY2UtYWxsB3poaWh1YW4Gc2hhcGVzDnRleHQtdW5kZXJsaW5lEHNoYXBlLWNoYW5nZXNpemUPc2hhcGVzLWNhdGFsb2d5B2V4cGFuZDEOcHJpbnQtZGlzYWJsZWQFcHJpbnQGdW5sb2NrBmVtYWlsMQ1ib3JkZXItcGVuY2lsCmNvcHktZmlsZTEOYWRkLWZpbGUxLWljb24PYWRkLWZvbGRlci1pY29uDWFkZC1maWxlLWljb24EZmlsZQZsYXllcnMMY2FuY2VsLW1lcmdlBnJlbW92ZQthLXppeXVhbjQwOAVtZXJnZQ5lZGl0LXByb3BlcmllcwthLXppeXVhbjM5NQVwaG9uZQR1c2VyBnNlYXJjaApiYWNrZ3JvdW5kBGxvY2sGbG9ja2VkBWNsb3NlDGNvbnRyb2wtaWNvbgJvawVzaGFyZQdwdWJsaXNoB3NldHRpbmcGcmVkdWNlCGRvd25sb2FkBm1lcmdlMQRmbGlwBWFsaWduBGhhbmQJbGluay1saW5lCHNlbGVjdG9yCHBvc2l0aW9uBmFuY2hvcgdtb3ZlLXVwCW1vdmUtZG93bgpmb250LWFsaWduCG1vdmUtdG9wEHRleHQtYWxpZ24tcmlnaHQPdGV4dC1hbGlnbi1sZWZ0CG1pcnJvci1oDXNoYXBlLWFsaWduLWgLbW92ZS1ib3R0b20Sc2hhcGUtYWxpZ24tYm90dG9tDXNoYXBlLWFsaWduLXYQc2hhcGUtZXF1LWRpc3Qtdg9zaGFwZS1hbGlnbi10b3ARc2hhcGUtYWxpZ24tcmlnaHQEZm9udApmb250LWNvbG9yEHNoYXBlLWVxdS1kaXN0LWgQc2hhcGUtYWxpZ24tbGVmdAZlcmFzZXIEdGV4dAxhZGQtZm9udHNpemUDdXAyB2V4cGFuZDIHZXhwYW5kMwtmb250LWl0YWxpYwVkb3duMQ9mb250LWRlbGV0ZWxpbmUIYnRuLWRvd24JYnRuLWxlZnQxDWVxdS1ib3RoLXNpZGUPcmVkdWNlLWZvbnRzaXplBGZpbGwFbGVmdDIFZmlsbDEGYnRuLXVwCWxvY2stY2FzZQtlcXUtdXAtZG93bgdleHBhbmQ0BGJvbGQGcmlnaHQyCGJ0bi1sZWZ0B2J0bi11cDEJYnRuLXJpZ2h0CmJ0bi1yaWdodDEIYnRuLXBsYXkGcmV2ZXJ0BnJlbG9hZApmaWxsLWNvbG9yCWFkZC1sYXllcghyb3RhdGUtMAxyZWR1Y2UtbGF5ZXIGaW1wb3J0BGdvb2QLYS16aXl1YW40MDMLYS16aXl1YW40MDQOdGV4dC1zdWJ0eXBlLTEDYmFkCGNhbGVuZGFyC2NhbmNlbC1saW5rDnRleHQtc3VidHlwZS0zCnN1aXQtcmF0aW8EbWFyawthbGwtZGlzcGxheQRsaW5rBmdyb3Vwcwpyb3RhdGUtMjcwBmF0dGFjaAljbG9zZS1leWUJcm90YXRlLTkwA2FkZAxjYW5jZWwtbGluazIIb3Blbi1leWUEc2F2ZQVicnVzaAJ1cAljb3B5LWZpbGUGZm9sZGVyBXBhc3RlCG5ldy1maWxlBXJpZ2h0BGxlZnQEZG93bgNjdXQOdGV4dC1zdWJ0eXBlLTILYS16aXl1YW40MDcEd2FybgxjYW5jZWwtbGluazEEZGluZwAAAAAA') format('truetype'); +} + +.icon { + font-family: "iconfont" !important; + font-size: 26px; + width: 26px; + height: 26px; + color: #424242; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + + +.icon-all-match:before { + content: "\\e6ef"; +} + +.icon-replace:before { + content: "\\e6ea"; +} + +.icon-shoucang:before { + content: "\\e6e8"; +} + +.icon-replace-all:before { + content: "\\e6e3"; +} + +.icon-zhihuan:before { + content: "\\e6e0"; +} + +.icon-shapes:before { + content: "\\e63a"; +} + +.icon-text-underline:before { + content: "\\e700"; +} + +.icon-shape-changesize:before { + content: "\\e6d4"; +} + +.icon-shapes-catalogy:before { + content: "\\e6d5"; +} + +.icon-expand1:before { + content: "\\e6d6"; +} + +.icon-print-disabled:before { + content: "\\e6d7"; +} + +.icon-print:before { + content: "\\e6d8"; +} + +.icon-unlock:before { + content: "\\e6d9"; +} + +.icon-email1:before { + content: "\\e645"; +} + +.icon-border-pencil:before { + content: "\\e6da"; +} + +.icon-copy-file1:before { + content: "\\e63e"; +} + +.icon-add-file1-icon:before { + content: "\\e63f"; +} + +.icon-add-folder-icon:before { + content: "\\e640"; +} + +.icon-edit-file:before { + content: "\\e641"; +} + +.icon-add-file-icon:before { + content: "\\e642"; +} + +.icon-file:before { + content: "\\e638"; +} + +.icon-layers:before { + content: "\\e68a"; +} + +.icon-cancel-merge:before { + content: "\\e68b"; +} + +.icon-remove:before { + content: "\\e68c"; +} + +.icon-a-ziyuan408:before { + content: "\\e68d"; +} + +.icon-merge:before { + content: "\\e68e"; +} + +.icon-edit-properies:before { + content: "\\e68f"; +} + +.icon-a-ziyuan395:before { + content: "\\e690"; +} + +.icon-phone:before { + content: "\\e691"; +} + +.icon-user:before { + content: "\\e692"; +} + +.icon-search:before { + content: "\\e693"; +} + +.icon-background:before { + content: "\\e694"; +} + +.icon-lock:before { + content: "\\e695"; +} + +.icon-locked:before { + content: "\\e696"; +} + +.icon-close:before { + content: "\\e697"; +} + +.icon-control-icon:before { + content: "\\e698"; +} + +.icon-ok:before { + content: "\\e699"; +} + +.icon-share:before { + content: "\\e69a"; +} + +.icon-publish:before { + content: "\\e69b"; +} + +.icon-setting:before { + content: "\\e69c"; +} + +.icon-reduce:before { + content: "\\e69d"; +} + +.icon-download:before { + content: "\\e69e"; +} + +.icon-merge1:before { + content: "\\e69f"; +} + +.icon-flip:before { + content: "\\e6a0"; +} + +.icon-align:before { + content: "\\e6a1"; +} + +.icon-hand:before { + content: "\\e6a2"; +} + +.icon-link-line:before { + content: "\\e6a3"; +} + +.icon-selector:before { + content: "\\e6a4"; +} + +.icon-position:before { + content: "\\e6a5"; +} + +.icon-anchor:before { + content: "\\e6a6"; +} + +.icon-move-up:before { + content: "\\e6a7"; +} + +.icon-move-down:before { + content: "\\e6a8"; +} + +.icon-font-align:before { + content: "\\e6a9"; +} + +.icon-move-top:before { + content: "\\e6aa"; +} + +.icon-text-align-right:before { + content: "\\e6ab"; +} + +.icon-text-align-left:before { + content: "\\e6ac"; +} + +.icon-mirror-h:before { + content: "\\e6ad"; +} + +.icon-mirror-v:before { + content: "\\e6ae"; +} + +.icon-shape-align-h:before { + content: "\\e6af"; +} + +.icon-move-bottom:before { + content: "\\e6b0"; +} + +.icon-shape-align-bottom:before { + content: "\\e6b1"; +} + +.icon-shape-align-v:before { + content: "\\e6b2"; +} + +.icon-shape-equ-dist-v:before { + content: "\\e6b3"; +} + +.icon-shape-align-top:before { + content: "\\e6b4"; +} + +.icon-shape-align-right:before { + content: "\\e6b5"; +} + +.icon-font:before { + content: "\\e6b6"; +} + +.icon-font-color:before { + content: "\\e6b7"; +} + +.icon-shape-equ-dist-h:before { + content: "\\e6b8"; +} + +.icon-shape-align-left:before { + content: "\\e6b9"; +} + +.icon-eraser:before { + content: "\\e6ba"; +} + +.icon-text:before { + content: "\\e6bb"; +} + +.icon-add-fontsize:before { + content: "\\e6bc"; +} + +.icon-up2:before { + content: "\\e6bd"; +} + +.icon-expand2:before { + content: "\\e6be"; +} + +.icon-expand3:before { + content: "\\e6bf"; +} + +.icon-font-italic:before { + content: "\\e6c0"; +} + +.icon-down1:before { + content: "\\e6c1"; +} + +.icon-font-deleteline:before { + content: "\\e6c2"; +} + +.icon-btn-down:before { + content: "\\e6c3"; +} + +.icon-btn-left1:before { + content: "\\e6c4"; +} + +.icon-equ-both-side:before { + content: "\\e6c5"; +} + +.icon-reduce-fontsize:before { + content: "\\e6c6"; +} + +.icon-fill:before { + content: "\\e6c7"; +} + +.icon-left2:before { + content: "\\e6c8"; +} + +.icon-fill1:before { + content: "\\e6c9"; +} + +.icon-btn-up:before { + content: "\\e6ca"; +} + +.icon-lock-case:before { + content: "\\e6cb"; +} + +.icon-equ-up-down:before { + content: "\\e6cc"; +} + +.icon-expand4:before { + content: "\\e6cd"; +} + +.icon-bold:before { + content: "\\e6ce"; +} + +.icon-right2:before { + content: "\\e6cf"; +} + +.icon-btn-left:before { + content: "\\e6d0"; +} + +.icon-btn-up1:before { + content: "\\e6d1"; +} + +.icon-btn-right:before { + content: "\\e6d2"; +} + +.icon-btn-right1:before { + content: "\\e6d3"; +} + +.icon-btn-play:before { + content: "\\e683"; +} + +.icon-revert:before { + content: "\\e684"; +} + +.icon-reload:before { + content: "\\e685"; +} + +.icon-fill-color:before { + content: "\\e65d"; +} + +.icon-add-layer:before { + content: "\\e686"; +} + +.icon-rotate-0:before { + content: "\\e687"; +} + +.icon-reduce-layer:before { + content: "\\e688"; +} + +.icon-import:before { + content: "\\e689"; +} + +.icon-good:before { + content: "\\e664"; +} + +.icon-a-ziyuan403:before { + content: "\\e665"; +} + +.icon-a-ziyuan404:before { + content: "\\e666"; +} + +.icon-text-subtype-1:before { + content: "\\e672"; +} + +.icon-bad:before { + content: "\\e673"; +} + +.icon-calendar:before { + content: "\\e674"; +} + +.icon-cancel-link:before { + content: "\\e675"; +} + +.icon-merge2:before { + content: "\\e676"; +} + +.icon-text-subtype-3:before { + content: "\\e677"; +} + +.icon-suit-ratio:before { + content: "\\e678"; +} + +.icon-mark:before { + content: "\\e679"; +} + +.icon-all-display:before { + content: "\\e67a"; +} + +.icon-link:before { + content: "\\e67b"; +} + +.icon-groups:before { + content: "\\e65e"; +} + +.icon-rotate-270:before { + content: "\\e67c"; +} + +.icon-attach:before { + content: "\\e67d"; +} + +.icon-close-eye:before { + content: "\\e67e"; +} + +.icon-rotate-90:before { + content: "\\e67f"; +} + +.icon-add:before { + content: "\\e680"; +} + +.icon-cancel-link2:before { + content: "\\e681"; +} + +.icon-open-eye:before { + content: "\\e682"; +} + +.icon-save:before { + content: "\\e668"; +} + +.icon-brush:before { + content: "\\e667"; +} + +.icon-up:before { + content: "\\e669"; +} + +.icon-copy-file:before { + content: "\\e66a"; +} + +.icon-folder:before { + content: "\\e66b"; +} + +.icon-paste:before { + content: "\\e66c"; +} + +.icon-new-file:before { + content: "\\e66d"; +} + +.icon-right:before { + content: "\\e66e"; +} + +.icon-left:before { + content: "\\e66f"; +} + +.icon-down:before { + content: "\\e670"; +} + +.icon-cut:before { + content: "\\e671"; +} + +.icon-text-subtype-2:before { + content: "\\e660"; +} + +.icon-a-ziyuan407:before { + content: "\\e661"; +} + +.icon-warn:before { + content: "\\e662"; +} + +.icon-cancel-link1:before { + content: "\\e65f"; +} + +.icon-ding:before { + content: "\\e663"; +} + +.ddei-editor { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + background-color: var(--background); +} +.ddei-editor .icon { + color: var(--icon); + width: 1em; + height: 1em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; +} +.ddei-editor img { + -webkit-user-drag: none; + user-drag: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-editor div { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.ddei-editor * { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} +.ddei-editor *::-webkit-scrollbar { + width: 6px; + height: 6px; +} +.ddei-editor *::-webkit-scrollbar-thumb { + background-color: var(--scroll-hover); + -webkit-box-shadow: inset1px1px0rgba(0, 0, 0, 0.1); +} +.ddei-editor *:hover::-webkit-scrollbar-thumb { + background-color: var(--scroll-hover); + -webkit-box-shadow: inset1px1px0rgba(0, 0, 0, 0.1); +} +.ddei-editor *::-webkit-scrollbar-thumb:hover { + background-color: var(--scroll-hover); + -webkit-box-shadow: inset1px1px0rgba(0, 0, 0, 0.1); +} +.ddei-editor *::-webkit-scrollbar-track { + -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0); + background-color: var(--scroll-background); +} +.ddei-editor *::-webkit-scrollbar-track:hover { + -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.4); + background-color: var(--scroll-background); +} +.ddei-cut-img-div { + width: 0.1px; + height: 0.1px; + display: flex; +} +.dialog-background-div { + width: 100%; + height: 100vh; + opacity: 50%; + z-index: 500; + left: 0; + top: 0; + display: none; + position: absolute; +} +/**以下是快捷样式编辑的弹出框 */ +.ddei-core-dialog-quickpop[data-v-c4337de3] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + position: absolute; + background-color: var(--panel-background); + height: 80px; + z-index: 990; + user-select: none; + color: var(--panel-title); +} +.ddei-core-dialog-quickpop .content[data-v-c4337de3] { + width: 100%; + max-height: 70px; + overflow-y: hidden; + display: flex; + justify-content: start; + align-items: center; + font-size: 14px; +} +.ddei-core-dialog-quickpop .content .panel1[data-v-c4337de3] { + margin-top: 20px; + width: 170px; + height: 70px; + border-right: 1px solid var(--panel-border); +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-content-1[data-v-c4337de3] { + width: 100px; + margin-left: 10px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-content-2[data-v-c4337de3] { + width: 50px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-content-3[data-v-c4337de3] { + width: 30px; + padding-left: 10px; + margin-top: 7px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-split-3[data-v-c4337de3] { + margin-left: 15px; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-content-4[data-v-c4337de3] { + padding: 0px 5px; + margin-top: 10px; + float: left; + border-radius: 2px; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-split-4[data-v-c4337de3] { + margin-right: 5px; +} +.ddei-core-dialog-quickpop .content .panel1 .panel1-content-4[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel2[data-v-c4337de3] { + margin-top: 10px; + width: 60px; + height: 60px; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + border-right: 1px solid var(--panel-border); +} +.ddei-core-dialog-quickpop .content .panel2 .panel2-content[data-v-c4337de3] { + flex: 1; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel2 .panel2-content[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel3[data-v-c4337de3] { + margin-top: 10px; + width: 150px; + height: 60px; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + border-right: 1px solid var(--panel-border); +} +.ddei-core-dialog-quickpop .content .panel3 .panel3-content[data-v-c4337de3] { + flex: 1; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel3 .panel3-content[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel3 .i1 .icon[data-v-c4337de3] { + font-size: 20px; + margin-top: 5px; + margin-bottom: 2px; +} +.ddei-core-dialog-quickpop .content .panel3 .i2 .ddei-editor-quick-fat-item-box[data-v-c4337de3] { + width: 22px; + height: 26px; + margin: 0 auto; + margin-top: 4px; +} +.ddei-core-dialog-quickpop .content .panel3 .i2 .ddei-editor-quick-fat-item-box[data-v-c4337de3] .icon { + flex: 0 0 22px !important; +} +.ddei-core-dialog-quickpop .content .panel3 .i3 .ddei-editor-quick-fat-item-box[data-v-c4337de3] { + width: 22px; + height: 28px; + margin: 0 auto; + margin-top: 3px; +} +.ddei-core-dialog-quickpop .content .panel3 .i3 .ddei-editor-quick-fat-item-box[data-v-c4337de3] .icon { + flex: 0 0 24px !important; +} +.ddei-core-dialog-quickpop .content .panel4[data-v-c4337de3] { + margin-top: 10px; + padding-left: 10px; + height: 60px; + width: 150px; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} +.ddei-core-dialog-quickpop .content .panel4 .panel4-content[data-v-c4337de3] { + margin-right: 10px; + flex: 1; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel4 .panel4-content .icon[data-v-c4337de3] { + margin-top: 2px; + margin-bottom: 1px; +} +.ddei-core-dialog-quickpop .content .panel4 .panel4-content[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel5[data-v-c4337de3] { + margin-top: 10px; + height: 60px; + padding-left: 10px; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + border-left: 1px solid var(--panel-border); +} +.ddei-core-dialog-quickpop .content .panel5 .panel5-content[data-v-c4337de3] { + margin-right: 10px; + flex: 1; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel5 .panel5-content .text[data-v-c4337de3] { + white-space: nowrap; +} +.ddei-core-dialog-quickpop .content .panel5 .panel5-content .icon[data-v-c4337de3] { + margin-top: 2px; + margin-bottom: 1px; +} +.ddei-core-dialog-quickpop .content .panel5 .panel5-content[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel12[data-v-c4337de3] { + margin-top: 20px; + width: 225px; + height: 70px; + border-right: 1px solid var(--panel-border); +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-1[data-v-c4337de3] { + width: 100px; + margin-left: 10px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-2[data-v-c4337de3] { + width: 50px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-5[data-v-c4337de3] { + padding-left: 5px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-3[data-v-c4337de3] { + width: 30px; + padding-left: 10px; + margin-top: 10px; + float: left; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-split-3[data-v-c4337de3] { + margin-left: 12px !important; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-4[data-v-c4337de3] { + padding: 0px 5px; + margin-left: 2px; + margin-top: 12px; + float: left; + border-radius: 2px; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-split-4[data-v-c4337de3] { + margin-right: 5px; +} +.ddei-core-dialog-quickpop .content .panel12 .panel12-content-4[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel6[data-v-c4337de3] { + margin-top: 10px; + padding-left: 10px; + height: 60px; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} +.ddei-core-dialog-quickpop .content .panel6-content1[data-v-c4337de3] { + margin-right: 10px; + white-space: nowrap; + flex: 1; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel6-content1 .icon[data-v-c4337de3] { + margin-top: 2px; + margin-bottom: 1px; +} +.ddei-core-dialog-quickpop .content .panel6-content[data-v-c4337de3] { + margin-right: 10px; + border-radius: 4px; +} +.ddei-core-dialog-quickpop .content .panel6-content .icon[data-v-c4337de3] { + margin-top: 2px; + margin-bottom: 1px; +} +.ddei-core-dialog-quickpop .content .panel6 .type[data-v-c4337de3] { + width: 40px; + padding-left: 5px; + padding-right: 5px; +} +.ddei-core-dialog-quickpop .content .panel6 .type .ddei-pv-line-type-combox[data-v-c4337de3] { + width: 22px; + height: 28px; + margin: 5px auto 1px auto; +} +.ddei-core-dialog-quickpop .content .panel6 .type .ddei-pv-line-type-combox[data-v-c4337de3] .icon { + flex: 0 0 26px !important; +} +.ddei-core-dialog-quickpop .content .panel6 .color2[data-v-c4337de3] { + padding-left: 5px; + padding-right: 5px; + width: 40px; +} +.ddei-core-dialog-quickpop .content .panel6 .color2 .ddei-editor-quick-fat-item-box[data-v-c4337de3] { + width: 22px; + height: 28px; + margin: 5px auto 3px auto; +} +.ddei-core-dialog-quickpop .content .panel6 .color2 .ddei-editor-quick-fat-item-box[data-v-c4337de3] .icon { + flex: 0 0 26px !important; +} +.ddei-core-dialog-quickpop .content .panel6 .dash[data-v-c4337de3] { + width: 50px; + margin-top: 8px; +} +.ddei-core-dialog-quickpop .content .panel6 .brush[data-v-c4337de3] { + width: 50px; + margin-top: 4px; +} +.ddei-core-dialog-quickpop .content .panel6 .brush[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel6 .pointtype[data-v-c4337de3] { + width: 70px; + margin-top: 4px; +} +.ddei-core-dialog-quickpop .content .panel6 .exchange[data-v-c4337de3] { + flex: 0 0 20px !important; + margin-top: -15px; + padding: 0px 2px; +} +.ddei-core-dialog-quickpop .content .panel6 .exchange[data-v-c4337de3]:hover { + background-color: var(--panel-hover); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel6 .exchange .icon[data-v-c4337de3] { + font-size: 18px; +} +.ddei-core-dialog-quickpop .content .panel6-content[data-v-c4337de3]:hover { + background-color: var(--panel-background); + cursor: pointer; +} +.ddei-core-dialog-quickpop .content .panel6-content1[data-v-c4337de3]:hover { + background-color: var(--panel-background); + cursor: pointer; +} +.ddei-core-dialog-quickpop .brush-selected[data-v-c4337de3] { + background-color: var(--panel-selected); +} +.ddei-ext-panel-search[data-v-75611720] { + width: 500px; + background-color: var(--panel-background); +} +.ddei-ext-panel-search .icon[data-v-75611720] { + color: var(--icon); + font-size: 18px; + width: 18px; + height: 18px; +} +.ddei-ext-panel-search-mode[data-v-75611720] { + float: left; + height: 32px; + width: 24px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-ext-panel-search-mode__expand[data-v-75611720] { + height: 64px; +} +.ddei-ext-panel-search-mode[data-v-75611720]:hover { + background: var(--panel-header); + cursor: pointer; +} +.ddei-ext-panel-search-box[data-v-75611720] { + float: left; + height: 30px; + width: 200px; + display: flex; + align-items: center; + justify-content: center; + background: var(--panel-header); + border: 0.5px solid var(--panel-hover); +} +.ddei-ext-panel-search-box[data-v-75611720]:hover { + background: var(--panel-header); + cursor: pointer; + border: 0.5px solid var(--dot); +} +.ddei-ext-panel-search-box-input[data-v-75611720] { + flex: 1; + color: var(--panel-title); + height: 30px; + background: none; + border: none; + outline: none; +} +.ddei-ext-panel-search-box-btn[data-v-75611720] { + width: 25px; + height: 25px; + margin-right: 3px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-ext-panel-search-box-btn[data-v-75611720]:hover { + background-color: var(--dot); + filter: brightness(130%); + cursor: pointer; + border-radius: 4px; +} +.ddei-ext-panel-search-box-btn__selected[data-v-75611720] { + background-color: var(--dot); + filter: brightness(130%); + border-radius: 4px; +} +.ddei-ext-panel-search-result[data-v-75611720] { + float: left; + margin-left: 5px; + height: 30px; + width: 150px; + display: flex; + align-items: center; + justify-content: start; + color: var(--panel-title); + font-size: 14px; +} +.ddei-ext-panel-search-buttons[data-v-75611720] { + float: left; + margin-bottom: 3px; + margin-left: 5px; + height: 30px; + width: 110px; + display: flex; + align-items: center; + justify-content: end; + color: var(--panel-title); + font-size: 14px; +} +.ddei-ext-panel-search-buttons-btn[data-v-75611720] { + display: flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; +} +.ddei-ext-panel-search-buttons-btn[data-v-75611720]:hover { + background-color: var(--panel-header); + cursor: pointer; +} +.ddei-ext-panel-search-buttons-btn__selected[data-v-75611720] { + background-color: var(--panel-header); +} +.ddei-ext-panel-search-buttons-btn__disabled .icon[data-v-75611720] { + filter: opacity(0.5); +} +.ddei-ext-panel-search-buttons-btn__disabled[data-v-75611720]:hover { + background: none; + cursor: default; +} +.ddei-ext-panel-search-buttons-btn .icon[data-v-75611720] { + font-size: 18px; + width: 18px; + height: 18px; +} +.ddei-ext-panel-search-replace-buttons[data-v-75611720] { + float: left; + margin-bottom: 3px; + margin-left: 5px; + height: 30px; + width: 110px; + display: flex; + align-items: center; + justify-content: start; + color: var(--panel-title); + font-size: 14px; +} +.ddei-ext-panel-search-replace-buttons-btn[data-v-75611720] { + display: flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; +} +.ddei-ext-panel-search-replace-buttons-btn[data-v-75611720]:hover { + background-color: var(--panel-header); + cursor: pointer; +} +.ddei-ext-panel-search-replace-buttons-btn .icon[data-v-75611720] { + font-size: 18px; + width: 18px; + height: 18px; +} +.ddei-ext-dialog-search[data-v-869178bc] { + box-shadow: 0px 2px 24px 0px hwb(0 0% 100% / 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + position: absolute; + padding-top: 3px; + background-color: var(--panel-background); + z-index: 999; +} +.ddei-ext-panel-quickcontrol[data-v-dd1c62d6] { + background: transparent; + pointer-events: none; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-ext-panel-quickcontrol svg[data-v-dd1c62d6] { + pointer-events: auto; + fill: var(--icon); +} +.ddei-ext-panel-quickcontrol svg[data-v-dd1c62d6]:hover { + fill: var(--dot); + cursor: pointer; +} +.ddei-ext-panel-quickcontrol-left[data-v-dd1c62d6] { + display: flex; + justify-content: center; + align-items: center; + flex: 0 0 20px; +} +.ddei-ext-panel-quickcontrol-middle[data-v-dd1c62d6] { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; +} +.ddei-ext-panel-quickcontrol-middle-top[data-v-dd1c62d6] { + flex: 0 0 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-ext-panel-quickcontrol-middle-middle[data-v-dd1c62d6] { + flex: 1; +} +.ddei-ext-panel-quickcontrol-middle-bottom[data-v-dd1c62d6] { + display: flex; + justify-content: center; + align-items: center; + flex: 0 0 20px; +} +.ddei-ext-panel-quickcontrol-right[data-v-dd1c62d6] { + flex: 0 0 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-ext-dialog-quickcontrol[data-v-737aeea8] { + display: none; + overflow: hidden; + position: absolute; + background: transparent; + pointer-events: none; + z-index: 999; +} +.ddei-ext-dialog-quickchoosecontrol[data-v-5bda071e] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: auto; + position: absolute; + background-color: var(--panel-background); + height: 240px; + width: 240px; + z-index: 1999; + user-select: none; + color: var(--panel-title); +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel[data-v-5bda071e] { + display: flex; + flex-flow: row wrap; + background: var(--toolbox-background); + padding: 15px 15px 15px 15px; +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item[data-v-5bda071e] { + flex: 0 0 50px !important; + height: 45px; + margin: 5px 0px; + display: flex; + overflow: hidden; + justify-content: center; + align-items: center; + flex-flow: column; +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item[data-v-5bda071e]:hover { + background: var(--toolbox-control-hover); + outline: var(--toolbox-control-hover-outline); + cursor: all-scroll; +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item .text[data-v-5bda071e] { + white-space: nowrap; + text-align: center; + font-size: 0.7vw; + font-weight: 400; + color: var(--toolbox-control-title); +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item .icon[data-v-5bda071e] { + width: 90%; + height: 90%; + object-fit: contain; +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item .icon-html[data-v-5bda071e] { + width: 50px; + height: 45px; + object-fit: contain; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-ext-dialog-quickchoosecontrol-group-itempanel-item .icon-html[data-v-5bda071e] > * { + width: 28px !important; + height: 28px !important; + object-fit: contain; +} +/**以下是快捷样式编辑的弹出框 */ +.ddei-ext-dialog-tooltip[data-v-d9902947] { + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + display: none; + overflow: hidden; + position: absolute; + background-color: var(--panel-background); + z-index: 2999; + user-select: none; + color: var(--panel-title); +} +.ddei-ext-dialog-tooltip-row[data-v-d9902947] { + min-width: 160px; + min-height: 30px; + display: flex; + align-items: center; + justify-content: center; +} +.ddei-ext-dialog-tooltip-row-title[data-v-d9902947] { + flex: 1; + padding-left: 5px; + padding-right: 5px; + text-align: left; + font-weight: bolder; +} +.ddei-ext-dialog-tooltip-row-data[data-v-d9902947] { + flex: 1; + padding-left: 5px; + padding-right: 5px; + text-align: center; +} +@keyframes fadeIn-d9902947 { +from { + opacity: 0; +} +to { + opacity: 1; +} +} +.fade-in[data-v-d9902947] { + animation: fadeIn-d9902947 0.5s ease-in-out forwards; +} +`; + document.head.appendChild(__vite_style__); + var __defProp2 = Object.defineProperty; + var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __publicField2 = (obj, key, value) => { + __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; + }; + var freeGlobal = typeof global == "object" && global && global.Object === Object && global; + const freeGlobal$1 = freeGlobal; + var freeSelf = typeof self == "object" && self && self.Object === Object && self; + var root = freeGlobal$1 || freeSelf || Function("return this")(); + const root$1 = root; + var Symbol$1 = root$1.Symbol; + const Symbol$2 = Symbol$1; + var objectProto$d = Object.prototype; + var hasOwnProperty$a = objectProto$d.hasOwnProperty; + var nativeObjectToString$1 = objectProto$d.toString; + var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0; + function getRawTag(value) { + var isOwn = hasOwnProperty$a.call(value, symToStringTag$1), tag = value[symToStringTag$1]; + try { + value[symToStringTag$1] = void 0; + var unmasked = true; + } catch (e) { + } + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + var objectProto$c = Object.prototype; + var nativeObjectToString = objectProto$c.toString; + function objectToString(value) { + return nativeObjectToString.call(value); + } + var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; + var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0; + function baseGetTag(value) { + if (value == null) { + return value === void 0 ? undefinedTag : nullTag; + } + return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); + } + function isObjectLike(value) { + return value != null && typeof value == "object"; + } + var symbolTag$2 = "[object Symbol]"; + function isSymbol(value) { + return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$2; + } + function arrayMap(array, iteratee) { + var index = -1, length = array == null ? 0 : array.length, result = Array(length); + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + var isArray = Array.isArray; + const isArray$1 = isArray; + var INFINITY = 1 / 0; + var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.toString : void 0; + function baseToString(value) { + if (typeof value == "string") { + return value; + } + if (isArray$1(value)) { + return arrayMap(value, baseToString) + ""; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ""; + } + var result = value + ""; + return result == "0" && 1 / value == -INFINITY ? "-0" : result; + } + var reWhitespace = /\s/; + function trimmedEndIndex(string) { + var index = string.length; + while (index-- && reWhitespace.test(string.charAt(index))) { + } + return index; + } + var reTrimStart = /^\s+/; + function baseTrim(string) { + return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; + } + function isObject(value) { + var type = typeof value; + return value != null && (type == "object" || type == "function"); + } + var NAN = 0 / 0; + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + var reIsBinary = /^0b[01]+$/i; + var reIsOctal = /^0o[0-7]+$/i; + var freeParseInt = parseInt; + function toNumber(value) { + if (typeof value == "number") { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == "function" ? value.valueOf() : value; + value = isObject(other) ? other + "" : other; + } + if (typeof value != "string") { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; + } + function identity(value) { + return value; + } + var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; + function isFunction(value) { + if (!isObject(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; + } + var coreJsData = root$1["__core-js_shared__"]; + const coreJsData$1 = coreJsData; + var maskSrcKey = function() { + var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || ""); + return uid ? "Symbol(src)_1." + uid : ""; + }(); + function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; + } + var funcProto$2 = Function.prototype; + var funcToString$2 = funcProto$2.toString; + function toSource(func) { + if (func != null) { + try { + return funcToString$2.call(func); + } catch (e) { + } + try { + return func + ""; + } catch (e) { + } + } + return ""; + } + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + var reIsHostCtor = /^\[object .+?Constructor\]$/; + var funcProto$1 = Function.prototype, objectProto$b = Object.prototype; + var funcToString$1 = funcProto$1.toString; + var hasOwnProperty$9 = objectProto$b.hasOwnProperty; + var reIsNative = RegExp( + "^" + funcToString$1.call(hasOwnProperty$9).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" + ); + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + function getValue(object, key) { + return object == null ? void 0 : object[key]; + } + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : void 0; + } + var WeakMap = getNative(root$1, "WeakMap"); + const WeakMap$1 = WeakMap; + var objectCreate = Object.create; + var baseCreate = function() { + function object() { + } + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object(); + object.prototype = void 0; + return result; + }; + }(); + const baseCreate$1 = baseCreate; + function apply(func, thisArg, args) { + switch (args.length) { + case 0: + return func.call(thisArg); + case 1: + return func.call(thisArg, args[0]); + case 2: + return func.call(thisArg, args[0], args[1]); + case 3: + return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + function copyArray(source, array) { + var index = -1, length = source.length; + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + var HOT_COUNT = 800, HOT_SPAN = 16; + var nativeNow = Date.now; + function shortOut(func) { + var count = 0, lastCalled = 0; + return function() { + var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(void 0, arguments); + }; + } + function constant(value) { + return function() { + return value; + }; + } + var defineProperty = function() { + try { + var func = getNative(Object, "defineProperty"); + func({}, "", {}); + return func; + } catch (e) { + } + }(); + const defineProperty$1 = defineProperty; + var baseSetToString = !defineProperty$1 ? identity : function(func, string) { + return defineProperty$1(func, "toString", { + "configurable": true, + "enumerable": false, + "value": constant(string), + "writable": true + }); + }; + const baseSetToString$1 = baseSetToString; + var setToString = shortOut(baseSetToString$1); + const setToString$1 = setToString; + function arrayEach(array, iteratee) { + var index = -1, length = array == null ? 0 : array.length; + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, index = fromIndex + (fromRight ? 1 : -1); + while (fromRight ? index-- : ++index < length) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + function baseIsNaN(value) { + return value !== value; + } + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, length = array.length; + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + function baseIndexOf(array, value, fromIndex) { + return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); + } + var MAX_SAFE_INTEGER$1 = 9007199254740991; + var reIsUint = /^(?:0|[1-9]\d*)$/; + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); + } + function baseAssignValue(object, key, value) { + if (key == "__proto__" && defineProperty$1) { + defineProperty$1(object, key, { + "configurable": true, + "enumerable": true, + "value": value, + "writable": true + }); + } else { + object[key] = value; + } + } + function eq(value, other) { + return value === other || value !== value && other !== other; + } + var objectProto$a = Object.prototype; + var hasOwnProperty$8 = objectProto$a.hasOwnProperty; + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$8.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) { + baseAssignValue(object, key, value); + } + } + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + var index = -1, length = props.length; + while (++index < length) { + var key = props[index]; + var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; + if (newValue === void 0) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + var nativeMax$1 = Math.max; + function overRest(func, start, transform) { + start = nativeMax$1(start === void 0 ? func.length - 1 : start, 0); + return function() { + var args = arguments, index = -1, length = nativeMax$1(args.length - start, 0), array = Array(length); + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + function baseRest(func, start) { + return setToString$1(overRest(func, start, identity), func + ""); + } + var MAX_SAFE_INTEGER = 9007199254740991; + function isLength(value) { + return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) { + return eq(object[index], value); + } + return false; + } + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; + customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? void 0 : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + var objectProto$9 = Object.prototype; + function isPrototype(value) { + var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$9; + return value === proto; + } + function baseTimes(n, iteratee) { + var index = -1, result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + var argsTag$2 = "[object Arguments]"; + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$2; + } + var objectProto$8 = Object.prototype; + var hasOwnProperty$7 = objectProto$8.hasOwnProperty; + var propertyIsEnumerable$1 = objectProto$8.propertyIsEnumerable; + var isArguments = baseIsArguments(function() { + return arguments; + }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$7.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); + }; + const isArguments$1 = isArguments; + function stubFalse() { + return false; + } + var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; + var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; + var Buffer$1 = moduleExports$2 ? root$1.Buffer : void 0; + var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; + var isBuffer = nativeIsBuffer || stubFalse; + const isBuffer$1 = isBuffer; + var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$2 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$1 = "[object Error]", funcTag$1 = "[object Function]", mapTag$4 = "[object Map]", numberTag$3 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$4 = "[object Set]", stringTag$3 = "[object String]", weakMapTag$2 = "[object WeakMap]"; + var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$3 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]"; + var typedArrayTags = {}; + typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; + typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$2] = typedArrayTags[boolTag$2] = typedArrayTags[dataViewTag$3] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$4] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$2] = typedArrayTags[setTag$4] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false; + function baseIsTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + var freeProcess = moduleExports$1 && freeGlobal$1.process; + var nodeUtil = function() { + try { + var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; + if (types) { + return types; + } + return freeProcess && freeProcess.binding && freeProcess.binding("util"); + } catch (e) { + } + }(); + const nodeUtil$1 = nodeUtil; + var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray; + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + const isTypedArray$1 = isTypedArray; + var objectProto$7 = Object.prototype; + var hasOwnProperty$6 = objectProto$7.hasOwnProperty; + function arrayLikeKeys(value, inherited) { + var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; + for (var key in value) { + if ((inherited || hasOwnProperty$6.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. + (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. + isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. + isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. + isIndex(key, length)))) { + result.push(key); + } + } + return result; + } + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + var nativeKeys = overArg(Object.keys, Object); + const nativeKeys$1 = nativeKeys; + var objectProto$6 = Object.prototype; + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys$1(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$5.call(object, key) && key != "constructor") { + result.push(key); + } + } + return result; + } + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + var objectProto$5 = Object.prototype; + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), result = []; + for (var key in object) { + if (!(key == "constructor" && (isProto || !hasOwnProperty$4.call(object, key)))) { + result.push(key); + } + } + return result; + } + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + var nativeCreate = getNative(Object, "create"); + const nativeCreate$1 = nativeCreate; + function hashClear() { + this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {}; + this.size = 0; + } + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; + var objectProto$4 = Object.prototype; + var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + function hashGet(key) { + var data = this.__data__; + if (nativeCreate$1) { + var result = data[key]; + return result === HASH_UNDEFINED$1 ? void 0 : result; + } + return hasOwnProperty$3.call(data, key) ? data[key] : void 0; + } + var objectProto$3 = Object.prototype; + var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + function hashHas(key) { + var data = this.__data__; + return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$2.call(data, key); + } + var HASH_UNDEFINED = "__lodash_hash_undefined__"; + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = nativeCreate$1 && value === void 0 ? HASH_UNDEFINED : value; + return this; + } + function Hash(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + Hash.prototype.clear = hashClear; + Hash.prototype["delete"] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + var arrayProto = Array.prototype; + var splice = arrayProto.splice; + function listCacheDelete(key) { + var data = this.__data__, index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + function listCacheGet(key) { + var data = this.__data__, index = assocIndexOf(data, key); + return index < 0 ? void 0 : data[index][1]; + } + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + function listCacheSet(key, value) { + var data = this.__data__, index = assocIndexOf(data, key); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + function ListCache(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + ListCache.prototype.clear = listCacheClear; + ListCache.prototype["delete"] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + var Map$1 = getNative(root$1, "Map"); + const Map$2 = Map$1; + function mapCacheClear() { + this.size = 0; + this.__data__ = { + "hash": new Hash(), + "map": new (Map$2 || ListCache)(), + "string": new Hash() + }; + } + function isKeyable(value) { + var type = typeof value; + return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; + } + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; + } + function mapCacheDelete(key) { + var result = getMapData(this, key)["delete"](key); + this.size -= result ? 1 : 0; + return result; + } + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + function mapCacheSet(key, value) { + var data = getMapData(this, key), size = data.size; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + function MapCache(entries) { + var index = -1, length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype["delete"] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + function toString(value) { + return value == null ? "" : baseToString(value); + } + function arrayPush(array, values) { + var index = -1, length = values.length, offset = array.length; + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + var getPrototype = overArg(Object.getPrototypeOf, Object); + const getPrototype$1 = getPrototype; + var objectTag$2 = "[object Object]"; + var funcProto = Function.prototype, objectProto$2 = Object.prototype; + var funcToString = funcProto.toString; + var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + var objectCtorString = funcToString.call(Object); + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag$2) { + return false; + } + var proto = getPrototype$1(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty$1.call(proto, "constructor") && proto.constructor; + return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; + } + function baseSlice(array, start, end) { + var index = -1, length = array.length; + if (start < 0) { + start = -start > length ? 0 : length + start; + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : end - start >>> 0; + start >>>= 0; + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + function castSlice(array, start, end) { + var length = array.length; + end = end === void 0 ? length : end; + return !start && end >= length ? array : baseSlice(array, start, end); + } + var rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = "\\ufe0e\\ufe0f"; + var rsZWJ$1 = "\\u200d"; + var reHasUnicode = RegExp("[" + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + "]"); + function hasUnicode(string) { + return reHasUnicode.test(string); + } + function asciiToArray(string) { + return string.split(""); + } + var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\ufe0e\\ufe0f"; + var rsAstral = "[" + rsAstralRange + "]", rsCombo = "[" + rsComboRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d"; + var reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; + var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + function stringToArray(string) { + return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); + } + function stackClear() { + this.__data__ = new ListCache(); + this.size = 0; + } + function stackDelete(key) { + var data = this.__data__, result = data["delete"](key); + this.size = data.size; + return result; + } + function stackGet(key) { + return this.__data__.get(key); + } + function stackHas(key) { + return this.__data__.has(key); + } + var LARGE_ARRAY_SIZE = 200; + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + Stack.prototype.clear = stackClear; + Stack.prototype["delete"] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; + var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; + var moduleExports = freeModule && freeModule.exports === freeExports; + var Buffer = moduleExports ? root$1.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0; + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + buffer.copy(result); + return result; + } + function arrayFilter(array, predicate) { + var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + function stubArray() { + return []; + } + var objectProto$1 = Object.prototype; + var propertyIsEnumerable = objectProto$1.propertyIsEnumerable; + var nativeGetSymbols$1 = Object.getOwnPropertySymbols; + var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols$1(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + const getSymbols$1 = getSymbols; + function copySymbols(source, object) { + return copyObject(source, getSymbols$1(source), object); + } + var nativeGetSymbols = Object.getOwnPropertySymbols; + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols$1(object)); + object = getPrototype$1(object); + } + return result; + }; + const getSymbolsIn$1 = getSymbolsIn; + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn$1(source), object); + } + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object)); + } + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols$1); + } + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn$1); + } + var DataView = getNative(root$1, "DataView"); + const DataView$1 = DataView; + var Promise$1 = getNative(root$1, "Promise"); + const Promise$2 = Promise$1; + var Set = getNative(root$1, "Set"); + const Set$1 = Set; + var mapTag$3 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$3 = "[object Set]", weakMapTag$1 = "[object WeakMap]"; + var dataViewTag$2 = "[object DataView]"; + var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$2), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1); + var getTag = baseGetTag; + if (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$2 || Map$2 && getTag(new Map$2()) != mapTag$3 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$3 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) { + getTag = function(value) { + var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag$2; + case mapCtorString: + return mapTag$3; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag$3; + case weakMapCtorString: + return weakMapTag$1; + } + } + return result; + }; + } + const getTag$1 = getTag; + var objectProto = Object.prototype; + var hasOwnProperty = objectProto.hasOwnProperty; + function initCloneArray(array) { + var length = array.length, result = new array.constructor(length); + if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) { + result.index = array.index; + result.input = array.input; + } + return result; + } + var Uint8Array$1 = root$1.Uint8Array; + const Uint8Array$2 = Uint8Array$1; + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array$2(result).set(new Uint8Array$2(arrayBuffer)); + return result; + } + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + var reFlags = /\w*$/; + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + var symbolProto = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + var boolTag$1 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$2 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$2 = "[object String]", symbolTag$1 = "[object Symbol]"; + var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]"; + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag$1: + return cloneArrayBuffer(object); + case boolTag$1: + case dateTag$2: + return new Ctor(+object); + case dataViewTag$1: + return cloneDataView(object, isDeep); + case float32Tag$1: + case float64Tag$1: + case int8Tag$1: + case int16Tag$1: + case int32Tag$1: + case uint8Tag$1: + case uint8ClampedTag$1: + case uint16Tag$1: + case uint32Tag$1: + return cloneTypedArray(object, isDeep); + case mapTag$2: + return new Ctor(); + case numberTag$2: + case stringTag$2: + return new Ctor(object); + case regexpTag$1: + return cloneRegExp(object); + case setTag$2: + return new Ctor(); + case symbolTag$1: + return cloneSymbol(object); + } + } + function initCloneObject(object) { + return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate$1(getPrototype$1(object)) : {}; + } + var mapTag$1 = "[object Map]"; + function baseIsMap(value) { + return isObjectLike(value) && getTag$1(value) == mapTag$1; + } + var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap; + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + const isMap$1 = isMap; + var setTag$1 = "[object Set]"; + function baseIsSet(value) { + return isObjectLike(value) && getTag$1(value) == setTag$1; + } + var nodeIsSet = nodeUtil$1 && nodeUtil$1.isSet; + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + const isSet$1 = isSet; + var CLONE_DEEP_FLAG$1 = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG$2 = 4; + var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag$1 = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag$1 = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag$1 = "[object String]", symbolTag = "[object Symbol]", weakMapTag = "[object WeakMap]"; + var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag$1] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag$1] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, isDeep = bitmask & CLONE_DEEP_FLAG$1, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG$2; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== void 0) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray$1(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag$1(value), isFunc = tag == funcTag || tag == genTag; + if (isBuffer$1(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || isFunc && !object) { + result = isFlat || isFunc ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + stack || (stack = new Stack()); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + if (isSet$1(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap$1(value)) { + value.forEach(function(subValue, key2) { + result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); + }); + } + var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; + var props = isArr ? void 0 : keysFunc(value); + arrayEach(props || value, function(subValue, key2) { + if (props) { + key2 = subValue; + subValue = value[key2]; + } + assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); + }); + return result; + } + var CLONE_SYMBOLS_FLAG$1 = 4; + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG$1); + } + var CLONE_DEEP_FLAG = 1, CLONE_SYMBOLS_FLAG = 4; + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + var baseFor = createBaseFor(); + const baseFor$1 = baseFor; + var now = function() { + return root$1.Date.now(); + }; + const now$1 = now; + var FUNC_ERROR_TEXT$1 = "Expected a function"; + var nativeMax = Math.max, nativeMin = Math.min; + function debounce(func, wait, options) { + var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; + if (typeof func != "function") { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = "maxWait" in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = "trailing" in options ? !!options.trailing : trailing; + } + function invokeFunc(time) { + var args = lastArgs, thisArg = lastThis; + lastArgs = lastThis = void 0; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + function leadingEdge(time) { + lastInvokeTime = time; + timerId = setTimeout(timerExpired, wait); + return leading ? invokeFunc(time) : result; + } + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; + return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; + } + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; + return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + function timerExpired() { + var time = now$1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + timerId = setTimeout(timerExpired, remainingWait(time)); + } + function trailingEdge(time) { + timerId = void 0; + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = void 0; + return result; + } + function cancel() { + if (timerId !== void 0) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = void 0; + } + function flush() { + return timerId === void 0 ? result : trailingEdge(now$1()); + } + function debounced() { + var time = now$1(), isInvoking = shouldInvoke(time); + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + if (isInvoking) { + if (timerId === void 0) { + return leadingEdge(lastCallTime); + } + if (maxing) { + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === void 0) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + function assignMergeValue(object, key, value) { + if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) { + baseAssignValue(object, key, value); + } + } + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + function safeGet(object, key) { + if (key === "constructor" && typeof object[key] === "function") { + return; + } + if (key == "__proto__") { + return; + } + return object[key]; + } + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0; + var isCommon = newValue === void 0; + if (isCommon) { + var isArr = isArray$1(srcValue), isBuff = !isArr && isBuffer$1(srcValue), isTyped = !isArr && !isBuff && isTypedArray$1(srcValue); + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray$1(objValue)) { + newValue = objValue; + } else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } else { + newValue = []; + } + } else if (isPlainObject(srcValue) || isArguments$1(srcValue)) { + newValue = objValue; + if (isArguments$1(objValue)) { + newValue = toPlainObject(objValue); + } else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } else { + isCommon = false; + } + } + if (isCommon) { + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack["delete"](srcValue); + } + assignMergeValue(object, key, newValue); + } + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor$1(source, function(srcValue, key) { + stack || (stack = new Stack()); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } else { + var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0; + if (newValue === void 0) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, void 0, customDefaultsMerge, stack); + stack["delete"](srcValue); + } + return objValue; + } + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + const mergeWith$1 = mergeWith; + var defaultsDeep = baseRest(function(args) { + args.push(void 0, customDefaultsMerge); + return apply(mergeWith$1, void 0, args); + }); + const defaultsDeep$1 = defaultsDeep; + var stringTag = "[object String]"; + function isString(value) { + return typeof value == "string" || !isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag; + } + var dateTag = "[object Date]"; + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + var nodeIsDate = nodeUtil$1 && nodeUtil$1.isDate; + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + const isDate$1 = isDate; + var numberTag = "[object Number]"; + function isNumber(value) { + return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag; + } + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + const merge$1 = merge; + var FUNC_ERROR_TEXT = "Expected a function"; + function throttle(func, wait, options) { + var leading = true, trailing = true; + if (typeof func != "function") { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = "leading" in options ? !!options.leading : leading; + trailing = "trailing" in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + "leading": leading, + "maxWait": wait, + "trailing": trailing + }); + } + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { + } + return index; + } + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, length = strSymbols.length; + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { + } + return index; + } + function trim(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === void 0)) { + return baseTrim(string); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; + return castSlice(strSymbols, start, end).join(""); + } + /** + * @license + * Copyright 2010-2023 Three.js Authors + * SPDX-License-Identifier: MIT + */ + const REVISION = "156"; + function clamp(value, min, max) { + return Math.max(min, Math.min(max, value)); + } + class Matrix3 { + constructor(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + Matrix3.prototype.isMatrix3 = true; + this.elements = [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ]; + if (n11 !== void 0) { + this.set(n11, n12, n13, n21, n22, n23, n31, n32, n33); + } + } + set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { + const te = this.elements; + te[0] = n11; + te[1] = n21; + te[2] = n31; + te[3] = n12; + te[4] = n22; + te[5] = n32; + te[6] = n13; + te[7] = n23; + te[8] = n33; + return this; + } + identity() { + this.set( + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + return this; + } + copy(m) { + const te = this.elements; + const me = m.elements; + te[0] = me[0]; + te[1] = me[1]; + te[2] = me[2]; + te[3] = me[3]; + te[4] = me[4]; + te[5] = me[5]; + te[6] = me[6]; + te[7] = me[7]; + te[8] = me[8]; + return this; + } + extractBasis(xAxis, yAxis, zAxis) { + xAxis.setFromMatrix3Column(this, 0); + yAxis.setFromMatrix3Column(this, 1); + zAxis.setFromMatrix3Column(this, 2); + return this; + } + setFromMatrix4(m) { + const me = m.elements; + this.set( + me[0], + me[4], + me[8], + me[1], + me[5], + me[9], + me[2], + me[6], + me[10] + ); + return this; + } + multiply(m) { + return this.multiplyMatrices(this, m); + } + premultiply(m) { + return this.multiplyMatrices(m, this); + } + multiplyMatrices(a, b) { + const ae = a.elements; + const be = b.elements; + const te = this.elements; + const a11 = ae[0], a12 = ae[3], a13 = ae[6]; + const a21 = ae[1], a22 = ae[4], a23 = ae[7]; + const a31 = ae[2], a32 = ae[5], a33 = ae[8]; + const b11 = be[0], b12 = be[3], b13 = be[6]; + const b21 = be[1], b22 = be[4], b23 = be[7]; + const b31 = be[2], b32 = be[5], b33 = be[8]; + te[0] = a11 * b11 + a12 * b21 + a13 * b31; + te[3] = a11 * b12 + a12 * b22 + a13 * b32; + te[6] = a11 * b13 + a12 * b23 + a13 * b33; + te[1] = a21 * b11 + a22 * b21 + a23 * b31; + te[4] = a21 * b12 + a22 * b22 + a23 * b32; + te[7] = a21 * b13 + a22 * b23 + a23 * b33; + te[2] = a31 * b11 + a32 * b21 + a33 * b31; + te[5] = a31 * b12 + a32 * b22 + a33 * b32; + te[8] = a31 * b13 + a32 * b23 + a33 * b33; + return this; + } + multiplyScalar(s) { + const te = this.elements; + te[0] *= s; + te[3] *= s; + te[6] *= s; + te[1] *= s; + te[4] *= s; + te[7] *= s; + te[2] *= s; + te[5] *= s; + te[8] *= s; + return this; + } + determinant() { + const te = this.elements; + const a = te[0], b = te[1], c = te[2], d = te[3], e = te[4], f = te[5], g = te[6], h = te[7], i2 = te[8]; + return a * e * i2 - a * f * h - b * d * i2 + b * f * g + c * d * h - c * e * g; + } + invert() { + const te = this.elements, n11 = te[0], n21 = te[1], n31 = te[2], n12 = te[3], n22 = te[4], n32 = te[5], n13 = te[6], n23 = te[7], n33 = te[8], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; + if (det === 0) + return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); + const detInv = 1 / det; + te[0] = t11 * detInv; + te[1] = (n31 * n23 - n33 * n21) * detInv; + te[2] = (n32 * n21 - n31 * n22) * detInv; + te[3] = t12 * detInv; + te[4] = (n33 * n11 - n31 * n13) * detInv; + te[5] = (n31 * n12 - n32 * n11) * detInv; + te[6] = t13 * detInv; + te[7] = (n21 * n13 - n23 * n11) * detInv; + te[8] = (n22 * n11 - n21 * n12) * detInv; + return this; + } + transpose() { + let tmp; + const m = this.elements; + tmp = m[1]; + m[1] = m[3]; + m[3] = tmp; + tmp = m[2]; + m[2] = m[6]; + m[6] = tmp; + tmp = m[5]; + m[5] = m[7]; + m[7] = tmp; + return this; + } + getNormalMatrix(matrix4) { + return this.setFromMatrix4(matrix4).invert().transpose(); + } + transposeIntoArray(r) { + const m = this.elements; + r[0] = m[0]; + r[1] = m[3]; + r[2] = m[6]; + r[3] = m[1]; + r[4] = m[4]; + r[5] = m[7]; + r[6] = m[2]; + r[7] = m[5]; + r[8] = m[8]; + return this; + } + setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { + const c = Math.cos(rotation); + const s = Math.sin(rotation); + this.set( + sx * c, + sx * s, + -sx * (c * cx + s * cy) + cx + tx, + -sy * s, + sy * c, + -sy * (-s * cx + c * cy) + cy + ty, + 0, + 0, + 1 + ); + return this; + } + // + scale(sx, sy) { + this.premultiply(_m3.makeScale(sx, sy)); + return this; + } + rotate(theta) { + this.premultiply(_m3.makeRotation(-theta)); + return this; + } + translate(tx, ty) { + this.premultiply(_m3.makeTranslation(tx, ty)); + return this; + } + // for 2D Transforms + makeTranslation(x2, y2) { + if (x2.isVector2) { + this.set( + 1, + 0, + x2.x, + 0, + 1, + x2.y, + 0, + 0, + 1 + ); + } else { + this.set( + 1, + 0, + x2, + 0, + 1, + y2, + 0, + 0, + 1 + ); + } + return this; + } + makeRotation(theta) { + const c = Math.cos(theta); + const s = Math.sin(theta); + this.set( + c, + -s, + 0, + s, + c, + 0, + 0, + 0, + 1 + ); + return this; + } + makeScale(x2, y2) { + this.set( + x2, + 0, + 0, + 0, + y2, + 0, + 0, + 0, + 1 + ); + return this; + } + // + equals(matrix2) { + const te = this.elements; + const me = matrix2.elements; + for (let i2 = 0; i2 < 9; i2++) { + if (te[i2] !== me[i2]) + return false; + } + return true; + } + fromArray(array, offset = 0) { + for (let i2 = 0; i2 < 9; i2++) { + this.elements[i2] = array[i2 + offset]; + } + return this; + } + toArray(array = [], offset = 0) { + const te = this.elements; + array[offset] = te[0]; + array[offset + 1] = te[1]; + array[offset + 2] = te[2]; + array[offset + 3] = te[3]; + array[offset + 4] = te[4]; + array[offset + 5] = te[5]; + array[offset + 6] = te[6]; + array[offset + 7] = te[7]; + array[offset + 8] = te[8]; + return array; + } + clone() { + return new this.constructor().fromArray(this.elements); + } + } + const _m3 = /* @__PURE__ */ new Matrix3(); + class Quaternion { + constructor(x2 = 0, y2 = 0, z = 0, w = 1) { + this.isQuaternion = true; + this._x = x2; + this._y = y2; + this._z = z; + this._w = w; + } + static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) { + let x0 = src0[srcOffset0 + 0], y0 = src0[srcOffset0 + 1], z0 = src0[srcOffset0 + 2], w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1 + 0], y1 = src1[srcOffset1 + 1], z1 = src1[srcOffset1 + 2], w1 = src1[srcOffset1 + 3]; + if (t === 0) { + dst[dstOffset + 0] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + return; + } + if (t === 1) { + dst[dstOffset + 0] = x1; + dst[dstOffset + 1] = y1; + dst[dstOffset + 2] = z1; + dst[dstOffset + 3] = w1; + return; + } + if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { + let s = 1 - t; + const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = cos >= 0 ? 1 : -1, sqrSin = 1 - cos * cos; + if (sqrSin > Number.EPSILON) { + const sin = Math.sqrt(sqrSin), len = Math.atan2(sin, cos * dir); + s = Math.sin(s * len) / sin; + t = Math.sin(t * len) / sin; + } + const tDir = t * dir; + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + if (s === 1 - t) { + const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + } + } + dst[dstOffset] = x0; + dst[dstOffset + 1] = y0; + dst[dstOffset + 2] = z0; + dst[dstOffset + 3] = w0; + } + static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { + const x0 = src0[srcOffset0]; + const y0 = src0[srcOffset0 + 1]; + const z0 = src0[srcOffset0 + 2]; + const w0 = src0[srcOffset0 + 3]; + const x1 = src1[srcOffset1]; + const y1 = src1[srcOffset1 + 1]; + const z1 = src1[srcOffset1 + 2]; + const w1 = src1[srcOffset1 + 3]; + dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; + dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; + dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; + dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; + return dst; + } + get x() { + return this._x; + } + set x(value) { + this._x = value; + this._onChangeCallback(); + } + get y() { + return this._y; + } + set y(value) { + this._y = value; + this._onChangeCallback(); + } + get z() { + return this._z; + } + set z(value) { + this._z = value; + this._onChangeCallback(); + } + get w() { + return this._w; + } + set w(value) { + this._w = value; + this._onChangeCallback(); + } + set(x2, y2, z, w) { + this._x = x2; + this._y = y2; + this._z = z; + this._w = w; + this._onChangeCallback(); + return this; + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w); + } + copy(quaternion) { + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + this._onChangeCallback(); + return this; + } + setFromEuler(euler, update) { + const x2 = euler._x, y2 = euler._y, z = euler._z, order = euler._order; + const cos = Math.cos; + const sin = Math.sin; + const c1 = cos(x2 / 2); + const c2 = cos(y2 / 2); + const c3 = cos(z / 2); + const s1 = sin(x2 / 2); + const s2 = sin(y2 / 2); + const s3 = sin(z / 2); + switch (order) { + case "XYZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "YXZ": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "ZXY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "ZYX": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + case "YZX": + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + case "XZY": + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + default: + console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + order); + } + if (update !== false) + this._onChangeCallback(); + return this; + } + setFromAxisAngle(axis, angle2) { + const halfAngle = angle2 / 2, s = Math.sin(halfAngle); + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos(halfAngle); + this._onChangeCallback(); + return this; + } + setFromRotationMatrix(m) { + const te = m.elements, m11 = te[0], m12 = te[4], m13 = te[8], m21 = te[1], m22 = te[5], m23 = te[9], m31 = te[2], m32 = te[6], m33 = te[10], trace = m11 + m22 + m33; + if (trace > 0) { + const s = 0.5 / Math.sqrt(trace + 1); + this._w = 0.25 / s; + this._x = (m32 - m23) * s; + this._y = (m13 - m31) * s; + this._z = (m21 - m12) * s; + } else if (m11 > m22 && m11 > m33) { + const s = 2 * Math.sqrt(1 + m11 - m22 - m33); + this._w = (m32 - m23) / s; + this._x = 0.25 * s; + this._y = (m12 + m21) / s; + this._z = (m13 + m31) / s; + } else if (m22 > m33) { + const s = 2 * Math.sqrt(1 + m22 - m11 - m33); + this._w = (m13 - m31) / s; + this._x = (m12 + m21) / s; + this._y = 0.25 * s; + this._z = (m23 + m32) / s; + } else { + const s = 2 * Math.sqrt(1 + m33 - m11 - m22); + this._w = (m21 - m12) / s; + this._x = (m13 + m31) / s; + this._y = (m23 + m32) / s; + this._z = 0.25 * s; + } + this._onChangeCallback(); + return this; + } + setFromUnitVectors(vFrom, vTo) { + let r = vFrom.dot(vTo) + 1; + if (r < Number.EPSILON) { + r = 0; + if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { + this._x = -vFrom.y; + this._y = vFrom.x; + this._z = 0; + this._w = r; + } else { + this._x = 0; + this._y = -vFrom.z; + this._z = vFrom.y; + this._w = r; + } + } else { + this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; + this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; + this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._w = r; + } + return this.normalize(); + } + angleTo(q) { + return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1))); + } + rotateTowards(q, step) { + const angle2 = this.angleTo(q); + if (angle2 === 0) + return this; + const t = Math.min(1, step / angle2); + this.slerp(q, t); + return this; + } + identity() { + return this.set(0, 0, 0, 1); + } + invert() { + return this.conjugate(); + } + conjugate() { + this._x *= -1; + this._y *= -1; + this._z *= -1; + this._onChangeCallback(); + return this; + } + dot(v) { + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + } + length() { + return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); + } + normalize() { + let l = this.length(); + if (l === 0) { + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + } else { + l = 1 / l; + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + } + this._onChangeCallback(); + return this; + } + multiply(q) { + return this.multiplyQuaternions(this, q); + } + premultiply(q) { + return this.multiplyQuaternions(q, this); + } + multiplyQuaternions(a, b) { + const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + this._onChangeCallback(); + return this; + } + slerp(qb, t) { + if (t === 0) + return this; + if (t === 1) + return this.copy(qb); + const x2 = this._x, y2 = this._y, z = this._z, w = this._w; + let cosHalfTheta = w * qb._w + x2 * qb._x + y2 * qb._y + z * qb._z; + if (cosHalfTheta < 0) { + this._w = -qb._w; + this._x = -qb._x; + this._y = -qb._y; + this._z = -qb._z; + cosHalfTheta = -cosHalfTheta; + } else { + this.copy(qb); + } + if (cosHalfTheta >= 1) { + this._w = w; + this._x = x2; + this._y = y2; + this._z = z; + return this; + } + const sqrSinHalfTheta = 1 - cosHalfTheta * cosHalfTheta; + if (sqrSinHalfTheta <= Number.EPSILON) { + const s = 1 - t; + this._w = s * w + t * this._w; + this._x = s * x2 + t * this._x; + this._y = s * y2 + t * this._y; + this._z = s * z + t * this._z; + this.normalize(); + this._onChangeCallback(); + return this; + } + const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); + const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); + const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, ratioB = Math.sin(t * halfTheta) / sinHalfTheta; + this._w = w * ratioA + this._w * ratioB; + this._x = x2 * ratioA + this._x * ratioB; + this._y = y2 * ratioA + this._y * ratioB; + this._z = z * ratioA + this._z * ratioB; + this._onChangeCallback(); + return this; + } + slerpQuaternions(qa, qb, t) { + return this.copy(qa).slerp(qb, t); + } + random() { + const u1 = Math.random(); + const sqrt1u1 = Math.sqrt(1 - u1); + const sqrtu1 = Math.sqrt(u1); + const u2 = 2 * Math.PI * Math.random(); + const u3 = 2 * Math.PI * Math.random(); + return this.set( + sqrt1u1 * Math.cos(u2), + sqrtu1 * Math.sin(u3), + sqrtu1 * Math.cos(u3), + sqrt1u1 * Math.sin(u2) + ); + } + equals(quaternion) { + return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; + } + fromArray(array, offset = 0) { + this._x = array[offset]; + this._y = array[offset + 1]; + this._z = array[offset + 2]; + this._w = array[offset + 3]; + this._onChangeCallback(); + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this._x; + array[offset + 1] = this._y; + array[offset + 2] = this._z; + array[offset + 3] = this._w; + return array; + } + fromBufferAttribute(attribute, index) { + this._x = attribute.getX(index); + this._y = attribute.getY(index); + this._z = attribute.getZ(index); + this._w = attribute.getW(index); + return this; + } + toJSON() { + return this.toArray(); + } + _onChange(callback) { + this._onChangeCallback = callback; + return this; + } + _onChangeCallback() { + } + *[Symbol.iterator]() { + yield this._x; + yield this._y; + yield this._z; + yield this._w; + } + } + class Vector3 { + constructor(x2 = 0, y2 = 0, z = 0) { + Vector3.prototype.isVector3 = true; + this.x = x2; + this.y = y2; + this.z = z; + } + set(x2, y2, z) { + if (z === void 0) + z = this.z; + this.x = x2; + this.y = y2; + this.z = z; + return this; + } + setScalar(scalar) { + this.x = scalar; + this.y = scalar; + this.z = scalar; + return this; + } + setX(x2) { + this.x = x2; + return this; + } + setY(y2) { + this.y = y2; + return this; + } + setZ(z) { + this.z = z; + return this; + } + setComponent(index, value) { + switch (index) { + case 0: + this.x = value; + break; + case 1: + this.y = value; + break; + case 2: + this.z = value; + break; + default: + throw new Error("index is out of range: " + index); + } + return this; + } + getComponent(index) { + switch (index) { + case 0: + return this.x; + case 1: + return this.y; + case 2: + return this.z; + default: + throw new Error("index is out of range: " + index); + } + } + clone() { + return new this.constructor(this.x, this.y, this.z); + } + copy(v) { + this.x = v.x; + this.y = v.y; + this.z = v.z; + return this; + } + add(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; + return this; + } + addScalar(s) { + this.x += s; + this.y += s; + this.z += s; + return this; + } + addVectors(a, b) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + return this; + } + addScaledVector(v, s) { + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + return this; + } + sub(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + return this; + } + subScalar(s) { + this.x -= s; + this.y -= s; + this.z -= s; + return this; + } + subVectors(a, b) { + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + return this; + } + multiply(v) { + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + return this; + } + multiplyScalar(scalar) { + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + return this; + } + multiplyVectors(a, b) { + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + return this; + } + applyEuler(euler) { + return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); + } + applyAxisAngle(axis, angle2) { + return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle2)); + } + applyMatrix3(m) { + const x2 = this.x, y2 = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x2 + e[3] * y2 + e[6] * z; + this.y = e[1] * x2 + e[4] * y2 + e[7] * z; + this.z = e[2] * x2 + e[5] * y2 + e[8] * z; + return this; + } + applyNormalMatrix(m) { + return this.applyMatrix3(m).normalize(); + } + applyMatrix4(m) { + const x2 = this.x, y2 = this.y, z = this.z; + const e = m.elements; + const w = 1 / (e[3] * x2 + e[7] * y2 + e[11] * z + e[15]); + this.x = (e[0] * x2 + e[4] * y2 + e[8] * z + e[12]) * w; + this.y = (e[1] * x2 + e[5] * y2 + e[9] * z + e[13]) * w; + this.z = (e[2] * x2 + e[6] * y2 + e[10] * z + e[14]) * w; + return this; + } + applyQuaternion(q) { + const x2 = this.x, y2 = this.y, z = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + const ix = qw * x2 + qy * z - qz * y2; + const iy = qw * y2 + qz * x2 - qx * z; + const iz = qw * z + qx * y2 - qy * x2; + const iw = -qx * x2 - qy * y2 - qz * z; + this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; + this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; + this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; + return this; + } + project(camera) { + return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); + } + unproject(camera) { + return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); + } + transformDirection(m) { + const x2 = this.x, y2 = this.y, z = this.z; + const e = m.elements; + this.x = e[0] * x2 + e[4] * y2 + e[8] * z; + this.y = e[1] * x2 + e[5] * y2 + e[9] * z; + this.z = e[2] * x2 + e[6] * y2 + e[10] * z; + return this.normalize(); + } + divide(v) { + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + return this; + } + divideScalar(scalar) { + return this.multiplyScalar(1 / scalar); + } + min(v) { + this.x = Math.min(this.x, v.x); + this.y = Math.min(this.y, v.y); + this.z = Math.min(this.z, v.z); + return this; + } + max(v) { + this.x = Math.max(this.x, v.x); + this.y = Math.max(this.y, v.y); + this.z = Math.max(this.z, v.z); + return this; + } + clamp(min, max) { + this.x = Math.max(min.x, Math.min(max.x, this.x)); + this.y = Math.max(min.y, Math.min(max.y, this.y)); + this.z = Math.max(min.z, Math.min(max.z, this.z)); + return this; + } + clampScalar(minVal, maxVal) { + this.x = Math.max(minVal, Math.min(maxVal, this.x)); + this.y = Math.max(minVal, Math.min(maxVal, this.y)); + this.z = Math.max(minVal, Math.min(maxVal, this.z)); + return this; + } + clampLength(min, max) { + const length = this.length(); + return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); + } + floor() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + this.z = Math.floor(this.z); + return this; + } + ceil() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + this.z = Math.ceil(this.z); + return this; + } + round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + this.z = Math.round(this.z); + return this; + } + roundToZero() { + this.x = Math.trunc(this.x); + this.y = Math.trunc(this.y); + this.z = Math.trunc(this.z); + return this; + } + negate() { + this.x = -this.x; + this.y = -this.y; + this.z = -this.z; + return this; + } + dot(v) { + return this.x * v.x + this.y * v.y + this.z * v.z; + } + // TODO lengthSquared? + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); + } + normalize() { + return this.divideScalar(this.length() || 1); + } + setLength(length) { + return this.normalize().multiplyScalar(length); + } + lerp(v, alpha) { + this.x += (v.x - this.x) * alpha; + this.y += (v.y - this.y) * alpha; + this.z += (v.z - this.z) * alpha; + return this; + } + lerpVectors(v1, v2, alpha) { + this.x = v1.x + (v2.x - v1.x) * alpha; + this.y = v1.y + (v2.y - v1.y) * alpha; + this.z = v1.z + (v2.z - v1.z) * alpha; + return this; + } + cross(v) { + return this.crossVectors(this, v); + } + crossVectors(a, b) { + const ax = a.x, ay = a.y, az = a.z; + const bx = b.x, by = b.y, bz = b.z; + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + return this; + } + projectOnVector(v) { + const denominator = v.lengthSq(); + if (denominator === 0) + return this.set(0, 0, 0); + const scalar = v.dot(this) / denominator; + return this.copy(v).multiplyScalar(scalar); + } + projectOnPlane(planeNormal) { + _vector$b.copy(this).projectOnVector(planeNormal); + return this.sub(_vector$b); + } + reflect(normal) { + return this.sub(_vector$b.copy(normal).multiplyScalar(2 * this.dot(normal))); + } + angleTo(v) { + const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); + if (denominator === 0) + return Math.PI / 2; + const theta = this.dot(v) / denominator; + return Math.acos(clamp(theta, -1, 1)); + } + distanceTo(v) { + return Math.sqrt(this.distanceToSquared(v)); + } + distanceToSquared(v) { + const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + return dx * dx + dy * dy + dz * dz; + } + manhattanDistanceTo(v) { + return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); + } + setFromSpherical(s) { + return this.setFromSphericalCoords(s.radius, s.phi, s.theta); + } + setFromSphericalCoords(radius, phi, theta) { + const sinPhiRadius = Math.sin(phi) * radius; + this.x = sinPhiRadius * Math.sin(theta); + this.y = Math.cos(phi) * radius; + this.z = sinPhiRadius * Math.cos(theta); + return this; + } + setFromCylindrical(c) { + return this.setFromCylindricalCoords(c.radius, c.theta, c.y); + } + setFromCylindricalCoords(radius, theta, y2) { + this.x = radius * Math.sin(theta); + this.y = y2; + this.z = radius * Math.cos(theta); + return this; + } + setFromMatrixPosition(m) { + const e = m.elements; + this.x = e[12]; + this.y = e[13]; + this.z = e[14]; + return this; + } + setFromMatrixScale(m) { + const sx = this.setFromMatrixColumn(m, 0).length(); + const sy = this.setFromMatrixColumn(m, 1).length(); + const sz = this.setFromMatrixColumn(m, 2).length(); + this.x = sx; + this.y = sy; + this.z = sz; + return this; + } + setFromMatrixColumn(m, index) { + return this.fromArray(m.elements, index * 4); + } + setFromMatrix3Column(m, index) { + return this.fromArray(m.elements, index * 3); + } + setFromEuler(e) { + this.x = e._x; + this.y = e._y; + this.z = e._z; + return this; + } + setFromColor(c) { + this.x = c.r; + this.y = c.g; + this.z = c.b; + return this; + } + equals(v) { + return v.x === this.x && v.y === this.y && v.z === this.z; + } + fromArray(array, offset = 0) { + this.x = array[offset]; + this.y = array[offset + 1]; + this.z = array[offset + 2]; + return this; + } + toArray(array = [], offset = 0) { + array[offset] = this.x; + array[offset + 1] = this.y; + array[offset + 2] = this.z; + return array; + } + fromBufferAttribute(attribute, index) { + this.x = attribute.getX(index); + this.y = attribute.getY(index); + this.z = attribute.getZ(index); + return this; + } + random() { + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + return this; + } + randomDirection() { + const u = (Math.random() - 0.5) * 2; + const t = Math.random() * Math.PI * 2; + const f = Math.sqrt(1 - u ** 2); + this.x = f * Math.cos(t); + this.y = f * Math.sin(t); + this.z = u; + return this; + } + *[Symbol.iterator]() { + yield this.x; + yield this.y; + yield this.z; + } + } + const _vector$b = /* @__PURE__ */ new Vector3(); + const _quaternion$4 = /* @__PURE__ */ new Quaternion(); + if (typeof __THREE_DEVTOOLS__ !== "undefined") { + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", { detail: { + revision: REVISION + } })); + } + if (typeof window !== "undefined") { + if (window.__THREE__) { + console.warn("WARNING: Multiple instances of Three.js being imported."); + } else { + window.__THREE__ = REVISION; + } + } + var DDeiEnumControlState = /* @__PURE__ */ ((DDeiEnumControlState2) => { + DDeiEnumControlState2["DEFAULT"] = "default"; + DDeiEnumControlState2["SELECTED"] = "selected"; + DDeiEnumControlState2["CREATING"] = "creating"; + return DDeiEnumControlState2; + })(DDeiEnumControlState || {}); + class DDeiModelArrtibuteValue { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + /** + * 根据模型的当前状态,获取属性值 + * 如果采用缺省值,则当前状态没有值时,会自动去获取外部缺省属性的值 + * TODO 未来考虑一个模型多个状态叠加 + * @param model 模型 + * @param attrPath 属性路径,第一级为属性名称,略过中间的状态层级,如,定义:border.selected.width,写作:border.width + * @param useDefault 是否采用缺省值,默认false不采用 + * @param initValue 初始化值 + * @returns 模型的值对象 + */ + static getAttrValueByState(model, attrPath, useDefault = false, initValue = null) { + var _a3; + let returnValue = null; + if (model && attrPath) { + let relPath = attrPath.split("."); + let attrCode = relPath[0]; + let detailCode = relPath.slice(1); + let stateCode = (_a3 = model.state) == null ? void 0 : _a3.toString(); + if (model.state == DDeiEnumControlState.DEFAULT || !stateCode) { + stateCode = ""; + } + let overwrite = false; + if (model[attrCode]) { + let modelAttr = model[attrCode]; + if (modelAttr) { + let path = detailCode; + if (stateCode) { + path = [stateCode].concat(detailCode); + } + try { + let returnJSON = DDeiUtil$1.getDataByPath(modelAttr, path); + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } catch (e) { + } + if (!overwrite && (returnValue == null || returnValue == void 0) && useDefault && stateCode.length > 0) { + path = detailCode; + try { + let returnJSON = DDeiUtil$1.getDataByPath(modelAttr, path); + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } catch (e) { + } + } + } + } + if (!overwrite && (returnValue == null || returnValue == void 0) && initValue && typeof initValue == "object") { + try { + let path = detailCode; + if (stateCode) { + path = [stateCode].concat(detailCode); + } + let returnJSON = DDeiUtil$1.getDataByPath(initValue, path); + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } catch (e) { + } + } + if (!overwrite && (returnValue == null || returnValue == void 0)) { + if (model.modelType != "DDeiSelector" && DDeiUtil$1.getAttrValueByConfig) { + if (stateCode != "") { + let attrCode2 = relPath[0]; + let searchPath = attrCode2 + "." + stateCode + attrPath.substring(attrPath.indexOf(".")); + let configAtrs = DDeiUtil$1.getAttrValueByConfig(model, searchPath); + if (configAtrs && configAtrs.size > 0) { + let returnJSON = Array.from(configAtrs.values())[0]; + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } + } + if (returnValue == null || returnValue == void 0) { + let configAtrs = DDeiUtil$1.getAttrValueByConfig(model, attrPath); + if (configAtrs && configAtrs.size > 0) { + let returnJSON = Array.from(configAtrs.values())[0]; + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } + } + } + } + if (!overwrite && (returnValue == null || returnValue == void 0)) { + let sysData = DDeiConfig$1.getSysDefaultData(model); + if (sysData && sysData[attrCode]) { + let path = detailCode; + if (stateCode) { + path = [stateCode].concat(detailCode); + } + try { + let returnJSON = DDeiUtil$1.getDataByPath(sysData[attrCode], path); + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } catch (e) { + } + if (!overwrite && (returnValue == null || returnValue == void 0) && useDefault && stateCode.length > 0) { + path = detailCode; + try { + let returnJSON = DDeiUtil$1.getDataByPath(sysData[attrCode], path); + if (returnJSON.overwrite && returnJSON.overwrite == true) { + overwrite = true; + } + returnValue = returnJSON.data; + } catch (e) { + } + } + } + } + } + return returnValue; + } + // ============================ 属性 =============================== + // ============================ 方法 =============================== + } + class DDeiColor { + constructor(r, g, b, a) { + __publicField2(this, "r"); + __publicField2(this, "g"); + __publicField2(this, "b"); + __publicField2(this, "a", 1); + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + darken(rate) { + let r = this.r; + let g = this.g; + let b = this.b; + r -= r * rate; + g -= g * rate; + b -= b * rate; + if (r < 0) { + r = 0; + } + if (g < 0) { + g = 0; + } + if (b < 0) { + b = 0; + } + return new DDeiColor(r, g, b, this.a); + } + lighten(rate) { + let r = this.r; + let g = this.g; + let b = this.b; + r += r * rate; + g += g * rate; + b += b * rate; + if (r < 0) { + r = 0; + } + if (g < 0) { + g = 0; + } + if (b < 0) { + b = 0; + } + return new DDeiColor(r, g, b, this.a); + } + toColor() { + return "rgba(" + this.r + "," + this.g + "," + this.b + "," + this.a + ")"; + } + } + class DDeiLink { + constructor(props) { + __publicField2(this, "group", ""); + __publicField2(this, "sm"); + __publicField2(this, "dm"); + __publicField2(this, "smpath"); + __publicField2(this, "dmpath"); + __publicField2(this, "stage"); + __publicField2(this, "disabled", false); + for (let i2 in props) { + if (typeof props[i2] != "object" && props[i2]) { + this[i2] = props[i2]; + } + } + this.group = props.group; + this.sm = props.sm; + this.dm = props.dm; + this.stage = props.stage; + this.smpath = props.smpath; + this.dmpath = props.dmpath; + this.disabled = props.disabled; + } + /** + * 得到源向量 + */ + getSourcePV() { + return DDeiUtil$1.getDataByPathList(this.sm, this.smpath); + } + /** + * 得到目标向量 + */ + getDistPV() { + return DDeiUtil$1.getDataByPathList(this.dm, this.dmpath); + } + /** + * 将模型转换为JSON + */ + toJSON() { + let json = new Object(); + for (let i2 in this) { + if (typeof this[i2] != "object" && this[i2]) { + json[i2] = this[i2]; + } + } + if (this.group) { + json.group = group; + } + if (this.sm) { + json.smid = this.sm.id; + } + if (this.dm) { + json.dmid = this.dm.id; + } + if (this.smpath) { + json.smpath = this.smpath; + } + if (this.dmpath) { + json.dmpath = this.dmpath; + } + return json; + } + } + const __vite_glob_0_4$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLink, + default: DDeiLink + }, Symbol.toStringTag, { value: "Module" })); + var DDeiEnumOperateType = /* @__PURE__ */ ((DDeiEnumOperateType2) => { + DDeiEnumOperateType2["CREATE"] = "CREATE"; + DDeiEnumOperateType2["EDIT"] = "EDIT"; + DDeiEnumOperateType2["VIEW"] = "VIEW"; + DDeiEnumOperateType2["DRAG"] = "DRAG"; + DDeiEnumOperateType2["LINK"] = "LINK"; + DDeiEnumOperateType2["DEL"] = "DEL"; + DDeiEnumOperateType2["DESTROYED"] = "DESTROYED"; + DDeiEnumOperateType2["SELECT"] = "SELECT"; + DDeiEnumOperateType2["ROTATE"] = "ROTATE"; + DDeiEnumOperateType2["SCALE"] = "SCALE"; + DDeiEnumOperateType2["MIRROR"] = "MIRROR"; + DDeiEnumOperateType2["COMPOSE"] = "COMPOSE"; + return DDeiEnumOperateType2; + })(DDeiEnumOperateType || {}); + class DDeiModelLink { + constructor(props) { + __publicField2(this, "depModel"); + __publicField2(this, "type"); + __publicField2(this, "dm"); + __publicField2(this, "dx"); + __publicField2(this, "dy"); + this.depModel = props.depModel; + this.type = props.type; + this.dm = props.dm; + this.dx = props.dx ? props.dx : 0; + this.dy = props.dy ? props.dy : 0; + } + /** + * 将模型转换为JSON + */ + toJSON() { + let json = new Object(); + if (this.type) { + json.type = this.type; + } + if (this.dm) { + json.dmid = this.dm.id; + } + if (this.dx) { + json.dx = this.dx; + } + if (this.dy) { + json.dy = this.dy; + } + return json; + } + } + const __vite_glob_0_5$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiModelLink, + default: DDeiModelLink + }, Symbol.toStringTag, { value: "Module" })); + var __defProp$2 = Object.defineProperty; + var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __publicField$2 = (obj, key, value) => { + __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; + }; + const expressBindValueReg = /#\{[^\{\}]*\}/; + const contentSplitReg = /\+|\-|\*|\//; + const isNumberReg = /^[+-]?\d*(\.\d*)?(e[+-]?\d+)?$/; + const safariReg = /Safari/; + const chromeReg = /Chrome/; + const ytestReg = /(y+)/; + const _DDeiUtil = class _DDeiUtil2 { + /** + * 计算文字的高度和宽度 + */ + static measureTextSize(ddInstance, text2, fontFamily, fontSize) { + let canvas = ddInstance.render.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + ctx.font = fontSize + "px " + fontFamily; + let textArray = text2.split("\n"); + let maxWidth = 0; + let height = textArray.length * fontSize; + textArray.forEach((t) => { + let width = ctx.measureText(t).width; + if (width > maxWidth) { + maxWidth = width; + } + }); + ctx.restore(); + return { width: maxWidth, height }; + } + /** + * 计算文字的高度和宽度 + */ + static measureText(text2, font, ctx, fontSize) { + let key = text2 + "_" + font; + if (!_DDeiUtil2.cacheTextCharSize.has(key)) { + ctx.font = font; + let rect = ctx.measureText(text2); + _DDeiUtil2.cacheTextCharSize.set(key, { width: rect.width, height: rect.fontBoundingBoxAscent + rect.fontBoundingBoxDescent, dHeight: rect.fontBoundingBoxAscent }); + } + return _DDeiUtil2.cacheTextCharSize.get(key); + } + /** + * 绘制圆角矩形 + * @param ctx + * @param x x + * @param y y + * @param width 宽度 + * @param height 高度 + * @param radius 圆角 + * @param stroke 是否绘制 + * @param strokeColor 绘制颜色 + * @param fill 是否填充 + * @param fillColor 填充颜色 + */ + static drawRectRound(ctx, x2, y2, width, height, radius = 0, stroke = true, strokeColor = "black", fill = true, fillColor = "white") { + if ((stroke || fill) && width > 0 && height > 0) { + ctx.save(); + ctx.beginPath(); + ctx.arc(x2 + radius, y2 + radius, radius, Math.PI, Math.PI * 3 / 2); + ctx.lineTo(width - radius + x2, y2); + ctx.arc(width - radius + x2, radius + y2, radius, Math.PI * 3 / 2, Math.PI * 2); + ctx.lineTo(width + x2, height + y2 - radius); + ctx.arc(width - radius + x2, height - radius + y2, radius, 0, Math.PI * 1 / 2); + ctx.lineTo(radius + x2, height + y2); + ctx.arc(radius + x2, height - radius + y2, radius, Math.PI * 1 / 2, Math.PI); + ctx.closePath(); + if (fill) { + ctx.fillStyle = fillColor; + ctx.fill(); + } + if (stroke) { + ctx.strokeStyle = strokeColor; + ctx.stroke(); + } + ctx.restore(); + } + } + /** + * 将一组控件按照从上到下从左到右的顺序进行排序,返回新的顺序 + * @param element + */ + static getSortedModels(models) { + let returnArray = new Array(); + if (models) { + let modelArray = null; + if (models.set) { + modelArray = Array.from(models.values()); + } else { + modelArray = models; + } + modelArray.forEach((model) => { + let insert = false; + for (let i2 = returnArray.length - 1; i2 > 0; i2--) { + let rm = returnArray[i2]; + if (rm.y <= model.y) { + returnArray.splice(i2 + 1, 0, model); + insert = true; + break; + } else if (rm.y == model.y && rm.x <= model.x) { + returnArray.splice(i2 + 1, 0, model); + insert = true; + break; + } + } + if (!insert) { + returnArray.splice(0, 0, model); + } + }); + } + return returnArray; + } + /** + * 获取影子图形 + * @param model + */ + static getShadowControl(model) { + let md = null; + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + md = _DDeiUtil2.cloneModel(model, true); + md.id = md.id + "_shadow"; + let rows = []; + let cols = []; + for (let i2 = 0; i2 < model.rows.length; i2++) { + let rowObj = model.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let smi = rowObj[j2]; + let sm = _DDeiUtil2.getShadowControl(smi); + sm.pModel = md; + if (!rows[sm.row]) { + rows[sm.row] = []; + } + rows[sm.row][sm.col] = sm; + if (!cols[sm.col]) { + cols[sm.col] = []; + } + cols[sm.col][sm.row] = sm; + } + } + md.rows = rows; + md.cols = cols; + md.initRender(); + } else { + md = _DDeiUtil2.cloneModel(model, true); + md.id = md.id + "_shadow"; + if ((md == null ? void 0 : md.baseModelType) == "DDeiContainer") { + let newModels = /* @__PURE__ */ new Map(); + md.models.forEach((smi) => { + let sm = _DDeiUtil2.getShadowControl(smi); + sm.id = sm.id.substring(0, sm.id.lastIndexOf("_shadow")); + sm.pModel = md; + newModels.set(sm.id, sm); + sm.initRender(); + }); + md.models = newModels; + } + md.initRender(); + } + return md; + } + //克隆模型,只克隆关键属性 + static cloneModel(sourceModel, isShadowClone = false) { + var _a3, _b2, _c2; + if (!sourceModel) { + return; + } + let returnModel = clone(sourceModel); + if (isShadowClone) { + returnModel.clps = []; + returnModel.isShadowControl = true; + } + if (returnModel.layoutManager) { + returnModel.layoutManager = clone(sourceModel.layoutManager); + returnModel.layoutManager.container = returnModel; + } + returnModel.pvs = []; + sourceModel.pvs.forEach((pv) => { + returnModel.pvs.push(clone(pv)); + }); + returnModel.sptStyle = cloneDeep(sourceModel.sptStyle); + returnModel.textArea = []; + (_a3 = sourceModel.textArea) == null ? void 0 : _a3.forEach((pv) => { + returnModel.textArea.push(clone(pv)); + }); + returnModel.exPvs = {}; + for (let i2 in sourceModel.exPvs) { + returnModel.exPvs[i2] = clone(sourceModel.exPvs[i2]); + } + returnModel.cpv = clone(sourceModel.cpv); + returnModel.bpv = clone(sourceModel.bpv); + returnModel.ovs = cloneDeep(sourceModel.ovs); + if (((_b2 = sourceModel.composes) == null ? void 0 : _b2.length) > 0) { + let composes = []; + (_c2 = sourceModel.composes) == null ? void 0 : _c2.forEach((com) => { + let comp = _DDeiUtil2.cloneModel(com); + comp.pModel = returnModel; + composes.push(comp); + }); + returnModel.composes = composes; + } + returnModel.unicode = _DDeiUtil2.getUniqueCode(); + returnModel.initPVS(); + return returnModel; + } + /** + * 返回某个点旋转后的坐标 + */ + static getRotatedPoint(point2, rotate2 = 0) { + let vc = new Vector3(point2.x, point2.y, point2.z || point2.z == 0 ? point2.z : 1); + if (rotate2) { + let angle2 = (-rotate2 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + vc.applyMatrix3(rotateMatrix); + } + return vc; + } + /** + * 返回dom绝对坐标 + * @param element + */ + static getDomAbsPosition(element, editor) { + let actualLeft = element.offsetLeft; + let actualTop = element.offsetTop; + let current = element.offsetParent; + while (current) { + actualLeft += current.offsetLeft; + actualTop += current.offsetTop + current.clientTop; + current = current.offsetParent; + } + if (editor) { + let editorElement = document.getElementById(editor.id); + let editorPos = _DDeiUtil2.getDomAbsPosition(editorElement); + actualLeft -= editorPos.left; + actualTop -= editorPos.top; + } + return { left: actualLeft, top: actualTop }; + } + /** + * 返回dom到editor元素之间的滚动高度 + * @param element + */ + static getDomScroll(element, editor) { + let scrollTop = 0; + let scrollLeft = 0; + let current = element.parentElement; + let editorElement = document.getElementById(editor.id); + while (current && current != editorElement) { + scrollTop += current.scrollTop; + scrollLeft += current.scrollLeft; + current = current.parentElement; + } + return { left: scrollLeft, top: scrollTop }; + } + /** + * 返回控件在dom下的绝对坐标 + * @param element + */ + static getModelsDomAbsPosition(models) { + var _a3; + if ((models == null ? void 0 : models.length) > 0) { + let outRect; + if (models.length == 1) { + let model = models[0]; + if (model.rotate) { + let pvs2 = model.operatePVS ? model.operatePVS : model.pvs; + let zeroPvs = _DDeiUtil2.pointsToZero(pvs2, model.cpv, model.rotate); + zeroPvs = _DDeiUtil2.zeroToPoints(zeroPvs, model.cpv, 0, 1, 1); + outRect = DDeiAbstractShape.pvsToOutRect(zeroPvs); + outRect.rotate = model.rotate; + } else { + outRect = DDeiAbstractShape.getOutRectByPV(models); + outRect.rotate = 0; + } + } else { + outRect = DDeiAbstractShape.getOutRectByPV(models); + outRect.rotate = 0; + } + let stageRatio2 = (_a3 = models[0].stage) == null ? void 0 : _a3.getStageRatio(); + outRect.x *= stageRatio2; + outRect.x1 *= stageRatio2; + outRect.y *= stageRatio2; + outRect.y1 *= stageRatio2; + outRect.width *= stageRatio2; + outRect.height *= stageRatio2; + let wpv = models[0].stage.wpv; + let domEle = models[0].stage.ddInstance.render.realCanvas.parentElement; + let canvasPos = _DDeiUtil2.getDomAbsPosition(domEle); + outRect.left = canvasPos.left + outRect.x + wpv.x; + outRect.top = canvasPos.top + outRect.y + wpv.y; + outRect.cLeft = canvasPos.left; + outRect.cTop = canvasPos.top; + outRect.cWidth = domEle.clientWidth; + outRect.cHeight = domEle.clientHeight; + return outRect; + } else { + return null; + } + } + static sortRendList(model) { + var _a3; + let rendList = []; + if (((_a3 = model.composes) == null ? void 0 : _a3.length) > 0) { + rendList = rendList.concat(model.composes); + } + rendList.push(model); + rendList.sort((a, b) => { + if ((a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return a.cIndex - b.cIndex; + } else if ((a.cIndex || a.cIndex == 0) && !(b.cIndex || b.cIndex == 0)) { + return 1; + } else if (!(a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return -1; + } else { + return 0; + } + }); + return rendList; + } + /** + * 设置样式属性,自动创建不存在的层级 + * @param model 模型 + * @param paths 样式路径,支持传入多个 + * @param value 值 + */ + static setStyle(model, paths, value) { + if (model) { + let pathArray; + if (typeof paths == "string") { + pathArray = [paths]; + } else { + pathArray = paths; + } + pathArray.forEach((path) => { + if (path != "") { + let attrPaths = path.split("."); + let curObj = model; + for (let i2 = 0; i2 < attrPaths.length; i2++) { + if (i2 != attrPaths.length - 1) { + if (!curObj[attrPaths[i2]]) { + curObj[attrPaths[i2]] = {}; + } + curObj = curObj[attrPaths[i2]]; + } else { + curObj[attrPaths[i2]] = value; + } + } + } + }); + } + } + /** + * 根据Path获取JSON的数据 + * 如果data路径中存在override,则强制覆盖不从上级获取 + */ + static getDataByPathList(data, ...paths) { + if (data && paths) { + for (let ix = 0; ix < paths.length; ix++) { + if (paths[ix]) { + let obj = paths[ix]; + let pathArray = null; + if (typeof obj == "string") { + pathArray = paths[ix].split("."); + try { + let returnJSON = _DDeiUtil2.getDataByPath(data, pathArray); + if ((returnJSON == null ? void 0 : returnJSON.data) || (returnJSON == null ? void 0 : returnJSON.data) == 0) { + return returnJSON.data; + } + } catch (e) { + } + } else if (Array.isArray(obj)) { + if (obj.length > 0) { + for (let jx = 0; jx < obj.length; jx++) { + pathArray = obj[jx].split("."); + try { + let returnJSON = _DDeiUtil2.getDataByPath(data, pathArray); + if ((returnJSON == null ? void 0 : returnJSON.data) || (returnJSON == null ? void 0 : returnJSON.data) == 0) { + return returnJSON.data; + } + } catch (e) { + } + } + } + } + } + } + } + return null; + } + /** + * 根据配置定义,设置属性值 + * @param model 模型 + * @param paths 属性路径,支持传入多个 + * @param value值 + * @return 由构成的属性的实际路径和配置中对应的值组成的Map + */ + static setAttrValueByPath(model, paths, value) { + if (model && paths) { + let attrPaths = null; + if (typeof paths == "string") { + attrPaths = paths.split(","); + } else { + attrPaths = paths; + } + for (let i2 = 0; i2 < attrPaths.length; i2++) { + let attCode = attrPaths[i2]; + let attrCodePaths = attCode.split("."); + let currentObj = model; + for (let j2 = 0; j2 < attrCodePaths.length; j2++) { + let code = attrCodePaths[j2]; + if (j2 == attrCodePaths.length - 1) { + currentObj[code] = value; + } else { + if (!currentObj[code]) { + currentObj[code] = {}; + } + currentObj = currentObj[code]; + } + } + } + } + } + /** + * 生成唯一编码 + * @returns + */ + static getUniqueCode() { + let data = (/* @__PURE__ */ new Date()).getTime(); + if (window.performance && typeof window.performance.now === "function") { + data += performance.now(); + } + let codeId = "xxxxxxxxxxxx6xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(msg) { + let rand = (data + Math.random() * 16) % 16 | 0; + data = Math.floor(data / 16); + return (msg == "x" ? rand : rand & 3 | 8).toString(16); + }); + return codeId; + } + /** + * 求两点距离 + */ + static getPointDistance(x0, y0, x1, y1) { + return Math.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2); + } + /** + * 创建依附快捷控件 + * @param model 被依附控件 + * @param text 文本 + */ + static createDepLinkModel(model, text2, type = null) { + var _a3, _b2; + if (text2 && model) { + let stage2 = model.stage; + let ddInstance = stage2.ddInstance; + let editState = _DDeiUtil2.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: [model] }, ddInstance); + if (editState == 0 || editState == 1) { + let realModel = null; + let posPoint = null; + let posType; + let isCreateRealModel = false; + let isLineLM = false; + if (model.baseModelType == "DDeiLine") { + posType = type ? type : 3; + let pi = Math.floor(model.pvs.length / 2); + if (model.pvs.length % 3 == 0) { + posPoint = model.pvs[pi]; + } else { + posPoint = { + x: (model.pvs[pi - 1].x + model.pvs[pi].x) / 2, + y: (model.pvs[pi - 1].y + model.pvs[pi].y) / 2 + }; + } + model.linkModels.forEach((lm) => { + if (lm.type == posType) { + realModel = lm.dm; + } + }); + if (!realModel) { + isCreateRealModel = true; + isLineLM = true; + } + } else { + let modelDefine = _DDeiUtil2.getControlDefine(model); + if ((_b2 = (_a3 = modelDefine == null ? void 0 : modelDefine.define) == null ? void 0 : _a3.sample) == null ? void 0 : _b2.depPos) { + let depPos = modelDefine.define.sample.depPos; + let essBounds = model.essBounds; + let dmEssBounds = { width: 80, height: 18 }; + posType = depPos.type; + if (!type || posType == type) { + if (depPos.type == 5) { + posPoint = model.cpv; + } else if (depPos.type == 6) { + posPoint = { + x: model.cpv.x, + y: essBounds.y - dmEssBounds.height / 2 + }; + } else if (depPos.type == 7) { + posPoint = { + x: essBounds.x1 + dmEssBounds.width / 2, + y: model.cpv.y + }; + } else if (depPos.type == 8) { + posPoint = { + x: model.cpv.x, + y: essBounds.y1 + dmEssBounds.height / 2 + }; + } else if (depPos.type == 9) { + posPoint = { + x: essBounds.x - dmEssBounds.width / 2, + y: model.cpv.y + }; + } + isCreateRealModel = true; + } + } + } + if (isCreateRealModel) { + let dataJson = { + modelCode: "100200" + }; + let controlDefine = _DDeiUtil2.getControlDefine(dataJson); + for (let i2 in controlDefine == null ? void 0 : controlDefine.define) { + dataJson[i2] = cloneDeep(controlDefine.define[i2]); + } + dataJson["id"] = "lsm_" + stage2.idIdx++; + dataJson["width"] = 80; + dataJson["height"] = 28; + dataJson["font"] = { size: 12 }; + dataJson["text"] = text2; + dataJson["textStyle"] = { paddingWeight: 0 }; + if (isLineLM) { + dataJson["fill"] = { type: 1, color: "white" }; + } + realModel = ddInstance.controlModelClasses["DDeiPolygon"].initByJSON( + dataJson, + { currentStage: stage2, currentDdInstance: ddInstance, currentContainer: model.pModel } + ); + let move1Matrix = new Matrix3( + 1, + 0, + posPoint.x, + 0, + 1, + posPoint.y, + 0, + 0, + 1 + ); + realModel.transVectors(move1Matrix); + model.layer.addModel(realModel, false); + realModel.initRender(); + let lineLink = new DDeiModelLink({ + depModel: model, + type: posType, + dm: realModel, + dx: 0, + dy: 0 + }); + realModel.depModel = model; + model.linkModels.set(realModel.id, lineLink); + } + } + } + } + /** + * 已知两点求其中间以及延长线上的第三点,有len和rate两种计算策略,如果超出按out值,返回实际长度(0),或者按照out设置的值作为长度比例 + * @param x0 点1x + * @param y0 点1y + * @param x1 点2x + * @param y1 点2y + * @param mode 模式,1长度,2比例 + * @param value 值 + * @param out 超出策略,-1原样,其他,比例 + */ + static getPathPoint(x0, y0, x1, y1, mode = 1, value = 0, out = -1, distance = null) { + let pointDistance = distance ? distance : _DDeiUtil2.getPointDistance(x0, y0, x1, y1); + let targetLen; + let rate; + if (mode == 1) { + targetLen = value; + if (out != -1 && targetLen > pointDistance) { + targetLen = pointDistance * out; + } + rate = targetLen / pointDistance; + } else { + targetLen = pointDistance * value; + if (out != -1 && targetLen > pointDistance) { + targetLen = pointDistance * out; + } + rate = targetLen / pointDistance; + } + let sita = parseFloat(_DDeiUtil2.getLineAngle(x0, y0, x1, y1).toFixed(4)); + let point2 = new Vector3(targetLen, 0, 1); + let m12 = new Matrix3(); + if (sita != 0 && sita != 360) { + let angle2 = (-sita * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let moveMatrix2 = new Matrix3( + 1, + 0, + x0, + 0, + 1, + y0, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + point2.applyMatrix3(m12); + point2.sita = sita; + point2.rate = rate; + point2.len = targetLen; + return point2; + } + /** + * 判断点是否在线上 + */ + static isPointInLine(q, p1, p2) { + if (!p1 || !p2 || !q) { + return false; + } + let x0 = q.x; + let y0 = q.y; + let plLength = Infinity; + let x1 = p1.x; + let y1 = p1.y; + let x2 = p2.x; + let y2 = p2.y; + if (x1 == x2 && y1 == y2) { + plLength = _DDeiUtil2.getPointDistance(x0, y0, x1, y1); + } else { + let s = (x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1); + let d = _DDeiUtil2.getPointDistance(x0, y0, x1, y1); + plLength = s / d; + } + if (Math.abs(plLength) <= 1) { + return true; + } + } + /** + * 获取移动路径 + */ + static getMovePath(sAngle, eAngle, startPoint, endPoint) { + let movePath = ""; + switch (sAngle) { + case 0: + { + switch (eAngle) { + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-0.25,x:-1.5,y:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-0.5,x:-1.5,y:-0.5"; + } else { + movePath = "x:0.5,y:-1"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:0.5,x:-1.5,y:0.5"; + } else { + movePath = "x:0.5,y:1"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-0.25,x:-1.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-1.25,x:-1.25"; + } else { + movePath = "x:0.5,y:-1.25,x:0.5"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:0.5,x:-1.25"; + } else { + movePath = "x:1"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:0.25,x:-1.25,y:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-0.5,x:-1.25"; + } else { + movePath = "x:1"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:1.25,x:-1.25"; + } else { + movePath = "x:0.5,y:1.25,x:0.5"; + } + } + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "x:0.25,y:0.25,x:-1.25,y:-0.25"; + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "x:0.25,y:-1"; + } else if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:-1"; + } else { + movePath = "x:1.25,y:-1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "x:0.25,y:1"; + } else if (startPoint.x > endPoint.x) { + movePath = "x:0.25,y:1"; + } else { + movePath = "x:1.25,y:1"; + } + } + } + break; + } + } + break; + case 180: + { + switch (eAngle) { + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = ""; + } else { + movePath = "x:-0.25,y:-0.25,x:1.5,y:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "x:-0.25,y:-1"; + } else { + movePath = "x:-0.25,y:-0.5,x:1.5,y:-0.5"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:-0.25,y:1"; + } else { + movePath = "x:-0.25,y:0.5,x:1.5,y:0.5"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "x:-0.25,y:-0.25,x:1.25,y:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "x:-0.5,y:-1.25,x:-0.5"; + } else { + movePath = "x:-0.25,y:-1.25,x:1.25"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:-1"; + } else { + movePath = "x:-0.25,y:0.5,x:1.25"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "x:-0.25,y:0.25,x:1.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "x:-1"; + } else { + movePath = "x:-0.25,y:-0.5,x:1.25"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "x:-0.5,y:1.25,x:-0.5"; + } else { + movePath = "x:-0.5,y:1.25,x:1.5"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "x:-0.25,y:-0.25,x:-1,y:0.25"; + } else { + movePath = "x:-0.25,y:-0.25,x:1,y:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "x:-0.25,y:-1"; + } else if (startPoint.x > endPoint.x) { + movePath = "x:-1.25,y:-1"; + } else { + movePath = "x:-0.25,y:-1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "x:-0.25,y:1"; + } else if (startPoint.x > endPoint.x) { + movePath = "x:-1.25,y:1"; + } else { + movePath = "x:-0.25,y:1"; + } + } + } + break; + } + } + break; + case -90: + { + switch (eAngle) { + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) + ; + else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:-0.5,x:-1"; + } else { + movePath = "y:-0.5,x:1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:-0.25,x:-0.5,y:1.5,x:-0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:-0.25,x:-0.5,y:1.5,x:-0.5"; + } else { + movePath = "y:-0.25,x:0.5,y:1.5,x:0.5"; + } + } + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "y:-0.5,x:1.25,y:0.5"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:-1"; + } else { + movePath = "y:-0.5,x:1.25,y:-0.5"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:-0.25,x:0.5,y:1.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:-0.25,x:-0.5,y:1.25"; + } else { + movePath = "y:-0.25,x:1.25,y:1.25"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "y:-0.5,x:-1.25,y:0.5"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:-0.5,x:-1.25,y:-0.5"; + } else { + movePath = "y:-1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:-0.25,x:-0.5,y:1.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:-0.25,x:-1.25,y:1.25"; + } else { + movePath = "y:-0.25,x:0.5,y:1.25"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "y:-0.25,x:-1"; + } else { + movePath = "y:-0.25,x:1"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:-0.25,x:-0.5,y:-1,x:0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:-1.25,x:-1"; + } else { + movePath = "y:-1.25,x:1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:-0.25,x:-0.5,y:1.25,x:0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:-0.25,x:-1"; + } else { + movePath = "y:-0.25,x:1"; + } + } + } + break; + } + } + break; + case 90: + { + switch (eAngle) { + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) + ; + else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:0.25,x:0.5,y:-1.5,x:-0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:0.25,x:-0.5,y:-1.5,x:-0.5"; + } else { + movePath = "y:0.25,x:0.5,y:-1.5,x:0.5"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:0.5,x:-1"; + } else { + movePath = "y:0.5,x:1"; + } + } + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "y:0.5,x:1.25,y:-0.5"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:0.25,x:-0.5,y:-1.25"; + } else { + movePath = "y:0.25,x:1.25,y:-1.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:1"; + } else { + movePath = "y:0.5,x:1.25,y:0.5"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "y:0.5,x:-1.25,y:-0.5"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:0.25,x:-1.25,y:-1.25"; + } else { + movePath = "y:0.25,x:0.5,y:-1.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "y:0.5,x:-1.25,y:0.5"; + } else { + movePath = "y:1"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) + ; + else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:0.25,x:-0.5,y:-1,x:0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:0.25,x:-1"; + } else { + movePath = "y:0.25,x:1"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "y:0.25,x:0.5,y:1,x:-0.5"; + } else if (startPoint.x > endPoint.x) { + movePath = "y:1.25,x:-1"; + } else { + movePath = "y:1.25,x:1"; + } + } + } + break; + } + } + break; + } + return movePath; + } + /** + * 判断两条线段是否相交 + * @param l1 线段1 + * @param l2 线段2 + * @returns + */ + static isLineCross(l1, l2) { + if ((l1.x1 > l1.x2 ? l1.x1 : l1.x2) < (l2.x1 < l2.x2 ? l2.x1 : l2.x2) || (l1.y1 > l1.y2 ? l1.y1 : l1.y2) < (l2.y1 < l2.y2 ? l2.y1 : l2.y2) || (l2.x1 > l2.x2 ? l2.x1 : l2.x2) < (l1.x1 < l1.x2 ? l1.x1 : l1.x2) || (l2.y1 > l2.y2 ? l2.y1 : l2.y2) < (l1.y1 < l1.y2 ? l1.y1 : l1.y2)) { + return false; + } + if (((l1.x1 - l2.x1) * (l2.y2 - l2.y1) - (l1.y1 - l2.y1) * (l2.x2 - l2.x1)) * ((l1.x2 - l2.x1) * (l2.y2 - l2.y1) - (l1.y2 - l2.y1) * (l2.x2 - l2.x1)) > 0 || ((l2.x1 - l1.x1) * (l1.y2 - l1.y1) - (l2.y1 - l1.y1) * (l1.x2 - l1.x1)) * ((l2.x2 - l1.x1) * (l1.y2 - l1.y1) - (l2.y2 - l1.y1) * (l1.x2 - l1.x1)) > 0) { + return false; + } + return true; + } + /** + * 取得两条线相交的点 + * @param p1 线1点1 + * @param p2 线1点2 + * @param p3 线2点1 + * @param p4 线2点2 + * @returns + */ + static getLineCorssPoint(p1, p2, p3, p4) { + let abc = (p1.x - p3.x) * (p2.y - p3.y) - (p1.y - p3.y) * (p2.x - p3.x); + let abd = (p1.x - p4.x) * (p2.y - p4.y) - (p1.y - p4.y) * (p2.x - p4.x); + if (abc * abd >= 0) { + return null; + } + let cda = (p3.x - p1.x) * (p4.y - p1.y) - (p3.y - p1.y) * (p4.x - p1.x); + let cdb = cda + abc - abd; + if (cda * cdb >= 0) { + return null; + } + let t = cda / (abd - abc); + let dx = t * (p2.x - p1.x), dy = t * (p2.y - p1.y); + return { x: p1.x + dx, y: p1.y + dy }; + } + /** + * 两个矩形是否相交 + * @param rect1 + * @param rect2 + * @returns + */ + static isRectCross(rect1, rect2) { + let maxX, maxY, minX, minY; + maxX = rect1.x + rect1.width >= rect2.x + rect2.width ? rect1.x + rect1.width : rect2.x + rect2.width; + maxY = rect1.y + rect1.height >= rect2.y + rect2.height ? rect1.y + rect1.height : rect2.y + rect2.height; + minX = rect1.x <= rect2.x ? rect1.x : rect2.x; + minY = rect1.y <= rect2.y ? rect1.y : rect2.y; + if (maxX - minX <= rect1.width + rect2.width && maxY - minY <= rect1.height + rect2.height) { + return true; + } else { + return false; + } + } + /** + * 计算线段相对于窗口的角度 + */ + static getLineAngle(x1, y1, x2, y2, radius = false) { + x2 -= x1; + y2 -= y1; + let v1 = new Vector3(1, 0, 0); + let v2 = new Vector3(x2, y2, 0); + if (radius) { + return v1.angleTo(v2); + } else { + let lineAngle = v1.angleTo(v2) * 180 / Math.PI; + if (v1.cross(v2).z < 0) { + lineAngle = -lineAngle; + } + return lineAngle; + } + } + /** + * 计算两条线的夹角,连续相邻折线 + */ + static getLinesAngle(l1x1, l1y1, l1x2, l1y2, l2x1, l2y1, l2x2, l2y2, radius = false) { + let vectorZero1 = new Vector3(1, 0, 0); + let vectorZero2 = new Vector3(1, 0, 0); + let vectorA = new Vector3(l1x1 - l1x2, l1y1 - l1y2, 0); + let vectorB = new Vector3(l2x2 - l1x2, l2y2 - l1y2, 0); + let angle1 = vectorZero1.angleTo(vectorA); + if (vectorZero1.cross(vectorA).z < 0) { + angle1 = -angle1; + } + let angle2 = vectorZero2.angleTo(vectorB); + if (vectorZero2.cross(vectorB).z < 0) { + angle2 = -angle2; + } + let ar1 = angle1; + let ar2 = angle2; + let angleRadians = ar2 - ar1; + if (!radius) { + angleRadians = angleRadians * 180 / Math.PI; + } + return angleRadians; + } + /** + * 根据Path获取JSON的数据 + * 如果data路径中存在override,则强制覆盖不从上级获取 + */ + static getDataByPath(data, path) { + if (!path || path.length === 0) { + return { + data, + overwrite: (data == null ? void 0 : data.overwrite) === true + }; + } + let currentData = data; + let isOverwrite = false; + for (let i2 = 0; i2 < path.length; i2++) { + const p = path[i2]; + if (p.includes("[")) { + const [arrayName, indexStr] = p.split("["); + const index = parseInt(indexStr); + if (!isNaN(index) && Array.isArray(currentData[arrayName])) { + currentData = currentData[arrayName][index]; + } else { + return { data: null, overwrite: false }; + } + } else { + currentData = currentData[p]; + } + if (currentData == null) { + return { data: null, overwrite: false }; + } + if (currentData.overwrite === true) { + isOverwrite = true; + } + } + return { + data: currentData, + overwrite: isOverwrite + }; + } + /** + * 获取设备像素比 + */ + static getPixelRatio(context) { + let backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; + window.remRatio = window.rem > 168 ? window.rem / 168 : 1; + let ratio = (window.devicePixelRatio || 1) / backingStore; + return ratio; + } + /** + * 将任意单位的长度转换为像素 + * @param number + * @param unit + */ + static unitToPix(number, unit, dpi) { + let unitWeight = 0; + switch (unit) { + case "mm": { + unitWeight = _DDeiUtil2.mmToPx(number, dpi); + break; + } + case "cm": { + unitWeight = _DDeiUtil2.cmToPx(number, dpi); + break; + } + case "m": { + unitWeight = _DDeiUtil2.mToPx(number, dpi); + break; + } + case "inch": { + unitWeight = _DDeiUtil2.inchToPx(number, dpi); + break; + } + case "px": { + unitWeight = number; + break; + } + } + return unitWeight; + } + //毫米转像素 + static mmToPx(mm, dpi) { + return mm / 25.4 * dpi; + } + //厘米转像素 + static cmToPx(cm, dpi) { + return cm / 2.54 * dpi; + } + //米转像素 + static mToPx(m, dpi) { + return m / 0.0254 * dpi; + } + //英寸转像素 + static inchToPx(inc, dpi) { + return inc * dpi; + } + /** + * 获取屏幕DPI + */ + static getDPI() { + if (window.screen.deviceXDPI) { + return { x: window.screen.deviceXDPI, y: window.screen.deviceYDPI }; + } else { + let tmpNode = document.createElement("DIV"); + tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden"; + document.body.appendChild(tmpNode); + let x2 = parseInt(tmpNode.offsetWidth); + let y2 = parseInt(tmpNode.offsetHeight); + tmpNode.parentNode.removeChild(tmpNode); + return { x: x2, y: y2 }; + } + } + // 16进制编码转rgb + static hex2rgb(hex) { + let hexNum = hex.substring(1); + hexNum = "0x" + (hexNum.length < 6 ? repeatLetter(hexNum, 2) : hexNum); + let r = hexNum >> 16; + let g = hexNum >> 8 & "0xff"; + let b = hexNum & "0xff"; + return `rgb(${r},${g},${b})`; + } + static hex2ddeicolor(hex) { + let hexNum = hex.substring(1); + hexNum = "0x" + (hexNum.length < 6 ? repeatLetter(hexNum, 2) : hexNum); + let r = hexNum >> 16; + let g = hexNum >> 8 & "0xff"; + let b = hexNum & "0xff"; + return new DDeiColor(r, g, b, 1); + } + static repeatWord(word, num) { + let result = ""; + for (let i2 = 0; i2 < num; i2++) { + result += word; + } + return result; + } + static repeatLetter(word, num) { + var result = ""; + for (let letter of word) { + result += repeatWord(letter, num); + } + return result; + } + // rgb转16进制 + static rgb2hex(color) { + if (color) { + if (color.toLowerCase().startsWith("rgb")) { + let rgb = color.split(","); + let r = parseInt(rgb[0].split("(")[1]); + let g = parseInt(rgb[1]); + let b = parseInt(rgb[2].split(")")[0]); + let hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); + return hex; + } else if (color.startsWith("#")) { + return color; + } + switch (color) { + case "black": + return "#000000"; + case "white": + return "#FFFFFF"; + case "red": + return "#FF0000"; + case "green": + return "#00FF00"; + case "blue": + return "#0000FF"; + case "grey": + return "#808080"; + case "yellow": + return "#FFFF00"; + } + } + return ""; + } + // 将颜色转换为可用颜色(rgb),其他情况原样返回 + static getColor(color) { + if (!color) { + return null; + } + if (typeof color == "string" && color.startsWith("#")) { + return _DDeiUtil2.hex2rgb(color); + } else { + return color; + } + } + // 将颜色转换为可用颜色(rgb),其他情况原样返回 + static getColorObj(color) { + if (!color) { + return null; + } + if (typeof color == "string" && color.startsWith("#")) { + return _DDeiUtil2.hex2ddeicolor(color); + } else { + let hexColor = _DDeiUtil2.rgb2hex(color); + return _DDeiUtil2.hex2ddeicolor(hexColor); + } + } + /** + * 四舍五入保留小数 + * @param number 原始数字 + * @param pos 小数位数 + */ + static round(number, pos = 0) { + let n = number.toFixed(pos); + return parseFloat(n); + } + /** + * 将N个点,归0坐标 + */ + static pointsToZero(points, cpv, rotate2) { + if ((points == null ? void 0 : points.length) > 0 && cpv) { + let toZeroMatrix = new Matrix3( + 1, + 0, + -cpv.x, + 0, + 1, + -cpv.y, + 0, + 0, + 1 + ); + if (rotate2) { + let angle2 = _DDeiUtil2.preciseTimes(rotate2, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + toZeroMatrix.premultiply(rotateMatrix); + } + let returnPoints = []; + points.forEach((pv) => { + let npv = new Vector3(); + for (let i2 in pv) { + npv[i2] = pv[i2]; + } + npv.z = pv.z || pv.z === 0 ? pv.z : 1; + npv.applyMatrix3(toZeroMatrix); + returnPoints.push(npv); + }); + return returnPoints; + } + return []; + } + /** + * 将N个归0点,放回坐标 + */ + static zeroToPoints(points, cpv, rotate2, scaleX2 = 1, scaleY2 = 1) { + if ((points == null ? void 0 : points.length) > 0 && cpv) { + let m12 = new Matrix3( + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + if (scaleX2 != 1 || scaleY2 != 1) { + let scaleMatrix2 = new Matrix3( + scaleX2, + 0, + 0, + 0, + scaleY2, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + } + if (rotate2) { + let angle2 = (-rotate2 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let moveMatrix2 = new Matrix3( + 1, + 0, + cpv.x, + 0, + 1, + cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + let returnPoints = []; + points.forEach((pv) => { + let npv = new Vector3(); + for (let i2 in pv) { + npv[i2] = pv[i2]; + } + npv.z = pv.z || pv.z === 0 ? pv.z : 1; + npv.applyMatrix3(m12); + returnPoints.push(npv); + }); + return returnPoints; + } + return []; + } + /** + * 根据类别获取OVS + * @param ovs + * @param type + * @returns + */ + static getOVSByType(model, type) { + var _a3, _b2, _c2; + if (!type) { + return model.ovs; + } + let returnOVS = []; + let ovds = (_b2 = (_a3 = _DDeiUtil2.getControlDefine(model)) == null ? void 0 : _a3.define) == null ? void 0 : _b2.ovs; + for (let i2 = 0; i2 < ((_c2 = model == null ? void 0 : model.ovs) == null ? void 0 : _c2.length); i2++) { + let ov = model.ovs[i2]; + let ovd = ovds[i2]; + if (ovd.type == type) { + returnOVS.push(ov); + } + } + return returnOVS; + } + /** + * 对坐标以及大小进行缩放,并返回新的坐标 + * @param pos 原始位置 + * @param ratio 缩放比率 + * @returns 缩放后的坐标 + */ + static getRatioPosition(pos, ratio) { + if (!pos) { + return null; + } else { + let returnP = {}; + if (pos.x || pos.x == 0) { + returnP.x = pos.x * ratio; + } + if (pos.y || pos.y == 0) { + returnP.y = pos.y * ratio; + } + if (pos.width || pos.width == 0) { + returnP.width = pos.width * ratio; + } + if (pos.height || pos.height == 0) { + returnP.height = pos.height * ratio; + } + return returnP; + } + } + /** + * 时间格式化 + * @param date + * @param fmt + * @returns + */ + static formatDate(date, fmt) { + let o = { + "M+": date.getMonth() + 1, + //月份 + "d+": date.getDate(), + //日 + "h+": date.getHours(), + //小时 + "m+": date.getMinutes(), + //分 + "s+": date.getSeconds() + //秒 + }; + if (ytestReg.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); + } + for (let k in o) { + if (new RegExp("(" + k + ")").test(fmt)) + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); + } + return fmt; + } + /** + * 复制属性值,再将最终的结果返回,如果目标不存在属性,则动态创建 + * @param source 源 + * @param dist 目标 + */ + static copyJSONValue(source, dist) { + let distType; + if (dist) { + distType = typeof dist; + } + let sourceType = typeof source; + let type = distType && distType != "undefined" ? distType : sourceType; + if (type != void 0 && type != void 0) { + switch (type) { + case "string": + return source; + case "number": + return source; + case "bigint": + return source; + case "boolean": + return source; + case "function": + return source; + case "object": { + if (!dist) { + dist = {}; + } + for (let i2 in source) { + dist[i2] = _DDeiUtil2.copyJSONValue(source[i2], dist[i2]); + } + return dist; + } + } + } + return null; + } + /** + * 判断是否具备某种权限 + * @operate 操作 + * @control 控件 + * @propName 属性 + * @mode 模式 + */ + static isAccess(operate, control, propName, mode, ddInstance) { + let strkey = "AC_" + mode + "_" + operate; + if (control) { + if (propName) { + let accessValue3 = _DDeiUtil2.getConfigValue(strkey + "_" + control.id + "_" + propName, ddInstance); + if (accessValue3 || accessValue3 == false) { + return accessValue3; + } else { + if (control.code) { + accessValue3 = _DDeiUtil2.getConfigValue(strkey + "_" + control.code + "_" + propName, ddInstance); + } + if (accessValue3 || accessValue3 == false) { + return accessValue3; + } else { + if (control.modelCode) { + accessValue3 = _DDeiUtil2.getConfigValue(strkey + "_" + control.modelCode + "_" + propName, ddInstance); + } + if (accessValue3 || accessValue3 == false) { + return accessValue3; + } else { + if (control.modelType) { + accessValue3 = _DDeiUtil2.getConfigValue(strkey + "_" + control.modelType + "_" + propName, ddInstance); + } + if (accessValue3 || accessValue3 == false) { + return accessValue3; + } + } + } + } + } + let accessValue2 = _DDeiUtil2.getConfigValue(strkey + "_" + control.id, ddInstance); + if (accessValue2 || accessValue2 == false) { + return accessValue2; + } else { + if (control.code) { + accessValue2 = _DDeiUtil2.getConfigValue(strkey + "_" + control.code, ddInstance); + } + if (accessValue2 || accessValue2 == false) { + return accessValue2; + } else { + if (control.modelCode) { + accessValue2 = _DDeiUtil2.getConfigValue(strkey + "_" + control.modelCode, ddInstance); + } + if (accessValue2 || accessValue2 == false) { + return accessValue2; + } else { + if (control.modelType) { + accessValue2 = _DDeiUtil2.getConfigValue(strkey + "_" + control.modelType, ddInstance); + } + if (accessValue2 || accessValue2 == false) { + return accessValue2; + } + } + } + } + } + let accessValue = _DDeiUtil2.getConfigValue(strkey, ddInstance); + if (accessValue || accessValue == false) { + return accessValue; + } + return true; + } + /** + * 获取配置属性值 + * @param key key + */ + static getConfigValue(key, ddInstance) { + if (ddInstance && (ddInstance[key] || ddInstance[key] == false || ddInstance[key] == 0)) { + return ddInstance[key]; + } else { + return DDeiConfig$1[key]; + } + } + /** + *@param num:格式化目标数字 + *@param decimal:保留几位小数,默认2位 + *@param split:千分位分隔符,默认为空 + */ + static formatNumber(num, decimal = 0, split = "") { + if (num != null && num != void 0 && isFinite(num)) { + let res = ""; + let dotIndex = String(num).indexOf("."); + if (dotIndex === -1) { + if (decimal === 0) { + res = String(num).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`); + } else { + res = String(num).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`) + "." + "0".repeat(decimal); + } + } else { + let numStr = String((Math.round(num * Math.pow(10, decimal)) / Math.pow(10, decimal)).toFixed(decimal)); + let decimals = numStr.slice(dotIndex, dotIndex + decimal + 1); + res = String(numStr.slice(0, dotIndex)).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`) + decimals; + } + return res; + } else { + return num; + } + } + /** + * 是否为safari浏览器 + */ + static isSafari() { + return safariReg.test(navigator.userAgent) && !chromeReg.test(navigator.userAgent); + } + /** + * 获取可替换的数据值 + * 主要用于得到经过业务替换值绑定后的数据 + * @param model 对象 + * @param keypath 属性路径,一般用.隔开 + * @param format 是否需要格式化 + * @param replaceSPT 是否替换特殊样式 + */ + static getReplacibleValue(model, keypath, format = false, replaceSPT = false, initData = null) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k; + if (model) { + let hasTempSpt = false; + let replaceDetail = null; + let originValue = (_a3 = model == null ? void 0 : model.render) == null ? void 0 : _a3.getCachedValue(keypath); + if (!originValue && initData) { + let rp1 = keypath.split("."); + if (rp1.length > 1) { + let detailCode = rp1.slice(1); + let rd = _DDeiUtil2.getDataByPath(initData, detailCode); + if (rd) { + originValue = rd.data; + } + } + } + let returnValue = originValue; + if (originValue && originValue.indexOf("#") != -1) { + let busiData = _DDeiUtil2.getBusiData(model.stage.ddInstance); + if (busiData) { + let replaceResult = _DDeiUtil2.expressBindValue(originValue, busiData); + if (replaceResult == null ? void 0 : replaceResult.data) { + returnValue = replaceResult.data; + replaceDetail = replaceResult.detail; + } + } + } + let hasFormatted = false; + if (format) { + let fmtType = (_b2 = model == null ? void 0 : model.render) == null ? void 0 : _b2.getCachedValue("fmt.type"); + let formatValue = null; + switch (fmtType) { + case 1: + { + let scale = (_c2 = model == null ? void 0 : model.render) == null ? void 0 : _c2.getCachedValue("fmt.nscale"); + let tmark = (_d2 = model == null ? void 0 : model.render) == null ? void 0 : _d2.getCachedValue("fmt.tmark"); + formatValue = _DDeiUtil2.formatNumber(returnValue, !scale || isNaN(scale) ? 0 : scale, tmark == 1 ? "," : ""); + } + break; + case 2: + { + let mrmb = (_e2 = model == null ? void 0 : model.render) == null ? void 0 : _e2.getCachedValue("fmt.mrmb"); + if (mrmb == 1) { + formatValue = _DDeiUtil2.toBigMoney(returnValue); + } else { + let scale = (_f = model == null ? void 0 : model.render) == null ? void 0 : _f.getCachedValue("fmt.nscale"); + let tmark = (_g = model == null ? void 0 : model.render) == null ? void 0 : _g.getCachedValue("fmt.tmark"); + let munit = (_h = model == null ? void 0 : model.render) == null ? void 0 : _h.getCachedValue("fmt.munit"); + let mmark = (_i = model == null ? void 0 : model.render) == null ? void 0 : _i.getCachedValue("fmt.mmark"); + formatValue = _DDeiUtil2.formatNumber(returnValue, !scale || isNaN(scale) ? 0 : scale, tmark == 1 ? "," : ""); + formatValue = (mmark ? mmark : "") + formatValue + (munit ? munit : ""); + } + } + break; + case 3: + { + let dtype = (_j = model == null ? void 0 : model.render) == null ? void 0 : _j.getCachedValue("fmt.dtype"); + let isFmt = false; + let dv = null; + if (isDate$1(returnValue)) { + isFmt = true; + dv = returnValue; + } else if (isString(returnValue) || isNumber(returnValue) && ("" + returnValue).length == 13) { + try { + dv = new Date(parseInt(returnValue)); + isFmt = true; + } catch (e) { + } + } + if (isFmt) { + switch (dtype) { + case 1: + { + formatValue = _DDeiUtil2.formatDate(dv, "yyyy-MM-dd"); + } + break; + case 2: + { + formatValue = _DDeiUtil2.formatDate(dv, "hh:mm:ss"); + } + break; + case 3: + { + formatValue = _DDeiUtil2.formatDate(dv, "yyyy-MM-dd hh:mm:ss"); + } + break; + case 99: + { + let format2 = (_k = model == null ? void 0 : model.render) == null ? void 0 : _k.getCachedValue("fmt.format"); + if (format2) { + formatValue = _DDeiUtil2.formatDate(dv, format2); + } + } + break; + } + } + } + break; + } + if (formatValue) { + if (returnValue != formatValue && model.render && replaceSPT && model.sptStyle) { + let tempSptStyleArr = _DDeiUtil2.sptStyleToArray(JSON.parse(JSON.stringify(model.sptStyle))); + let tempStyle = null; + for (let i2 = 0; i2 < tempSptStyleArr.length; i2++) { + let v = tempSptStyleArr[i2]; + if (v && JSON.stringify(v) != "{}") { + tempStyle = v; + break; + } + } + if (tempStyle) { + tempSptStyleArr = _DDeiUtil2.copyElementToArray(tempStyle, formatValue.length); + } + if ((tempSptStyleArr == null ? void 0 : tempSptStyleArr.length) > 0) { + model.render.tempSptStyle = _DDeiUtil2.sptStyleArrayToObject(tempSptStyleArr); + hasTempSpt = true; + } else { + delete model.render.tempSptStyle; + } + } else { + delete model.render.tempSptStyle; + } + returnValue = formatValue; + hasFormatted = true; + } + } + if (!hasFormatted && model.render && replaceSPT && (replaceDetail == null ? void 0 : replaceDetail.length) > 0 && model.sptStyle) { + let tempSptStyleArr = _DDeiUtil2.sptStyleToArray(JSON.parse(JSON.stringify(model.sptStyle))); + let deltaI = 0; + replaceDetail.forEach((detail) => { + let sidx = detail.index; + let eidx = detail.index + detail.bind.length; + let tempStyle = null; + for (let i2 = sidx; i2 < eidx; i2++) { + let v = _DDeiUtil2.getDataByPathList(model, "sptStyle." + i2); + if (v && JSON.stringify(v) != "{}") { + tempStyle = v; + break; + } + } + if (tempStyle) { + let insertArr = _DDeiUtil2.copyElementToArray(tempStyle, detail.value.length); + tempSptStyleArr.splice(sidx + deltaI, eidx - sidx, ...insertArr); + deltaI += detail.value.length - eidx + sidx; + } + }); + if ((tempSptStyleArr == null ? void 0 : tempSptStyleArr.length) > 0) { + hasTempSpt = true; + model.render.tempSptStyle = _DDeiUtil2.sptStyleArrayToObject(tempSptStyleArr); + } + } + if (!hasTempSpt) { + delete model.render.tempSptStyle; + } + return returnValue; + } + return null; + } + /** + * 把一个元素复制到一个数组中 + * @param element + * @param size + */ + static copyElementToArray(element, size) { + let arr = []; + if (size > 0) { + for (let i2 = 0; i2 < size; i2++) { + let data = cloneDeep(element); + arr.push(data); + } + } + return arr; + } + /** + * 将sptStyle,按照key的大小转换为数组形式 + * @param sptStyle + */ + static sptStyleToArray(sptStyle) { + let max = -Infinity, min = Infinity; + let arr = []; + for (let i2 in sptStyle) { + max = Math.max(max, parseInt(i2)); + min = Math.min(min, parseInt(i2)); + } + if (max != -Infinity && min != Infinity) { + for (let i2 = 0; i2 < min; i2++) { + arr.push(null); + } + for (let i2 = min; i2 <= max; i2++) { + arr.push(sptStyle[i2]); + } + } + return arr; + } + /** + * 将sptStyle,按照key的大小转换为数组形式 + * @param sptStyle + */ + static sptStyleArrayToObject(sptStyle) { + let obj = {}; + for (let i2 = 0; i2 < sptStyle.length; i2++) { + if (sptStyle[i2]) { + obj[i2] = sptStyle[i2]; + } + } + return obj; + } + /** + * 用于处理绑定字段或文本的表达式替换 + * @return 返回替换后的字符串,以及替换的详情信息 + */ + static expressBindValue(originValue, busiData, row) { + if (originValue && originValue.indexOf("#{") != -1) { + let t = originValue; + let replaceData = ""; + let replaceDetail = []; + let usedCharIdx = 0; + while (t && t != "") { + let result = expressBindValueReg.exec(t); + if (result != null && result.length > 0) { + replaceData += t.substring(0, result.index); + let rs = result[0].replaceAll(" ", ""); + let aer = this.analysisExpress(rs.substring(2, rs.length - 1), busiData, row); + replaceDetail.push({ index: result.index + usedCharIdx, bind: result[0], value: aer }); + replaceData += aer; + usedCharIdx += result.index + result[0].length; + t = t.substr(result.index + result[0].length); + } else { + replaceData += t; + break; + } + } + return { data: replaceData, detail: replaceDetail }; + } + } + /** + * 处理表达式计算,格式如下: + * 列表.行#费用 列表的当前行费用 + * 列表.行#费用-列表.行#收入 列表当前行费用-当前行收入 + * 列表.0#费用 第一行的费用字段 + * 列表.数量 列表长度 + * 列表.平均#费用 对列表中的费用字段求平均值 + * 列表.求和#费用 对列表中的费用字段求合 + * 列表.求和#收入-列表#求和#费用 列表中收入-费用 + * 列表.求和#收入-100 列表中收入-100 + */ + static analysisExpress(expressContent, busiData, row) { + expressContent = expressContent.replaceAll(" ", ""); + let expressArray = expressContent.split(contentSplitReg); + if (expressArray != null && expressArray.length > 0) { + for (let i2 = 0; i2 < expressArray.length; i2++) { + let ea = expressArray[i2]; + let eaValue = this.calculExpressValue(ea, busiData, row); + expressContent = expressContent.replaceAll(ea, eaValue); + } + } + try { + if (contentSplitReg.test(expressContent)) { + expressContent = expressContent.replaceAll("null", "0"); + let result = new Function("return " + expressContent)(); + return result; + } else { + return expressContent.replaceAll("null", ""); + } + } catch (e) { + console.error(e); + return ""; + } + } + //解析简单的,不带任何运算符号的表达式 + static calculExpressValue(ea, busiData, row) { + let rd = null; + if (isNumberReg.test(ea)) { + return ea; + } else { + if (ea.indexOf(".") == -1 && ea.indexOf("#") == -1) { + rd = busiData[ea]; + } else if (ea.indexOf(".") != -1) { + try { + let listKey = ea.split(".")[0]; + let listDataExpress = ea.split(".")[1]; + if (listKey && listDataExpress) { + let listSubKey = listDataExpress.split("#")[0]; + let listData = busiData[listKey]; + if ("平均" == listSubKey || "平均值" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + if (busiData[ea + "_catch_avg"]) { + rd = busiData[ea + "_catch_avg"]; + } else { + let countNum = 0; + if (busiData[ea + "_catch_count"]) { + countNum = busiData[ea + "_catch_count"]; + } else { + for (let i2 = 0; i2 < listData.length; i2++) { + var ld = listData[i2][listSubEP]; + if (ld && isNumberReg.test(ld)) { + countNum += parseFloat(ld); + } + } + busiData[ea + "_catch_count"] = countNum; + } + let avgNNum = countNum / listData.length; + busiData[ea + "_catch_avg"] = avgNNum; + rd = avgNNum; + } + } else if ("最大" == listSubKey || "最大值" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let maxNum = null; + if (busiData[ea + "_catch_max"]) { + maxNum = busiData[ea + "_catch_max"]; + } else { + for (let i2 = 0; i2 < listData.length; i2++) { + let ld2 = listData[i2][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + if (maxNum == null) { + maxNum = ld2; + } else if (maxNum < ld2) { + maxNum = ld2; + } + } + } + busiData[ea + "_catch_max"] = maxNum; + } + rd = maxNum; + } else if ("最小" == listSubKey || "最小值" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let minNum = null; + if (busiData[ea + "_catch_min"]) { + minNum = busiData[ea + "_catch_min"]; + } else { + for (let i2 = 0; i2 < listData.length; i2++) { + let ld2 = listData[i2][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + if (minNum == null) { + minNum = ld2; + } else if (minNum > ld2) { + minNum = ld2; + } + } + } + busiData[ea + "_catch_min"] = minNum; + } + rd = minNum; + } else if ("合计" == listSubKey || "求和" == listSubKey || "求合" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let countNum = 0; + if (busiData[ea + "_catch_count"]) { + countNum = busiData[ea + "_catch_count"]; + } else { + for (let i2 = 0; i2 < listData.length; i2++) { + var ld = listData[i2][listSubEP]; + if (ld && isNumberReg.test(ld)) { + countNum += parseFloat(ld); + } + } + busiData[ea + "_catch_count"] = countNum; + } + rd = countNum; + } else if ("数量" == listSubKey || "长度" == listSubKey) { + rd = busiData[listKey].length; + } else if ("尾行" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let ld2 = listData[listData.length - 1][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + rd = parseFloat(ld2); + } else if (ld2) { + rd = ld2; + } + } else if ("首行" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let ld2 = listData[0][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + rd = parseFloat(ld2); + } else if (ld2) { + rd = ld2; + } + } else if ("行" == listSubKey) { + let listSubEP = listDataExpress.split("#")[1]; + let ld2 = listData[row][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + rd = parseFloat(ld2); + } else if (ld2) { + rd = ld2; + } + } else if (isNumberReg.test(listSubKey)) { + let listSubEP = listDataExpress.split("#")[1]; + let ld2 = listData[listSubKey][listSubEP]; + if (ld2 && isNumberReg.test(ld2)) { + rd = parseFloat(ld2); + } else if (ld2) { + rd = ld2; + } + } + } + } catch (e) { + console.error(e); + } + } + } + if (rd != null && isNumberReg.test(rd)) { + return rd; + } else if (rd) { + return rd; + } + return null; + } + /** + * 对输入数据进行合并拆分等处理,主要用来处理分页打印,多页打印等功能 + */ + static analysisDataFromTemplate(iData, templateJSON) { + let tableListConfig = {}; + let pdJSON = templateJSON; + for (let j2 in pdJSON.rootModels) { + if (pdJSON.rootModels[j2].modelType == "PDTable") { + let outDataRowStrategy = pdJSON.rootModels[j2]["outDataRowStrategy"]; + if (outDataRowStrategy == 1 || outDataRowStrategy == "1") { + let maxDataRow = pdJSON.rootModels[j2]["maxDataRow"]; + if (maxDataRow != 0 && maxDataRow != null && maxDataRow != "") { + let table2 = pdJSON.rootModels[j2]; + let dataRowStart = -1; + let dataRowEnd = -1; + let listKey = null; + for (let ri = 0; ri < table2.rows.length; ri++) { + for (let rj = 0; rj < table2.rows[ri].length; rj++) { + let curCell = table2.rows[ri][rj]; + if (curCell.dataRow == 2 || curCell.dataRow == "2" || curCell.attrs["dataRow"] == 2 || curCell.attrs["dataRow"] == "2") { + if (dataRowStart == -1) { + dataRowStart = ri; + } + if (dataRowEnd < ri) { + dataRowEnd = ri; + } + let expressContent = null; + if (curCell.bindField || curCell.attrs.bindField) { + expressContent = curCell.bindField ? curCell.bindField : curCell.attrs.bindField; + } else if (curCell.text && curCell.text.indexOf("#{") != -1) { + let t = curCell.text; + let reg = /#\{[^\{\}]*\}/g; + let result = reg.exec(t); + if (result != null && result.length > 0) { + let rs = result[0].replaceAll(" ", ""); + expressContent = rs.substring(2, rs.length - 1); + } + } + if (expressContent) { + expressContent = expressContent.replaceAll(" ", ""); + let expressArray = expressContent.split(contentSplitReg); + if (expressArray != null && expressArray.length > 0) { + for (let i2 = 0; i2 < expressArray.length; i2++) { + let ea = expressArray[i2]; + if (ea.indexOf(".") != -1) { + try { + listKey = ea.split(".")[0]; + } catch (e) { + } + } + } + } + } + } + } + } + if (listKey) { + let rowNum = parseInt(maxDataRow / (dataRowEnd - dataRowStart + 1)); + if (rowNum >= 1) { + tableListConfig[listKey] = rowNum; + } + } + } + } + } + } + let newIDatas = []; + for (let listKey in tableListConfig) { + if (iData[listKey] && tableListConfig[listKey] && tableListConfig[listKey] > 0 && iData[listKey].length > tableListConfig[listKey]) { + let subArrays = this.subArrayGroup(iData[listKey], tableListConfig[listKey]); + for (let si = 0; si < subArrays.length; si++) { + let newIData = cloneDeep(iData); + newIData[listKey] = subArrays[si]; + newIDatas[newIDatas.length] = newIData; + } + } + } + if (newIDatas.length == 0) { + newIDatas[0] = iData; + } + return newIDatas; + } + /** + * 以templateJSON为模板,循环inputData,替换模板值后,生成新的JSON数组返回 + */ + static analysisBindData(inputData, templateJSON) { + let processDatas = inputData.flatMap((idata) => this.analysisDataFromTemplate(idata, templateJSON)); + return processDatas.map((idata) => { + let pdJSON = JSON.parse(JSON.stringify(templateJSON.toJSON())); + this.processWatermark(pdJSON.pdPaper, idata); + for (let control of pdJSON.rootModels) { + if (control.modelType === "PDTable") { + this.processTableControl(control, idata); + } else if (control.modelType === "PDImage") { + this.processImageControl(control, idata); + } else { + this.processTextControl(control, idata); + } + } + return pdJSON; + }); + } + // 处理水印 + static processWatermark(pdPaper, idata) { + let watermarkReplaceData = this.processTextOrBindFieldExpress(pdPaper, idata); + if (watermarkReplaceData) { + pdPaper.watermarkBase64 = watermarkReplaceData; + pdPaper.attrs["watermarkBase64"] = watermarkReplaceData; + pdPaper.watermark = watermarkReplaceData; + pdPaper.attrs["watermark"] = watermarkReplaceData; + pdPaper.bindField = null; + pdPaper.attrs["bindField"] = null; + } + } + // 处理表格控件 + static processTableControl(table2, idata) { + } + // 处理图片控件 + static processImageControl(control, idata) { + let replaceData = this.processTextOrBindFieldExpress(control, idata); + if (replaceData) { + control.base64 = replaceData; + control.attrs["base64"] = replaceData; + control.src = replaceData; + control.attrs["src"] = replaceData; + control.bindField = null; + control.attrs["bindField"] = null; + } + } + // 处理文本控件 + static processTextControl(control, idata) { + let replaceData = this.processTextOrBindFieldExpress(control, idata); + control.text = replaceData; + control.attrs["text"] = replaceData; + control.bindField = null; + control.attrs["bindField"] = null; + control.convertToRMBY = "1"; + } + /** + * 用于处理绑定字段或文本的表达式替换 + */ + static processTextOrBindFieldExpress(control, idata, row) { + if (control.bindField || control.attrs.bindField) { + let replaceData = ""; + let expressContent = control.bindField ? control.bindField : control.attrs.bindField; + replaceData = this.analysisExpress(expressContent, idata, row); + if (!replaceData) { + replaceData = ""; + } + if (control.attrs.convertToRMBY == 2 || control.attrs.convertToRMBY == "2" || control.convertToRMBY == 2 || control.convertToRMBY == "2") { + replaceData = PDSetting.dealBigMoney(replaceData); + } + return replaceData; + } else if (control.text && control.text.indexOf("#{") != -1) { + let t = control.text; + let replaceData = ""; + while (t && t != "") { + let reg = /#\{[^\{\}]*\}/g; + let result = reg.exec(t); + if (result != null && result.length > 0) { + replaceData += t.substring(0, result.index); + let rs = result[0].replaceAll(" ", ""); + let aer = this.analysisExpress(rs.substring(2, rs.length - 1), idata, row); + if (control.attrs.convertToRMBY == 2 || control.attrs.convertToRMBY == "2" || control.convertToRMBY == 2 || control.convertToRMBY == "2") { + aer = this.dealBigMoney(aer); + } + replaceData += aer; + t = t.substr(result.index + result[0].length); + } else { + replaceData += t; + break; + } + } + return replaceData; + } else if (control.text) { + if (control.attrs.convertToRMBY == 2 || control.attrs.convertToRMBY == "2" || control.convertToRMBY == 2 || control.convertToRMBY == "2") { + return this.dealBigMoney(control.text); + } else { + return control.text; + } + } + } + /** + * 转换为人民币大写 + * @param money 数字 + * @returns + */ + static toBigMoney(money) { + let cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); + let cnIntRadice = new Array("", "拾", "佰", "仟"); + let cnIntUnits = new Array("", "万", "亿", "兆"); + let cnDecUnits = new Array("角", "分", "毫", "厘"); + let cnInteger = "整"; + let cnIntLast = "元"; + let maxNum = 1e15; + let integerNum; + let decimalNum; + let chineseStr = ""; + let parts; + if (money == "" || money == null || money == void 0) { + return ""; + } + money = parseFloat(money); + if (money >= maxNum) { + return ""; + } + if (money == 0) { + chineseStr = cnNums[0] + cnIntLast + cnInteger; + return chineseStr; + } + money = money.toString(); + if (money.indexOf(".") == -1) { + integerNum = money; + decimalNum = ""; + } else { + parts = money.split("."); + integerNum = parts[0]; + decimalNum = parts[1].substr(0, 4); + } + if (parseInt(integerNum, 10) > 0) { + let zeroCount = 0; + let IntLen = integerNum.length; + for (let i2 = 0; i2 < IntLen; i2++) { + let n = integerNum.substr(i2, 1); + let p = IntLen - i2 - 1; + let q = p / 4; + let m = p % 4; + if (n == "0") { + zeroCount++; + } else { + if (zeroCount > 0) { + chineseStr += cnNums[0]; + } + zeroCount = 0; + chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; + } + if (m == 0 && zeroCount < 4) { + chineseStr += cnIntUnits[q]; + } + } + chineseStr += cnIntLast; + } + if (decimalNum != "") { + let decLen = decimalNum.length; + for (let i2 = 0; i2 < decLen; i2++) { + let n = decimalNum.substr(i2, 1); + if (n != "0") { + chineseStr += cnNums[Number(n)] + cnDecUnits[i2]; + } + } + } + if (chineseStr == "") { + chineseStr += cnNums[0] + cnIntLast + cnInteger; + } else if (decimalNum == "") { + chineseStr += cnInteger; + } + return chineseStr; + } + /** + * 精准返回num1除以num2的结果 + */ + static preciseDiv(num1, num2) { + let t1 = 0, t2 = 0, r1, r2; + try { + t1 = num1.toString().split(".")[1].length; + } catch (e) { + } + try { + t2 = num2.toString().split(".")[1].length; + } catch (e) { + } + r1 = Number(num1.toString().replace(".", "")); + r2 = Number(num2.toString().replace(".", "")); + return r1 / r2 * Math.pow(10, t2 - t1); + } + /** + * 精准返回num1乘以num2的结果 + */ + static preciseTimes(num1, num2) { + let m = 0, s1 = num1.toString(), s2 = num2.toString(); + try { + m += s1.split(".")[1].length; + } catch (e) { + } + try { + m += s2.split(".")[1].length; + } catch (e) { + } + return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m); + } + /** + * 精准返回num1+num2的结果 + */ + static preciseAdd(num1, num2) { + let r1, r2, m; + try { + r1 = num1.toString().split(".")[1].length; + } catch (e) { + r1 = 0; + } + try { + r2 = num2.toString().split(".")[1].length; + } catch (e) { + r2 = 0; + } + m = Math.pow(10, Math.max(r1, r2)); + return (num1 * m + num2 * m) / m; + } + /** + * 精准返回num1-num2的结果 + */ + static preciseSub(num1, num2) { + let r1, r2, m, n; + try { + r1 = num1.toString().split(".")[1].length; + } catch (e) { + r1 = 0; + } + try { + r2 = num2.toString().split(".")[1].length; + } catch (e) { + r2 = 0; + } + m = Math.pow(10, Math.max(r1, r2)); + n = r1 >= r2 ? r1 : r2; + return parseFloat(((num1 * m - num2 * m) / m).toFixed(n)); + } + /** + * 读取最近写入颜色 + */ + static readRecentlyChooseColors() { + let colorStrs = localStorage.getItem("ddei-recently-choose-colors"); + if (colorStrs) { + let colors = colorStrs.split(","); + _DDeiUtil2.recentlyChooseColors = colors; + } + } + /** + * 写入最近选取颜色 + */ + static whiteRecentlyChooseColors(newValue) { + if (!_DDeiUtil2.recentlyChooseColors) { + _DDeiUtil2.recentlyChooseColors = []; + } + if (_DDeiUtil2.recentlyChooseColors.indexOf(newValue) != -1) { + _DDeiUtil2.recentlyChooseColors.splice(_DDeiUtil2.recentlyChooseColors.indexOf(newValue), 1); + } + _DDeiUtil2.recentlyChooseColors.splice(0, 0, newValue); + if (_DDeiUtil2.recentlyChooseColors.length > 10) { + _DDeiUtil2.recentlyChooseColors.splice(10, 1); + } + localStorage.setItem("ddei-recently-choose-colors", _DDeiUtil2.recentlyChooseColors.toString()); + } + static canvasToImage(canvas) { + return new Promise((resolve, rejected) => { + let dataURL = canvas.toDataURL("image/png"); + let img = new Image(); + img.src = dataURL; + img.onload = function() { + resolve(img); + }; + img.onerror = function() { + rejected(img); + }; + }); + } + /** + * 将当前实例的stage转换为image + * @param ddInstance + * @param width + * @param height + */ + static stageScreenToImage(ddInstance, width, height) { + return new Promise((resolve, rejected) => { + try { + let canvas = document.createElement("canvas"); + let ctx = canvas.getContext("2d"); + let rat1 = ddInstance.render.ratio; + let rat2 = Math.max(ddInstance.pixel, _DDeiUtil2.getPixelRatio(ctx)); + ddInstance.render.tempCanvas = canvas; + let models = ddInstance.stage.getLayerModels(); + let outRect = DDeiAbstractShape.getOutRectByPV(models); + let lineOffset = models[0].render.getCachedValue("border.width"); + let addWidth = 0; + if (lineOffset) { + addWidth = lineOffset * rat1; + if (models.length > 1) { + addWidth = lineOffset * 2; + } + } + let scaleW = 1, scaleH = 1; + if (outRect.width * rat1 > width * rat1) { + scaleW = width / outRect.width; + } + if (outRect.height * rat1 > height * rat1) { + scaleH = height / outRect.height; + } + canvas.setAttribute("style", "-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat2 + ");display:block;zoom:" + 1 / rat2); + if (scaleW != 1 || scaleH != 1) { + canvas.setAttribute("width", width * rat1 + addWidth); + canvas.setAttribute("height", height * rat1 + addWidth); + ctx.translate(-outRect.x * rat1 * scaleW + addWidth / 2, -outRect.y * rat1 * scaleH + addWidth / 2); + ctx.scale(scaleW, scaleH); + } else { + canvas.setAttribute("width", outRect.width * rat1 + addWidth); + canvas.setAttribute("height", outRect.height * rat1 + addWidth); + ctx.translate(-outRect.x * rat1 + addWidth / 2, -outRect.y * rat1 + addWidth / 2); + } + models.forEach((item) => { + item.render.drawShape(); + }); + let base64 = canvas.toDataURL("image/png"); + ddInstance.render.tempCanvas = null; + resolve(base64); + } catch (e) { + ddInstance.render.tempCanvas = null; + resolve(""); + } + }); + } + /** + * 将当前实例的stage按一定大小比例剪切为多张图片 + */ + static async cutStageToImages(ddInstance, stage2, width, height, sx, sy, ex, ey, scaleSize = 2, bg = false, mask = false, autoScale = false) { + return new Promise((resolve, rejected) => { + var _a3; + try { + let canvas = document.createElement("canvas"); + let ctx = canvas.getContext("2d"); + let oldRat1 = ddInstance.render.ratio; + let rat1 = scaleSize ? scaleSize : oldRat1; + let stageRatio2 = stage2.getStageRatio(); + ddInstance.render.tempCanvas = canvas; + ddInstance.render.ratio = rat1; + let editorId = _DDeiUtil2.getEditorId(ddInstance); + let containerDiv = document.getElementById(editorId + "_ddei_cut_img_div"); + canvas.setAttribute("style", "-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;zoom:" + 1 / rat1); + canvas.setAttribute("width", width * rat1); + canvas.setAttribute("height", height * rat1); + containerDiv.appendChild(canvas); + let imagesBase64 = []; + let forceBreak = false; + for (let i2 = sy; (ey > i2 || Math.abs(ey - height - i2) <= 0.01) && !forceBreak; i2 = i2 + height) { + for (let j2 = sx; (ex > j2 || Math.abs(ex - width - j2) <= 0.01) && !forceBreak; j2 = j2 + width) { + ctx.save(); + ctx.clearRect(0, 0, width * rat1, height * rat1); + ctx.translate(-j2 * rat1, -i2 * rat1); + for (let li = stage2.layers.length - 1; li >= 0; li--) { + if (stage2.layers[li].display == 1 && stage2.layers[li].print != false) { + if (bg) { + stage2.layers[li].render.drawBackground(sx * rat1, sy * rat1, (ex - sx) * rat1, (ey - sy) * rat1); + } + } + } + ctx.restore(); + ctx.save(); + if (autoScale) { + let models = stage2.getLayerModels(); + let outRect = DDeiAbstractShape.getOutRectByPV(models); + let scaleW = outRect.width / stageRatio2 / width; + let scaleH = outRect.height / stageRatio2 / height; + ctx.scale(1 / scaleW, 1 / scaleH); + ctx.translate(-outRect.x * rat1 / stageRatio2, -outRect.y * rat1 / stageRatio2); + forceBreak = true; + } else { + ctx.translate(-j2 * rat1, -i2 * rat1); + } + ctx.scale(1 / stageRatio2, 1 / stageRatio2); + let hasPrint = true; + stage2.render.selector.resetState(); + for (let li = stage2.layers.length - 1; li >= 0; li--) { + if (stage2.layers[li].display == 1 && stage2.layers[li].print != false) { + stage2.layers[li].opPoints = []; + delete stage2.layers[li].opLine; + (_a3 = stage2.layers[li].shadowControls) == null ? void 0 : _a3.forEach((c) => { + c.destroyed(); + }); + stage2.layers[li].shadowControls = []; + stage2.layers[li].render.drawShape(false); + hasPrint = true; + } + } + ctx.restore(); + if (mask) { + ctx.save(); + ctx.scale(1 / stageRatio2, 1 / stageRatio2); + stage2.render.drawMark(); + ctx.restore(); + } + if (hasPrint) { + let base64 = canvas.toDataURL("image/png"); + imagesBase64.push(base64); + } + } + } + ddInstance.render.ratio = oldRat1; + ddInstance.render.tempCanvas = null; + containerDiv.removeChild(canvas); + resolve(imagesBase64); + } catch (e) { + ddInstance.render.tempCanvas = null; + resolve(""); + } + }); + } + /** + * 根据属性获取纸张大小 + */ + static getPaperSize(stage2, paperType, useRat = true) { + let paperWidth = 0; + let paperHeight = 0; + let paperInit; + if (stage2.ddInstance.paper && typeof stage2.ddInstance.paper == "object") { + paperInit = stage2.ddInstance.paper; + } + if (!paperType) { + paperType = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.type", true, paperInit); + } + let paperConfig = DDeiConfig$1.PAPER[paperType]; + if (paperConfig) { + let stageRatio2 = stage2.getStageRatio(); + let ratio; + if (useRat) { + let rat1 = stage2.render.ddRender.ratio; + ratio = rat1 * stageRatio2; + } else { + ratio = stageRatio2; + } + let xDPI = stage2.ddInstance.dpi.x; + let paperDirect = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.direct", true, paperInit); + let w = paperConfig.width; + let h = paperConfig.height; + let unit = paperConfig.unit; + if (paperType == "自定义") { + let custWidth = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.width", true, paperInit); + if (custWidth || custWidth == 0) { + w = custWidth; + } + let custHeight = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.height", true, paperInit); + if (custHeight || custHeight == 0) { + h = custHeight; + } + let custUnit = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.unit", true, paperInit); + if (custUnit) { + unit = custUnit; + } + } + if (paperDirect == 1 || paperDirect == "1") { + paperWidth = _DDeiUtil2.unitToPix(w, unit, xDPI) * ratio; + paperHeight = _DDeiUtil2.unitToPix(h, unit, xDPI) * ratio; + } else { + paperHeight = _DDeiUtil2.unitToPix(w, unit, xDPI) * ratio; + paperWidth = _DDeiUtil2.unitToPix(h, unit, xDPI) * ratio; + } + } + return { width: paperWidth, height: paperHeight }; + } + static dataURLtoBlob(dataurl) { + let arr = dataurl.split(","), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new Blob([u8arr], { type: mime }); + } + /** + * 将页面坐标(像素)转换为标尺坐标 + * @param point 转换的点 + * @param stage 舞台 + * @param unit 单位 + */ + static toRulerCoord(point2, stage2, unit) { + let stageRatio2 = stage2.getStageRatio(); + let xDPI = stage2.ddInstance.dpi.x; + let rulerConfig = DDeiConfig$1.RULER[unit]; + let unitWeight = _DDeiUtil2.unitToPix(rulerConfig.size, unit, xDPI); + let marginWeight = unitWeight * stageRatio2; + return { + x: (point2.x - stage2.spv.x) / marginWeight * rulerConfig.size, + y: (point2.y - stage2.spv.y) / marginWeight * rulerConfig.size, + unit + }; + } + /** + * 将标尺坐标转换为页面坐标(像素) + * @param point 转换的点 + * @param stage 舞台 + * @param unit 单位 + */ + static toPageCoord(point2, stage2, unit) { + let stageRatio2 = (stage2 == null ? void 0 : stage2.ratio) ? stage2.ratio : stage2.getStageRatio(); + let xDPI = stage2.dpi ? stage2.dpi : stage2.ddInstance.dpi.x; + let unitWeight = _DDeiUtil2.unitToPix(1, unit, xDPI) * stageRatio2; + return { + x: point2.x * unitWeight + (stage2.spv ? stage2.spv.x : 0), + y: point2.y * unitWeight + (stage2.spv ? stage2.spv.y : 0) + }; + } + /** + * 转换子元素的坐标 + * @param container 容器 + * @param stage 画布 + * @param unit 单位 + */ + static convertChildrenJsonUnit(model, stage2, unit) { + var _a3; + if (model.cpv) { + let cpv = _DDeiUtil2.toPageCoord({ x: model.cpv.x, y: model.cpv.y }, stage2, unit); + model.cpv.x = cpv.x; + model.cpv.y = cpv.y; + } + if (model.bpv) { + let bpv2 = _DDeiUtil2.toPageCoord({ x: model.bpv.x, y: model.bpv.y }, stage2, unit); + model.bpv.x = bpv2.x; + model.bpv.y = bpv2.y; + } + if (model.hpv) { + for (let k = 0; k < model.hpv.length; k++) { + let hpv = _DDeiUtil2.toPageCoord({ x: model.hpv[k].x, y: model.hpv[k].y }, stage2, unit); + model.hpv[k].x = hpv.x; + model.hpv[k].y = hpv.y; + } + } + if (model.exPvs) { + for (let k in model.exPvs) { + let pv = _DDeiUtil2.toPageCoord({ x: model.exPvs[k].x, y: model.exPvs[k].y }, stage2, unit); + model.exPvs[k].x = pv.x; + model.exPvs[k].y = pv.y; + } + } + if (model.pvs) { + for (let k = 0; k < model.pvs.length; k++) { + let pv = _DDeiUtil2.toPageCoord({ x: model.pvs[k].x, y: model.pvs[k].y }, stage2, unit); + model.pvs[k].x = pv.x; + model.pvs[k].y = pv.y; + } + } + if (((_a3 = model.composes) == null ? void 0 : _a3.length) > 0) { + for (let k = 0; k < model.composes.length; k++) { + _DDeiUtil2.convertChildrenJsonUnit(model.composes[k], stage2, unit); + } + } + if (model.midList) { + for (let i2 = 0; i2 < model.midList.length; i2++) { + if (model.models[model.midList[i2]]) { + let subModel = model.models[model.midList[i2]]; + _DDeiUtil2.convertChildrenJsonUnit(subModel, stage2, unit); + } + } + } + } + static addLineLink(model, smodel, point2, type) { + var _a3, _b2; + let pathPvs = smodel.pvs; + let proPoints = DDeiAbstractShape.getProjPointDists(pathPvs, point2.x, point2.y, false, 1); + let index = proPoints[0].index; + let distance = _DDeiUtil2.getPointDistance(pathPvs[index].x, pathPvs[index].y, pathPvs[index + 1].x, pathPvs[index + 1].y); + let sita = _DDeiUtil2.getLineAngle(pathPvs[index].x, pathPvs[index].y, pathPvs[index + 1].x, pathPvs[index + 1].y); + let pointDistance = _DDeiUtil2.getPointDistance(pathPvs[index].x, pathPvs[index].y, proPoints[0].x, proPoints[0].y); + let rate = pointDistance / distance; + rate = rate > 1 ? rate : rate; + let id = "_" + _DDeiUtil2.getUniqueCode(); + let dmpath; + if (type == 1) { + dmpath = "startPoint"; + smodel.exPvs[id] = new Vector3(model.startPoint.x, model.startPoint.y, model.startPoint.z); + } else if (type == 2) { + dmpath = "endPoint"; + smodel.exPvs[id] = new Vector3(model.endPoint.x, model.endPoint.y, model.endPoint.z); + } + smodel.exPvs[id].rate = rate; + smodel.exPvs[id].sita = sita; + smodel.exPvs[id].index = index; + smodel.exPvs[id].id = id; + let link2 = new DDeiLink({ + sm: smodel, + dm: model, + smpath: "exPvs." + id, + dmpath, + stage: model.stage + }); + (_a3 = model.stage) == null ? void 0 : _a3.addLink(link2); + smodel.transVectors(new Matrix3()); + smodel.updateLinkModels(); + (_b2 = smodel.render) == null ? void 0 : _b2.enableRefreshShape(); + } + /** + * 删除对象的属性 + * @param obj 对象 + * @param path 属性路径 + */ + static deletePropertyByPath(obj, path) { + const parts = path.split("."); + let current = obj; + for (let i2 = 0; i2 < parts.length - 1; i2++) { + if (current[parts[i2]] === void 0) { + return; + } + current = current[parts[i2]]; + } + delete current[parts[parts.length - 1]]; + } + }; + __publicField$2(_DDeiUtil, "getAttrValueByConfig"); + __publicField$2(_DDeiUtil, "getControlDefine"); + __publicField$2(_DDeiUtil, "getMenuConfig"); + __publicField$2(_DDeiUtil, "getMenuControlId"); + __publicField$2(_DDeiUtil, "showContextMenu"); + __publicField$2(_DDeiUtil, "getSubControlJSON"); + __publicField$2(_DDeiUtil, "getLineInitJSON"); + __publicField$2(_DDeiUtil, "getModelInitJSON"); + __publicField$2(_DDeiUtil, "getBusiData"); + __publicField$2(_DDeiUtil, "getEditorText"); + __publicField$2(_DDeiUtil, "getStyleValue"); + __publicField$2(_DDeiUtil, "getEditorId"); + __publicField$2(_DDeiUtil, "invokeCallbackFunc"); + __publicField$2(_DDeiUtil, "notifyChange"); + __publicField$2(_DDeiUtil, "getEditorInsByDDei"); + __publicField$2(_DDeiUtil, "createControl"); + __publicField$2(_DDeiUtil, "isBackActive"); + __publicField$2(_DDeiUtil, "createRenderViewer", function(model, operate, tempShape, composeRender) { + var _a3; + if ((_a3 = model == null ? void 0 : model.stage) == null ? void 0 : _a3.ddInstance) { + let editor = _DDeiUtil.getEditorInsByDDei(model.stage.ddInstance); + if (editor) { + editor.createRenderViewer(model, operate, tempShape, composeRender); + } + } + }); + __publicField$2(_DDeiUtil, "removeRenderViewer", function(model, operate, tempShape, composeRender) { + var _a3; + if ((_a3 = model == null ? void 0 : model.stage) == null ? void 0 : _a3.ddInstance) { + let editor = _DDeiUtil.getEditorInsByDDei(model.stage.ddInstance); + if (editor) { + editor.removeRenderViewer(model, operate, tempShape, composeRender); + } + } + }); + __publicField$2(_DDeiUtil, "isModelHidden", function(model) { + if (model.hidden) { + return true; + } else { + let pModel = model.pModel; + while (pModel && pModel.baseModelType != "DDeiLayer") { + if (pModel.hidden) { + return true; + } + pModel = pModel.pModel; + } + } + return false; + }); + __publicField$2(_DDeiUtil, "offsetX"); + __publicField$2(_DDeiUtil, "offsetY"); + __publicField$2(_DDeiUtil, "screenX"); + __publicField$2(_DDeiUtil, "screenY"); + __publicField$2(_DDeiUtil, "p331t3", Math.pow(1 - 0.333, 3)); + __publicField$2(_DDeiUtil, "p331t2", Math.pow(1 - 0.333, 2)); + __publicField$2(_DDeiUtil, "p33t2", Math.pow(0.333, 2)); + __publicField$2(_DDeiUtil, "p33t3", Math.pow(0.333, 3)); + __publicField$2(_DDeiUtil, "p33t21t3", 3 * (1 - 0.333) * _DDeiUtil.p33t2); + __publicField$2(_DDeiUtil, "p331t2t3", 3 * _DDeiUtil.p331t2 * 0.333); + __publicField$2(_DDeiUtil, "p661t3", Math.pow(1 - 0.666, 3)); + __publicField$2(_DDeiUtil, "p661t2", Math.pow(1 - 0.666, 2)); + __publicField$2(_DDeiUtil, "p66t2", Math.pow(0.666, 2)); + __publicField$2(_DDeiUtil, "p66t3", Math.pow(0.666, 3)); + __publicField$2(_DDeiUtil, "p661t2t3", 3 * _DDeiUtil.p661t2 * 0.666); + __publicField$2(_DDeiUtil, "p66t21t3", 3 * (1 - 0.666) * _DDeiUtil.p66t2); + __publicField$2(_DDeiUtil, "cacheTextCharSize", /* @__PURE__ */ new Map()); + __publicField$2(_DDeiUtil, "PI2", Math.PI * 2); + __publicField$2(_DDeiUtil, "recentlyChooseColors", null); + __publicField$2(_DDeiUtil, "USER_OS", ""); + (() => { + let userAgent = navigator.userAgent; + _DDeiUtil.USER_OS = "WIN"; + if (/Mac|iPod|iPhone|iPad/.test(userAgent)) { + _DDeiUtil.USER_OS = "MAC"; + } else if (/Linux/.test(userAgent)) { + _DDeiUtil.USER_OS = "LINUX"; + } + })(); + let DDeiUtil = _DDeiUtil; + const DDeiUtil$1 = DDeiUtil; + var __defProp$1 = Object.defineProperty; + var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __publicField$1 = (obj, key, value) => { + __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; + }; + const _DDeiConfig = class _DDeiConfig2 { + /** + * 应用外部配置文件,覆写配置文件内容 + * @param config + */ + static applyConfig(config2) { + if (config2) { + for (let i2 in config2) { + if (i2 != "SERI_FIELDS") { + _DDeiConfig2[i2] = config2[i2]; + } + } + if (config2.SERI_FIELDS != void 0 && config2.SERI_FIELDS != null) { + for (let i2 in config2.SERI_FIELDS) { + _DDeiConfig2.SERI_FIELDS.set(i2, config2.SERI_FIELDS[i2]); + } + } + } + } + /** + * 获取系统缺省属性 + * @param model 模型 + */ + static getSysDefaultData(model) { + switch (model.modelType) { + case "DDeiLayer": + return _DDeiConfig2.LAYER; + case "DDeiTable": + return _DDeiConfig2.TABLE; + case "DDeiTableCell": + return _DDeiConfig2.TABLE.CELL; + case "DDeiRectangle": + return _DDeiConfig2.RECTANGLE; + case "DDeiCircle": + return _DDeiConfig2.CIRCLE; + case "DDeiDiamond": + return _DDeiConfig2.DIAMOND; + case "DDeiSelector": + return _DDeiConfig2.SELECTOR; + case "DDeiPolygonContainer": + return _DDeiConfig2.CONTAINER; + case "DDeiStage": + return _DDeiConfig2.STAGE; + default: + return null; + } + } + /** + * 根据配置文件的配置,将模型与渲染器绑定 + * @param model 模型 + */ + static bindRender(model) { + var _a3; + let clsName = model.modelType + this.RENDER_TYPE + "Render"; + if (model.modelType == "DDeiStage") { + model.render = model == null ? void 0 : model.ddInstance.controlViewClasses[clsName].newInstance({ model }); + } else { + model.render = (_a3 = model.stage) == null ? void 0 : _a3.ddInstance.controlViewClasses[clsName].newInstance({ model }); + } + let modelDefine = DDeiUtil$1.getControlDefine(model); + if (modelDefine == null ? void 0 : modelDefine.viewer) { + model.render.viewer = modelDefine.viewer; + } + } + }; + __publicField$1(_DDeiConfig, "STORE_KEY", "DDEI"); + __publicField$1(_DDeiConfig, "ROTATE_UNIT", Math.PI / 180); + __publicField$1(_DDeiConfig, "RENDER_TYPE", "Canvas"); + __publicField$1(_DDeiConfig, "ALLOW_CLIPBOARD"); + __publicField$1(_DDeiConfig, "KEY_DOWN_STATE", /* @__PURE__ */ new Map()); + __publicField$1(_DDeiConfig, "KEY_DOWN_INTERVAL", /* @__PURE__ */ new Map()); + __publicField$1(_DDeiConfig, "KEY_DOWN_TIMES", /* @__PURE__ */ new Map()); + __publicField$1(_DDeiConfig, "SERI_FIELDS", { + "DDei": { "TOJSON": ["stage"], "SKIP": ["bus", "render", "unicode", "editMode"] }, + "DDeiStage": { "TOJSON": ["layers", "links"], "SKIP": ["ddInstance", "selectedModels", "render", "unicode", "histroy", "histroyIdx", "sourceLinkCache", "distLinkCache", "tempCursorOPpoint", "tempStartOPpoint", "drawing"] }, + "DDeiLayer": { "TOJSON": ["models"], "SKIP": ["ddInstance", "stage", "render", "unicode", "opPoints", "opLine", "dragInPoints", "dragOutPoints", "shadowControls", "layoutManager", "tempDisplay"] }, + "DDeiContainer": { "TOJSON": ["models"], "SKIP": ["ddInstance", "__destroyed", "stage", "layer", "pModel", "render", "unicode", "hpv", "loosePVS", "x", "y", "width", "height", "layoutManager", "isShadowControl"] }, + "AbstractShape": { + "TOJSON": ["composes", "linkModels"], + "SKIP": ["ddInstance", "depModel", "offsetY", "offsetX", "__destroyed", "stage", "layer", "pModel", "state", "render", "unicode", "loosePVS", "x", "y", "width", "height", "ruleEvals", "sample", "operatePVS", "isShadowControl"], + "SKIP2": ["ddInstance", "stage", "layer", "pModel", "state", "render", "unicode", "loosePVS", "x", "y", "width", "height", "ruleEvals", "sample", "operatePVS", "isShadowControl", "pvs", "opps", "apvs", "textArea", "essBounds", "baseModelType"] + }, + "DDeiLine": { "SKIP": ["ddInstance", "__destroyed", "stage", "layer", "pModel", "state", "render", "unicode", "looseCanvas", "loosePVS", "x", "y", "width", "height", "startPoint", "endPoint", "cpv", "clps", "isShadowControl", "updateLooseCanvasSync", "baseModelType"] }, + "DDeiTable": { "TOJSON": ["rows"], "SKIP": ["ddInstance", "stage", "layer", "pModel", "render", "unicode", "hpv", "loosePVS", "x", "y", "width", "height", "cols", "selector", "initColNum", "initRowNum", "tempDragCell", "tempDragType", "curCol", "curRow", "specilDrag", "tempUpCel", "dragChanging", "dragType", "dragCell", "isShadowControl"] }, + "DDeiTableCell": { "TOJSON": ["models"], "SKIP": ["ddInstance", "stage", "layer", "pModel", "render", "unicode", "hpv", "loosePVS", "x", "y", "width", "height", "layoutManager", "id", "table", "mergedCell", "isShadowControl"] } + }); + __publicField$1(_DDeiConfig, "BORDER", { + default: { width: 0, color: null, dash: null, round: 0 }, + selected: { width: 1, color: "black", dash: null, round: 0 } + }); + __publicField$1(_DDeiConfig, "STAGE", { + //水印 + mark: { + font: { + family: "Microsoft YaHei", + color: "grey", + size: "16" + } + } + }); + __publicField$1(_DDeiConfig, "SELECTOR", { + //选择器边框 + border: { + width: 1, + color: "rgb(1,127,255)", + dash: [10, 5], + round: 0, + selected: { width: 1, color: "rgb(1,127,255)", dash: [10, 5], round: 0 } + }, + //操作区域的填充样式,根据选中和未选中状态可以有所变化 + OPERATE_ICON: { + weight: 8, + FILL: { + default: "white", + pass: "rgb(198,230,255)" + } + }, + //间隔宽度,根据选中单个控件、选中多个控件,间隔宽度可以有所变化 + PADDING_WEIGHT: { + default: { single: 0, multiple: 0 }, + selected: { single: 0, multiple: 10 } + } + }); + __publicField$1(_DDeiConfig, "TABLE", { + //选择器边框 + selector: { + border: { + width: 2, + color: "rgb(31,187,125)", + dash: null, + round: 0, + selected: { width: 2, color: "rgb(31,187,125)", dash: null, round: 0 } + }, + //间隔宽度,根据选中单个控件、选中多个控件,间隔宽度可以有所变化 + PADDING_WEIGHT: { + default: { single: 0, multiple: 0 }, + selected: { single: 0, multiple: 0 } + } + }, + CELL: { + border: { + top: { + width: 1, + color: "black", + dash: null, + round: 0, + disabled: false + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + selected: { + top: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0 + } + } + } + } + }); + __publicField$1(_DDeiConfig, "FILL", { + default: { color: null }, + selected: { color: "white" } + }); + __publicField$1(_DDeiConfig, "FONT", { + default: { family: "Microsoft YaHei", color: "#000000", size: "16" }, + selected: { family: "Microsoft YaHei", color: "#000000", size: "16" } + }); + __publicField$1(_DDeiConfig, "LAYER", { + //背景的类型,0无背景,1纯色,2图片 + type: 0, + //背景色 + bgcolor: "grey", + //透明度,0完全透明~1完全不透明 + opacity: 0.5 + }); + __publicField$1(_DDeiConfig, "RECTANGLE", { + // 默认矩形边框 + border: { + top: { + width: 1, + color: "black", + dash: null, + round: 0, + disabled: false + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + selected: { + top: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0 + } + } + }, + // 默认矩形填充 + fill: { + color: "red", + opacity: 1, + selected: { color: "white" } + }, + // 默认矩形填充 + image: { + opacity: 1 + }, + // 默认矩形字体 + font: { + //字体 + family: "Microsoft YaHei", + //颜色 + color: "white", + //大小 + size: 16, + selected: { family: "Microsoft YaHei", color: "#000000", size: 16 } + }, + // 默认矩形文本样式 + textStyle: { + //水平对齐,1,2,3左中右,默认1 + align: 1, + //垂直对齐,1,2,3上中下,默认2 + valign: 2, + //自动换行,0/null不换行,1换行,默认0 + feed: 1, + //缩小字体填充,0/null不缩小,1缩小,默认0 + scale: 1, + //镂空,0/null不镂空,1镂空,默认0 + hollow: 0, + selected: { + align: 1, + valign: 2, + feed: 0, + scale: 0, + hollow: 0 + } + } + }); + __publicField$1(_DDeiConfig, "CIRCLE", { + // 默认矩形边框 + border: { + width: 1, + color: "black", + dash: null, + round: 0, + disabled: false, + opacity: 1, + selected: { width: 1, color: "black", dash: null, round: 0, opacity: 1 } + }, + // 默认矩形填充 + fill: { + color: "white", + opacity: 1, + selected: { color: "white" } + }, + // 默认矩形字体 + font: { + //字体 + family: "Microsoft YaHei", + //颜色 + color: "white", + //大小 + size: 16, + selected: { family: "Microsoft YaHei", color: "#000000", size: 16 } + }, + // 默认矩形文本样式 + textStyle: { + //水平对齐,1,2,3左中右,默认1 + align: 2, + //垂直对齐,1,2,3上中下,默认2 + valign: 2, + //自动换行,0/null不换行,1换行,默认0 + feed: 1, + //缩小字体填充,0/null不缩小,1缩小,默认0 + scale: 1, + //镂空,0/null不镂空,1镂空,默认0 + hollow: 0, + selected: { + align: 2, + valign: 2, + feed: 0, + scale: 0, + hollow: 0 + } + } + }); + __publicField$1(_DDeiConfig, "DIAMOND", { + border: { + top: { + width: 1, + color: "black", + dash: null, + round: 0, + disabled: false + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0, + opacity: 1 + }, + selected: { + top: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0 + } + } + }, + // 默认矩形填充 + fill: { + color: "red", + opacity: 1, + selected: { color: "white" } + }, + // 默认矩形字体 + font: { + //字体 + family: "Microsoft YaHei", + //颜色 + color: "white", + //大小 + size: 16, + selected: { family: "Microsoft YaHei", color: "#000000", size: 16 } + }, + // 默认矩形文本样式 + textStyle: { + //水平对齐,1,2,3左中右,默认1 + align: 1, + //垂直对齐,1,2,3上中下,默认2 + valign: 2, + //自动换行,0/null不换行,1换行,默认0 + feed: 1, + //缩小字体填充,0/null不缩小,1缩小,默认0 + scale: 1, + //镂空,0/null不镂空,1镂空,默认0 + hollow: 0, + selected: { + align: 1, + valign: 2, + feed: 0, + scale: 0, + hollow: 0 + } + } + }); + __publicField$1(_DDeiConfig, "CONTAINER", { + // 默认矩形边框 + border: { + top: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + selected: { + top: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + right: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + bottom: { + width: 1, + color: "black", + dash: null, + round: 0 + }, + left: { + width: 1, + color: "black", + dash: null, + round: 0 + } + } + }, + // 默认填充 + fill: { + color: "#787878", + opacity: 0, + selected: { color: "#23AE78", opacity: 0 } + } + }); + __publicField$1(_DDeiConfig, "RULER", { + "mm": { size: 10, parts: [2, 5], title: "mm" }, + "cm": { size: 1, parts: [2, 5], title: "cm" }, + "m": { size: 0.05, parts: [2, 5], title: "m" }, + "inch": { size: 1, parts: [8], title: "in" }, + "px": { size: 50, parts: [5, 10], title: "px" } + }); + __publicField$1(_DDeiConfig, "PAPER", { + "自定义": { width: 210, height: 297, unit: "mm", desc: "可以自由设置宽高" }, + "Letter": { width: 216, height: 279, unit: "mm" }, + "Legal": { width: 216, height: 356, unit: "mm" }, + "A0": { width: 841, height: 1189, unit: "mm" }, + "A1": { width: 594, height: 841, unit: "mm" }, + "A2": { width: 420, height: 594, unit: "mm" }, + "A3": { width: 297, height: 420, unit: "mm" }, + "A4": { width: 210, height: 297, unit: "mm", desc: "常用打印纸" }, + "A5": { width: 148, height: 210, unit: "mm" }, + "A6": { width: 105, height: 148, unit: "mm" }, + "A7": { width: 74, height: 105, unit: "mm" }, + "A8": { width: 52, height: 74, unit: "mm" }, + "A9": { width: 37, height: 52, unit: "mm" }, + "A10": { width: 26, height: 37, unit: "mm" }, + "B0": { width: 1e3, height: 1414, unit: "mm" }, + "B1": { width: 700, height: 1e3, unit: "mm" }, + "B2": { width: 500, height: 707, unit: "mm" }, + "B3": { width: 353, height: 500, unit: "mm" }, + "B4": { width: 250, height: 353, unit: "mm" }, + "B5": { width: 176, height: 250, unit: "mm" }, + "B6": { width: 125, height: 176, unit: "mm" }, + "B7": { width: 88, height: 125, unit: "mm" }, + "B8": { width: 62, height: 88, unit: "mm" }, + "B9": { width: 42, height: 62, unit: "mm" }, + "B10": { width: 31, height: 44, unit: "mm" }, + "一寸照片": { width: 2.5, height: 3.6, unit: "cm" }, + "二寸照片": { width: 3.5, height: 5.3, unit: "cm" }, + "三寸照片": { width: 5.5, height: 8.4, unit: "cm" }, + "五寸照片": { width: 3.5, height: 5, unit: "cm" }, + "六寸照片": { width: 4, height: 6, unit: "cm" }, + "七寸照片": { width: 5, height: 7, unit: "cm" }, + "八寸照片": { width: 6, height: 8, unit: "cm" }, + "十寸照片": { width: 8, height: 10, unit: "cm" }, + "十二寸照片": { width: 10, height: 12, unit: "cm" }, + "十四寸照片": { width: 12, height: 14, unit: "cm" }, + "十六寸照片": { width: 12, height: 16, unit: "cm" }, + "十八寸照片": { width: 12, height: 18, unit: "cm" }, + "名片-横版": { width: 90, height: 55, unit: "mm" }, + "名片-横版-欧式": { width: 85, height: 54, unit: "mm" }, + "名片-竖版": { width: 54, height: 85, unit: "mm" }, + "名片-竖版-美式": { width: 50, height: 90, unit: "mm" }, + "名片-方版-1": { width: 90, height: 90, unit: "mm" }, + "名片-方版-2": { width: 90, height: 95, unit: "mm" }, + "海报-1": { width: 420, height: 570, unit: "mm" }, + "海报-2": { width: 500, height: 700, unit: "mm" }, + "海报-3": { width: 570, height: 840, unit: "mm" }, + "海报-4": { width: 600, height: 900, unit: "mm" }, + "二折页": { width: 285, height: 210, unit: "mm" }, + "二折页-1": { width: 140, height: 105, unit: "mm" }, + "二折页-2": { width: 210, height: 95, unit: "mm" }, + "二折页-3": { width: 210, height: 140, unit: "mm" }, + "二折页-4": { width: 285, height: 140, unit: "mm" }, + "全开": { width: 889, height: 1194, paddingLeft: 102, paddingTop: 102, unit: "mm" }, + "对开": { width: 570, height: 840, paddingLeft: 50, paddingTop: 100, unit: "mm" }, + "4开": { width: 420, height: 570, paddingLeft: 50, paddingTop: 50, unit: "mm" }, + "8开": { width: 285, height: 420, paddingLeft: 25, paddingTop: 50, unit: "mm" }, + "16开": { width: 210, height: 285, paddingLeft: 25, paddingTop: 25, unit: "mm" }, + "32开": { width: 142, height: 210, paddingLeft: 12, paddingTop: 25, unit: "mm" }, + "64开": { width: 110, height: 142, paddingLeft: 18, paddingTop: 12, unit: "mm" } + }); + __publicField$1(_DDeiConfig, "SPACE_WIDTH_MAP", {}); + (() => { + _DDeiConfig.PAPER_DATASOURCE = [{ code: "无", name: "无", desc: "不显示纸张" }]; + for (let i2 in _DDeiConfig.PAPER) { + let data = _DDeiConfig.PAPER[i2]; + data.desc = data.desc; + if (!data.desc && data.width && data.height) { + data.desc = data.width + " x " + data.height + data.unit; + } + data.code = i2; + data.name = i2; + _DDeiConfig.PAPER_DATASOURCE.push(data); + } + })(); + let DDeiConfig = _DDeiConfig; + const DDeiConfig$1 = DDeiConfig; + class DDeiAbstractShape { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "width"); + __publicField2(this, "height"); + __publicField2(this, "modelCode"); + __publicField2(this, "modelType", "AbstractShape"); + __publicField2(this, "baseModelType", "AbstractShape"); + __publicField2(this, "state", DDeiEnumControlState.DEFAULT); + __publicField2(this, "layer"); + __publicField2(this, "pModel", null); + __publicField2(this, "stage"); + __publicField2(this, "zIndex"); + __publicField2(this, "cIndex"); + __publicField2(this, "rotate"); + __publicField2(this, "hidden", null); + __publicField2(this, "__destroyed", null); + __publicField2(this, "cpv"); + __publicField2(this, "hpv"); + __publicField2(this, "pvs"); + __publicField2(this, "exPvs"); + __publicField2(this, "ovs"); + __publicField2(this, "unicode"); + __publicField2(this, "fmt"); + __publicField2(this, "poly"); + __publicField2(this, "linkModels"); + __publicField2(this, "depModel", null); + __publicField2(this, "mirrorX", false); + __publicField2(this, "mirrorY", false); + __publicField2(this, "composes"); + __publicField2(this, "sptStyle"); + for (let i2 in props) { + this[i2] = props[i2]; + } + this.id = props.id; + this.width = props.width ? props.width : 0; + this.height = props.height ? props.height : 0; + this.zIndex = props.zIndex ? props.zIndex : null; + this.rotate = props.rotate ? props.rotate : null; + this.modelCode = props.modelCode ? props.modelCode : null; + this.unicode = props.unicode ? props.unicode : DDeiUtil$1.getUniqueCode(); + this.fmt = props.fmt; + this.sptStyle = props.sptStyle ? props.sptStyle : {}; + this.poly = props.poly; + this.composes = props.composes; + this.cIndex = props.cIndex ? props.cIndex : null; + this.ruleEvals = []; + this.initCPV = props.initCPV ? props.initCPV : null; + if (props.mirrorX) { + this.mirrorX = props.mirrorX; + } + if (props.mirrorY) { + this.mirrorY = props.mirrorY; + } + if (props.cpv) { + this.cpv = new Vector3(props.cpv.x, props.cpv.y, props.cpv.z || props.cpv.z == 0 ? props.cpv.z : 1); + } + if (props.pvs) { + this.pvs = []; + props.pvs.forEach((pvd) => { + let pv = new Vector3(); + for (let i2 in pvd) { + pv[i2] = pvd[i2]; + } + pv.z = pvd.z || pvd.z === 0 ? pvd.z : 1; + this.pvs.push(pv); + }); + } + this.hpv = []; + if (props.hpv) { + props.hpv.forEach((pv) => { + this.hpv.push(new Vector3(pv.x, pv.y, pv.z || pv.z == 0 ? pv.z : 1)); + }); + } + this.ovs = []; + if (props.ovs) { + props.ovs.forEach((pvd) => { + let pv = new Vector3(pvd.x, pvd.y, pvd.z || pvd.z == 0 ? pvd.z : 1); + if (pvd.index || pvd.index == 0) { + pv.index = pvd.index; + } + if (pvd.rate || pvd.rate == 0) { + pv.rate = pvd.rate; + } + if (pvd.sita || pvd.sita == 0) { + pv.sita = pvd.sita; + } + if (pvd.ovi) { + let ovi = new Vector3(pvd.ovi.x, pvd.ovi.y, pvd.ovi.z || pvd.ovi.z == 0 ? pvd.ovi.z : 1); + pv.ovi = ovi; + } + this.ovs.push(pv); + }); + } + if (props.bpv) { + this.bpv = new Vector3(props.bpv.x, props.bpv.y, props.bpv.z || props.bpv.z == 0 ? props.bpv.z : 1); + } + this.exPvs = {}; + if (props.exPvs) { + for (let i2 in props.exPvs) { + let pvd = props.exPvs[i2]; + let pv = new Vector3(pvd.x, pvd.y, pvd.z || pvd.z == 0 ? pvd.z : 1); + pv.id = pvd.id; + if (pvd.index || pvd.index == 0) { + pv.index = pvd.index; + } + if (pvd.rate || pvd.rate == 0) { + pv.rate = pvd.rate; + } + if (pvd.sita || pvd.sita == 0) { + pv.sita = pvd.sita; + } + this.exPvs[pvd.id] = pv; + } + } + this.linkModels = props.linkModels ? props.linkModels : /* @__PURE__ */ new Map(); + } + // ============================ 方法 ============================ + /** + * 初始化向量,基于width和height构建向量,默认中心点在0,0的位置 + */ + initPVS() { + var _a3, _b2, _c2, _d2, _e2; + if (!this.cpv) { + this.cpv = this.initCPV ? new Vector3(this.initCPV.x, this.initCPV.y, 1) : new Vector3(0, 0, 1); + delete this.initCPV; + } + if (!(((_a3 = this.ovs) == null ? void 0 : _a3.length) > 0)) { + const defineOvs = (_c2 = (_b2 = DDeiUtil$1.getControlDefine(this)) == null ? void 0 : _b2.define) == null ? void 0 : _c2.ovs; + if ((defineOvs == null ? void 0 : defineOvs.length) > 0) { + const stageRatio2 = 1; + const scaleX2 = this.width / 100; + const scaleY2 = this.height / 100; + this.ovs = defineOvs.map((ovd) => { + if (ovd.constraint.type == 3) { + const rad = -ovd.isita * DDeiConfig$1.ROTATE_UNIT; + const x2 = ovd.constraint.r * Math.cos(rad); + const y2 = ovd.constraint.r * Math.sin(rad); + const ov = new Vector3(x2 * scaleX2 * stageRatio2, y2 * scaleY2 * stageRatio2, ovd.z || ovd.z == 0 ? ovd.z : 1); + ov.ovi = new Vector3(0, 0, ovd.z || ovd.z == 0 ? ovd.z : 1); + return ov; + } else { + const ov = new Vector3(ovd.x * scaleX2 * stageRatio2, ovd.y * scaleY2 * stageRatio2, ovd.z || ovd.z == 0 ? ovd.z : 1); + ov.ovi = new Vector3(ovd.ix * scaleX2 * stageRatio2, ovd.iy * scaleY2 * stageRatio2, ovd.iz || ovd.iz == 0 ? ovd.iz : 1); + return ov; + } + }); + } + } + if (this.poly == 2) { + if (!(((_d2 = this.hpv) == null ? void 0 : _d2.length) > 0)) { + this.hpv = [new Vector3(0, 0, 1), new Vector3(100, 0, 1)]; + } + if (!this.bpv) { + this.bpv = new Vector3(this.cpv.x + this.width, this.cpv.y + this.height, 1); + } + this.executeSample(); + } else { + if (!this.pvs || this.pvs.length == 0) { + const halfWidth = this.width / 2; + const halfHeight = this.height / 2; + this.pvs = [ + new Vector3(-halfWidth, -halfHeight, 1), + new Vector3(halfWidth, -halfHeight, 1), + new Vector3(halfWidth, halfHeight, 1), + new Vector3(-halfWidth, halfHeight, 1) + ]; + } + this.initHPV(); + } + this.calRotate(); + this.calLoosePVS(); + this.refreshLinkModels(); + (_e2 = this.composes) == null ? void 0 : _e2.forEach((compose) => compose.initPVS()); + if (!this.isShadowControl) { + this.updateExPvs(); + } + } + /** + * 根据坐标获取特殊操作点 + * @param x + * @param y + * @returns 操作点 + */ + getOvPointByPos(x2 = 0, y2 = 0) { + var _a3, _b2; + if (x2 && y2 && ((_a3 = this.ovs) == null ? void 0 : _a3.length) > 0) { + for (let i2 = 0; i2 < ((_b2 = this.ovs) == null ? void 0 : _b2.length); i2++) { + let point2 = this.ovs[i2]; + if (Math.abs(x2 - point2.x) <= 8 && Math.abs(y2 - point2.y) <= 8) { + return point2; + } + } + } + return null; + } + /** + * 执行采样计算pvs + */ + executeSample() { + var _a, _b, _c, _d, _e; + let defineSample = (_b = (_a = DDeiUtil$1.getControlDefine(this)) == null ? void 0 : _a.define) == null ? void 0 : _b.sample; + let stageRatio = 1; + if (((_c = defineSample == null ? void 0 : defineSample.rules) == null ? void 0 : _c.length) > 0) { + let originOVS = []; + if (((_d = this.ovs) == null ? void 0 : _d.length) > 0) { + originOVS = cloneDeep(this.ovs); + let bpv2 = DDeiUtil$1.pointsToZero([this.bpv], this.cpv, this.rotate)[0]; + let scaleX2 = Math.abs(DDeiUtil$1.preciseDiv(bpv2.x, 100)); + let scaleY2 = Math.abs(DDeiUtil$1.preciseDiv(bpv2.y, 100)); + let m12 = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + let rotate2 = 0; + if (this.rotate) { + rotate2 = this.rotate; + let angle2 = DDeiUtil$1.preciseTimes(rotate2, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let scaleMatrix2 = new Matrix3( + 1 / scaleX2, + 0, + 0, + 0, + 1 / scaleY2, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + let move2Matrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + originOVS.forEach((ov) => { + ov.sita = parseFloat(DDeiUtil$1.getLineAngle(this.cpv.x, this.cpv.y, ov.x, ov.y).toFixed(2)) - rotate2; + ov.applyMatrix3(m12); + ov.ovi.applyMatrix3(m12); + }); + } + let rotate = this.rotate; + if (!rotate) { + rotate = 0; + } + let bpv = DDeiUtil$1.pointsToZero([this.bpv], this.cpv, rotate)[0]; + let scaleX = Math.abs(bpv.x / 100); + let scaleY = Math.abs(bpv.y / 100); + this.scale = { x: scaleX, y: scaleY, stageRatio: 1 }; + let sampliesResult = []; + let loop = defineSample.loop; + let pn = 360 / loop; + let angle = defineSample.angle; + for (let i = 0; i < loop; i++) { + defineSample.sita = angle + i * pn; + defineSample.rad = defineSample.sita * DDeiConfig$1.ROTATE_UNIT; + defineSample.cos = parseFloat(Math.cos(defineSample.rad).toFixed(4)); + defineSample.sin = parseFloat(Math.sin(defineSample.rad).toFixed(4)); + defineSample.x = defineSample.r * defineSample.cos; + defineSample.y = defineSample.r * defineSample.sin; + for (let j = 0; j < ((_e = defineSample.rules) == null ? void 0 : _e.length); j++) { + if (this.ruleEvals && !this.ruleEvals[j]) { + eval("this.ruleEvals[j] = function" + defineSample.rules[j]); + } + let spFn = this.ruleEvals[j]; + if (!sampliesResult[j]) { + sampliesResult[j] = []; + } + let spResult = sampliesResult[j]; + spFn(i, defineSample, spResult, this, originOVS); + } + } + delete this.scale; + let pvs = []; + let apvs = []; + let textArea = []; + let operatePVS = []; + let opps = []; + for (let i2 = 0; i2 < sampliesResult.length; i2++) { + if (sampliesResult[i2].length > 0) { + sampliesResult[i2].forEach((pvd) => { + let pv = new Vector3(); + pv.group = i2; + if (pvd.dx || pvd.dx == 0 || pvd.dy || pvd.dy == 0) { + if (!pvd.dx) { + pvd.dx = 0; + } + if (!pvd.dy) { + pvd.dy = 0; + } + let dp = DDeiUtil$1.getRotatedPoint({ x: pvd.dx * scaleX / stageRatio, y: pvd.dy * scaleY / stageRatio, z: 1 }, rotate); + pvd.dx = dp.x; + pvd.dy = dp.y; + } + for (let i3 in pvd) { + pv[i3] = pvd[i3]; + } + pv.z = pvd.z || pvd.z === 0 ? pvd.z : 1; + pvs.push(pv); + if (pvd.select) { + operatePVS.push(pv); + } + if (pvd.oppoint) { + opps.push(pv); + } + if (pvd.align) { + apvs.push(pv); + } + if (pvd.text) { + textArea.push(pv); + } + }); + } + } + let m1 = new Matrix3(); + let scaleMatrix = new Matrix3( + scaleX, + 0, + 0, + 0, + scaleY, + 0, + 0, + 0, + 1 + ); + m1.premultiply(scaleMatrix); + if (this.rotate) { + let angle2 = -DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m1.premultiply(rotateMatrix); + } + let moveMatrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + m1.premultiply(moveMatrix); + pvs.forEach((pv) => { + pv.applyMatrix3(m1); + }); + this.pvs = pvs; + this.operatePVS = operatePVS; + this.textArea = textArea; + this.opps = opps; + this.apvs = apvs; + } + } + getOperatePVS(compose = false) { + var _a3; + let pvs2 = this.operatePVS ? this.operatePVS : this.pvs; + let returnPVS = []; + if (pvs2) { + pvs2.forEach((pv) => { + returnPVS.push(pv); + }); + } + if (compose && ((_a3 = this.composes) == null ? void 0 : _a3.length) > 0) { + this.composes.forEach((comp) => { + let ps = comp.getOperatePVS(compose); + if (ps) { + ps.forEach((pv) => { + returnPVS.push(pv); + }); + } + }); + } + return returnPVS; + } + getAPVS() { + var _a3; + let arr = [this.cpv]; + if (((_a3 = this.apvs) == null ? void 0 : _a3.length) > 0) { + arr = arr.concat(this.apvs); + } + return arr; + } + /** + * 刷新链接模型 + */ + refreshLinkModels() { + var _a3; + if ((_a3 = this.linkModels) == null ? void 0 : _a3.has) { + this.linkModels.forEach((lm) => { + if (lm.dm) { + let oldCPVX = lm.dm.cpv.x; + let oldCPVY = lm.dm.cpv.y; + let point2 = null; + if (this.baseModelType == "DDeiLine") { + if (lm.type == 1) { + point2 = this.startPoint; + } else if (lm.type == 2) { + point2 = this.endPoint; + } else if (lm.type == 3) { + let pi = Math.floor(this.pvs.length / 2); + if (this.pvs.length % 2 == 1) { + point2 = this.pvs[pi]; + } else { + point2 = { + x: (this.pvs[pi - 1].x + this.pvs[pi].x) / 2, + y: (this.pvs[pi - 1].y + this.pvs[pi].y) / 2 + }; + } + } + } else { + if (lm.type == 5) { + point2 = this.cpv; + } else { + let essBounds = this.essBounds; + let dmEssBounds = lm.dm.essBounds; + if (lm.type == 6) { + point2 = { + x: this.cpv.x, + y: essBounds.y - dmEssBounds.height / 2 + }; + } else if (lm.type == 7) { + point2 = { + x: essBounds.x1 + dmEssBounds.width / 2, + y: this.cpv.y + }; + } else if (lm.type == 8) { + point2 = { + x: this.cpv.x, + y: essBounds.y1 + dmEssBounds.height / 2 + }; + } else if (lm.type == 9) { + point2 = { + x: essBounds.x - dmEssBounds.width / 2, + y: this.cpv.y + }; + } + } + } + let newCPVX = point2.x + lm.dx; + let newCPVY = point2.y + lm.dy; + let moveMatrix2 = new Matrix3( + 1, + 0, + newCPVX - oldCPVX, + 0, + 1, + newCPVY - oldCPVY, + 0, + 0, + 1 + ); + lm.dm.transVectors(moveMatrix2); + lm.dm.updateLinkModels(); + } + }); + } + } + /** + * 删除本图形的依附链接图形 + * @param dmid 依附图形id + */ + removeLinkModel(dmid, destroy = true, notify = true) { + var _a3; + if ((_a3 = this.linkModels) == null ? void 0 : _a3.has) { + let link2 = this.linkModels.get(dmid); + if (link2) { + this.linkModels.delete(dmid); + this.pModel.removeModel(link2.dm, destroy, notify); + } + } + } + /** + * 初始化链接模型 + */ + initLinkModels() { + let linkModels = /* @__PURE__ */ new Map(); + for (let key in this.linkModels) { + let item = this.linkModels[key]; + if (item == null ? void 0 : item.dmid) { + let dm = this.stage.getModelById(item.dmid); + item.dm = dm; + item.depModel = this; + dm.depModel = this; + let lm = new DDeiModelLink(item); + linkModels.set(key, lm); + } + } + this.linkModels = linkModels; + } + /** + * 同步向量 + * @param source 源模型 + * @param cloneVP 是否克隆向量,默认false + */ + syncVectors(source, clonePV = false) { + var _a3, _b2, _c2, _d2; + if (this.poly == 2) { + if (clonePV) { + this.cpv = cloneDeep(source.cpv); + this.exPvs = cloneDeep(source.exPvs); + this.bpv = cloneDeep(source.bpv); + this.ovs = cloneDeep(source.ovs); + } else { + this.cpv = source.cpv; + this.exPvs = source.exPvs; + this.bpv = source.bpv; + this.ovs = source.ovs; + } + this.executeSample(); + } else { + if (clonePV) { + this.pvs = cloneDeep(source.pvs); + this.cpv = cloneDeep(source.cpv); + this.exPvs = cloneDeep(source.exPvs); + this.ovs = cloneDeep(source.ovs); + } else { + this.pvs = source.pvs; + this.cpv = source.cpv; + this.exPvs = source.exPvs; + this.ovs = source.ovs; + } + } + this.initHPV(); + this.calRotate(); + this.calLoosePVS(); + for (let i2 = 0; i2 < ((_a3 = source.composes) == null ? void 0 : _a3.length); i2++) { + let scop = source.composes[i2]; + let tcop = this.composes[i2]; + tcop.syncVectors(scop, clonePV); + } + (_c2 = (_b2 = this.getTopContainer()) == null ? void 0 : _b2.render) == null ? void 0 : _c2.enableRefreshShape(); + (_d2 = this.render) == null ? void 0 : _d2.enableRefreshShape(); + } + /** + * 变换向量 + */ + transVectors(matrix2, params) { + var _a3, _b2, _c2, _d2; + this.cpv.applyMatrix3(matrix2); + if (this.poly == 2) { + if (!(params == null ? void 0 : params.skipSample)) { + if (!(params == null ? void 0 : params.ignoreHPV)) { + this.hpv.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + } + for (let i2 in this.exPvs) { + let pv = this.exPvs[i2]; + pv.applyMatrix3(matrix2); + } + if (!(params == null ? void 0 : params.ignoreBPV)) { + this.bpv.applyMatrix3(matrix2); + } + if (!(params == null ? void 0 : params.ignoreOVS)) { + (_a3 = this.ovs) == null ? void 0 : _a3.forEach((pv) => { + pv.applyMatrix3(matrix2); + if (pv.ovi) { + pv.ovi.applyMatrix3(matrix2); + } + }); + } + this.initHPV(); + this.calRotate(); + this.executeSample(); + this.calLoosePVS(); + } else { + if (!(params == null ? void 0 : params.ignoreHPV)) { + this.hpv.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + } + for (let i2 in this.exPvs) { + let pv = this.exPvs[i2]; + pv.applyMatrix3(matrix2); + } + this.pvs.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + if (!(params == null ? void 0 : params.ignoreBPV)) { + this.bpv.applyMatrix3(matrix2); + } + if (!(params == null ? void 0 : params.ignoreOVS)) { + (_b2 = this.ovs) == null ? void 0 : _b2.forEach((pv) => { + pv.applyMatrix3(matrix2); + if (pv.ovi) { + pv.ovi.applyMatrix3(matrix2); + } + }); + } + } + } else { + this.pvs.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + for (let i2 in this.exPvs) { + let pv = this.exPvs[i2]; + pv.applyMatrix3(matrix2); + } + (_c2 = this.ovs) == null ? void 0 : _c2.forEach((pv) => { + pv.applyMatrix3(matrix2); + if (pv.ovi) { + pv.ovi.applyMatrix3(matrix2); + } + }); + this.initHPV(); + this.calRotate(); + this.calLoosePVS(); + } + if (!(params == null ? void 0 : params.ignoreComposes)) { + (_d2 = this.composes) == null ? void 0 : _d2.forEach((compose) => { + compose.transVectors(matrix2); + }); + } + } + /** + * 设置特殊文本样式 + * @param sIdx 开始文本坐标 + * @param eIdx 结束文本坐标 + */ + setSptStyle(sIdx, eIdx, paths, value, emptyDelete = true) { + var _a3, _b2; + let attrPaths = []; + if (typeof paths == "string") { + attrPaths = paths.split(","); + } else { + attrPaths = paths; + } + if ((attrPaths == null ? void 0 : attrPaths.length) > 0 && sIdx > -1 && eIdx > -1 && sIdx <= eIdx) { + for (let k = sIdx; k < eIdx; k++) { + for (let i2 = 0; i2 < attrPaths.length; i2++) { + if ((value === null || value === void 0 || isNumber(value) && isNaN(value)) && emptyDelete) { + DDeiUtil$1.deletePropertyByPath(this.sptStyle, k + "." + attrPaths[i2]); + if (((_a3 = this.sptStyle[k]) == null ? void 0 : _a3.textStyle) && JSON.stringify(this.sptStyle[k].textStyle) == "{}") { + delete this.sptStyle[k].textStyle; + } + if (((_b2 = this.sptStyle[k]) == null ? void 0 : _b2.font) && JSON.stringify(this.sptStyle[k].font) == "{}") { + delete this.sptStyle[k].font; + } + if (this.sptStyle[k] && JSON.stringify(this.sptStyle[k]) == "{}") { + delete this.sptStyle[k]; + } + } else { + DDeiUtil$1.setAttrValueByPath(this, ["sptStyle." + k + "." + attrPaths[i2]], value); + } + } + } + } + } + /** + * 获取特殊文本样式,返回同样的样式 + * @param sIdx 开始文本坐标 + * @param eIdx 结束文本坐标 + */ + getSptStyle(sIdx, eIdx, paths) { + let attrPaths = []; + if (typeof paths == "string") { + attrPaths = paths.split(","); + } else { + attrPaths = paths; + } + if ((attrPaths == null ? void 0 : attrPaths.length) > 0 && sIdx > -1 && eIdx > -1 && sIdx <= eIdx) { + let first = true; + let firstValue = void 0; + for (; sIdx < eIdx; sIdx++) { + for (let i2 = 0; i2 < attrPaths.length; i2++) { + let v = DDeiUtil$1.getDataByPathList(this, "sptStyle." + sIdx + "." + attrPaths[i2]); + if (first) { + firstValue = v == null || v == void 0 ? void 0 : v; + first = false; + } else if (v != void 0 && firstValue != v) { + return void 0; + } + } + } + return firstValue; + } + return void 0; + } + /** + * 获取特殊文本样式,返回所有的样式 + * @param sIdx 开始文本坐标 + * @param eIdx 结束文本坐标 + */ + getSptAllStyles(sIdx, eIdx) { + let returnArray = []; + if (sIdx > -1 && eIdx > -1 && sIdx <= eIdx) { + for (; sIdx < eIdx; sIdx++) { + let v = DDeiUtil$1.getDataByPathList(this, "sptStyle." + sIdx); + returnArray.push(v); + } + } + return returnArray; + } + /** + * 清空特殊文本样式 + */ + clearSptStyle() { + this.sptStyle = {}; + } + /** + * 设置当前最新的hpv + */ + initHPV() { + this.hpv[0] = clone(this.pvs[0]); + this.hpv[1] = clone(this.pvs[1]); + } + /** + * 基于当前向量计算宽松判定向量 + */ + calLoosePVS() { + var _a3; + this.loosePVS = ((_a3 = this.operatePVS) == null ? void 0 : _a3.length) > 2 ? cloneDeep(this.operatePVS) : cloneDeep(this.pvs); + let move1Matrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + this.loosePVS.forEach((fpv) => { + fpv.applyMatrix3(move1Matrix); + }); + if (this.rotate && this.rotate != 0) { + let angle2 = DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + this.loosePVS.forEach((fpv) => { + fpv.applyMatrix3(rotateMatrix); + }); + } + let outRect = DDeiAbstractShape.pvsToOutRect(this.loosePVS); + if (this.loosePVS.length < 4) { + this.loosePVS = DDeiAbstractShape.outRectToPV(outRect); + } + this.x = outRect.x; + this.y = outRect.y; + this.width = outRect.width; + this.height = outRect.height; + this.essBounds = outRect; + let m12 = new Matrix3(); + let scX = 1, scY = 1; + if (this.width <= 30) { + scX = 1 + 10 / this.width; + } else { + scX = 1 + Math.min(0.1, 20 / this.width); + } + if (this.height <= 30) { + scY = 1 + 10 / this.height; + } else { + scY = 1 + Math.min(0.1, 20 / this.height); + } + let scaleMatrix2 = new Matrix3( + scX, + 0, + 0, + 0, + scY, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + if (this.rotate && this.rotate != 0) { + let angle2 = -DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let move2Matrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + this.loosePVS.forEach((fpv) => { + fpv.applyMatrix3(m12); + }); + this.x += this.cpv.x; + this.y += this.cpv.y; + this.essBounds.x += this.cpv.x; + this.essBounds.y += this.cpv.y; + this.essBounds.x1 += this.cpv.x; + this.essBounds.y1 += this.cpv.y; + } + /** + * 设置旋转角度 + */ + setRotate(rotate2 = 0) { + if (this.rotate != rotate2) { + let m12 = new Matrix3(); + let toZeroMatrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(toZeroMatrix); + if (this.rotate) { + let angle2 = DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + if (rotate2) { + let angle2 = -DDeiUtil$1.preciseTimes(rotate2, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let restoreMatrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(restoreMatrix); + this.transVectors(m12); + this.rotate = rotate2; + } + } + /** + * 基于当前大小缩放 + */ + scale(scaleX2 = 1, scaleY2 = 1) { + if (scaleX2 != 1 || scaleY2 != 1) { + let m12 = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + let scaleMatrix2 = new Matrix3( + scaleX2, + 0, + 0, + 0, + scaleY2, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + let move2Matrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + this.transVectors(m12); + } + } + /** + * 计算旋转角度,基于隐藏点与坐标系的夹角 + */ + calRotate() { + let lineV = new Vector3(this.hpv[1].x, this.hpv[1].y, 1); + let toZeroMatrix = new Matrix3( + 1, + 0, + -this.hpv[0].x, + 0, + 1, + -this.hpv[0].y, + 0, + 0, + 1 + ); + lineV.applyMatrix3(toZeroMatrix); + let angle2 = (new Vector3(1, 0, 0).angleTo(new Vector3(lineV.x, lineV.y, 0)) * 180 / Math.PI).toFixed(4); + if (lineV.x >= 0 && lineV.y >= 0) + ; + else if (lineV.x <= 0 && lineV.y >= 0) + ; + else if (lineV.x <= 0 && lineV.y <= 0) { + angle2 = -angle2; + } else if (lineV.x >= 0 && lineV.y <= 0) { + angle2 = -angle2; + } + this.rotate = parseFloat(angle2); + } + /** + * 设置当前图片base64 + * @param base64 + */ + setImgBase64(base64) { + this.imgBase64 = base64; + if (this.render) { + this.render.imgObj = null; + this.render.initImage(); + } + } + notifyChange() { + var _a3, _b2; + (_a3 = this.render) == null ? void 0 : _a3.clearCachedValue(); + DDeiUtil$1.notifyChange((_b2 = this.stage) == null ? void 0 : _b2.ddInstance); + } + /** + * 更新关联图形 + */ + updateLinkModels(ignoreModelIds) { + let links = this.stage.getSourceModelLinks(this.id); + let removeLinks = []; + links == null ? void 0 : links.forEach((link2) => { + var _a3, _b2, _c2; + if (!link2.disabled && (!ignoreModelIds || (ignoreModelIds == null ? void 0 : ignoreModelIds.indexOf((_a3 = link2.dm) == null ? void 0 : _a3.id)) == -1)) { + let dpv = link2.getDistPV(); + if (dpv) { + let spv = link2.getSourcePV(); + if (spv) { + dpv.x = spv.x; + dpv.y = spv.y; + dpv.z = spv.z; + link2.dm.refreshLinePoints(); + link2.dm.updateOVS(); + let pvs2 = link2.dm.pvs; + link2.dm.setLineType1PointPosition(0, pvs2[0].x, pvs2[0].y); + if (((_b2 = link2.dm.pModel) == null ? void 0 : _b2.modelType) != "DDeiLayer") { + (_c2 = link2.dm.pModel) == null ? void 0 : _c2.changeParentsBounds(); + } + } else { + removeLinks.push(link2); + } + } + } + }); + if (removeLinks.length > 0) { + this.stage.removeLink(removeLinks); + } + } + /** + * 单独修改向量导致两点关系发生变化后同步调整exPvs点的位置 + */ + updateExPvs() { + for (let i2 in this.exPvs) { + let ov = this.exPvs[i2]; + let x2, y2; + let pathPvs = this.opps; + let st, en; + let op2Paths = []; + for (let qi = 0; qi < pathPvs.length; qi++) { + let opp = pathPvs[qi]; + if (opp.oppoint == 2) { + op2Paths.push(opp); + } + } + if (op2Paths.length > 0) { + if (!(ov.index || ov.index == 0) || op2Paths.length <= ov.index) { + let index = -1; + for (let qi = 0; qi < op2Paths.length; qi++) { + let isInLine = false; + if (qi == op2Paths.length - 1) { + isInLine = DDeiUtil$1.isPointInLine(ov, op2Paths[qi], op2Paths[0]); + } else { + isInLine = DDeiUtil$1.isPointInLine(ov, op2Paths[qi], op2Paths[qi + 1]); + } + if (isInLine) { + index = qi; + break; + } + } + if (index != -1) { + x2 = ov.x; + y2 = ov.y; + ov.index = index; + } else { + let proPoints = DDeiAbstractShape.getProjPointDists(op2Paths, ov.x, ov.y, false, 1); + x2 = proPoints[0].x; + y2 = proPoints[0].y; + ov.index = proPoints[0].index; + index = proPoints[0].index; + } + if (index == op2Paths.length - 1) { + st = index; + en = 0; + } else { + st = index; + en = index + 1; + } + let pointDistance = DDeiUtil$1.getPointDistance(op2Paths[st].x, op2Paths[st].y, ov.x, ov.y); + let distance = DDeiUtil$1.getPointDistance(op2Paths[st].x, op2Paths[st].y, op2Paths[en].x, op2Paths[en].y); + let rate = pointDistance / distance; + ov.rate = rate > 1 ? rate : rate; + } else { + let index = ov.index; + if (index == op2Paths.length - 1) { + st = index; + en = 0; + } else { + st = index; + en = index + 1; + } + x2 = op2Paths[st].x + ov.rate * (op2Paths[en].x - op2Paths[st].x); + y2 = op2Paths[st].y + ov.rate * (op2Paths[en].y - op2Paths[st].y); + } + ov.x = x2; + ov.y = y2; + } + let outRect = this.essBounds; + if (ov.x == outRect.x && ov.y > outRect.y && ov.y < outRect.y1) { + ov.sita = 180; + } else if (ov.x == outRect.x1 && ov.y > outRect.y && ov.y < outRect.y1) { + ov.sita = 0; + } else if (ov.y == outRect.y && ov.x > outRect.x && ov.x < outRect.x1) { + ov.sita = -90; + } else if (ov.y == outRect.y1 && ov.x > outRect.x && ov.x < outRect.x1) { + ov.sita = 90; + } + } + this.updateLinkModels(); + } + /** + * 更改图形后同步调整OVS点的位置 + */ + updateOVS() { + var _a3, _b2, _c2; + if (((_a3 = this.ovs) == null ? void 0 : _a3.length) > 0) { + let defineOvs = (_c2 = (_b2 = DDeiUtil$1.getControlDefine(this)) == null ? void 0 : _b2.define) == null ? void 0 : _c2.ovs; + for (let i2 = 0; i2 < this.ovs.length; i2++) { + let ov = this.ovs[i2]; + let ovd = defineOvs[i2]; + switch (ovd.constraint.type) { + case 0: { + let dx = ov.x - ov.ovi.x; + let dy = ov.y - ov.ovi.y; + let m12 = new Matrix3( + 1, + 0, + this.cpv.x + dx - ov.x, + 0, + 1, + this.cpv.y + dy - ov.y, + 0, + 0, + 1 + ); + ov.x = this.cpv.x + dx; + ov.y = this.cpv.y + dy; + ov.ovi.x = ov.x - dx; + ov.ovi.y = ov.y - dy; + this.updateOVSLink(ov, ovd, m12); + break; + } + case 1: { + let pathPvs = []; + let pvsStr = ovd.constraint.pvs; + if ((pvsStr == null ? void 0 : pvsStr.length) > 0) { + pvsStr.forEach((pvsS) => { + let pvsData = DDeiUtil$1.getDataByPathList(this, pvsS); + if (Array.isArray(pvsData)) { + pvsData.forEach((pvsD) => { + pathPvs.push(pvsD); + }); + } else { + pathPvs.push(pvsData); + } + }); + } + if (pathPvs.length > 1) { + let x2, y2, st, en; + if (!(ov.index || ov.index == 0) || pathPvs.length <= ov.index) { + let proPoints = DDeiAbstractShape.getProjPointDists(pathPvs, ov.x, ov.y, false, 1); + let index = proPoints[0].index; + ov.index = index; + x2 = proPoints[0].x; + y2 = proPoints[0].y; + if (index == pathPvs.length - 1) { + st = index; + en = 0; + } else { + st = index; + en = index + 1; + } + let pointDistance = DDeiUtil$1.getPointDistance(pathPvs[st].x, pathPvs[st].y, ov.x, ov.y); + let distance = DDeiUtil$1.getPointDistance(pathPvs[st].x, pathPvs[st].y, pathPvs[en].x, pathPvs[en].y); + let rate = pointDistance / distance; + ov.rate = rate > 1 ? rate : rate; + } else { + let index = ov.index; + if (index == pathPvs.length - 1) { + st = index; + en = 0; + } else { + st = index; + en = index + 1; + } + x2 = pathPvs[st].x + ov.rate * (pathPvs[en].x - pathPvs[st].x); + y2 = pathPvs[st].y + ov.rate * (pathPvs[en].y - pathPvs[st].y); + } + let sita = parseFloat(DDeiUtil$1.getLineAngle(pathPvs[st].x, pathPvs[st].y, pathPvs[en].x, pathPvs[en].y).toFixed(4)); + let m12 = new Matrix3(); + let dx = x2 - ov.x, dy = y2 - ov.y; + let deltaMoveMatrix = new Matrix3( + 1, + 0, + dx, + 0, + 1, + dy, + 0, + 0, + 1 + ); + m12.premultiply(deltaMoveMatrix); + let ovSita = ov.sita; + if (!ovSita) { + ovSita = 0; + } + if (sita != ovSita) { + let move1Matrix = new Matrix3( + 1, + 0, + -x2, + 0, + 1, + -y2, + 0, + 0, + 1 + ); + let angle2 = (-(sita - ovSita) * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + x2, + 0, + 1, + y2, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + } + ov.x = x2; + ov.y = y2; + ov.sita = sita; + this.updateOVSLink(ov, ovd, m12); + } + break; + } + case 5: { + let pathPvs = []; + let pvsStr = ovd.constraint.pvs; + if ((pvsStr == null ? void 0 : pvsStr.length) > 0) { + pvsStr.forEach((pvsS) => { + let pvsData = DDeiUtil$1.getDataByPathList(this, pvsS); + if (Array.isArray(pvsData)) { + pvsData.forEach((pvsD) => { + pathPvs.push(pvsD); + }); + } else { + pathPvs.push(pvsData); + } + }); + } + if (pathPvs.length == 2) { + let mode = 1; + let value; + if (ovd.constraint.rate || ovd.constraint.rate == 0) { + mode = 2; + value = ovd.constraint.rate; + } else { + value = ovd.constraint.len ? ovd.constraint.len : 0; + } + let point2 = DDeiUtil$1.getPathPoint(pathPvs[0].x, pathPvs[0].y, pathPvs[1].x, pathPvs[1].y, mode, value, 0.5); + ov.x = point2.x; + ov.y = point2.y; + ov.sita = point2.sita; + ov.rate = point2.rate; + ov.len = point2.len; + this.updateOVSLink(ov, ovd); + } + break; + } + } + } + } + } + updateOVSLink(point, pointDefine, matrix) { + if (pointDefine == null ? void 0 : pointDefine.links) { + pointDefine.links.forEach((link) => { + switch (link.type) { + case 1: { + let pvsStr = link.pvs; + if ((pvsStr == null ? void 0 : pvsStr.length) > 0) { + pvsStr.forEach((pvsS) => { + let pvsData = DDeiUtil$1.getDataByPathList(this, pvsS); + if (pvsData) { + if (Array.isArray(pvsData)) { + pvsData.forEach((pvsD) => { + pvsD.applyMatrix3(matrix); + }); + } else { + if (pvsData.transVectors) { + pvsData.transVectors(matrix); + } else { + pvsData.applyMatrix3(matrix); + } + } + } + }); + } + break; + } + case 2: { + let pvsStr = link.pvs; + if ((pvsStr == null ? void 0 : pvsStr.length) > 0) { + pvsStr.forEach((pvsS) => { + let pvsData = DDeiUtil$1.getDataByPathList(this, pvsS); + if (pvsData) { + let m12 = new Matrix3(); + let moveMatrix2 = new Matrix3( + 1, + 0, + -pvsData.cpv.x, + 0, + 1, + -pvsData.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + if (pvsData.rotate != 0 && pvsData.rotate != 360) { + let angle2 = (pvsData.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + if (point.sita != 0 && point.sita != 360) { + let angle2 = (-point.sita * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let moveMatrix1 = new Matrix3( + 1, + 0, + point.x, + 0, + 1, + point.y, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix1); + pvsData.transVectors(m12); + } + }); + } + break; + } + case 99: { + if (!link.evalScript && link.script) { + eval("link.evalScript = function" + link.script); + } + if (link.evalScript) { + link.evalScript(this, point, pointDefine, link); + } + break; + } + } + }); + } + } + /** + * 获取实际的内部容器控件 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainer() { + return null; + } + /** + * 获取顶级容器(Layer之下) + * @return 获取layer之下的顶级容器 + */ + getTopContainer() { + let model = this; + while (model.pModel && model.pModel.baseModelType != "DDeiLayer") { + model = model.pModel; + } + if (model == this) { + return null; + } else { + return model; + } + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainerByPos(x2, y2) { + return null; + } + /** + * 判断是否在某个边线上 + * @param direct 1,2,3,4 上、右、下、左 + */ + isBorderOn(direct, x2, y2, inWeight = -3, outWeight = 3) { + let projPoint = this.getProjPointOnLine( + { x: x2, y: y2 }, + { in: inWeight, out: outWeight }, + 1, + direct - 1 + ); + if (projPoint) { + return true; + } else { + return false; + } + } + /** + * 获取中心点操作点 + */ + getCenterOpPoints() { + var _a3; + if (((_a3 = this.opps) == null ? void 0 : _a3.length) > 0) { + return cloneDeep(this.opps); + } + return []; + } + /** + * 得到点在图形某条线上的投射点 + * @param point 测试点 + * @param distance 内外部判定区间的距离 + * @param direct 方向,1外部,2内部 默认1 + * @param index 线开始点向量的下标 + * @returns 投影点的坐标 + */ + getProjPointOnLine(point2, distance = { in: 0, out: 15 }, direct = 1, index) { + var _a3; + let x0 = point2.x; + let y0 = point2.y; + if (((_a3 = this.opps) == null ? void 0 : _a3.length) > index) { + let st, en; + let plLength = Infinity; + if (index == this.opps.length - 1) { + st = index; + en = 0; + } else { + st = index; + en = index + 1; + } + let x1 = this.opps[st].x; + let y1 = this.opps[st].y; + let x2 = this.opps[en].x; + let y2 = this.opps[en].y; + if (x1 == x2 && y1 == y2) { + plLength = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); + } else { + let s = (x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1); + let d = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); + plLength = s / d; + } + let flag = false; + if (direct == 1) { + if (plLength >= distance.in && plLength <= distance.out) { + flag = true; + } + } else if (direct == 2) { + if (plLength <= distance.in && plLength >= distance.out) { + flag = true; + } + } + if (flag) { + let lineV = new Vector3(x2, y2, 1); + let pointV = new Vector3(x0, y0, 1); + let toZeroMatrix = new Matrix3( + 1, + 0, + -x1, + 0, + 1, + -y1, + 0, + 0, + 1 + ); + lineV.applyMatrix3(toZeroMatrix); + pointV.applyMatrix3(toZeroMatrix); + let lineAngle = (new Vector3(1, 0, 0).angleTo(new Vector3(lineV.x, lineV.y, 0)) * 180 / Math.PI).toFixed(4); + let angle2 = 0; + if (lineV.x >= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x >= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + lineV.applyMatrix3(rotateMatrix); + pointV.applyMatrix3(rotateMatrix); + if (pointV.x >= 0 && pointV.x <= lineV.x) { + let v1 = new Vector3(pointV.x, 0, 1); + angle2 = -angle2; + let rotateMatrix2 = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + v1.applyMatrix3(rotateMatrix2); + let removeMatrix = new Matrix3( + 1, + 0, + x1, + 0, + 1, + y1, + 0, + 0, + 1 + ); + v1.applyMatrix3(removeMatrix); + return v1; + } + } + } + return null; + } + /** + * 得到点在图形连接线上的投射点 + * @param point 测试点 + * @param distance 内外部判定区间的距离 + * @param direct 方向,1外部,2内部 默认1 + * @param pointType 用于判定的点类别,1操作点,2范围点,缺省操作点 + * @returns 投影点的坐标 + */ + getProjPoint(point2, distance = { in: 0, out: 15 }, direct = 1, pointType = 1) { + var _a3; + let x0 = point2.x; + let y0 = point2.y; + let opPVS = []; + if (pointType == 1) { + if ((_a3 = this.opps) == null ? void 0 : _a3.length) { + this.opps.forEach((opvs) => { + if (opvs.oppoint == 2) { + opPVS.push(opvs); + } + }); + } + } else { + opPVS = this.getOperatePVS(); + } + if ((opPVS == null ? void 0 : opPVS.length) > 0) { + let st, en; + for (let j2 = 0; j2 < opPVS.length; j2++) { + let plLength = Infinity; + if (j2 == opPVS.length - 1) { + st = j2; + en = 0; + } else { + st = j2; + en = j2 + 1; + } + let x1 = opPVS[st].x; + let y1 = opPVS[st].y; + let x2 = opPVS[en].x; + let y2 = opPVS[en].y; + if (x1 == x2 && y1 == y2) { + plLength = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); + } else { + let s = (x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1); + let d = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); + plLength = s / d; + } + let flag = false; + if (direct == 1) { + if (plLength >= distance.in && plLength <= distance.out) { + flag = true; + } + } else if (direct == 2) { + if (plLength <= distance.in && plLength >= distance.out) { + flag = true; + } + } + if (flag) { + let lineV = new Vector3(x2, y2, 1); + let pointV = new Vector3(x0, y0, 1); + let toZeroMatrix = new Matrix3( + 1, + 0, + -x1, + 0, + 1, + -y1, + 0, + 0, + 1 + ); + lineV.applyMatrix3(toZeroMatrix); + pointV.applyMatrix3(toZeroMatrix); + let angle2 = new Vector3(1, 0, 0).angleTo(new Vector3(lineV.x, lineV.y, 0)); + let lineAngle = angle2 / DDeiConfig$1.ROTATE_UNIT; + if (lineV.x >= 0 && lineV.y >= 0) + ; + else if (lineV.x <= 0 && lineV.y >= 0) + ; + else if (lineV.x <= 0 && lineV.y <= 0) { + angle2 = -angle2; + } else if (lineV.x >= 0 && lineV.y <= 0) { + angle2 = -angle2; + } + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + lineV.applyMatrix3(rotateMatrix); + pointV.applyMatrix3(rotateMatrix); + if (pointV.x >= 0 && pointV.x <= lineV.x) { + let isMiddle = false; + if (Math.abs(lineV.x / 2 - pointV.x) <= 5) { + pointV.x = lineV.x / 2; + isMiddle = true; + } + let v1 = new Vector3(pointV.x, 0, 1); + angle2 = -angle2; + let rotateMatrix2 = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + v1.applyMatrix3(rotateMatrix2); + let removeMatrix = new Matrix3( + 1, + 0, + x1, + 0, + 1, + y1, + 0, + 0, + 1 + ); + v1.applyMatrix3(removeMatrix); + v1.isMiddle = isMiddle; + v1.sita = lineAngle; + let rate = Math.abs(pointV.x / lineV.x); + v1.rate = rate > 1 ? 1 : rate; + v1.index = st; + v1.plLength = plLength; + return v1; + } + } + } + } + return null; + } + /** + * 返回计算后的坐标、大小 + */ + getBounds() { + return { x: this.x, y: this.y, width: this.width, height: this.height, x1: this.x + this.width, y1: this.y + this.height }; + } + /** + * 获取画布缩放比率 + */ + getStageRatio() { + if (this.stage) { + let stageRatio2 = parseFloat(this.stage.ratio) ? parseFloat(this.stage.ratio) : 1; + if (!stageRatio2 || isNaN(stageRatio2)) { + stageRatio2 = this.stage.ddInstance.ratio; + } + return stageRatio2; + } else { + return 1; + } + } + /** + * 修改自身状态 + */ + setState(state) { + var _a3; + if (this.state != state) { + this.state = state; + (_a3 = this.render) == null ? void 0 : _a3.renderCacheData.clear(); + } + } + /** + * 根据点的数量判断图形是否在一个区域内 + * @param x + * @param y + * @param x1 + * @param y1 + * @param pointNumber 在区域内点的数量,达到这个数量则看作在区域内,默认1 + * @returns 是否在区域内 + */ + isInRect(x2, y2, x1, y1, pointNumber = 1) { + var _a3; + if (x2 === void 0 || y2 === void 0 || x1 === void 0 || y1 === void 0) { + return false; + } + let pvs2 = ((_a3 = this.operatePVS) == null ? void 0 : _a3.length) > 2 ? this.operatePVS : this.pvs; + let len = pvs2.length; + let pn2 = 0; + let modelLines = []; + for (let i2 = 0; i2 < len; i2++) { + let ps = pvs2[i2]; + if (ps.x >= x2 && ps.y >= y2 && ps.x <= x1 && ps.y <= y1) { + pn2++; + } + if (pn2 >= pointNumber) { + return true; + } + if (i2 == len - 1) { + modelLines.push({ x1: pvs2[i2].x, y1: pvs2[i2].y, x2: pvs2[0].x, y2: pvs2[0].y }); + } else { + modelLines.push({ x1: pvs2[i2].x, y1: pvs2[i2].y, x2: pvs2[i2 + 1].x, y2: pvs2[i2 + 1].y }); + } + } + let rectLines = [ + { x1: x2, y1: y2, x2: x1, y2 }, + { x1, y1: y2, x2: x1, y2: y1 }, + { x1, y1, x2, y2: y1 }, + { x1: x2, y1, x2, y2 } + ]; + len = modelLines.length; + for (let i2 = 0; i2 < len; i2++) { + for (let j2 = 0; j2 < 4; j2++) { + if (DDeiUtil$1.isLineCross(modelLines[i2], rectLines[j2])) { + pn2++; + if (pn2 >= pointNumber) { + return true; + } + } + } + } + let outRect = DDeiAbstractShape.pvsToOutRect(pvs2); + if (x2 >= outRect.x && x2 <= outRect.x1 && y2 >= outRect.y && y2 <= outRect.y1) { + return true; + } + return false; + } + /** + * 判断某个线段是否与当前图形相交 + */ + isLineCross(line2) { + for (let i2 = 0; i2 < this.pvs.length; i2++) { + let s = i2; + let e = i2 + 1; + if (i2 == this.pvs.length - 1) { + e = 0; + } + if (DDeiUtil$1.isLineCross(line2, { x1: this.pvs[s].x, y1: this.pvs[s].y, x2: this.pvs[e].x, y2: this.pvs[e].y })) { + return true; + } + } + return false; + } + /** + * 判断图形是否在一个文本编辑的区域内 + * @param x + * @param y + * @returns 是否在区域内 + */ + isInTextArea(x2 = void 0, y2 = void 0) { + var _a3; + if (x2 === void 0 || y2 === void 0) { + return false; + } + if (((_a3 = this.textArea) == null ? void 0 : _a3.length) > 0) { + return DDeiAbstractShape.isInsidePolygon( + this.textArea, + { x: x2, y: y2 } + ); + } + return false; + } + /** + * 判断图形是否在一个区域内,采用宽松的判定模式,允许传入一个大小值 + * @param x + * @param y + * @param loose 宽松判定,默认false + * @returns 是否在区域内 + */ + isInAreaLoose(x2 = void 0, y2 = void 0, loose = false) { + var _a3, _b2; + if (x2 === void 0 || y2 === void 0) { + return false; + } + let ps = null; + if (loose && ((_a3 = this.loosePVS) == null ? void 0 : _a3.length) > 0) { + ps = this.loosePVS; + } else if (((_b2 = this.pvs) == null ? void 0 : _b2.length) > 0) { + ps = this.pvs; + } + if ((ps == null ? void 0 : ps.length) > 0) { + return DDeiAbstractShape.isInsidePolygon( + ps, + { x: x2, y: y2 } + ); + } + return false; + } + /** + * 获取当前图形的除layer的所有父节点对象 + */ + getParents() { + let pModel = this.pModel; + let returnControls = []; + while ((pModel == null ? void 0 : pModel.baseModelType) != "DDeiLayer") { + returnControls.push(pModel); + pModel = pModel.pModel; + } + return returnControls; + } + /** + * 获取控件坐标 + * @param coord 坐标系:1标尺坐标/2页面坐标 + * @param unit 标尺单位 + * @param type 坐标类型:1左上角/2中心点 + */ + getPosition(coord = 2, unit = "", type = 2) { + switch (coord) { + case 1: + { + if (type == 1) { + return DDeiUtil$1.toRulerCoord({ x: this.x, y: this.y }, this.stage, unit); + } else if (type == 2) { + return DDeiUtil$1.toRulerCoord({ x: this.cpv.x, y: this.cpv.y }, this.stage, unit); + } + } + break; + case 2: + { + if (type == 1) { + return { x: this.x, y: this.y }; + } else if (type == 2) { + return { x: this.cpv.x, y: this.cpv.y }; + } + } + break; + } + return { x: this.x, y: this.y }; + } + /** + * 设置控件坐标 + * @param point 坐标点 + * @param coord 坐标系:1标尺坐标/2页面坐标 + * @param unit 标尺单位 + * @param type 坐标类型:1左上角/2中心点 + */ + setPosition(point2, coord = 2, unit = "", type = 2) { + let moveX = 0, moveY = 0; + switch (coord) { + case 1: + { + if (type == 1) { + let pv1 = DDeiUtil$1.toPageCoord(point2, this.stage, unit); + moveX = pv1.x - this.x; + moveY = pv1.y - this.y; + } else if (type == 2) { + let pv1 = DDeiUtil$1.toPageCoord(point2, this.stage, unit); + moveX = pv1.x - this.cpv.x; + moveY = pv1.y - this.cpv.y; + } + } + break; + case 2: + { + if (type == 1) { + moveX = point2.x - this.x; + moveY = point2.y - this.y; + } else if (type == 2) { + moveX = point2.x - this.cpv.x; + moveY = point2.y - this.cpv.y; + } + } + break; + } + DDeiAbstractShape.moveModels([this], moveX, moveY); + } + /** + * 设置当前模型为被修改状态 + */ + setModelChanged() { + var _a3; + (_a3 = this.layer) == null ? void 0 : _a3.setModelChanged(); + } + /** + * 判断当前模型是否已被修改 + */ + isModelChanged() { + var _a3; + return (_a3 = this.layer) == null ? void 0 : _a3.isModelChanged(); + } + /** + * 移除自身的方法 + */ + destroyed() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + if (!this.__destroyed) { + if (!this.isShadowControl) { + let sourceLinks = (_a3 = this.stage) == null ? void 0 : _a3.getSourceModelLinks(this.id); + sourceLinks == null ? void 0 : sourceLinks.forEach((link2) => { + var _a22; + if (link2.dm) { + link2.dm.pModel.removeModel(link2.dm, true); + } + (_a22 = this.stage) == null ? void 0 : _a22.removeLink(link2); + }); + let lines = (_b2 = this.stage) == null ? void 0 : _b2.getModelsByBaseType("DDeiLine"); + lines == null ? void 0 : lines.forEach((line2) => { + var _a22; + if ((_a22 = line2.linkModels) == null ? void 0 : _a22.has(this.id)) { + line2.linkModels.delete(this.id); + } + }); + (_c2 = this.linkModels) == null ? void 0 : _c2.forEach((lm) => { + var _a22; + if (lm.dm) { + (_a22 = lm.dm.pModel) == null ? void 0 : _a22.removeModel(lm.dm, true); + lm.dm.destroyed(); + } + }); + (_d2 = this.linkModels) == null ? void 0 : _d2.clear(); + this.linkModels = null; + if (this.depModel) { + (_e2 = this.depModel.linkModels) == null ? void 0 : _e2.delete(this.id); + } + } + if ((_f = this.render) == null ? void 0 : _f.tempCanvas) { + this.render.tempCanvas.remove(); + delete this.render.tempCanvas; + } + if ((_g = this.render) == null ? void 0 : _g.viewer) { + DDeiUtil$1.removeRenderViewer(this); + } + (_h = this.composes) == null ? void 0 : _h.forEach((comp) => { + comp.destroyed(); + }); + this.render = null; + this.__destroyed = true; + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DEL_AFTER", DDeiEnumOperateType.DESTROYED, { models: [this] }, (_i = this.stage) == null ? void 0 : _i.ddInstance, null); + } + } + /** + * 移除渲染器 + */ + destroyRender() { + var _a3, _b2, _c2, _d2; + if ((_a3 = this.render) == null ? void 0 : _a3.tempCanvas) { + this.render.tempCanvas.remove(); + delete this.render.tempCanvas; + } + if ((_b2 = this.render) == null ? void 0 : _b2.viewer) { + DDeiUtil$1.removeRenderViewer(this); + } + (_c2 = this.composes) == null ? void 0 : _c2.forEach((comp) => { + comp.destroyRender(); + }); + if (this.models) { + (_d2 = this.midList) == null ? void 0 : _d2.forEach((mid) => { + var _a22; + (_a22 = this.models.get(mid)) == null ? void 0 : _a22.destroyRender(); + }); + } + this.render = null; + } + /** + * 将模型转换为JSON + */ + toJSON() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m; + let json = new Object(); + let skipFields = (_a3 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _a3.SKIP; + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_b2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _b2.SKIP; + } + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + if (this.poly == 2) { + skipFields = (_c2 = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _c2.SKIP2; + } else { + skipFields = (_d2 = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _d2.SKIP; + } + } + let toJSONFields = (_e2 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _e2.TOJSON; + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_f = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _f.TOJSON; + } + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_g = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _g.TOJSON; + } + for (let i2 in this) { + if (!skipFields || (skipFields == null ? void 0 : skipFields.indexOf(i2)) == -1) { + if (toJSONFields && toJSONFields.indexOf(i2) != -1 && this[i2]) { + if (Array.isArray(this[i2])) { + let array = []; + for (let xi = 0; xi < this[i2].length; xi++) { + let element = this[i2][xi]; + if (Array.isArray(element)) { + let subArray = []; + element.forEach((subEle) => { + if (subEle == null ? void 0 : subEle.toJSON) { + subArray.push(subEle.toJSON()); + } else { + subArray.push(subEle); + } + }); + array.push(subArray); + } else if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + } + if (array.length > 0) { + json[i2] = array; + } + } else if (((_h = this[i2]) == null ? void 0 : _h.set) && ((_i = this[i2]) == null ? void 0 : _i.has)) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + if (JSON.stringify(map) != "{}") { + json[i2] = map; + } + } else if ((_j = this[i2]) == null ? void 0 : _j.toJSON) { + json[i2] = this[i2].toJSON(); + } else if (this[i2] || this[i2] == 0) { + json[i2] = this[i2]; + } + } else { + if (Array.isArray(this[i2])) { + let array = []; + for (let xi = 0; xi < this[i2].length; xi++) { + let element = this[i2][xi]; + if (Array.isArray(element)) { + let subArray = []; + element.forEach((subEle) => { + if (subEle == null ? void 0 : subEle.toJSON) { + subArray.push(subEle.toJSON()); + } else { + subArray.push(subEle); + } + }); + array.push(subArray); + } else if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else if (element == null ? void 0 : element.isVector3) { + let dt = clone(element); + delete dt.z; + array.push(dt); + } else { + array.push(element); + } + } + if (array.length > 0) { + json[i2] = array; + } + } else if (((_k = this[i2]) == null ? void 0 : _k.set) && ((_l = this[i2]) == null ? void 0 : _l.has)) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + if (JSON.stringify(map) != "{}") { + json[i2] = map; + } + } else if ((_m = this[i2]) == null ? void 0 : _m.toJSON) { + json[i2] = this[i2].toJSON(); + } else if (this[i2] || this[i2] == 0) { + if (i2 == "rotate" && this[i2] == 0) + ; + else if ((i2 == "text" || i2 == "imgBase64") && this[i2] == "") + ; + else if (this[i2].isVector3) { + json[i2] = clone(this[i2]); + delete json[i2].z; + } else { + json[i2] = this[i2]; + } + } + } + } + } + return json; + } + // ============================ 静态方法 ============================ + /** + * 移动控件位置 + * @param models + * @param dx + * @param dy + */ + static moveModels(models, dx = 0, dy = 0, ignoreModelIds) { + if ((dx != 0 || dy != 0) && (models == null ? void 0 : models.length) > 0) { + let moveMatrix2 = new Matrix3( + 1, + 0, + dx, + 0, + 1, + dy, + 0, + 0, + 1 + ); + models.forEach((m) => { + m.transVectors(moveMatrix2); + m.refreshLinkModels(); + m.updateLinkModels(ignoreModelIds); + }); + } + } + /** + * 以矩形的大小变化为参照物,修改模型的大小 + */ + static changeModelBoundByRect(models, rectObj, data) { + var _a3; + if (!((models == null ? void 0 : models.length) > 0)) { + return; + } + let deltaX = data.deltaX ? data.deltaX : 0; + let deltaY = data.deltaY ? data.deltaY : 0; + let deltaWidth = data.deltaWidth ? data.deltaWidth : 0; + let deltaHeight = data.deltaHeight ? data.deltaHeight : 0; + let selector = rectObj; + let stageRatio2 = models[0].getStageRatio(); + let paddingWeight = 0; + if (selector.modelType) { + let paddingWeightInfo = ((_a3 = selector.paddingWeight) == null ? void 0 : _a3.selected) ? selector.paddingWeight.selected : DDeiConfig$1.SELECTOR.PADDING_WEIGHT.selected; + if (models.length > 1) { + paddingWeight = paddingWeightInfo.multiple; + } else { + paddingWeight = paddingWeightInfo.single; + } + } + selector.width -= 2 * paddingWeight; + selector.height -= 2 * paddingWeight; + if (selector.width + deltaWidth < 10) { + return; + } + if (selector.height + deltaHeight < 10) { + return; + } + let selectCPVXDelta = deltaX == 0 ? deltaWidth / 2 : deltaX / 2; + let selectCPVYDelta = deltaY == 0 ? deltaHeight / 2 : deltaY / 2; + let scaleWRate = 1 + deltaWidth / selector.width / stageRatio2; + let scaleHRate = 1 + deltaHeight / selector.height / stageRatio2; + let itemMoveMatrix = new Matrix3( + 1, + 0, + -selector.cpv.x, + 0, + 1, + -selector.cpv.y, + 0, + 0, + 1 + ); + let scaleMatrix2 = new Matrix3( + scaleWRate, + 0, + 0, + 0, + scaleHRate, + 0, + 0, + 0, + 1 + ); + let itemMove1Matrix = new Matrix3( + 1, + 0, + selector.cpv.x + selectCPVXDelta, + 0, + 1, + selector.cpv.y + selectCPVYDelta, + 0, + 0, + 1 + ); + models.forEach((item) => { + var _a22, _b2, _c2, _d2; + let m2 = new Matrix3(); + m2.premultiply(itemMoveMatrix); + if (item.rotate) { + let angle2 = item.rotate * DDeiConfig$1.ROTATE_UNIT; + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m2.premultiply(rotateMatrix); + } + m2.premultiply(scaleMatrix2); + if (item.rotate) { + let angle2 = -item.rotate * DDeiConfig$1.ROTATE_UNIT; + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m2.premultiply(rotateMatrix); + } + m2.premultiply(itemMove1Matrix); + if (item.baseModelType == "DDeiContainer") { + (_a22 = item.layoutManager) == null ? void 0 : _a22.transVectors(m2); + } else { + item.transVectors(m2); + } + item.initPVS(); + (_c2 = (_b2 = item.getTopContainer()) == null ? void 0 : _b2.render) == null ? void 0 : _c2.enableRefreshShape(); + (_d2 = this.render) == null ? void 0 : _d2.enableRefreshShape(); + }); + } + /** + * 通过射线法判断点是否在图形内部 + * @param pps 多边形顶点 + * @param point 测试点 + * @returns + */ + static isInsidePolygon(polygon2, point2) { + let x2 = point2.x, y2 = point2.y; + let inside = false; + for (var i2 = 0, j2 = polygon2.length - 1; i2 < polygon2.length; j2 = i2++) { + var xi = polygon2[i2].x, yi = polygon2[i2].y; + var xj = polygon2[j2].x, yj = polygon2[j2].y; + var intersect = yi > y2 != yj > y2 && x2 < (xj - xi) * (y2 - yi) / (yj - yi) + xi; + if (intersect) { + inside = !inside; + } + } + return inside; + } + /** + * 基于向量点获取一组图形模型的宽高 + * @param models + */ + static getOutRectByPV(models, ratio = 1) { + models = models.filter((item) => !!item); + if (!models.length) { + return { x: 0, y: 0, width: 0, height: 0 }; + } + let points = []; + models.forEach((item) => { + let pvs2 = item.operatePVS ? item.operatePVS : item.pvs; + points = points.concat(pvs2); + }); + return DDeiAbstractShape.pvsToOutRect(points, ratio); + } + /** + * 获取最靠外部的一组向量 + * @param models + */ + static getOutPV(models) { + let o = DDeiAbstractShape.getOutRectByPV(models); + return DDeiAbstractShape.outRectToPV(o); + } + /** + * 返回外接矩形的点集合 + */ + static outRectToPV(o) { + return [ + new Vector3(o.x, o.y, 1), + new Vector3(o.x1, o.y, 1), + new Vector3(o.x1, o.y1, 1), + new Vector3(o.x, o.y1, 1) + ]; + } + /** + * 返回点集合的外接矩形 + */ + static pvsToOutRect(points, ratio = 1) { + let x2 = Infinity, y2 = Infinity, x1 = -Infinity, y1 = -Infinity; + points.forEach((p) => { + x2 = Math.min(p.x, x2); + x1 = Math.max(p.x, x1); + y2 = Math.min(p.y, y2); + y1 = Math.max(p.y, y1); + }); + return { + x: x2 * ratio, + y: y2 * ratio, + width: (x1 - x2) * ratio, + height: (y1 - y2) * ratio, + x1: x1 * ratio, + y1: y1 * ratio + }; + } + /** + * 获取某个控件下的最底层componse控件,如果没有则返回控件本身 + */ + static findBottomComponseByArea(control, x2 = void 0, y2 = void 0) { + var _a3; + let componses = []; + if (control) { + (_a3 = control.composes) == null ? void 0 : _a3.forEach((item) => { + if (item.isInAreaLoose(x2, y2, true)) { + let subComponse = DDeiAbstractShape.findBottomComponseByArea(item, x2, y2); + if (subComponse) { + componses.push(subComponse); + } else { + componses.push(item); + } + } + }); + if (componses.length > 0) { + componses.sort(function(a, b) { + if ((a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return a.cIndex - b.cIndex; + } else if ((a.cIndex || a.cIndex == 0) && !(b.cIndex || b.cIndex == 0)) { + return 1; + } else if (!(a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return -1; + } else { + return 0; + } + }); + return componses[0]; + } else { + return control; + } + } + } + /** + * 得到点在某个路径组合上的投射点 + * @param opPVS 构成路径的点 + * @param x0,y0 测试点 + * @param isClose 是否闭合 + * @param sort 是否排序后返回(按照投射距离的绝对值) + * @returns 每一条路径上的投影点的坐标 + */ + static getProjPointDists(opPVS, x0, y0, isClose = false, sort = 0) { + if ((opPVS == null ? void 0 : opPVS.length) > 0) { + let st, en; + let returnData = []; + for (let j2 = 0; j2 < opPVS.length; j2++) { + let plLength = Infinity; + if (j2 == opPVS.length - 1) { + if (isClose) { + st = j2; + en = 0; + } else { + continue; + } + } else { + st = j2; + en = j2 + 1; + } + let x1 = opPVS[st].x; + let y1 = opPVS[st].y; + let x2 = opPVS[en].x; + let y2 = opPVS[en].y; + if (x1 == x2 && y1 == y2) { + plLength = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); + } else { + let s = (x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1); + let d = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); + plLength = s / d; + } + let lineV = new Vector3(x2, y2, 1); + let pointV = new Vector3(x0, y0, 1); + let toZeroMatrix = new Matrix3( + 1, + 0, + -x1, + 0, + 1, + -y1, + 0, + 0, + 1 + ); + lineV.applyMatrix3(toZeroMatrix); + pointV.applyMatrix3(toZeroMatrix); + let lineAngle = (new Vector3(1, 0, 0).angleTo(new Vector3(lineV.x, lineV.y, 0)) * 180 / Math.PI).toFixed(4); + let angle2 = 0; + if (lineV.x >= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x >= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + lineV.applyMatrix3(rotateMatrix); + pointV.applyMatrix3(rotateMatrix); + if (pointV.x < 0) { + pointV.x = 0; + } else if (pointV.x > lineV.x) { + pointV.x = lineV.x; + } + let v1 = new Vector3(pointV.x, 0, 1); + angle2 = -angle2; + let rotateMatrix1 = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + v1.applyMatrix3(rotateMatrix1); + let removeMatrix = new Matrix3( + 1, + 0, + x1, + 0, + 1, + y1, + 0, + 0, + 1 + ); + v1.applyMatrix3(removeMatrix); + returnData.push({ index: st, dist: plLength, x: v1.x, y: v1.y }); + } + if (sort == 1) { + returnData.sort((a, b) => { + return Math.abs(a.dist) - Math.abs(b.dist); + }); + } else if (sort == 2) { + returnData.sort((a, b) => { + return Math.abs(b.dist) - Math.abs(a.dist); + }); + } + return returnData; + } + return null; + } + /** + * 获取某个容器下选中区域的所有控件,如果控件已被选中,且是一个容器,则继续向下直到最底层 + * @param container 容器 + * @param x X坐标 + * @param y Y坐标 + * @param loose 启用宽松判定 + * @param deep 启动深度判定 + * @returns + */ + static findBottomModelsByArea(container2, x2 = void 0, y2 = void 0, loose = false, deep = false) { + let controls2 = []; + if (container2) { + for (let mg = container2.midList.length - 1; mg >= 0; mg--) { + let item = container2.models.get(container2.midList[mg]); + if (!DDeiUtil$1.isModelHidden(item) && item.isInAreaLoose(x2, y2, loose)) { + if ((item.state == DDeiEnumControlState.SELECTED || deep) && item.baseModelType == "DDeiContainer") { + let subControls = DDeiAbstractShape.findBottomModelsByArea(item, x2, y2, loose, deep); + if (subControls && subControls.length > 0) { + controls2 = controls2.concat(subControls); + } else { + controls2.push(item); + } + } else if ((item.state == DDeiEnumControlState.SELECTED || deep) && item.baseModelType == "DDeiTable") { + let currentCell = item.getAccuContainerByPos(x2, y2); + if ((currentCell == null ? void 0 : currentCell.state) == DDeiEnumControlState.SELECTED) { + let subControls = DDeiAbstractShape.findBottomModelsByArea(currentCell, x2, y2, loose, deep); + if (subControls && subControls.length > 0) { + controls2 = controls2.concat(subControls); + } else { + controls2.push(item); + } + } else { + controls2.push(item); + } + } else { + controls2.push(item); + } + } + } + } + if (controls2.length > 1) { + controls2.sort(function(a, b) { + let anumber = -1; + let bnumber = -1; + if (a.baseModelType == "DDeiLine") { + anumber = 1e3 + (a.zIndex ? b.zIndex : 0); + } else if (a.id.startsWith("lsm_")) { + anumber = 2100 + (a.zIndex ? b.zIndex : 0); + } else { + anumber = 1e3 + (a.zIndex ? b.zIndex : 0); + } + if (b.baseModelType == "DDeiLine") { + bnumber = 1e3 + (b.zIndex ? b.zIndex : 0); + } else if (b.id.startsWith("lsm_")) { + bnumber = 2100 + (b.zIndex ? b.zIndex : 0); + } else { + bnumber = 1e3 + (b.zIndex ? b.zIndex : 0); + } + if (a.baseModelType == "DDeiContainer" && a.layout == "compose") { + anumber -= 5e3; + } + if (b.baseModelType == "DDeiContainer" && b.layout == "compose") { + bnumber -= 5e3; + } + return bnumber - anumber; + }); + } + return controls2; + } + /** + * 获取某个容器下选中区域的最底层容器 + * @param area 选中区域 + * @returns + */ + static findBottomContainersByArea(container2, x2 = void 0, y2 = void 0) { + let controls2 = []; + if (container2) { + for (let mg = container2.midList.length - 1; mg >= 0; mg--) { + let item = container2.models.get(container2.midList[mg]); + if (!DDeiUtil$1.isModelHidden(item) && DDeiAbstractShape.isInsidePolygon(item.pvs, { x: x2, y: y2 })) { + let accuContainer = item.getAccuContainerByPos(x2, y2); + if (accuContainer) { + let subControls = DDeiAbstractShape.findBottomContainersByArea(accuContainer, x2, y2); + if (subControls && subControls.length > 0) { + controls2 = controls2.concat(subControls); + } else { + controls2.push(accuContainer); + } + } + } + } + } + return controls2; + } + } + const __vite_glob_0_10$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiAbstractShape, + default: DDeiAbstractShape + }, Symbol.toStringTag, { value: "Module" })); + var DDeiEnumBusCommandType = /* @__PURE__ */ ((DDeiEnumBusCommandType2) => { + DDeiEnumBusCommandType2["ModelChangeSelect"] = "model-change-select"; + DDeiEnumBusCommandType2["StageChangeSelectModels"] = "stage-change-select-models"; + DDeiEnumBusCommandType2["CancelCurLevelSelectedModels"] = "cancel-curlevel-selected-models"; + DDeiEnumBusCommandType2["UpdateSelectorBounds"] = "update-selector-bounds"; + DDeiEnumBusCommandType2["ClearTemplateVars"] = "clear-template-vars"; + DDeiEnumBusCommandType2["RefreshShape"] = "refresh-shape"; + DDeiEnumBusCommandType2["ModelChangeContainer"] = "model-change-container"; + DDeiEnumBusCommandType2["ModelRemove"] = "model-remove"; + DDeiEnumBusCommandType2["ModelChangeBounds"] = "model-change-bounds"; + DDeiEnumBusCommandType2["ModelChangePosition"] = "model-change-position"; + DDeiEnumBusCommandType2["ModelEdgePosition"] = "model-edge-position"; + DDeiEnumBusCommandType2["SetHelpLine"] = "set-helpline"; + DDeiEnumBusCommandType2["UpdateDragObj"] = "update-dragobj"; + DDeiEnumBusCommandType2["ChangeSelectorPassIndex"] = "change-selector-passindex"; + DDeiEnumBusCommandType2["ChangeCursor"] = "change-cursor"; + DDeiEnumBusCommandType2["ModelChangeRotate"] = "model-change-rotate"; + DDeiEnumBusCommandType2["ResetSelectorState"] = "reset-selector-state"; + DDeiEnumBusCommandType2["ModelPush"] = "model-push"; + DDeiEnumBusCommandType2["CreateDepLinkModel"] = "create-dep-linkmodel"; + DDeiEnumBusCommandType2["ModelChangeValue"] = "model-change-value"; + DDeiEnumBusCommandType2["ChangeLayout"] = "change-layout"; + DDeiEnumBusCommandType2["CopyStyle"] = "copy-style"; + DDeiEnumBusCommandType2["AddHistroy"] = "add-histroy"; + DDeiEnumBusCommandType2["ModelAlign"] = "model-align"; + DDeiEnumBusCommandType2["ModelMerge"] = "model-merge"; + DDeiEnumBusCommandType2["ModelCancelMerge"] = "model-cancel-merge"; + DDeiEnumBusCommandType2["ModelAutoPos"] = "model-auto-pos"; + DDeiEnumBusCommandType2["ChangeEditMode"] = "change-edit-mode"; + DDeiEnumBusCommandType2["ChangeStageRatio"] = "change-stage-ratio"; + DDeiEnumBusCommandType2["ChangeStageWPV"] = "change-stage-wpv"; + DDeiEnumBusCommandType2["CenterStageWPV"] = "center-stage-wpv"; + DDeiEnumBusCommandType2["NodifyChange"] = "nodify-change"; + DDeiEnumBusCommandType2["NodifyControlCreated"] = "nodify-control-created"; + DDeiEnumBusCommandType2["ChangeLinePoint"] = "change-line-point"; + DDeiEnumBusCommandType2["TextEditorChangeSelectPos"] = "texteditor-change-select-pos"; + DDeiEnumBusCommandType2["OVSChangePosition"] = "ovs-change-position"; + DDeiEnumBusCommandType2["UpdatePaperArea"] = "update-paper-area"; + return DDeiEnumBusCommandType2; + })(DDeiEnumBusCommandType || {}); + class DDeiBusCommand { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "code"); + __publicField2(this, "name"); + __publicField2(this, "desc"); + this.code = props.code; + this.name = props.name; + this.desc = props.desc; + } + } + const _DDeiBusCommandAddHistroy = class _DDeiBusCommandAddHistroy2 extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + let data2 = JSON.stringify(stage2.toJSON()); + let lastData = null; + if (stage2.histroyIdx != -1) { + lastData = stage2.histroy[stage2.histroyIdx]; + } + if (data2 != lastData) { + _DDeiBusCommandAddHistroy2.addHistroy(stage2, data2); + } + return true; + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new _DDeiBusCommandAddHistroy2({ code: DDeiEnumBusCommandType.AddHistroy, name: "", desc: "" }); + } + static addHistroy(stage2, data) { + stage2.addHistroy(data); + } + }; + _DDeiBusCommandAddHistroy.addHistroy = debounce(_DDeiBusCommandAddHistroy.addHistroy, 200, { trailing: true, leading: false }); + let DDeiBusCommandAddHistroy = _DDeiBusCommandAddHistroy; + const __vite_glob_0_0$3$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandAddHistroy, + default: DDeiBusCommandAddHistroy + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandCancelCurLevelSelectedModels extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + let ignoreModels = data == null ? void 0 : data.ignoreModels; + let optContainer = data == null ? void 0 : data.container; + if (!optContainer) { + optContainer = stage2.render.currentOperateContainer; + } + if (!optContainer) { + optContainer = stage2.layers[stage2.layerIndex]; + } + if (optContainer) { + if ((data == null ? void 0 : data.curLevel) == true) { + optContainer.cancelSelectModels(null, ignoreModels); + } else { + optContainer.cancelAllLevelSelectModels(ignoreModels); + } + return true; + } + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandCancelCurLevelSelectedModels({ code: DDeiEnumBusCommandType.CancelCurLevelSelectedModels, name: "", desc: "" }); + } + } + const __vite_glob_0_1$3$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandCancelCurLevelSelectedModels, + default: DDeiBusCommandCancelCurLevelSelectedModels + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandCenterStageWPV extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + if (stage2) { + let maxOutRect = DDeiAbstractShape.getOutRectByPV( + stage2.getLayerModels() + ); + let canvas = bus.ddInstance.render.canvas; + let rat1 = bus.ddInstance.render.ratio; + let stageRatio2 = stage2.getStageRatio(); + let ruleDisplay; + if ((_a3 = stage2.ruler) == null ? void 0 : _a3.display) { + ruleDisplay = stage2.ruler.display; + } else if (stage2.ddInstance.ruler != null && stage2.ddInstance.ruler != void 0) { + if (typeof stage2.ddInstance.ruler == "boolean") { + ruleDisplay = stage2.ddInstance.ruler ? 1 : 0; + } else { + ruleDisplay = stage2.ddInstance.ruler.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "ruler.display", true); + } + let ruleWeight = 0; + if (ruleDisplay == 1 || ruleDisplay == "1") { + ruleWeight = 15; + } + let centerX = stage2.width / 2 - (maxOutRect.x + maxOutRect.width / 2) * stageRatio2; + let centerY = stage2.height / 2 - (maxOutRect.y + maxOutRect.height / 2) * stageRatio2; + stage2.wpv.x = -stage2.width / 2 + canvas.width / rat1 / 2 + ruleWeight + centerX; + stage2.wpv.y = -stage2.height / 2 + canvas.height / rat1 / 2 + ruleWeight + centerY; + return true; + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.push(DDeiEnumBusCommandType.RefreshShape); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandCenterStageWPV({ code: DDeiEnumBusCommandType.CenterStageWPV, name: "", desc: "" }); + } + } + const __vite_glob_0_2$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandCenterStageWPV, + default: DDeiBusCommandCenterStageWPV + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiRectangle = class _DDeiRectangle2 extends DDeiAbstractShape { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "border"); + __publicField2(this, "fill"); + __publicField2(this, "font"); + __publicField2(this, "imgBase64"); + __publicField2(this, "text"); + __publicField2(this, "textStyle"); + __publicField2(this, "modelType", "DDeiRectangle"); + __publicField2(this, "baseModelType", "DDeiRectangle"); + this.border = props.border ? props.border : null; + this.fill = props.fill ? props.fill : null; + this.font = props.font ? props.font : null; + this.text = props.text ? props.text : ""; + this.imgBase64 = props.imgBase64 ? props.imgBase64 : ""; + this.textStyle = props.textStyle ? props.textStyle : null; + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + let model = new _DDeiRectangle2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + if (!model.pModel) { + model.pModel = model.layer; + } + tempData[model.id] = model; + model.initPVS(); + model.initRender(); + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}) { + let model = new _DDeiRectangle2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + model.initPVS(); + return model; + } + // ============================ 方法 =============================== + /** + * 初始化渲染器 + */ + initRender() { + DDeiConfig$1.bindRender(this); + this.render.init(); + } + /** + * 返回某个点,相对于该图形的角度 + */ + getPointAngle(point2) { + if (DDeiUtil$1.isPointInLine(point2, this.pvs[0], this.pvs[1])) { + return DDeiUtil$1.getLineAngle(0, 0, 0, -2); + } else if (DDeiUtil$1.isPointInLine(point2, this.pvs[1], this.pvs[2])) { + return DDeiUtil$1.getLineAngle(0, 0, 2, 0); + } else if (DDeiUtil$1.isPointInLine(point2, this.pvs[2], this.pvs[3])) { + return DDeiUtil$1.getLineAngle(0, 0, 0, 2); + } else if (DDeiUtil$1.isPointInLine(point2, this.pvs[3], this.pvs[0])) { + return DDeiUtil$1.getLineAngle(0, 0, -2, 0); + } + } + }; + __publicField2(_DDeiRectangle, "ClsName", "DDeiRectangle"); + let DDeiRectangle = _DDeiRectangle; + const __vite_glob_0_8$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiRectangle, + default: DDeiRectangle + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiCircle = class _DDeiCircle2 extends DDeiRectangle { + constructor() { + super(...arguments); + __publicField2(this, "modelType", "DDeiCircle"); + __publicField2(this, "baseModelType", "DDeiRectangle"); + } + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + let model = new _DDeiCircle2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + if (!model.pModel) { + model.pModel = model.layer; + } + tempData[model.id] = model; + model.initRender(); + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json) { + let shape = new _DDeiCircle2(json); + return shape; + } + }; + __publicField2(_DDeiCircle, "ClsName", "DDeiCircle"); + let DDeiCircle = _DDeiCircle; + const __vite_glob_0_0$2$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiCircle, + default: DDeiCircle + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiDiamond = class _DDeiDiamond2 extends DDeiRectangle { + constructor() { + super(...arguments); + __publicField2(this, "modelType", "DDeiDiamond"); + __publicField2(this, "baseModelType", "DDeiRectangle"); + } + /** + * 得到点在图形连接线上的投射点 + * @param point 测试点 + * @param distance 内外部判定区间的距离 + * @param direct 方向,1外部,2内部 默认1 + * @returns 投影点的坐标 + */ + getProjPoint(point2, distance = { in: -5, out: 15 }, direct = 1) { + let pvs2 = []; + for (let i2 = 0; i2 < this.currentPointVectors.length; i2++) { + let s = null; + let e = null; + if (i2 == this.currentPointVectors.length - 1) { + s = this.currentPointVectors[i2]; + e = this.currentPointVectors[0]; + } else { + s = this.currentPointVectors[i2]; + e = this.currentPointVectors[i2 + 1]; + } + let p = { x: (s.x + e.x) / 2, y: (s.y + e.y) / 2 }; + pvs2.push(p); + } + let x0 = point2.x; + let y0 = point2.y; + if ((pvs2 == null ? void 0 : pvs2.length) > 0) { + let st, en; + for (let j2 = 0; j2 < pvs2.length; j2++) { + let plLength = Infinity; + if (j2 == pvs2.length - 1) { + st = j2; + en = 0; + } else { + st = j2; + en = j2 + 1; + } + let x1 = pvs2[st].x; + let y1 = pvs2[st].y; + let x2 = pvs2[en].x; + let y2 = pvs2[en].y; + if (x1 == x2 && y1 == y2) { + plLength = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); + } else { + let s = (x0 - x1) * (y2 - y1) - (y0 - y1) * (x2 - x1); + let d = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); + plLength = s / d; + } + let flag = false; + if (direct == 1) { + if (plLength >= distance.in && plLength <= distance.out) { + flag = true; + } + } else if (direct == 2) { + if (plLength <= distance.in && plLength >= distance.out) { + flag = true; + } + } + if (flag) { + let lineV = new Vector3(x2, y2, 1); + let pointV = new Vector3(x0, y0, 1); + let toZeroMatrix = new Matrix3( + 1, + 0, + -x1, + 0, + 1, + -y1, + 0, + 0, + 1 + ); + lineV.applyMatrix3(toZeroMatrix); + pointV.applyMatrix3(toZeroMatrix); + let lineAngle = (new Vector3(1, 0, 0).angleTo(new Vector3(lineV.x, lineV.y, 0)) * 180 / Math.PI).toFixed(4); + let angle2 = 0; + if (lineV.x >= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y >= 0) { + angle2 = (lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x <= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (lineV.x >= 0 && lineV.y <= 0) { + angle2 = (-lineAngle * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + lineV.applyMatrix3(rotateMatrix); + pointV.applyMatrix3(rotateMatrix); + if (pointV.x >= 0 && pointV.x <= lineV.x) { + let v1 = new Vector3(pointV.x, 0, 1); + angle2 = -angle2; + let rotateMatrix2 = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + v1.applyMatrix3(rotateMatrix2); + let removeMatrix = new Matrix3( + 1, + 0, + x1, + 0, + 1, + y1, + 0, + 0, + 1 + ); + v1.applyMatrix3(removeMatrix); + return v1; + } + } + } + } + return null; + } + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + let model = new _DDeiDiamond2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + if (!model.pModel) { + model.pModel = model.layer; + } + tempData[model.id] = model; + model.initRender(); + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json) { + let shape = new _DDeiDiamond2(json); + return shape; + } + }; + __publicField2(_DDeiDiamond, "ClsName", "DDeiDiamond"); + let DDeiDiamond = _DDeiDiamond; + const __vite_glob_0_1$2$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiDiamond, + default: DDeiDiamond + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiLayer = class _DDeiLayer2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "name"); + __publicField2(this, "models"); + __publicField2(this, "midList"); + __publicField2(this, "modelType", "DDeiLayer"); + __publicField2(this, "baseModelType", "DDeiLayer"); + __publicField2(this, "stage"); + __publicField2(this, "index"); + __publicField2(this, "background"); + __publicField2(this, "display", 1); + __publicField2(this, "tempDisplay", false); + __publicField2(this, "lock", false); + __publicField2(this, "print", true); + __publicField2(this, "unicode"); + __publicField2(this, "bg"); + __publicField2(this, "opPoints", []); + __publicField2(this, "opLine", null); + __publicField2(this, "centerOpPoints", []); + __publicField2(this, "layoutManager"); + __publicField2(this, "dragInPoints", []); + __publicField2(this, "dragOutPoints", []); + __publicField2(this, "shadowControls", []); + __publicField2(this, "modelCode", "DDeiLayer"); + __publicField2(this, "modelChanged", true); + __publicField2(this, "modelNumber", 0); + this.id = props.id; + this.name = props.name; + this.models = props.models ? props.models : /* @__PURE__ */ new Map(); + this.midList = props.midList ? props.midList : new Array(); + this.stage = null; + this.index = -1; + this.background = props.background ? props.background : null; + this.display = props.display || props.display == 0 ? props.display : 1; + this.tempDisplay = props.tempDisplay ? props.tempDisplay : false; + this.lock = props.lock ? props.lock : false; + this.print = props.print ? props.print : true; + this.unicode = props.unicode ? props.unicode : DDeiUtil$1.getUniqueCode(); + this.bg = props.bg; + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + var _a3; + let layer2 = new _DDeiLayer2(json); + layer2.stage = tempData["currentStage"]; + tempData["currentLayer"] = layer2; + let ddInstance = (_a3 = layer2.stage) == null ? void 0 : _a3.ddInstance; + tempData[layer2.id] = layer2; + let models = /* @__PURE__ */ new Map(); + let midList = layer2.midList ? layer2.midList : new Array(); + for (let key in json.models) { + let item = json.models[key]; + let model = ddInstance.controlModelClasses[item.modelType].loadFromJSON(item, tempData); + models.set(key, model); + if (midList.indexOf(model.id) == -1) { + midList.push(model.id); + } + } + tempData["currentLayer"] = null; + layer2.models = models; + layer2.midList = midList; + layer2.initRender(); + layer2.calModelNumber(); + return layer2; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json) { + let layer2 = new _DDeiLayer2(json); + return layer2; + } + // ============================ 方法 =============================== + /** + * 计算当前layer的模型总数量 + */ + calModelNumber() { + let num = 0; + this.midList.forEach((mid) => { + let model = this.models.get(mid); + if ((model == null ? void 0 : model.baseModelType) == "DDeiContainer") { + num += model.calModelNumber(); + } else if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + num += model.calModelNumber(); + } else { + num++; + } + }); + this.modelNumber = num; + return num; + } + /** + * 初始化渲染器 + */ + initRender() { + DDeiConfig$1.bindRender(this); + this.render.init(); + this.models.forEach((item, key) => { + item.initRender(); + }); + } + /** + * 获取画布缩放比率 + */ + getStageRatio() { + if (this.stage) { + let stageRatio2 = parseFloat(this.stage.ratio) ? parseFloat(this.stage.ratio) : 1; + if (!stageRatio2 || isNaN(stageRatio2)) { + stageRatio2 = this.stage.ddInstance.ratio; + } + return stageRatio2; + } else { + return 1; + } + } + notifyChange() { + var _a3; + (_a3 = this.stage) == null ? void 0 : _a3.notifyChange(); + } + /** + * 获取子模型 + */ + getSubModels(ignoreModelIds, level = 1, rect) { + let models = []; + this.midList.forEach((mid) => { + if (ignoreModelIds && (ignoreModelIds == null ? void 0 : ignoreModelIds.indexOf(mid)) != -1) { + return; + } + let subModel = null; + if (this.models.get) { + subModel = this.models.get(mid); + } else { + subModel = this.models[mid]; + } + if (subModel) { + if (!rect || subModel.isInRect(rect.x, rect.y, rect.x1, rect.y1)) { + if (level > 1 && (subModel == null ? void 0 : subModel.getSubModels)) { + let subModels = subModel.getSubModels(ignoreModelIds, level - 1, rect); + models = models.concat(subModels); + } + models.push(subModel); + } + } + }); + return models; + } + /** + * 获取子模型,通过一个过滤器 + */ + getSubModelsByFilter(filterName = null, ignoreModelIds, level = 1, params) { + let models = []; + this.midList.forEach((mid) => { + if (ignoreModelIds && (ignoreModelIds == null ? void 0 : ignoreModelIds.indexOf(mid)) != -1) { + return; + } + let subModel = null; + if (this.models.get) { + subModel = this.models.get(mid); + } else { + subModel = this.models[mid]; + } + if (subModel) { + let filterMethod = null; + if (filterName) { + let define2 = DDeiUtil$1.getControlDefine(subModel); + if (define2 && define2.filters && define2.filters[filterName]) { + filterMethod = define2.filters[filterName]; + } + } + if (!filterMethod || filterMethod(subModel, params)) { + if (level > 1 && (subModel == null ? void 0 : subModel.getSubModelsByFilter)) { + let subModels = subModel.getSubModelsByFilter(filterName, ignoreModelIds, level - 1, params); + models = models.concat(subModels); + } + models.push(subModel); + } + } + }); + return models; + } + /** + * 添加模型,并维护关系 + * @param model 被添加的模型 + */ + addModel(model, notify = true) { + if (this.midList.indexOf(model.id) == -1) { + model.stage = this.stage; + this.models.set(model.id, model); + if (this.midList && this.midList.length > 0) { + model.zIndex = this.models.get(this.midList[this.midList.length - 1]).zIndex; + } + this.midList.push(model.id); + model.layer = this; + model.pModel = this; + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + } + /** + * 移除模型,并维护关系 + * @param model 被移除的模型 + * @param destroy 销毁,缺省false + */ + removeModels(models, destroy = false, notify = true) { + models == null ? void 0 : models.forEach((model) => { + this.removeModel(model, destroy, false); + }); + if (notify) { + this.notifyChange(); + } + } + /** + * 移除所有元素 + */ + clearModels(destroy = false) { + this.models.forEach((model) => { + this.removeModel(model, destroy); + }); + } + cascadeRemoveSelf() { + } + /** + * 移除自身的方法 + */ + destroyed() { + var _a3, _b2; + if ((_a3 = this.render) == null ? void 0 : _a3.containerViewer) { + this.render.containerViewer.remove(); + delete this.render.containerViewer; + } + this.render = null; + (_b2 = this.models) == null ? void 0 : _b2.forEach((item, key) => { + item == null ? void 0 : item.destroyed(); + }); + } + /** + * 移除渲染器 + */ + destroyRender() { + var _a3, _b2; + if ((_a3 = this.render) == null ? void 0 : _a3.containerViewer) { + this.render.containerViewer.remove(); + delete this.render.containerViewer; + } + (_b2 = this.models) == null ? void 0 : _b2.forEach((item, key) => { + item == null ? void 0 : item.destroyRender(); + }); + this.render = null; + } + /** + * 移除模型,并维护关系 + * @param model 被移除的模型 + * @param destroy 销毁,缺省false + */ + removeModel(model, destroy = false, notify = true) { + var _a3; + this.models.delete(model.id); + let idx = this.midList.indexOf(model.id); + if (idx != -1) { + this.midList.splice(idx, 1); + } + if (destroy) { + model.destroyed(); + } + model.layer = null; + model.stage = null; + model.render = null; + if ((_a3 = this.stage) == null ? void 0 : _a3.render) { + this.stage.render.refreshJumpLine = false; + } + if (notify) { + this.notifyChange(); + } + } + /** + * 根据ID删除元素 + */ + removeModelById(ids, notify = true) { + ids == null ? void 0 : ids.forEach((id) => { + let model = this.getModelById(id); + if (model) { + this.removeModel(model); + } + }); + this.models.forEach((model) => { + if (model.baseModelType == "DDeiContainer") { + model.removeModelById(ids); + } + }); + if (notify) { + this.notifyChange(); + } + } + /** + * 根据基础模型获取控件 + * @param bmt 基础模型类别 + */ + getModelsByBaseType(bmt) { + let returnValues = []; + this.midList.forEach((mid) => { + let model = this.models.get(mid); + if ((model == null ? void 0 : model.baseModelType) == bmt) { + returnValues.push(model); + } else if ((model == null ? void 0 : model.baseModelType) == "DDeiContainer") { + let datas2 = model.getModelsByBaseType(bmt); + datas2.forEach((dt) => { + returnValues.push(dt); + }); + } + }); + return returnValues; + } + /** + * 获取当前图形的除layer的所有父节点对象 + */ + getParents() { + return []; + } + /** + * 将控件设置到顶层 + */ + pushTop(models, notify = true) { + models.forEach((item) => { + let lastItem = this.models.get(this.midList[this.midList.length - 1]); + if (lastItem.id != item.id) { + let lastIndex = lastItem.zIndex ? lastItem == null ? void 0 : lastItem.zIndex : 0; + item.zIndex = lastIndex + 1; + } + }); + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + /** + * 将控件设置到底层 + */ + pushBottom(models, notify = true) { + models.forEach((item) => { + item.zIndex = null; + let oldIdIndex = this.midList.indexOf(item.id); + if (oldIdIndex > 0) { + this.midList.splice(oldIdIndex, 1); + this.midList.splice(0, 0, item.id); + } + }); + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + /** + * 将控件设置到上一层 + */ + pushUp(models, notify = true) { + models.forEach((item) => { + if (!item.zIndex) { + item.zIndex = 1; + } else { + item.zIndex++; + } + }); + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + /** + * 将控件设置到下一层 + */ + pushDown(models, notify = true) { + models.forEach((item) => { + if (!item.zIndex || item.zIndex <= 1) { + item.zIndex = null; + let oldIdIndex = this.midList.indexOf(item.id); + if (oldIdIndex > 0) { + let temp = this.midList[oldIdIndex]; + this.midList[oldIdIndex] = this.midList[oldIdIndex - 1]; + this.midList[oldIdIndex - 1] = temp; + } + } else { + item.zIndex--; + } + }); + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + /** + * 按照Zindex的顺序,从小到大排列,并重新设置子元素的zindex确保其连续,最后将排序后的List设置成新的midList + */ + resortModelByZIndex() { + let newMidList = new Array(); + let hadZIndexList = new Array(); + for (let mg = 0; mg < this.midList.length; mg++) { + let item = this.models.get(this.midList[mg]); + if (item.zIndex && item.zIndex > 0) { + let insertIndex = hadZIndexList.length; + for (let j2 = 0; j2 < hadZIndexList.length; j2++) { + if (this.models.get(hadZIndexList[j2]).zIndex > item.zIndex) { + insertIndex = j2; + break; + } + } + hadZIndexList.splice(insertIndex, 0, item.id); + } else { + newMidList.push(item.id); + } + } + this.midList = newMidList.concat(hadZIndexList); + } + /** + * 获取当前图形的绝对旋转坐标值 + */ + getAbsRotate() { + return 0; + } + /** + * 取消选择控件,默认取消所有 + */ + cancelSelectModels(models, ignoreModels) { + if (!models) { + models = Array.from(this.models.values()); + } + models.forEach((item) => { + if (!ignoreModels || (ignoreModels == null ? void 0 : ignoreModels.indexOf(item)) == -1) { + item.setState(DDeiEnumControlState.DEFAULT); + } + }); + } + /** + * 取消选择控件,默认取消所有 + */ + cancelAllLevelSelectModels(ignoreModels) { + this.models.forEach((item) => { + if (!ignoreModels || (ignoreModels == null ? void 0 : ignoreModels.indexOf(item)) == -1) { + item.setState(DDeiEnumControlState.DEFAULT); + } + if (item.baseModelType == "DDeiContainer") { + item.cancelAllLevelSelectModels(ignoreModels); + } + }); + } + /** + * 获取绝对的控件坐标 + */ + getAbsPosition(pm) { + return { x: 0, y: 0 }; + } + getPosition() { + return { x: 0, y: 0 }; + } + /** + * 根据坐标获取操作点 + * @param x + * @param y + * @returns 操作点 + */ + getOpPointByPos(x2 = 0, y2 = 0) { + var _a3, _b2, _c2, _d2; + let minLength = Infinity; + let minPoint = null; + if (x2 && y2 && (((_a3 = this.opPoints) == null ? void 0 : _a3.length) > 0 || ((_b2 = this.centerOpPoints) == null ? void 0 : _b2.length) > 0)) { + for (let i2 = 0; i2 < ((_c2 = this.opPoints) == null ? void 0 : _c2.length); i2++) { + let point2 = this.opPoints[i2]; + let absX = Math.abs(x2 - point2.x); + let absY = Math.abs(y2 - point2.y); + if (absX <= 8 && absY <= 8) { + if (absX + absY < minLength) { + minLength = absX + absY; + minPoint = point2; + } + } + } + for (let i2 = 0; i2 < ((_d2 = this.centerOpPoints) == null ? void 0 : _d2.length); i2++) { + let point2 = this.centerOpPoints[i2]; + let absX = Math.abs(x2 - point2.x); + let absY = Math.abs(y2 - point2.y); + if (absX <= 8 && absY <= 8) { + if (absX + absY < minLength) { + minLength = absX + absY; + minPoint = point2; + } + } + } + } + return minPoint; + } + /** + * 获取某个选中区域的所有控件 + * @param area 选中区域 + * @returns + */ + findModelsByArea(x2 = void 0, y2 = void 0, width = 0, height = 0) { + let controls2 = []; + this.models.forEach((item) => { + if (DDeiAbstractShape.isInsidePolygon(item.pvs, { x: x2, y: y2 })) { + controls2.push(item); + } + }); + return controls2; + } + /** + * 修改上层模型大小 + */ + changeParentsBounds() { + return true; + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainer() { + return this; + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainerByPos(x2, y2) { + return this; + } + /** + * 获取选中状态的所有控件 + * @returns + */ + getSelectedModels() { + let controls2 = /* @__PURE__ */ new Map(); + this.models.forEach((item, key) => { + if (item.state == DDeiEnumControlState.SELECTED) { + controls2.set(item.id, item); + } + }); + return controls2; + } + /** + * 设置当前模型为被修改状态 + */ + setModelChanged() { + this.modelChanged = true; + } + /** + * 判断当前模型是否已被修改 + */ + isModelChanged() { + return this.modelChanged; + } + /** + * 根据ID获取模型 + * @param id 模型id + */ + getModelById(id) { + let reutrnModel = null; + if (id) { + if (this.models.has(id)) { + reutrnModel = this.models.get(id); + } else { + this.models.forEach((item) => { + let container2 = item.getAccuContainer(); + if (container2) { + let rm = container2.getModelById(id); + if (rm) { + reutrnModel = rm; + } + } + }); + } + } + if (!reutrnModel) { + reutrnModel = null; + } + return reutrnModel; + } + /** + * 将模型转换为JSON + */ + toJSON() { + var _a3, _b2, _c2, _d2, _e2, _f; + let json = new Object(); + let skipFields = (_a3 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _a3.SKIP; + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_b2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _b2.SKIP; + } + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_c2 = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _c2.SKIP; + } + let toJSONFields = (_d2 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _d2.TOJSON; + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_e2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _e2.TOJSON; + } + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_f = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _f.TOJSON; + } + for (let i2 in this) { + if (!skipFields || (skipFields == null ? void 0 : skipFields.indexOf(i2)) == -1) { + if (toJSONFields && toJSONFields.indexOf(i2) != -1 && this[i2]) { + if (Array.isArray(this[i2])) { + let array = []; + this[i2].forEach((element) => { + if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + }); + json[i2] = array; + } else if (this[i2].set && this[i2].has) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + json[i2] = map; + } else if (this[i2].toJSON) { + json[i2] = this[i2].toJSON(); + } else { + json[i2] = this[i2]; + } + } else { + json[i2] = this[i2]; + } + } + } + return json; + } + }; + __publicField2(_DDeiLayer, "ClsName", "DDeiLayer"); + let DDeiLayer = _DDeiLayer; + const __vite_glob_0_2$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayer, + default: DDeiLayer + }, Symbol.toStringTag, { value: "Module" })); + const calAutoLinePath = function(sd, ed, obis, extConfig) { + var _a3, _b2; + let startTime = (/* @__PURE__ */ new Date()).getTime(); + if (!sd.direct) { + sd.direct = 3; + switch (sd.angle) { + case -90: + sd.direct = 1; + break; + case 0: + sd.direct = 2; + break; + case 90: + sd.direct = 3; + break; + case 180: + sd.direct = 4; + break; + } + } + if (!ed.direct) { + ed.direct = 1; + switch (ed.angle) { + case -90: + ed.direct = 1; + break; + case 0: + ed.direct = 2; + break; + case 90: + ed.direct = 3; + break; + case 180: + ed.direct = 4; + break; + } + } + if (!extConfig) { + extConfig = {}; + } + if (!extConfig.recomWeight) { + extConfig.recomWeight = 100; + } + if (!extConfig.rectMidWeight) { + extConfig.rectMidWeight = 50; + } + let outRects = []; + let extLines = []; + let corssPoints = []; + ed.point.isEnd = true; + ed.point.direct = ed.direct; + sd.point.direct = sd.direct; + sd.point.isStart = true; + corssPoints.push(sd.point); + corssPoints.push(ed.point); + genSEExtLine(sd, corssPoints, extLines); + genSEExtLine(ed, corssPoints, extLines); + getAutoLineItemExtPoints(corssPoints, outRects, extLines, obis); + for (let i2 = 0; i2 < outRects.length; i2++) { + let octi = outRects[i2]; + for (let j2 = 1; j2 < outRects.length; j2++) { + let octj = outRects[j2]; + if (i2 != j2 && octi.isStartOrEnd && octj.isStartOrEnd) { + if (octj.y1 < octi.y) { + let mdy = octj.y1 + (octi.y - octj.y1) / 2; + extLines.push([{ x: octj.x - 5e4, y: mdy, prio: extConfig == null ? void 0 : extConfig.rectMidWeight }, { x: octj.x + 5e4, y: mdy }]); + } else if (octj.y > octi.y1) { + let mdy = octi.y1 + (octj.y - octi.y1) / 2; + extLines.push([{ x: octj.x - 5e4, y: mdy, prio: extConfig == null ? void 0 : extConfig.rectMidWeight }, { x: octj.x + 5e4, y: mdy }]); + } + if (octj.x1 < octi.x) { + let mdx = octj.x1 + (octi.x - octj.x1) / 2; + extLines.push([{ x: mdx, y: octj.y - 5e4, prio: extConfig == null ? void 0 : extConfig.rectMidWeight }, { x: mdx, y: octj.y + 5e4 }]); + } else if (octj.x > octi.x1) { + let mdx = octi.x1 + (octj.x - octi.x1) / 2; + extLines.push([{ x: mdx, y: octj.y - 5e4, prio: extConfig == null ? void 0 : extConfig.rectMidWeight }, { x: mdx, y: octj.y + 5e4 }]); + } + } + } + } + (_a3 = extConfig == null ? void 0 : extConfig.recommendPaths) == null ? void 0 : _a3.forEach((point2) => { + if (point2.type == "x") { + extLines.push([{ x: point2.x, y: point2.y - 5e4, isRecommend: 1, prio: extConfig.recomWeight, color: "blue" }, { x: point2.x, y: point2.y + 5e4 }]); + } else if (point2.type == "y") { + extLines.push([{ x: point2.x - 5e4, y: point2.y, isRecommend: 1, prio: extConfig.recomWeight, color: "blue" }, { x: point2.x + 5e4, y: point2.y }]); + } + }); + (_b2 = extConfig == null ? void 0 : extConfig.forcePaths) == null ? void 0 : _b2.forEach((point2) => { + if (point2.x) { + extLines.push([{ x: point2.x, y: point2.y - 5e4, isForce: 1, prio: 9999, color: "orange" }, { x: point2.x, y: point2.y + 5e4 }]); + } else if (point2.y) { + extLines.push([{ x: point2.x - 5e4, y: point2.y, isForce: 1, prio: 9999, color: "orange" }, { x: point2.x + 5e4, y: point2.y }]); + } + }); + for (let i2 = 0; i2 < extLines.length; i2++) { + let linei = extLines[i2]; + let lineil = [linei[0]]; + if (linei[0].x == linei[1].x) { + if (linei[0].y >= linei[1].y) { + lineil.push({ x: linei[1].x, y: linei[1].y - 1e3 }); + } else { + lineil.push({ x: linei[1].x, y: linei[1].y + 1e3 }); + } + } else if (linei[0].y == linei[1].y) { + if (linei[0].x >= linei[1].x) { + lineil.push({ x: linei[1].x - 1e3, y: linei[1].y }); + } else { + lineil.push({ x: linei[1].x + 1e3, y: linei[1].y }); + } + } + for (let j2 = i2 + 1; j2 < extLines.length; j2++) { + let linej = extLines[j2]; + let linejl = [linej[0]]; + if (linej[0].x == linej[1].x) { + if (linej[0].y >= linej[1].y) { + linejl.push({ x: linej[1].x, y: linej[1].y - 1e3 }); + } else { + linejl.push({ x: linej[1].x, y: linej[1].y + 1e3 }); + } + } else if (linej[0].y == linej[1].y) { + if (linej[0].x >= linej[1].x) { + linejl.push({ x: linej[1].x - 1e3, y: linej[1].y }); + } else { + linejl.push({ x: linej[1].x + 1e3, y: linej[1].y }); + } + } + let cp = getLineCorssPoint(lineil[0], lineil[1], linejl[0], linejl[1]); + if (cp) { + cp.prio = (lineil[0].prio ? lineil[0].prio : 1) + (linejl[0].prio ? linejl[0].prio : 1); + corssPoints.push(cp); + } + } + } + let yIntIndex = {}; + let xIntIndex = {}; + corssPoints.forEach((point2) => { + let intX = parseInt(point2.x); + let intY = parseInt(point2.y); + point2.intX = intX; + point2.intY = intY; + if (!yIntIndex[intY]) { + yIntIndex[intY] = []; + } + let arr = yIntIndex[intY]; + let idx = -1; + for (let i2 = 0; i2 < arr.length; i2++) { + if (intX < parseInt(arr[i2].x)) { + arr.splice(i2, 0, point2); + idx = i2; + break; + } else if (intX == parseInt(arr[i2].x)) { + if (point2.isStart) + arr[i2].isStart = point2.isStart; + if (point2.isEnd) + arr[i2].isEnd = point2.isEnd; + if (point2.prio) { + arr[i2].prio = (arr[i2].prio ? arr[i2].prio : 0) + point2.prio; + } + idx = i2; + break; + } + } + if (idx == -1) { + arr.push(point2); + } + if (!xIntIndex[intX]) { + xIntIndex[intX] = []; + } + arr = xIntIndex[intX]; + idx = -1; + for (let i2 = 0; i2 < arr.length; i2++) { + if (intY < parseInt(arr[i2].y)) { + arr.splice(i2, 0, point2); + idx = i2; + break; + } else if (intY == parseInt(arr[i2].y)) { + if (point2.isStart) + arr[i2].isStart = point2.isStart; + if (point2.isEnd) + arr[i2].isEnd = point2.isEnd; + if (point2.prio) { + arr[i2].prio = (arr[i2].prio ? arr[i2].prio : 0) + point2.prio; + } + idx = i2; + break; + } + } + if (idx == -1) { + arr.push(point2); + } + }); + let buildPointTime = (/* @__PURE__ */ new Date()).getTime(); + let successPaths = []; + getLookForPath(null, sd.point, ed.point, 0, outRects, xIntIndex, yIntIndex, 0, 0, "root", [], successPaths); + let lookForTime = (/* @__PURE__ */ new Date()).getTime(); + let minTurnNum = -1, minDistance = -1, maxPrio = 0; + let candidatePaths = []; + for (let i2 = 0; i2 < successPaths.length; i2++) { + if (minTurnNum == -1 || minTurnNum > successPaths[i2].turnNum) { + minTurnNum = successPaths[i2].turnNum; + candidatePaths = [successPaths[i2].pathPoints]; + minDistance = successPaths[i2].distance; + maxPrio = successPaths[i2].prio; + } else if (minTurnNum == successPaths[i2].turnNum) { + if (maxPrio < successPaths[i2].prio) { + minTurnNum = successPaths[i2].turnNum; + candidatePaths = [successPaths[i2].pathPoints]; + minDistance = successPaths[i2].distance; + candidatePaths.push(successPaths[i2].pathPoints); + maxPrio = successPaths[i2].prio; + } else if (maxPrio == successPaths[i2].prio && parseInt(minDistance) > parseInt(successPaths[i2].distance)) { + minTurnNum = successPaths[i2].turnNum; + candidatePaths = [successPaths[i2].pathPoints]; + minDistance = successPaths[i2].distance; + candidatePaths.push(successPaths[i2].pathPoints); + } else if (maxPrio == successPaths[i2].prio && parseInt(minDistance) == parseInt(successPaths[i2].distance)) { + candidatePaths.push(successPaths[i2].pathPoints); + } + } + } + let newPaths = []; + for (let i2 = 0; i2 < candidatePaths.length; i2++) { + let paths = candidatePaths[i2]; + let upX = paths[0].x, upY = paths[0].y; + let upSX = paths[0].x, upSY = paths[0].y; + let newPath = [paths[0]], d = 0; + for (let j2 = 1; j2 < paths.length; j2++) { + let cp = paths[j2]; + if (!d) { + if (cp.intX == parseInt(upSX) && cp.intY == parseInt(upSY)) + ; + else if (cp.intX == parseInt(upSX)) { + d = 2; + } else if (cp.intY == parseInt(upSY)) { + d = 1; + } + } else if (d == 1) { + if (cp.intY != parseInt(upSY)) { + d = 2; + upSX = cp.x; + upSY = cp.y; + newPath.push({ x: upX, y: upY }); + } + } else if (d == 2) { + if (cp.intX != parseInt(upSX)) { + d = 1; + upSX = cp.x; + upSY = cp.y; + newPath.push({ x: upX, y: upY }); + } + } + upX = cp.x; + upY = cp.y; + } + if (parseInt(upX) != newPath[newPath.length - 1].intX || parseInt(upY) != newPath[newPath.length - 1].intY) { + newPath.push({ x: upX, y: upY }); + } + newPaths.push(newPath); + } + let pathPoints = []; + if (newPaths.length > 0) { + pathPoints = newPaths[0]; + let minDiff = Infinity, bestI = -1; + for (let i2 = 0; i2 < newPaths.length; i2++) { + let paths = newPaths[i2]; + if (paths.length > 2) { + let maxDiffY = 0, maxDiffX = 0; + let d = paths[0].intX == paths[1].intX ? 2 : 1; + for (let j2 = 2; j2 < paths.length; j2++) { + if (d == 2) { + if (maxDiffY < Math.abs(paths[j2 - 2].y - paths[j2].y)) { + maxDiffY = Math.abs(paths[j2 - 2].y - paths[j2].y); + } + } else { + if (maxDiffX < Math.abs(paths[j2 - 2].x - paths[j2].x)) { + maxDiffX = Math.abs(paths[j2 - 2].x - paths[j2].x); + } + } + } + if (minDiff > maxDiffY + maxDiffX) { + minDiff = maxDiffY + maxDiffX; + bestI = i2; + } + } + } + pathPoints = newPaths[bestI]; + } + let endTime = (/* @__PURE__ */ new Date()).getTime(); + return { corssPoints, pathPoints, extLines, totalTime: endTime - startTime, lookForTime: lookForTime - buildPointTime, selectPathTime: endTime - lookForTime, buildPointTime: buildPointTime - startTime }; + }; + const getLookForPath = function(upPoint, curPoint, endPoint, fromDirect, outRects, xIntIndex, yIntIndex, turnNum, distance, fullpath, passPoints, successPaths) { + let directSortList = [1, 2, 3, 4]; + if (!curPoint) { + return { state: -1, end: 1, fullpath }; + } + if (turnNum >= 5 || turnNum > endPoint.minTurnNum) { + return { state: -1 }; + } + let intX = curPoint.intX; + let intY = curPoint.intY; + if (isNaN(intX) || isNaN(intY)) { + return { state: -1, end: 1, fullpath }; + } + let xyIndex = curPoint.xyIndex; + if (!xyIndex) { + xyIndex = xIntIndex[intX].indexOf(curPoint); + curPoint.xyIndex = xyIndex; + } + let yxIndex = curPoint.yxIndex; + if (!yxIndex) { + yxIndex = yIntIndex[intY].indexOf(curPoint); + curPoint.yxIndex = yxIndex; + } + let intXEnd = endPoint.intX; + let intYEnd = endPoint.intY; + if (xyIndex == -1 || yxIndex == -1) { + return { state: -1, end: 1, fullpath }; + } else if (passPoints.indexOf(curPoint) != -1) { + return { state: -1, end: 1, fullpath }; + } else if (upPoint) { + let obiLine = { x1: upPoint.intX, y1: upPoint.intY, x2: intX, y2: intY }; + let isCorss = isCorssRect(obiLine, upPoint, curPoint, outRects); + if (isCorss) { + return { state: 0, close: 1, fullpath }; + } + } + if (curPoint == endPoint || curPoint.isEnd || intXEnd == intX && intYEnd == intY) { + endPoint.minTurnNum = Math.min(endPoint.minTurnNum ? endPoint.minTurnNum : 10, turnNum); + let prio = 0; + passPoints.forEach((pt) => { + prio += pt.prio ? pt.prio : 0; + }); + successPaths.push({ fullpath, turnNum, distance, prio, pathPoints: [...passPoints, curPoint] }); + return { state: 1, end: 1, fullpath }; + } + let allClose = true; + directSortList.forEach((searchDirect) => { + let isClose = deepLookForByDirect(searchDirect); + if (!isClose) { + allClose = false; + } + }); + function deepLookForByDirect(direct) { + switch (direct) { + case 1: { + if (!curPoint.upClose) { + let nextPointXYIndex = xyIndex - 1; + if (nextPointXYIndex < 0) { + curPoint.upClose = 1; + return 1; + } else if (endPoint.direct == 3 && !curPoint.isStart && intYEnd > intY) { + curPoint.upClose = 1; + return 1; + } else { + let nextPoint = xIntIndex[intX][nextPointXYIndex]; + let nextTurnNum = fromDirect == 0 || fromDirect == 3 ? turnNum : turnNum + 1; + let nextDistance = distance + (nextPoint ? Math.abs(nextPoint.y - intY) : 0); + let nextPointResult = getLookForPath(curPoint, nextPoint, endPoint, 3, outRects, xIntIndex, yIntIndex, nextTurnNum, nextDistance, fullpath + "-up", [...passPoints, curPoint], successPaths); + if ((nextPointResult == null ? void 0 : nextPointResult.close) == 1 || (nextPointResult == null ? void 0 : nextPointResult.state) == -1) { + return 1; + } + } + } else { + return 1; + } + break; + } + case 3: { + if (!curPoint.downClose) { + let nextPointXYIndex = xyIndex + 1; + if (nextPointXYIndex >= xIntIndex[intX].length) { + curPoint.downClose = 1; + return 1; + } else if (endPoint.direct == 1 && !curPoint.isStart && intYEnd < intY) { + curPoint.downClose = 1; + return 1; + } else { + let nextPoint = xIntIndex[intX][nextPointXYIndex]; + let nextTurnNum = fromDirect == 0 || fromDirect == 1 ? turnNum : turnNum + 1; + let nextDistance = distance + (nextPoint ? Math.abs(nextPoint.y - intY) : 0); + let nextPointResult = getLookForPath(curPoint, nextPoint, endPoint, 1, outRects, xIntIndex, yIntIndex, nextTurnNum, nextDistance, fullpath + "-down", [...passPoints, curPoint], successPaths); + if ((nextPointResult == null ? void 0 : nextPointResult.close) == 1 || (nextPointResult == null ? void 0 : nextPointResult.state) == -1) { + return 1; + } + } + } else { + return 1; + } + break; + } + case 4: { + if (!curPoint.leftClose) { + let nextPointYXIndex = yxIndex - 1; + if (nextPointYXIndex < 0) { + curPoint.leftClose = 1; + return 1; + } else if (endPoint.direct == 2 && !curPoint.isStart && intXEnd > intX) { + curPoint.leftClose = 1; + return 1; + } else { + let nextPoint = yIntIndex[intY][nextPointYXIndex]; + let nextTurnNum = fromDirect == 0 || fromDirect == 2 ? turnNum : turnNum + 1; + let nextDistance = distance + (nextPoint ? Math.abs(nextPoint.x - intX) : 0); + let nextPointResult = getLookForPath(curPoint, nextPoint, endPoint, 2, outRects, xIntIndex, yIntIndex, nextTurnNum, nextDistance, fullpath + "-left", [...passPoints, curPoint], successPaths); + if ((nextPointResult == null ? void 0 : nextPointResult.close) == 1 || (nextPointResult == null ? void 0 : nextPointResult.state) == -1) { + return 1; + } + } + } else { + return 1; + } + } + case 2: { + if (!curPoint.rightClose) { + let nextPointYXIndex = yxIndex + 1; + if (nextPointYXIndex >= yIntIndex[intY].length) { + curPoint.rightClose = 1; + return 1; + } else if (endPoint.direct == 4 && !curPoint.isStart && intXEnd < intX) { + curPoint.rightClose = 1; + return 1; + } else { + let nextPoint = yIntIndex[intY][nextPointYXIndex]; + let nextTurnNum = fromDirect == 0 || fromDirect == 4 ? turnNum : turnNum + 1; + let nextDistance = distance + (nextPoint ? Math.abs(nextPoint.x - intX) : 0); + let nextPointResult = getLookForPath(curPoint, nextPoint, endPoint, 4, outRects, xIntIndex, yIntIndex, nextTurnNum, nextDistance, fullpath + "-right", [...passPoints, curPoint], successPaths); + if ((nextPointResult == null ? void 0 : nextPointResult.close) == 1 || (nextPointResult == null ? void 0 : nextPointResult.state) == -1) { + return 1; + } + } + } else { + return 1; + } + break; + } + } + } + if (allClose) { + return { state: -1, close: 1, fullpath }; + } + return { state: 0, fullpath }; + }; + const genSEExtLine = function(ed, corssPoints, extLines) { + var _a3, _b2, _c2, _d2; + switch (ed.direct) { + case 1: + corssPoints.push({ x: ed.point.x, y: ed.point.y - (((_a3 = ed.rect) == null ? void 0 : _a3.height) > 0 ? ed.rect.height / 4 : 50) }); + extLines.push([{ x: ed.point.x, y: ed.point.y }, { x: ed.point.x, y: ed.point.y - 5e4 }]); + if (!ed.rect) { + extLines.push([{ x: ed.point.x - 5e4, y: ed.point.y }, { x: ed.point.x + 5e4, y: ed.point.y }]); + } + break; + case 2: + corssPoints.push({ y: ed.point.y, x: ed.point.x + (((_b2 = ed.rect) == null ? void 0 : _b2.width) > 0 ? ed.rect.width / 4 : 50) }); + extLines.push([{ x: ed.point.x, y: ed.point.y }, { x: ed.point.x + 5e4, y: ed.point.y }]); + if (!ed.rect) { + extLines.push([{ x: ed.point.x, y: ed.point.y - 5e4 }, { x: ed.point.x, y: ed.point.y + 5e4 }]); + } + break; + case 3: + corssPoints.push({ x: ed.point.x, y: ed.point.y + (((_c2 = ed.rect) == null ? void 0 : _c2.height) > 0 ? ed.rect.height / 4 : 50) }); + extLines.push([{ x: ed.point.x, y: ed.point.y }, { x: ed.point.x, y: ed.point.y + 5e4 }]); + if (!ed.rect) { + extLines.push([{ x: ed.point.x - 5e4, y: ed.point.y }, { x: ed.point.x + 5e4, y: ed.point.y }]); + } + break; + case 4: + corssPoints.push({ y: ed.point.y, x: ed.point.x - (((_d2 = ed.rect) == null ? void 0 : _d2.width) > 0 ? ed.rect.width / 4 : 50) }); + extLines.push([{ x: ed.point.x, y: ed.point.y }, { x: ed.point.x - 5e4, y: ed.point.y }]); + if (!ed.rect) { + extLines.push([{ x: ed.point.x, y: ed.point.y - 5e4 }, { x: ed.point.x, y: ed.point.y + 5e4 }]); + } + break; + } + }; + const getAutoLineItemExtPoints = function(corssPoints, outRects, extLines, dbis) { + let outRectExtRate = 0.25; + dbis.forEach((dbi) => { + let outRect = pvsToOutRect(dbi.points); + if (dbi.isStartOrEnd) { + outRect.isStartOrEnd = true; + let perWidth = outRect.width * outRectExtRate; + let perHeight = outRect.height * outRectExtRate; + dbi.points.forEach((point2) => { + corssPoints.push({ x: point2.x, y: point2.y }); + }); + corssPoints.push({ x: outRect.x - perWidth, y: outRect.y }); + corssPoints.push({ x: outRect.x - perWidth, y: outRect.y + outRect.height * 0.5 }); + corssPoints.push({ x: outRect.x - perWidth, y: outRect.y1 }); + extLines.push([{ x: outRect.x - perWidth, y: outRect.y - 5e4 }, { x: outRect.x - perWidth, y: outRect.y + 5e4 }]); + extLines.push([{ x: outRect.x, y: outRect.y }, { x: outRect.x - perWidth, y: outRect.y }]); + extLines.push([{ x: outRect.x, y: outRect.y + outRect.height * 0.5 }, { x: outRect.x - perWidth, y: outRect.y + outRect.height * 0.5 }]); + extLines.push([{ x: outRect.x, y: outRect.y1 }, { x: outRect.x - perWidth, y: outRect.y1 }]); + corssPoints.push({ x: outRect.x1 + perWidth, y: outRect.y }); + corssPoints.push({ x: outRect.x1 + perWidth, y: outRect.y + outRect.height * 0.5 }); + corssPoints.push({ x: outRect.x1 + perWidth, y: outRect.y1 }); + extLines.push([{ x: outRect.x1 + perWidth, y: outRect.y - 5e4 }, { x: outRect.x1 + perWidth, y: outRect.y + 5e4 }]); + extLines.push([{ x: outRect.x1, y: outRect.y }, { x: outRect.x1 + perWidth, y: outRect.y }]); + extLines.push([{ x: outRect.x1, y: outRect.y + outRect.height * 0.5 }, { x: outRect.x1 + perWidth, y: outRect.y + outRect.height * 0.5 }]); + extLines.push([{ x: outRect.x1, y: outRect.y1 }, { x: outRect.x1 + perWidth, y: outRect.y1 }]); + corssPoints.push({ x: outRect.x, y: outRect.y - perHeight }); + corssPoints.push({ x: outRect.x + outRect.width / 2, y: outRect.y - perHeight }); + corssPoints.push({ x: outRect.x1, y: outRect.y - perHeight }); + extLines.push([{ x: outRect.x - 5e4, y: outRect.y - perHeight }, { x: outRect.x + 5e4, y: outRect.y - perHeight }]); + extLines.push([{ x: outRect.x, y: outRect.y }, { x: outRect.x, y: outRect.y - perHeight }]); + extLines.push([{ x: outRect.x + outRect.width / 2, y: outRect.y }, { x: outRect.x + outRect.width / 2, y: outRect.y - perHeight }]); + extLines.push([{ x: outRect.x1, y: outRect.y }, { x: outRect.x1, y: outRect.y - perHeight }]); + corssPoints.push({ x: outRect.x, y: outRect.y1 + perHeight }); + corssPoints.push({ x: outRect.x + outRect.width / 2, y: outRect.y1 + perHeight }); + corssPoints.push({ x: outRect.x1, y: outRect.y1 + perHeight }); + extLines.push([{ x: outRect.x - 5e4, y: outRect.y1 + perHeight }, { x: outRect.x + 5e4, y: outRect.y1 + perHeight }]); + extLines.push([{ x: outRect.x, y: outRect.y1 }, { x: outRect.x, y: outRect.y1 + perHeight }]); + extLines.push([{ x: outRect.x + outRect.width / 2, y: outRect.y1 }, { x: outRect.x + outRect.width / 2, y: outRect.y1 + perHeight }]); + extLines.push([{ x: outRect.x1, y: outRect.y1 }, { x: outRect.x1, y: outRect.y1 + perHeight }]); + } + outRects.push(outRect); + }); + }; + const isCorssRect = function(obiLine, spt, ept, outRects) { + for (let o = 0; o < outRects.length; o++) { + let outRect = outRects[o]; + let l2; + l2 = { x1: parseInt(outRect.x), y1: parseInt(outRect.y), x2: parseInt(outRect.x1), y2: parseInt(outRect.y) }; + if (isLineCross(obiLine, l2)) { + if (!ept.isEnd && !spt.isStart) { + return true; + } else { + if (ept.isEnd && ept.intY == l2.y2 && spt.intY < l2.y2) + ; + else if (spt.isStart && spt.intY == l2.y2 && ept.intY < l2.y2) + ; + else { + return true; + } + } + } + l2 = { x1: parseInt(outRect.x), y1: parseInt(outRect.y1), x2: parseInt(outRect.x1), y2: parseInt(outRect.y1) }; + if (isLineCross(obiLine, l2)) { + if (!ept.isEnd && !spt.isStart) { + return true; + } else { + if (ept.isEnd && ept.intY == l2.y2 && spt.intY > l2.y2) + ; + else if (spt.isStart && spt.intY == l2.y2 && ept.intY > l2.y2) + ; + else { + return true; + } + } + } + l2 = { x1: parseInt(outRect.x), y1: parseInt(outRect.y), x2: parseInt(outRect.x), y2: parseInt(outRect.y1) }; + if (isLineCross(obiLine, l2)) { + if (!ept.isEnd && !spt.isStart) { + return true; + } else { + if (ept.isEnd && ept.intX == l2.x2 && spt.intX < l2.x2) + ; + else if (spt.isStart && spt.intX == l2.x2 && ept.intX < l2.x2) + ; + else { + return true; + } + } + } + l2 = { x1: parseInt(outRect.x1), y1: parseInt(outRect.y), x2: parseInt(outRect.x1), y2: parseInt(outRect.y1) }; + if (isLineCross(obiLine, l2)) { + if (!ept.isEnd && !spt.isStart) { + return true; + } else { + if (ept.isEnd && ept.intX == l2.x2 && spt.intX > l2.x2) + ; + else if (spt.isStart && spt.intX == l2.x2 && ept.intX > l2.x2) + ; + else { + return true; + } + } + } + } + return false; + }; + const isLineCross = function(l1, l2) { + if ((l1.x1 > l1.x2 ? l1.x1 : l1.x2) < (l2.x1 < l2.x2 ? l2.x1 : l2.x2) || (l1.y1 > l1.y2 ? l1.y1 : l1.y2) < (l2.y1 < l2.y2 ? l2.y1 : l2.y2) || (l2.x1 > l2.x2 ? l2.x1 : l2.x2) < (l1.x1 < l1.x2 ? l1.x1 : l1.x2) || (l2.y1 > l2.y2 ? l2.y1 : l2.y2) < (l1.y1 < l1.y2 ? l1.y1 : l1.y2)) { + return false; + } + if (((l1.x1 - l2.x1) * (l2.y2 - l2.y1) - (l1.y1 - l2.y1) * (l2.x2 - l2.x1)) * ((l1.x2 - l2.x1) * (l2.y2 - l2.y1) - (l1.y2 - l2.y1) * (l2.x2 - l2.x1)) > 0 || ((l2.x1 - l1.x1) * (l1.y2 - l1.y1) - (l2.y1 - l1.y1) * (l1.x2 - l1.x1)) * ((l2.x2 - l1.x1) * (l1.y2 - l1.y1) - (l2.y2 - l1.y1) * (l1.x2 - l1.x1)) > 0) { + return false; + } + return true; + }; + const getLineCorssPoint = function(p1, p2, p3, p4) { + let abc = (p1.x - p3.x) * (p2.y - p3.y) - (p1.y - p3.y) * (p2.x - p3.x); + let abd = (p1.x - p4.x) * (p2.y - p4.y) - (p1.y - p4.y) * (p2.x - p4.x); + if (abc * abd >= 0) { + return null; + } + let cda = (p3.x - p1.x) * (p4.y - p1.y) - (p3.y - p1.y) * (p4.x - p1.x); + let cdb = cda + abc - abd; + if (cda * cdb >= 0) { + return null; + } + let t = cda / (abd - abc); + let dx = t * (p2.x - p1.x), dy = t * (p2.y - p1.y); + return { x: p1.x + dx, y: p1.y + dy }; + }; + const pvsToOutRect = function(points) { + let x2 = Infinity, y2 = Infinity, x1 = -Infinity, y1 = -Infinity; + points.forEach((p) => { + x2 = Math.min(p.x, x2); + x1 = Math.max(p.x, x1); + y2 = Math.min(p.y, y2); + y1 = Math.max(p.y, y1); + }); + return { + x: x2, + y: y2, + width: x1 - x2, + height: y1 - y2, + x1, + y1 + }; + }; + const getMovePath = function(sAngle, eAngle, startPoint, endPoint) { + let movePath = ""; + switch (sAngle) { + case 0: + { + switch (eAngle) { + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,ex:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,ex:-0.25"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,ex:-0.25"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) + ; + else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,ey:-0.25"; + } else { + movePath = "ey:-0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sx:0.25"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,sy2:0.25"; + } else { + movePath = "ey:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sx:0.25"; + } else + ; + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,ey:0.25"; + } else { + movePath = "ey:0.25"; + } + } + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sx:0.25,sy1:-0.25"; + } else { + movePath = "ey1:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sx:0.25"; + } else { + movePath = "ex:0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sx:0.25"; + } else { + movePath = "ex:0.25"; + } + } + } + break; + } + } + break; + case 180: + { + switch (eAngle) { + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) + ; + else { + movePath = "sx:-0.25,ey1:-0.25,ex:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) + ; + else { + movePath = "sx:-0.25,ex:0.25"; + } + } else { + if (startPoint.x > endPoint.x) + ; + else { + movePath = "sx:-0.25,ex:0.25"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "sx:-0.25,ry-s:-0.25"; + } else { + movePath = "sx:-0.25,ry-s:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (startPoint.x > endPoint.x) { + movePath = "sx:-0.25,ey:-0.25"; + } else { + movePath = "sx:-0.25,ey:-0.25"; + } + } else { + if (startPoint.x > endPoint.x) + ; + else { + movePath = "sx:-0.25"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x < endPoint.x) { + movePath = "rx-s:-0.25,ry1-e:0.25"; + } else { + movePath = "ey2:0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) + ; + else { + movePath = "sx:-0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "ex2:-0.25,ey2:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ey:0.25"; + } else { + movePath = "sx:-0.25,ey:0.25"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "ey1:-0.25,ex:-0.25"; + } else { + movePath = "sx:-0.25,ey1:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ex:-0.25"; + } else { + movePath = "sx:-0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ex:-0.25"; + } else { + movePath = "sx:-0.25"; + } + } + } + break; + } + } + break; + case -90: + { + switch (eAngle) { + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "sy:-0.25,ey:0.25"; + } else if (startPoint.y > endPoint.y) + ; + else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:-0.25,sx1:-0.25,ey:0.25"; + } else { + movePath = "sy:-0.25,ey:0.25"; + } + } + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sy:-0.25"; + } else { + movePath = "sy:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) + ; + else { + movePath = "ex:0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:-0.25,sx2:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:-0.25,sx2:0.25"; + } else { + movePath = "sy:-0.25,ex:0.25"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sy:-0.25"; + } else { + movePath = "sy:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ex:-0.25"; + } else + ; + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:-0.25,rx-s:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:-0.25,ex:-0.25"; + } else { + movePath = "sy:-0.25"; + } + } + } + break; + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "sy:-0.25,ex:0"; + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "ey:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ey:-0.25,ex:0"; + } else { + movePath = "ey:-0.25,ex:0"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sx1:-0.25,eymid"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:-0.25,ex:0"; + } else { + movePath = "sy:-0.25,ex:0"; + } + } + } + break; + } + } + break; + case 90: + { + switch (eAngle) { + case -90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + if (startPoint.x > endPoint.x) { + movePath = "sy:0.25,ey:-0.25"; + } else { + movePath = "sy:0.25,ey:-0.25"; + } + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:0.25,ey:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:0.25,ey:-0.25"; + } else { + movePath = "sy:0.25,ey:-0.25"; + } + } else + ; + } + break; + case 0: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "sy:0.25"; + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:0.25,ex:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:0.25"; + } else { + movePath = "sy:0.25,ex:0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) + ; + else { + movePath = "ex:0.25"; + } + } + } + break; + case 180: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "sy:0.25"; + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) + ; + else if (startPoint.x > endPoint.x) { + movePath = "sy:0.25,ex:-0.25"; + } else { + movePath = "sy:0.25"; + } + } else { + if (startPoint.x > endPoint.x) { + movePath = "ex:-0.25"; + } + } + } + break; + case 90: + { + if (Math.abs(startPoint.y - endPoint.y) <= 1) { + movePath = "sy:0.25"; + } else if (startPoint.y > endPoint.y) { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "sy:0.25,sx1:-0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "sy:0.25"; + } else { + movePath = "sy:0.25"; + } + } else { + if (Math.abs(startPoint.x - endPoint.x) <= 1) { + movePath = "ex2:0.25,ey:0.25"; + } else if (startPoint.x > endPoint.x) { + movePath = "ey:0.25"; + } else { + movePath = "ey:0.25"; + } + } + } + break; + } + } + break; + } + return movePath; + }; + const getRecommendPath = function(sAngle, eAngle, startPoint, endPoint, startRect, endRect, outRect) { + let recommendPaths = []; + let movePath = getMovePath(sAngle, eAngle, startPoint, endPoint); + if (movePath) { + let mPaths = movePath.split(","); + mPaths.forEach((mPath) => { + let mpa = mPath.split(":"); + let opType = mpa[0]; + let opSize = parseFloat(mpa[1]); + let cPoint = {}; + switch (opType) { + case "sx": + cPoint.x = startPoint.x + opSize * startRect.width; + cPoint.y = startPoint.y; + cPoint.type = "x"; + break; + case "sy": + cPoint.y = startPoint.y + opSize * startRect.height; + cPoint.x = startPoint.x; + cPoint.type = "y"; + break; + case "ex": + cPoint.x = endPoint.x + opSize * endRect.width; + cPoint.y = endPoint.y; + cPoint.type = "x"; + break; + case "sxmid": + cPoint.y = startPoint.y; + if (outRect) { + cPoint.x = outRect.x + outRect.width / 2; + } else { + cPoint.x = (startPoint.x + endPoint.x) / 2; + } + cPoint.type = "x"; + break; + case "symid": + cPoint.x = startPoint.x; + if (outRect) { + cPoint.y = outRect.y + outRect.height / 2; + } else { + cPoint.y = (startPoint.y + endPoint.y) / 2; + } + cPoint.type = "y"; + break; + case "exmid": + cPoint.y = endPoint.y; + if (outRect) { + cPoint.x = outRect.x + outRect.width / 2; + } else { + cPoint.x = (startPoint.x + endPoint.x) / 2; + } + cPoint.type = "x"; + break; + case "eymid": + cPoint.x = endPoint.x; + if (outRect) { + cPoint.y = outRect.y + outRect.height / 2; + } else { + cPoint.y = (endPoint.y + endPoint.y) / 2; + } + cPoint.type = "y"; + break; + case "sx1": + cPoint.y = startPoint.y; + cPoint.x = startRect.x + startRect.width * opSize; + cPoint.type = "x"; + break; + case "sx2": + cPoint.y = startPoint.y; + cPoint.x = startRect.x1 + startRect.width * opSize; + cPoint.type = "x"; + break; + case "ex1": + cPoint.y = endPoint.y; + cPoint.x = endRect.x + endRect.width * opSize; + cPoint.type = "x"; + break; + case "ex2": + cPoint.y = endPoint.y; + cPoint.x = endRect.x1 + endRect.width * opSize; + cPoint.type = "x"; + break; + case "sy1": + cPoint.x = startPoint.x; + cPoint.y = startRect.y + startRect.height * opSize; + cPoint.type = "y"; + break; + case "sy2": + cPoint.x = startPoint.x; + cPoint.y = startRect.y1 + startRect.height * opSize; + cPoint.type = "y"; + break; + case "ey": + cPoint.y = endPoint.y + opSize * endRect.height; + cPoint.x = endPoint.x; + cPoint.type = "y"; + break; + case "ey1": + cPoint.x = endPoint.x; + cPoint.y = endRect.y + endRect.height * opSize; + cPoint.type = "y"; + break; + case "ey2": + cPoint.x = endPoint.x; + cPoint.y = endRect.y1 + endRect.height * opSize; + cPoint.type = "y"; + break; + case "rx-s": + if (outRect) { + cPoint.x = outRect.x + startRect.width * opSize; + cPoint.y = outRect.y; + cPoint.type = "x"; + } else { + cPoint = null; + } + break; + case "rx1-s": + if (outRect) { + cPoint.x = outRect.x1 + startRect.width * opSize; + cPoint.y = outRect.y; + cPoint.type = "x"; + } else { + cPoint = null; + } + break; + case "rx-e": + if (outRect) { + cPoint.x = outRect.x + endRect.width * opSize; + cPoint.y = outRect.y; + cPoint.type = "x"; + } else { + cPoint = null; + } + break; + case "rx1-e": + if (outRect) { + cPoint.x = outRect.x1 + endRect.width * opSize; + cPoint.y = outRect.y; + cPoint.type = "x"; + } else { + cPoint = null; + } + break; + case "ry-s": + if (outRect) { + cPoint.y = outRect.y + startRect.height * opSize; + cPoint.x = outRect.x; + cPoint.type = "y"; + } else { + cPoint = null; + } + break; + case "ry1-s": + if (outRect) { + cPoint.y = outRect.y1 + startRect.height * opSize; + cPoint.x = outRect.x; + cPoint.type = "y"; + } else { + cPoint = null; + } + break; + case "ry-e": + if (outRect) { + cPoint.y = outRect.y + endRect.height * opSize; + cPoint.x = outRect.x; + cPoint.type = "y"; + } else { + cPoint = null; + } + break; + case "ry1-e": + if (outRect) { + cPoint.y = outRect.y1 + endRect.height * opSize; + cPoint.x = outRect.x; + cPoint.type = "y"; + } else { + cPoint = null; + } + break; + } + if (cPoint) { + recommendPaths.push(cPoint); + } + }); + } + return recommendPaths; + }; + var __defProp = Object.defineProperty; + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; + }; + const _DDeiLine = class _DDeiLine2 extends DDeiAbstractShape { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "weight"); + __publicField2(this, "color"); + __publicField2(this, "fill"); + __publicField2(this, "modelType", "DDeiLine"); + __publicField2(this, "baseModelType", "DDeiLine"); + __publicField2(this, "estyle"); + __publicField2(this, "sstyle"); + __publicField2(this, "dash"); + __publicField2(this, "type"); + __publicField2(this, "sp"); + __publicField2(this, "ep"); + __publicField2(this, "opacity"); + __publicField2(this, "round"); + __publicField2(this, "startPoint"); + __publicField2(this, "endPoint"); + __publicField2(this, "spvs"); + __publicField2(this, "clps", {}); + __publicField2(this, "freeze"); + this.color = props.color; + this.weight = props.weight; + this.estyle = props.estyle; + this.sstyle = props.sstyle; + this.dash = props.dash; + this.type = props.type ? props.type : 1; + this.sp = props.sp; + this.ep = props.ep; + this.opacity = props.opacity; + this.round = props.round; + this.spvs = props.spvs ? props.spvs : []; + this.freeze = props.freeze ? props.freeze : 0; + this.fill = props.fill; + this.updateLooseCanvasSync = debounce(this.updateLooseCanvasSync, 30); + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}, initPVS = true) { + var _a3, _b2; + let model = new _DDeiLine2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + if (!model.pModel) { + model.pModel = model.layer; + } + let ddInstance = (_a3 = model.stage) == null ? void 0 : _a3.ddInstance; + tempData[model.id] = model; + if (((_b2 = json == null ? void 0 : json.composes) == null ? void 0 : _b2.length) > 0) { + let composes = []; + json == null ? void 0 : json.composes.forEach((composeJSON) => { + let def = DDeiUtil$1.getControlDefine(composeJSON); + let composeModel = ddInstance.controlModelClasses[def.type].loadFromJSON( + composeJSON, + tempData, + false + ); + composeModel.pModel = model; + composes.push(composeModel); + }); + model.composes = composes; + } + if (initPVS) { + model.initPVS(); + } + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}, initPVS = true) { + var _a3, _b2; + let model = new _DDeiLine2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + let ddInstance = (_a3 = model.stage) == null ? void 0 : _a3.ddInstance; + if (((_b2 = json == null ? void 0 : json.composes) == null ? void 0 : _b2.length) > 0) { + let composes = []; + for (let ci = 0; ci < json.composes.length; ci++) { + let composeJSON = json.composes[ci]; + let def = DDeiUtil$1.getControlDefine(composeJSON); + let composeModel = ddInstance.controlModelClasses[def.type].initByJSON( + composeJSON, + tempData, + false + ); + composeModel.modelCode = composeModel.id; + composeModel.id = model.id + "_comp_" + ci; + composeModel.pModel = model; + composes.push(composeModel); + } + model.composes = composes; + } + if (initPVS) { + model.initPVS(); + } + return model; + } + /** + * 计算线段交叉点,用于绘制错线效果 + * 该方法在所有线段的calPoints方法执行完后执行,修改已计算好的节点 + */ + static calLineCrossSync(layer2) { + return new Promise((resolve, reject) => { + if (!layer2.stage.render.refreshJumpLine) { + let lines = layer2.getModelsByBaseType("DDeiLine"); + _DDeiLine2.calLineCross(layer2); + lines.forEach((line2) => { + line2.updateLooseCanvas(); + }); + layer2.stage.render.refreshJumpLine = true; + } + resolve(); + }); + } + static calLineCross(layer2) { + var _a3, _b2, _c2, _d2; + if (!layer2) { + return; + } + if (!layer2.stage.render.refreshJumpLine) { + let lines = layer2.getModelsByBaseType("DDeiLine"); + lines.forEach((line2) => { + line2.clps = {}; + }); + let wl = 12 * ((_a3 = layer2.stage) == null ? void 0 : _a3.getStageRatio()); + let len = lines.length; + let rectMap = /* @__PURE__ */ new Map(); + let corssLinePoints = []; + for (let i2 = 0; i2 < len - 1; i2++) { + let l1 = lines[i2]; + if (l1.type == 3) { + continue; + } + let jumpLine; + if (layer2.stage.ddInstance.jumpline == 0 || layer2.stage.ddInstance.jumpline) { + jumpLine = layer2.stage.ddInstance.jumpline; + } else { + jumpLine = DDeiModelArrtibuteValue.getAttrValueByState(l1, "jumpline", true); + if (jumpLine == 0 || !jumpLine) { + if ((_b2 = layer2.stage.global) == null ? void 0 : _b2.jumpline) { + jumpLine = layer2.stage.global.jumpline; + } else if (layer2.stage.ddInstance.jumpline) { + jumpLine = layer2.stage.ddInstance.jumpline; + } else { + jumpLine = DDeiModelArrtibuteValue.getAttrValueByState(layer2.stage, "global.jumpline", true); + } + } + } + if (jumpLine == 1) { + if (!rectMap.has(l1.id)) { + rectMap.set(l1.id, DDeiAbstractShape.getOutRectByPV([l1])); + } + let l1Rect = rectMap.get(l1.id); + for (let j2 = i2 + 1; j2 < len; j2++) { + let l2 = lines[j2]; + if (l2.type == 3) { + continue; + } + if (l1 != l2) { + if (!rectMap.has(l2.id)) { + rectMap.set(l2.id, DDeiAbstractShape.getOutRectByPV([l2])); + } + let l2Rect = rectMap.get(l2.id); + if (DDeiUtil$1.isRectCross(l1Rect, l2Rect)) { + for (let pi = 0; pi < l1.pvs.length - 1; pi++) { + let p1 = l1.pvs[pi]; + let p2 = l1.pvs[pi + 1]; + for (let pj = 0; pj < l2.pvs.length - 1; pj++) { + let p3 = l2.pvs[pj]; + let p4 = l2.pvs[pj + 1]; + let crossPoint = DDeiUtil$1.getLineCorssPoint(p1, p2, p3, p4); + if (crossPoint != null) { + let pRotate = DDeiUtil$1.getLineAngle(p1.x, p1.y, p2.x, p2.y); + let pAngle = (pRotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let pVectorUnit = new Vector3(1, 0, 1); + let pRotateMatrix = new Matrix3( + Math.cos(pAngle), + Math.sin(pAngle), + 0, + -Math.sin(pAngle), + Math.cos(pAngle), + 0, + 0, + 0, + 1 + ); + pVectorUnit.applyMatrix3(pRotateMatrix); + let sdist = DDeiUtil$1.getPointDistance(p1.x, p1.y, crossPoint.x, crossPoint.y); + let edist = DDeiUtil$1.getPointDistance(p2.x, p2.y, crossPoint.x, crossPoint.y); + let s1dist = DDeiUtil$1.getPointDistance(p3.x, p3.y, crossPoint.x, crossPoint.y); + let e1dist = DDeiUtil$1.getPointDistance(p4.x, p4.y, crossPoint.x, crossPoint.y); + if (sdist > wl && edist > wl && s1dist > wl && e1dist > wl) { + corssLinePoints.push({ line: l1, index: pi, cp: crossPoint, unit: pVectorUnit, r: pRotate, dist: sdist }); + } + } + } + } + } + } + } + } + corssLinePoints.forEach((clp) => { + var _a22; + if (!clp.line.clps[clp.index]) { + clp.line.clps[clp.index] = []; + } + let dist = clp.dist; + let has = false; + let lineClps = clp.line.clps[clp.index]; + let len2 = lineClps.length; + for (let di = 0; di < len2; di++) { + if (lineClps[di].cp.x == clp.cp.x && lineClps[di].cp.y == clp.cp.y) { + has = true; + break; + } + if (dist <= ((_a22 = lineClps[di]) == null ? void 0 : _a22.dist)) { + lineClps.splice(di, 0, clp); + has = true; + break; + } + } + if (!has) { + clp.line.clps[clp.index].push(clp); + } + }); + lines.forEach((line2) => { + var _a22; + line2.updateLooseCanvas(); + (_a22 = line2.render) == null ? void 0 : _a22.enableRefreshShape(); + }); + (_c2 = layer2.stage) == null ? void 0 : _c2.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + (_d2 = layer2.stage) == null ? void 0 : _d2.ddInstance.bus.executeAll(); + layer2.stage.render.refreshJumpLine = true; + } + } + } + // ============================ 方法 =============================== + /** + * 初始化向量,默认开始在0,0的位置 + */ + initPVS() { + var _a3, _b2, _c2, _d2, _e2; + if (!this.cpv && !(((_a3 = this.pvs) == null ? void 0 : _a3.length) > 0)) { + this.cpv = new Vector3(0, 0, 1); + } else { + this.cpv = this.pvs[0]; + } + if (!(((_b2 = this.ovs) == null ? void 0 : _b2.length) > 0)) { + let defineOvs = (_d2 = (_c2 = DDeiUtil$1.getControlDefine(this)) == null ? void 0 : _c2.define) == null ? void 0 : _d2.ovs; + if ((defineOvs == null ? void 0 : defineOvs.length) > 0) { + let stageRatio2 = this.getStageRatio(); + let ovs = []; + defineOvs.forEach((ovd) => { + let ov = new Vector3(ovd.x * stageRatio2, ovd.y * stageRatio2, ovd.z || ovd.z == 0 ? ovd.z : 1); + let ovi = new Vector3(ovd.ix * stageRatio2, ovd.iy * stageRatio2, ovd.iz || ovd.iz == 0 ? ovd.iz : 1); + ov.ovi = ovi; + ovs.push(ov); + }); + this.ovs = ovs; + } + } + this.initHPV(); + this.calRotate(); + this.startPoint = this.pvs[0]; + this.endPoint = this.pvs[this.pvs.length - 1]; + this.calLoosePVS(); + this.refreshLinkModels(); + (_e2 = this.composes) == null ? void 0 : _e2.forEach((compose) => { + compose.initPVS(); + }); + } + /** + * 交换开始和结束节点 + */ + exchangeStartAndEnd() { + var _a3; + let startPoint = this.startPoint; + let endPoint = this.endPoint; + let distLinks = (_a3 = this.stage) == null ? void 0 : _a3.getDistModelLinks(this.id); + let sms = []; + distLinks == null ? void 0 : distLinks.forEach((dl) => { + if (dl.dmpath == "startPoint") { + dl.dmpath = "endPoint"; + } else if (dl.dmpath == "endPoint") { + dl.dmpath = "startPoint"; + } + if (dl.sm) { + sms.push(dl.sm); + } + }); + this.startPoint = endPoint; + this.endPoint = startPoint; + this.cpv = this.startPoint; + this.pvs[0] = this.startPoint; + this.pvs[this.pvs.length - 1] = this.endPoint; + sms.forEach((sm) => { + sm.updateLinkModels(); + }); + } + /** + * 重新计算线路径并更新图形 + */ + refreshLinePoints() { + var _a3; + this.calPoints(); + this.calLoosePVS(); + this.refreshLinkModels(); + (_a3 = this.composes) == null ? void 0 : _a3.forEach((compose) => { + compose.initPVS(); + }); + } + /** + * 设置当前最新的hpv + */ + initHPV() { + if (!this.hpv || this.hpv.length < 2) { + this.hpv[0] = new Vector3(this.cpv.x, this.cpv.y, 1); + this.hpv[1] = new Vector3(this.cpv.x + 100, this.cpv.y, 1); + } + } + /** + * 根据开始节点和结束节点的关系,自动计算中间节点路径的坐标 + */ + calPoints() { + var _a3; + switch (this.type) { + case 1: + { + this.pvs = [this.startPoint, this.endPoint]; + } + break; + case 2: + { + this.calLineType3(); + } + break; + case 3: + { + if (this.freeze != 1) { + this.calLineType3(); + if (this.pvs.length < 4) { + if (this.pvs.length == 2) { + let x1 = this.pvs[0].x + (this.pvs[1].x - this.pvs[0].x) * 0.33; + let y1 = this.pvs[0].y + (this.pvs[1].y - this.pvs[0].y) * 0.33; + let x2 = this.pvs[0].x + (this.pvs[1].x - this.pvs[0].x) * 0.66; + let y2 = this.pvs[0].y + (this.pvs[1].y - this.pvs[0].y) * 0.66; + this.pvs = [this.pvs[0], new Vector3(x1, y1, 1), new Vector3(x2, y2, 1), this.pvs[1]]; + } else if (this.pvs.length == 3) { + let x1 = this.pvs[0].x + (this.pvs[1].x - this.pvs[0].x) * 0.66; + let y1 = this.pvs[0].y + (this.pvs[1].y - this.pvs[0].y) * 0.66; + let x2 = this.pvs[1].x + (this.pvs[2].x - this.pvs[1].x) * 0.33; + let y2 = this.pvs[1].y + (this.pvs[2].y - this.pvs[1].y) * 0.33; + this.pvs = [this.pvs[0], new Vector3(x1, y1, 1), new Vector3(x2, y2, 1), this.pvs[2]]; + } + } else if (this.pvs.length > 4) { + let appendPointSize = 3 - (this.pvs.length - 4) % 3; + for (let i2 = 0; i2 < appendPointSize; i2++) { + let maxS = -1; + let maxlength = 0; + for (let j2 = 0; j2 < this.pvs.length - 1; j2++) { + let p1 = this.pvs[j2]; + let p2 = this.pvs[j2 + 1]; + let l = DDeiUtil$1.getPointDistance(p1.x, p1.y, p2.x, p2.y); + if (!maxlength) { + maxlength = l; + maxS = j2; + } else if (l > maxlength) { + maxlength = l; + maxS = j2; + } + } + let s = maxS; + let e = maxS + 1; + let x1 = this.pvs[s].x + (this.pvs[e].x - this.pvs[s].x) * 0.5; + let y1 = this.pvs[s].y + (this.pvs[e].y - this.pvs[s].y) * 0.5; + this.pvs.splice(s + 1, 0, new Vector3(x1, y1, 1)); + } + } + } + } + break; + } + (_a3 = this.render) == null ? void 0 : _a3.enableRefreshShape(); + _DDeiLine2.calLineCross(this.layer); + } + /** + * 计算折线连线点 + */ + calLineType3() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + this.pvs; + let id = this.id; + if (id.indexOf("_shadow") != -1) { + id = id.substring(0, id.lastIndexOf("_shadow")); + } + let lineLinks = (_a3 = this.stage) == null ? void 0 : _a3.getDistModelLinks(id); + let startLink = null; + let endLink = null; + lineLinks == null ? void 0 : lineLinks.forEach((lk) => { + if (lk.dmpath == "startPoint") { + startLink = lk; + } else if (lk.dmpath == "endPoint") { + endLink = lk; + } + }); + let sAngle = null; + let eAngle = null; + let startModel = (startLink == null ? void 0 : startLink.sm) ? startLink == null ? void 0 : startLink.sm : (_b2 = this.stage.tempStartOPpoint) == null ? void 0 : _b2.model; + let endModel = (endLink == null ? void 0 : endLink.sm) ? endLink == null ? void 0 : endLink.sm : (_c2 = this.stage.tempCursorOPpoint) == null ? void 0 : _c2.model; + let startRect, endRect; + if (((_d2 = startModel == null ? void 0 : startModel.operatePVS) == null ? void 0 : _d2.length) > 0) { + startRect = DDeiAbstractShape.pvsToOutRect(startModel.operatePVS); + } + if (((_e2 = endModel == null ? void 0 : endModel.operatePVS) == null ? void 0 : _e2.length) > 0) { + endRect = DDeiAbstractShape.pvsToOutRect(endModel.operatePVS); + } + let startPoint = this.startPoint; + let endPoint = this.endPoint; + if (this == this.stage.render.currentOperateShape) { + let passIndex = (_f = this.stage.render.dragObj) == null ? void 0 : _f.passIndex; + let opvsIndex = (_g = this.stage.render.dragObj) == null ? void 0 : _g.opvsIndex; + if (passIndex == 1) { + if (opvsIndex == 0) { + startPoint = this.stage.tempCursorOPpoint ? this.stage.tempCursorOPpoint : this.startPoint; + this.startPoint.x = startPoint.x; + this.startPoint.y = startPoint.y; + } else if (opvsIndex == ((_i = (_h = this.stage.render.dragObj) == null ? void 0 : _h.opvs) == null ? void 0 : _i.length) - 1) { + endPoint = this.stage.tempCursorOPpoint ? this.stage.tempCursorOPpoint : this.endPoint; + this.endPoint.x = endPoint.x; + this.endPoint.y = endPoint.y; + } + } + } + if (startModel == null ? void 0 : startModel.getPointAngle) { + sAngle = startModel.getPointAngle(startPoint); + sAngle = this.calSpecilPointAngle(sAngle); + } + if (endModel == null ? void 0 : endModel.getPointAngle) { + eAngle = endModel.getPointAngle(endPoint); + eAngle = this.calSpecilPointAngle(eAngle); + } + let outRect = null; + if (startRect && endRect) { + outRect = { + x: Math.min(startRect.x, endRect.x), + x1: Math.max(startRect.x1, endRect.x1), + y: Math.min(startRect.y, endRect.y), + y1: Math.max(startRect.y1, endRect.y1) + }; + outRect.width = outRect.x1 - outRect.x; + outRect.height = outRect.y1 - outRect.y; + } + let recommendPaths = getRecommendPath(sAngle, eAngle, startPoint, endPoint, startRect, endRect, outRect); + let allModels = this.layer.getSubModelsByFilter("LINE_OBI_FILTER", null, 10, { line: this }); + let obis = []; + allModels.forEach((model) => { + var _a22; + if (model.baseModelType != "DDeiLine" && ((_a22 = model.operatePVS) == null ? void 0 : _a22.length) > 0 && !model.depModel) { + let obj = { points: model.operatePVS }; + if (model.id == (startModel == null ? void 0 : startModel.id) || model.id == (endModel == null ? void 0 : endModel.id)) { + obj.isStartOrEnd = true; + } + obis.push(obj); + } + }); + let marr = [startModel, endModel]; + marr.forEach((model) => { + if (model) { + let modelConts = model.getParents(); + modelConts.forEach((contModel) => { + let rmIdx = allModels.indexOf(contModel); + if (rmIdx != -1) { + allModels.splice(rmIdx, 1); + } + }); + } + }); + let forcePaths = []; + (_j = this.spvs) == null ? void 0 : _j.forEach((pv) => { + if (pv) { + let newPV = { x: 0, y: 0 }; + if (pv.x) { + newPV.x = pv.x + this.startPoint.x; + } + if (pv.y) { + newPV.y = pv.y + this.startPoint.y; + } + forcePaths.push(newPV); + } + }); + let linePathData = calAutoLinePath( + { + point: { + x: startPoint.x, + y: startPoint.y + }, + rect: startRect, + angle: sAngle + }, + { + point: { + x: endPoint.x, + y: endPoint.y + }, + rect: endRect, + angle: eAngle + }, + obis, + { recommendPaths, forcePaths, recomWeight: 100, rectMidWeight: 50 } + ); + this.pvs = [this.startPoint]; + if (linePathData) { + if ((_k = this.stage) == null ? void 0 : _k.render) { + this.stage.render.linePathData = linePathData; + } + if (((_l = linePathData.pathPoints) == null ? void 0 : _l.length) > 2) { + for (let i2 = 1; i2 < linePathData.pathPoints.length - 1; i2++) { + let mp = linePathData.pathPoints[i2]; + this.pvs.push(new Vector3(mp.x, mp.y, 1)); + } + } + } + this.pvs.push(this.endPoint); + } + /** + * 计算特殊点位的角度 + */ + calSpecilPointAngle(eAngle) { + if (eAngle > 1e3) { + switch (eAngle) { + case 1001: + if (Math.abs(this.startPoint.x - this.endPoint.x) > Math.abs(this.startPoint.y - this.endPoint.y)) { + eAngle = 180; + } else { + eAngle = -90; + } + break; + case 1002: + if (Math.abs(this.startPoint.x - this.endPoint.x) > Math.abs(this.startPoint.y - this.endPoint.y)) { + eAngle = 0; + } else { + eAngle = -90; + } + break; + case 1003: + if (Math.abs(this.startPoint.x - this.endPoint.x) > Math.abs(this.startPoint.y - this.endPoint.y)) { + eAngle = 0; + } else { + eAngle = 90; + } + break; + case 1004: + if (Math.abs(this.startPoint.x - this.endPoint.x) > Math.abs(this.startPoint.y - this.endPoint.y)) { + eAngle = 180; + } else { + eAngle = 90; + } + break; + } + } + return eAngle; + } + /** + * 设置直线的坐标,会根据约束关系来调整位置 + */ + setLineType1PointPosition(pointType, ex, ey) { + var _a3, _b2, _c2, _d2; + let sx = this.pvs[0].x; + let sy = this.pvs[0].y; + let endX = this.pvs[this.pvs.length - 1].x; + let endY = this.pvs[this.pvs.length - 1].y; + if (pointType == 0) { + sx = ex; + sy = ey; + } else if (pointType == 1) { + endX = ex; + endY = ey; + } + let constraint = (_b2 = (_a3 = DDeiUtil$1.getControlDefine(this)) == null ? void 0 : _a3.define) == null ? void 0 : _b2.constraint; + if (((_d2 = (_c2 = constraint == null ? void 0 : constraint.type[1]) == null ? void 0 : _c2.angles) == null ? void 0 : _d2.length) > 0) { + let lineAngle = DDeiUtil$1.getLineAngle(sx, sy, endX, endY); + let angle2 = this.rotate ? this.rotate : 0; + let inArea = false; + let minAngle = lineAngle; + let minAngleABS = Infinity; + for (let i2 = 0; i2 < constraint.type[1].angles.length; i2++) { + let angleArea = constraint.type[1].angles[i2]; + if (angleArea[0] + angle2 <= lineAngle && angleArea[1] + angle2 >= lineAngle) { + inArea = true; + break; + } + if (Math.abs(angleArea[0] + angle2 - lineAngle) < minAngleABS) { + minAngleABS = Math.abs(angleArea[0] + angle2 - lineAngle); + minAngle = angleArea[0] + angle2; + } + if (Math.abs(angleArea[1] + angle2 - lineAngle) < minAngleABS) { + minAngleABS = Math.abs(angleArea[1] + angle2 - lineAngle); + minAngle = angleArea[1] + angle2; + } + } + if (pointType == 0) { + let sdx = this.pvs[this.pvs.length - 1].x - this.pvs[0].x; + let sdy = this.pvs[this.pvs.length - 1].y - this.pvs[0].y; + let zeroEndPoints = [new Vector3(sdx, sdy, 1)]; + let endPoint = DDeiUtil$1.zeroToPoints(zeroEndPoints, new Vector3(sx, sy), minAngle - lineAngle)[0]; + endX = endPoint.x; + endY = endPoint.y; + } else if (!inArea && pointType == 1) { + let zeroEndPoints = DDeiUtil$1.pointsToZero([new Vector3(endX, endY, 1)], new Vector3(sx, sy), 0); + let endPoint = DDeiUtil$1.zeroToPoints(zeroEndPoints, new Vector3(sx, sy), minAngle - lineAngle)[0]; + endX = endPoint.x; + endY = endPoint.y; + } + } + this.pvs[0].x = sx; + this.pvs[0].y = sy; + this.pvs[this.pvs.length - 1].x = endX; + this.pvs[this.pvs.length - 1].y = endY; + } + /** + * 基于当前向量计算宽松判定向量 + */ + calLoosePVS() { + this.loosePVS = this.pvs; + this.updateLooseCanvasSync(); + } + updateLooseCanvasSync() { + return new Promise((resolve, reject) => { + this.updateLooseCanvas(); + resolve(); + }); + } + updateLooseCanvas() { + var _a3; + if (!this.isShadowControl && this.render) { + if (!this.looseCanvas) { + this.looseCanvas = document.createElement("canvas"); + this.looseCanvas.setAttribute("style", "-moz-transform-origin:left top;position:absolute;left:0px;top:0px;"); + } + let canvas = this.looseCanvas; + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let pvs2 = this.pvs; + let outRect = DDeiAbstractShape.pvsToOutRect(pvs2, stageRatio2); + let weight = 10; + if (this.weight) { + weight = this.weight + 5; + } + outRect.x -= weight; + outRect.x1 += weight; + outRect.y -= weight; + outRect.y1 += weight; + outRect.width += 2 * weight; + outRect.height += 2 * weight; + this.loosePVS = this.pvs; + canvas.setAttribute("width", outRect.width); + canvas.setAttribute("height", outRect.height); + let ctx = canvas.getContext("2d", { willReadFrequently: true }); + ctx.translate(-outRect.x, -outRect.y); + this.render.drawLine({ color: "red", weight, dash: [], rat1: 1, fill: { color: "red" } }, ctx); + } + } + /** + * 变换向量 + */ + transVectors(matrix2, params) { + var _a3, _b2, _c2; + this.pvs.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + for (let i2 in this.exPvs) { + let pv = this.exPvs[i2]; + pv.applyMatrix3(matrix2); + } + (_a3 = this.ovs) == null ? void 0 : _a3.forEach((pv) => { + pv.applyMatrix3(matrix2); + if (pv.ovi) { + pv.ovi.applyMatrix3(matrix2); + } + }); + this.hpv[0].applyMatrix3(matrix2); + this.hpv[1].applyMatrix3(matrix2); + this.calRotate(); + this.calLoosePVS(); + (_b2 = this.composes) == null ? void 0 : _b2.forEach((compose) => { + compose.transVectors(matrix2, params); + }); + (_c2 = this.render) == null ? void 0 : _c2.enableRefreshShape(); + } + /** + * 获取中心点操作点 + */ + getCenterOpPoints() { + return []; + } + /** + * 判断图形是否在一个区域内,采用宽松的判定模式,允许传入一个大小值 + * @param x + * @param y + * @param loose 宽松判定,默认false + * @returns 是否在区域内 + */ + isInAreaLoose(x2 = void 0, y2 = void 0, loose = false) { + var _a3; + if (this.looseCanvas) { + let isArea = false; + let projPoint = this.getProjPoint( + { x: x2, y: y2 }, + { in: -10, out: 10 }, + 1, + 2 + ); + if (projPoint) { + isArea = true; + } + if (isArea) { + let ctx = this.looseCanvas.getContext("2d"); + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let outRect = DDeiAbstractShape.pvsToOutRect(this.pvs, stageRatio2); + let weight = 10; + if (this.weight) { + weight = this.weight + 5; + } + outRect.x -= weight; + outRect.y -= weight; + let cx = x2 * stageRatio2 - outRect.x; + let cy = y2 * stageRatio2 - outRect.y; + let cdata = ctx.getImageData(cx, cy, 1, 1).data; + if (cdata && cdata[0] == 255 && cdata[1] != 255 && cdata[2] != 255) { + return true; + } + } + } + return false; + } + /** + * 移除自身的方法 + */ + destroyed() { + var _a3; + let layer2 = this.layer; + if (!this.isShadowControl) { + let distLinks = (_a3 = this.stage) == null ? void 0 : _a3.getDistModelLinks(this.id); + distLinks == null ? void 0 : distLinks.forEach((dl) => { + var _a22, _b2; + if ((dl == null ? void 0 : dl.sm) && (dl == null ? void 0 : dl.smpath)) { + DDeiUtil$1.deletePropertyByPath(dl.sm, dl.smpath); + dl.sm.transVectors(new Matrix3()); + dl.sm.updateLinkModels(); + (_a22 = dl.sm.render) == null ? void 0 : _a22.enableRefreshShape(); + } + (_b2 = this.stage) == null ? void 0 : _b2.removeLink(dl); + }); + } + super.destroyed(); + _DDeiLine2.calLineCross(layer2); + } + syncVectors(source, clonePV = false) { + var _a3, _b2; + super.syncVectors(source, clonePV); + if (source.freeze != null && source.freeze != void 0) { + this.freeze = source.freeze; + } + this.startPoint = this.pvs[0]; + this.endPoint = this.pvs[this.pvs.length - 1]; + let distLinks = (_a3 = this.stage) == null ? void 0 : _a3.getDistModelLinks(this.id); + distLinks == null ? void 0 : distLinks.forEach((dl) => { + let pv = null; + if (dl.dmpath == "startPoint") { + pv = this.startPoint; + } else { + pv = this.endPoint; + } + if ((dl == null ? void 0 : dl.sm) && (dl == null ? void 0 : dl.smpath)) { + DDeiUtil$1.setAttrValueByPath(dl.sm, dl.smpath + ".x", pv.x); + DDeiUtil$1.setAttrValueByPath(dl.sm, dl.smpath + ".y", pv.y); + } + }); + for (let i2 = 0; i2 < ((_b2 = source.composes) == null ? void 0 : _b2.length); i2++) { + let scop = source.composes[i2]; + let tcop = this.composes[i2]; + tcop.syncVectors(scop, clonePV); + } + } + /** + * 初始化渲染器 + */ + initRender() { + var _a3; + DDeiConfig$1.bindRender(this); + this.render.init(); + (_a3 = this.composes) == null ? void 0 : _a3.forEach((compose) => { + compose.initRender(); + }); + delete this.__destroyed; + } + toJSON() { + var _a3, _b2, _c2; + let json = super.toJSON(); + let ruleDisplay; + let ruleInit; + if (((_a3 = this.stage.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.stage.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.stage.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = this.stage.ruler.display; + } else if (this.stage.ddInstance.ruler != null && this.stage.ddInstance.ruler != void 0) { + if (typeof this.stage.ddInstance.ruler == "boolean") { + ruleDisplay = this.stage.ddInstance.ruler ? 1 : 0; + } else { + ruleInit = this.stage.ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.display", true); + } + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.unit", true, ruleInit); + if (ruleDisplay) { + if (this.hpv) { + json.hpv = cloneDeep(this.hpv); + for (let i2 = 0; i2 < this.hpv.length; i2++) { + let hpv = DDeiUtil$1.toRulerCoord({ x: this.hpv[i2].x, y: this.hpv[i2].y }, this.stage, unit); + json.hpv[i2].x = hpv.x; + json.hpv[i2].y = hpv.y; + } + } + if (this.pvs) { + json.pvs = cloneDeep(this.pvs); + for (let i2 = 0; i2 < this.pvs.length; i2++) { + let pv = DDeiUtil$1.toRulerCoord({ x: this.pvs[i2].x, y: this.pvs[i2].y }, this.stage, unit); + json.pvs[i2].x = pv.x; + json.pvs[i2].y = pv.y; + } + } + if (this.exPvs) { + json.exPvs = cloneDeep(this.exPvs); + for (let i2 in this.exPvs) { + let pv = DDeiUtil$1.toRulerCoord({ x: this.exPvs[i2].x, y: this.exPvs[i2].y }, this.stage, unit); + json.exPvs[i2].x = pv.x; + json.exPvs[i2].y = pv.y; + } + } + } + return json; + } + }; + _DDeiLine.calLineCross = debounce(_DDeiLine.calLineCross, 50); + __publicField(_DDeiLine, "ClsName", "DDeiLine"); + let DDeiLine = _DDeiLine; + const __vite_glob_0_3$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLine, + default: DDeiLine + }, Symbol.toStringTag, { value: "Module" })); + class DDeiLayoutManager { + constructor(container2 = null) { + __publicField2(this, "container"); + this.container = container2; + } + /** + * 计算时拖入待确认时的显示图形的向量 + */ + calDragInPVS(x2, y2, models) { + if (this.container.layer) { + let pvs2 = this.container.pvs; + this.container.layer.dragInPoints = pvs2; + } + } + /** + * 计算时拖出确认时的显示图形的向量 + */ + calDragOutPVS(x2, y2, models) { + if (this.container.layer) { + let pvs2 = this.container.pvs; + this.container.layer.dragOutPoints = pvs2; + } + } + /** + * 获取实际的内部容器控件 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainer() { + return this.container; + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainerByPos(x2, y2) { + return this.container; + } + /** + * 获取切分区域的点,超出区域的范围不会显示内容 + */ + getAreasPVS(rotated = true) { + return [this.container.pvs]; + } + } + class DDeiLayoutManagerCompose extends DDeiLayoutManager { + // ============================ 方法 =============================== + /** + * 修改模型的位置和大小 + */ + changeSubModelBounds() { + } + transVectors(matrix2) { + this.container.transVectors(matrix2); + } + /** + * 根据子模型大小,修改自身大小 + */ + changeParentsBounds() { + this.container.updateBoundsByModels(); + if (this.container.pModel) { + this.container.pModel.changeParentsBounds(); + } + } + canAppend(x2, y2, models) { + return true; + } + append(x2, y2, models) { + models.forEach((item) => { + let oldContainer = item.pModel; + let newContainer = this.container; + if (oldContainer) { + item.destroyRender(); + oldContainer.removeModel(item, false, false); + } + newContainer.addModel(item, false); + item.initRender(); + }); + return true; + } + /** + * 修改布局信息 + */ + updateLayout(x2, y2, models, isAlt = false) { + } + canConvertLayout(oldLayout) { + return false; + } + convertLayout(oldLayout) { + } + canChangePosition(x2, y2, models, isAlt = false) { + return true; + } + canChangeSize(x2, y2, models) { + return true; + } + canChangeRotate() { + return true; + } + // ============================ 静态方法 ============================ + /** + * 返回当前实例 + */ + static newInstance(model) { + return new DDeiLayoutManagerCompose(); + } + } + const __vite_glob_0_0$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayoutManagerCompose, + default: DDeiLayoutManagerCompose + }, Symbol.toStringTag, { value: "Module" })); + class DDeiLayoutManagerFree extends DDeiLayoutManager { + // ============================ 方法 =============================== + /** + * 根据自身大小修改子模型大小 + */ + changeSubModelBounds() { + } + transVectors(matrix2) { + this.container.transSelfVectors(matrix2); + } + /** + * 根据子模型大小,修改自身大小 + */ + changeParentsBounds() { + } + canAppend(x2, y2, models) { + var _a3; + let parentControls = this.container.getParents(); + for (let i2 = 0; i2 < models.length; i2++) { + let model = models[i2]; + if (model) { + if (model.id.indexOf("_shadow") != -1) { + let id = model.id.substring(model.id, model.id.lastIndexOf("_shadow")); + model = (_a3 = this.container.stage) == null ? void 0 : _a3.getModelById(id); + } + if (model == this.container) { + return false; + } else if (parentControls.indexOf(model) != -1) { + return false; + } + } + } + return true; + } + append(x2, y2, models) { + models.forEach((item) => { + if (item) { + let oldContainer = item.pModel; + let newContainer = this.container; + if (oldContainer) { + item.destroyRender(); + oldContainer.removeModel(item, false, false); + } + newContainer.addModel(item, false); + item.initRender(); + } + }); + return true; + } + /** + * 修改布局信息 + */ + updateLayout(x2, y2, models, isAlt = false) { + } + canConvertLayout(oldLayout) { + return true; + } + convertLayout(oldLayout) { + } + canChangePosition(x2, y2, models, isAlt = false) { + return true; + } + canChangeSize(x2, y2, models) { + return true; + } + canChangeRotate() { + return true; + } + // ============================ 静态方法 ============================ + /** + * 返回当前实例 + */ + static newInstance(model) { + return new DDeiLayoutManagerFree(); + } + } + const __vite_glob_0_1$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayoutManagerFree, + default: DDeiLayoutManagerFree + }, Symbol.toStringTag, { value: "Module" })); + class DDeiLayoutManagerFull extends DDeiLayoutManager { + // ============================ 方法 =============================== + /** + * 修改模型的位置和大小 + */ + changeSubModelBounds() { + if (this.container.models.size == 1) { + let model = Array.from(this.container.models.values())[0]; + let m12 = new Matrix3(); + let moveZeroMatrix = new Matrix3( + 1, + 0, + -model.cpv.x, + 0, + 1, + -model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveZeroMatrix); + if (model.rotate) { + let angle2 = (model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let scaleMatrix2 = new Matrix3( + this.container.width / model.width, + 0, + 0, + 0, + this.container.height / model.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + if (model.rotate) { + let angle2 = -(model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let moveContainerMatrix = new Matrix3( + 1, + 0, + this.container.cpv.x, + 0, + 1, + this.container.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveContainerMatrix); + model.transVectors(m12); + } + } + transVectors(matrix2) { + this.container.transVectors(matrix2); + } + /** + * 根据子模型大小,修改自身大小 + */ + changeParentsBounds() { + } + canConvertLayout(oldLayout) { + if (this.container.models.size <= 1) { + return true; + } else { + return false; + } + } + convertLayout(oldLayout) { + } + updateLayout(x2, y2, models, isAlt = false) { + this.changeSubModelBounds(); + } + canAppend(x2, y2, models) { + var _a3; + if ((models == null ? void 0 : models.length) == 1) { + let parentControls = this.container.getParents(); + let model = models[0]; + if (model.id.indexOf("_shadow") != -1) { + let id = model.id.substring(model.id, model.id.lastIndexOf("_shadow")); + model = (_a3 = this.container.stage) == null ? void 0 : _a3.getModelById(id); + } + if (model == this.container) { + return false; + } else if (parentControls.indexOf(model) != -1) { + return false; + } + return true; + } + return false; + } + append(x2, y2, models) { + var _a3; + let item = models[0]; + let oldModel = null; + if (this.container.models.size == 1) { + oldModel = Array.from(this.container.models.values())[0]; + } + let oldContainer = item.pModel; + let newContainer = this.container; + oldContainer.removeModel(item, false); + newContainer.addModel(item, false); + item.initRender(); + if (oldModel) { + newContainer.removeModel(oldModel, false); + oldContainer.addModel(oldModel, false); + if (item.originCPV && item.originPVS) { + oldModel.cpv = item.originCPV; + oldModel.pvs = item.originPVS; + let rotate2 = oldModel.rotate; + oldModel.initPVS(); + oldModel.setRotate(rotate2); + item.originCPV = null; + item.originPVS = null; + } else { + oldModel.syncVectors(item, true); + } + oldModel.initRender(); + let oldAbsPos2 = oldContainer.getAbsPosition(); + (_a3 = oldContainer.layoutManager) == null ? void 0 : _a3.updateLayout(oldAbsPos2.x, oldAbsPos2.y, [oldModel]); + } + return true; + } + canChangePosition(x2, y2, models, isAlt = false) { + if (isAlt) { + return true; + } + return false; + } + canChangeSize(x2, y2, models) { + return false; + } + canChangeRotate() { + return true; + } + // ============================ 静态方法 ============================ + /** + * 返回当前实例 + */ + static newInstance(model) { + return new DDeiLayoutManagerFull(model); + } + } + const __vite_glob_0_2$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayoutManagerFull, + default: DDeiLayoutManagerFull + }, Symbol.toStringTag, { value: "Module" })); + class DDeiLayoutManagerNine extends DDeiLayoutManager { + // ============================ 方法 =============================== + /** + * 是否可以从其他布局转换到当前布局的方法 + * @return true可以转换,false不可以转换 + */ + canConvertLayout(oldLayout) { + if (oldLayout == "free" || !oldLayout) { + if (this.container.models.size <= 9) { + return true; + } else { + return false; + } + } else if (oldLayout == "full") { + return true; + } else + ; + return false; + } + /** + * 从其他布局转换到当前布局的方法 + */ + convertLayout(oldLayout) { + var _a3; + if (!this.container.layoutData) { + this.container.layoutData = {}; + } + this.container.layoutData.nine = {}; + if (oldLayout == "free" || !oldLayout) { + let models = DDeiUtil$1.getSortedModels(this.container.models); + let idx = 0; + for (let row = 0; row < 3; row++) { + for (let col = 0; col < 3; col++) { + if (models.length > idx) { + this.container.layoutData.nine[models[idx].id] = { "row": row, "col": col }; + idx++; + } + } + } + } else if (oldLayout == "full") { + if (((_a3 = this.container.models) == null ? void 0 : _a3.size) > 0) { + let model = Array.from(this.container.models.values())[0]; + this.container.layoutData.nine[model.id] = { "row": 1, "col": 1 }; + } + } else + ; + } + /** + * 根据layoutData修改模型的位置和大小 + */ + changeSubModelBounds() { + let layoutData = this.container.layoutData.nine; + let unitWidth = this.container.width / 3; + let unitHeight = this.container.height / 3; + let areasPVS = this.getAreasPVS(); + for (let key in layoutData) { + let model = this.container.models.get(key); + let data = layoutData[key]; + if (model) { + let m12 = new Matrix3(); + let moveZeroMatrix = new Matrix3( + 1, + 0, + -model.cpv.x, + 0, + 1, + -model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveZeroMatrix); + if (model.rotate) { + let angle2 = (model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let scaleMatrix2 = new Matrix3( + unitWidth / model.width, + 0, + 0, + 0, + unitHeight / model.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + if (model.rotate) { + let angle2 = -(model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let areaPV = areasPVS[data.row * 3 + data.col]; + let areaPVC = { x: (areaPV[0].x + areaPV[2].x) / 2, y: (areaPV[0].y + areaPV[2].y) / 2 }; + let moveContainerMatrix = new Matrix3( + 1, + 0, + areaPVC.x, + 0, + 1, + areaPVC.y, + 0, + 0, + 1 + ); + m12.premultiply(moveContainerMatrix); + model.transVectors(m12); + if (model.changeChildrenBounds) { + model.changeChildrenBounds(); + } + } + } + } + /** + * 根据子模型大小,修改自身大小 + */ + changeParentsBounds() { + } + transVectors(matrix2) { + this.container.transVectors(matrix2); + } + canAppend(x2, y2, models) { + var _a3; + if ((models == null ? void 0 : models.length) == 1 || (models == null ? void 0 : models.length) <= 9 - this.container.models.size) { + let parentControls = this.container.getParents(); + for (let i2 = 0; i2 < models.length; i2++) { + let model = models[i2]; + if (model.id.indexOf("_shadow") != -1) { + let id = model.id.substring(model.id, model.id.lastIndexOf("_shadow")); + model = (_a3 = this.container.stage) == null ? void 0 : _a3.getModelById(id); + } + if (model == this.container) { + return false; + } else if (parentControls.indexOf(model) != -1) { + return false; + } + } + return true; + } + return false; + } + append(x2, y2, models) { + var _a3, _b2, _c2, _d2; + let layoutData = null; + if ((_b2 = (_a3 = this == null ? void 0 : this.container) == null ? void 0 : _a3.layoutData) == null ? void 0 : _b2.nine) { + layoutData = this.container.layoutData.nine; + } + let layoutIndex = this.getLayoutIndex(x2, y2); + let indexModel = null; + let emptyAreas = [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ]; + for (let key in layoutData) { + let data = layoutData[key]; + if (data.row == layoutIndex.row && data.col == layoutIndex.col) { + indexModel = this.container.models.get(key); + } + emptyAreas[data.row][data.col] = 1; + } + let newContainer = this.container; + for (let i2 = 0; i2 < models.length; i2++) { + let item = models[i2]; + let oldContainer = item.pModel; + if (oldContainer) { + oldContainer.removeModel(item, false); + } + newContainer.addModel(item, false); + item.initRender(); + if (models.length == 1 && layoutIndex.row != -1 && layoutIndex.col != -1) { + layoutData[item.id] = { row: layoutIndex.row, col: layoutIndex.col }; + if (indexModel) { + newContainer.removeModel(indexModel, false); + if (item.dragOriginX || item.dragOriginX == 0) { + indexModel.setBounds(item.dragOriginX, item.dragOriginY, item.dragOriginWidth, item.dragOriginHeight); + item.dragOriginX = null; + item.dragOriginY = null; + item.dragOriginWidth = null; + item.dragOriginHeight = null; + } + if (oldContainer.layout == "nine") { + let oldLayoutData = (_c2 = oldContainer == null ? void 0 : oldContainer.layoutData) == null ? void 0 : _c2.nine; + let oldLayoutInfo = oldLayoutData[item.id]; + if (oldLayoutInfo) { + delete oldLayoutData[item.id]; + oldLayoutData[indexModel.id] = oldLayoutInfo; + } + } + oldContainer.addModel(indexModel, false); + indexModel.initRender(); + (_d2 = oldContainer.layoutManager) == null ? void 0 : _d2.updateLayout(oldAbsPos.x, oldAbsPos.y, [indexModel]); + } + } else { + for (let sr = 0; sr < 3; sr++) { + let has = false; + for (let sc = 0; sc < 3; sc++) { + if (emptyAreas[sr][sc] == 0) { + layoutData[item.id] = { row: sr, col: sc }; + emptyAreas[sr][sc] = 1; + has = true; + break; + } + } + if (has) { + break; + } + } + } + } + return true; + } + /** + * 修改布局信息 + */ + updateLayout(x2, y2, models) { + var _a3, _b2; + if (((_b2 = (_a3 = this == null ? void 0 : this.container) == null ? void 0 : _a3.layoutData) == null ? void 0 : _b2.nine) && (models == null ? void 0 : models.length) > 0) { + let layoutData = this.container.layoutData.nine; + let layoutIndex = this.getLayoutIndex(x2, y2); + if (layoutIndex.row != -1 && layoutIndex.col != -1) { + let oldRow = -1; + let oldCol = -1; + if (layoutData[models[0].id]) { + oldRow = layoutData[models[0].id].row; + oldCol = layoutData[models[0].id].col; + } + let oldModel = null; + for (let key in layoutData) { + let data = layoutData[key]; + if (data.row == layoutIndex.row && data.col == layoutIndex.col) { + oldModel = this.container.models.get(key); + break; + } + } + if (oldRow == -1 && oldModel) + ; + else if (oldRow != -1 && oldModel) { + layoutData[models[0].id] = { row: layoutIndex.row, col: layoutIndex.col }; + layoutData[oldModel.id] = { row: oldRow, col: oldCol }; + } else if (!oldModel) { + layoutData[models[0].id] = { row: layoutIndex.row, col: layoutIndex.col }; + } + } + } + this.changeSubModelBounds(); + } + canChangePosition(x2, y2, models, isAlt = false) { + if (isAlt) { + return true; + } else if (this.container.isInAreaLoose(x2, y2, 0)) { + return true; + } + return false; + } + canChangeSize(x2, y2, models) { + return false; + } + canChangeRotate() { + return true; + } + /** + * 获取切分区域的点,超出区域的范围不会显示内容 + */ + getAreasPVS() { + var _a3; + let stageRatio2 = (_a3 = this.container) == null ? void 0 : _a3.getStageRatio(); + let vc1 = new Vector3(this.container.pvs[0].x, this.container.pvs[0].y, 1); + let vc2 = new Vector3(this.container.pvs[1].x, this.container.pvs[1].y, 1); + let vc3 = new Vector3(this.container.pvs[2].x, this.container.pvs[2].y, 1); + let vc4 = new Vector3(this.container.pvs[3].x, this.container.pvs[3].y, 1); + let width = this.container.width * stageRatio2; + let height = this.container.height * stageRatio2; + let unitWidth = width / 3; + let unitHeight = height / 3; + if (this.container.rotate) { + let move1Matrix = new Matrix3( + 1, + 0, + -this.container.cpv.x, + 0, + 1, + -this.container.cpv.y, + 0, + 0, + 1 + ); + let angle2 = this.container.rotate * DDeiConfig$1.ROTATE_UNIT; + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + this.container.cpv.x, + 0, + 1, + this.container.cpv.y, + 0, + 0, + 1 + ); + let m12 = new Matrix3().premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + vc1.applyMatrix3(m12); + vc2.applyMatrix3(m12); + vc3.applyMatrix3(m12); + vc4.applyMatrix3(m12); + } + let p11 = new Vector3(vc1.x, vc1.y, 1); + let p12 = new Vector3(vc1.x + unitWidth, vc1.y, 1); + let p13 = new Vector3(vc1.x + unitWidth * 2, vc1.y, 1); + let p14 = new Vector3(vc2.x, vc2.y, 1); + let p21 = new Vector3(vc1.x, vc1.y + unitHeight, 1); + let p22 = new Vector3(vc1.x + unitWidth, vc1.y + unitHeight, 1); + let p23 = new Vector3(vc1.x + unitWidth * 2, vc1.y + unitHeight, 1); + let p24 = new Vector3(vc2.x, vc1.y + unitHeight, 1); + let p31 = new Vector3(vc1.x, vc1.y + unitHeight * 2, 1); + let p32 = new Vector3(vc1.x + unitWidth, vc1.y + unitHeight * 2, 1); + let p33 = new Vector3(vc1.x + unitWidth * 2, vc1.y + unitHeight * 2, 1); + let p34 = new Vector3(vc2.x, vc1.y + unitHeight * 2, 1); + let p41 = new Vector3(vc4.x, vc4.y, 1); + let p42 = new Vector3(vc4.x + unitWidth, vc4.y, 1); + let p43 = new Vector3(vc4.x + unitWidth * 2, vc4.y, 1); + let p44 = new Vector3(vc3.x, vc4.y, 1); + if (this.container.rotate) { + let centerPoint = this.container.cpv; + let move1Matrix = new Matrix3( + 1, + 0, + -centerPoint.x, + 0, + 1, + -centerPoint.y, + 0, + 0, + 1 + ); + let angle2 = -this.container.rotate * DDeiConfig$1.ROTATE_UNIT; + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + centerPoint.x, + 0, + 1, + centerPoint.y, + 0, + 0, + 1 + ); + let m12 = new Matrix3().premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + p11.applyMatrix3(m12); + p12.applyMatrix3(m12); + p13.applyMatrix3(m12); + p14.applyMatrix3(m12); + p21.applyMatrix3(m12); + p22.applyMatrix3(m12); + p23.applyMatrix3(m12); + p24.applyMatrix3(m12); + p31.applyMatrix3(m12); + p32.applyMatrix3(m12); + p33.applyMatrix3(m12); + p34.applyMatrix3(m12); + p41.applyMatrix3(m12); + p42.applyMatrix3(m12); + p43.applyMatrix3(m12); + p44.applyMatrix3(m12); + } + let returnArray = [ + [p11, p12, p22, p21], + [p12, p13, p23, p22], + [p13, p14, p24, p23], + [p21, p22, p32, p31], + [p22, p23, p33, p32], + [p23, p24, p34, p33], + [p31, p32, p42, p41], + [p32, p33, p43, p42], + [p33, p34, p44, p43] + ]; + return returnArray; + } + /** + * 计算时拖入待确认时的显示图形的向量 + */ + calDragInPVS(x2, y2, models) { + if (this.container.layer) { + let areasPVS = this.getAreasPVS(); + for (let i2 = 0; i2 < areasPVS.length; i2++) { + let inArea = DDeiAbstractShape.isInsidePolygon( + areasPVS[i2], + { x: x2, y: y2 } + ); + if (inArea) { + this.container.layer.dragInPoints = areasPVS[i2]; + return; + } + } + } + } + /** + * 计算时拖入出确认时的显示图形的向量 + */ + calDragOutPVS(x2, y2, models) { + var _a3, _b2; + if (this.container.layer && models.length > 0) { + let model = models[0]; + if (model.id.indexOf("_shadow") != -1) { + model = (_b2 = (_a3 = this.container) == null ? void 0 : _a3.stage) == null ? void 0 : _b2.getModelById(model.id.substring(0, model.id.lastIndexOf("_shadow"))); + } + let areasPVS = this.getAreasPVS(); + for (let i2 = 0; i2 < areasPVS.length; i2++) { + let inArea = DDeiAbstractShape.isInsidePolygon( + areasPVS[i2], + { x: model.cpv.x, y: model.cpv.y } + ); + if (inArea) { + this.container.layer.dragOutPoints = areasPVS[i2]; + return; + } + } + } + } + /** + * 获取落入的布局行列 + * @param x + * @param y + * @returns + */ + getLayoutIndex(x2, y2) { + if (this.container.layer) { + let areasPVS = this.getAreasPVS(); + for (let i2 = 0; i2 < areasPVS.length; i2++) { + let inArea = DDeiAbstractShape.isInsidePolygon( + areasPVS[i2], + { x: x2, y: y2 } + ); + if (inArea) { + let row = parseInt(i2 / 3); + let col = parseInt(i2 % 3); + return { row, col }; + } + } + } + return { row: -1, col: -1 }; + } + // ============================ 静态方法 ============================ + /** + * 返回当前实例 + */ + static newInstance(model) { + return new DDeiLayoutManagerNine(model); + } + } + const __vite_glob_0_3$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayoutManagerNine, + default: DDeiLayoutManagerNine + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiLayoutManagerFactory = class _DDeiLayoutManagerFactory2 { + /** + * 根据layout获取layout实例 + */ + static getLayoutInstance(layout) { + var _a3, _b2; + if (_DDeiLayoutManagerFactory2.LayoutManagers.size == 0) { + let modules2 = /* @__PURE__ */ Object.assign({ "./manager/layout-manager-compose.ts": __vite_glob_0_0$1$1, "./manager/layout-manager-free.ts": __vite_glob_0_1$1$1, "./manager/layout-manager-full.ts": __vite_glob_0_2$1$1, "./manager/layout-manager-nine.ts": __vite_glob_0_3$2 }); + for (let i2 in modules2) { + let cls = modules2[i2].default; + let newI = i2.substring(i2.lastIndexOf("-") + 1, i2.lastIndexOf(".")); + _DDeiLayoutManagerFactory2.LayoutManagers.set(newI, cls); + } + } + if (layout) { + let lm = (_a3 = _DDeiLayoutManagerFactory2.LayoutManagers.get(layout)) == null ? void 0 : _a3.newInstance(); + if (lm) { + return lm; + } + } + return (_b2 = _DDeiLayoutManagerFactory2.LayoutManagers.get("free")) == null ? void 0 : _b2.newInstance(); + } + }; + __publicField2(_DDeiLayoutManagerFactory, "LayoutManagers", /* @__PURE__ */ new Map()); + let DDeiLayoutManagerFactory = _DDeiLayoutManagerFactory; + const _DDeiPolygon = class _DDeiPolygon2 extends DDeiAbstractShape { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "border"); + __publicField2(this, "fill"); + __publicField2(this, "font"); + __publicField2(this, "imgBase64"); + __publicField2(this, "text"); + __publicField2(this, "textStyle"); + __publicField2(this, "textArea"); + __publicField2(this, "modelType", "DDeiPolygon"); + __publicField2(this, "baseModelType", "DDeiPolygon"); + this.border = props.border ? props.border : null; + this.fill = props.fill ? props.fill : null; + this.font = props.font ? props.font : null; + this.text = props.text ? props.text : ""; + this.imgBase64 = props.imgBase64 ? props.imgBase64 : ""; + this.textStyle = props.textStyle ? props.textStyle : null; + if (props.textArea) { + this.textArea = []; + props.textArea.forEach((pvd) => { + let pv = new Vector3(); + for (let i2 in pvd) { + pv[i2] = pvd[i2]; + } + pv.z = pvd.z || pvd.z === 0 ? pvd.z : 1; + this.textArea.push(pv); + }); + } + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}, initPVS = true) { + var _a3, _b2; + let model = new _DDeiPolygon2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + let ddInstance = (_a3 = model.stage) == null ? void 0 : _a3.ddInstance; + if (!model.pModel) { + model.pModel = model.layer; + } + tempData[model.id] = model; + if (((_b2 = json == null ? void 0 : json.composes) == null ? void 0 : _b2.length) > 0) { + let composes = []; + json == null ? void 0 : json.composes.forEach((composeJSON) => { + let def = DDeiUtil$1.getControlDefine(composeJSON); + let composeModel = ddInstance.controlModelClasses[def.type].loadFromJSON( + composeJSON, + tempData, + false + ); + composeModel.pModel = model; + composes.push(composeModel); + }); + model.composes = composes; + } + if (initPVS) { + model.initPVS(); + } + model.initRender(); + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}, initPVS = true) { + var _a3, _b2; + let model = new _DDeiPolygon2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + let ddInstance = (_a3 = model.stage) == null ? void 0 : _a3.ddInstance; + if (((_b2 = json == null ? void 0 : json.composes) == null ? void 0 : _b2.length) > 0) { + let composes = []; + for (let ci = 0; ci < json.composes.length; ci++) { + let composeJSON = json.composes[ci]; + let def = DDeiUtil$1.getControlDefine(composeJSON); + let composeModel = ddInstance.controlModelClasses[def.type].initByJSON( + composeJSON, + tempData, + false + ); + composeModel.modelCode = composeModel.id; + composeModel.id = model.id + "_comp_" + ci; + composeModel.pModel = model; + composes.push(composeModel); + } + model.composes = composes; + } + if (initPVS) { + model.initPVS(); + } + return model; + } + // ============================ 方法 =============================== + /** + * 初始化渲染器 + */ + initRender() { + var _a3; + DDeiConfig$1.bindRender(this); + this.render.init(); + (_a3 = this.composes) == null ? void 0 : _a3.forEach((compose) => { + compose.initRender(); + }); + delete this.__destroyed; + } + //覆写hpv + initHPV() { + } + transVectors(matrix2, params) { + if (this.poly == 2) + ; + else { + this.textArea.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + this.hpv.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + } + super.transVectors(matrix2, params); + } + /** + * 同步向量 + * @param source 源模型 + * @param cloneVP 是否克隆向量,默认false + */ + syncVectors(source, clonePV = false) { + if (this.poly == 2) + ; + else { + if (clonePV) { + this.textArea = cloneDeep(source.textArea); + this.hpv = cloneDeep(source.hpv); + } else { + this.textArea = source.textArea; + this.hpv = source.hpv; + } + } + super.syncVectors(source, clonePV); + } + /** + * 返回某个点,相对于该图形的角度 + */ + getPointAngle(point2) { + let bpv2 = DDeiUtil$1.pointsToZero([this.bpv], this.cpv, this.rotate)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + let zeroPoint = DDeiUtil$1.pointsToZero([new Vector3(point2.x, point2.y, 1)], this.cpv, this.rotate)[0]; + zeroPoint.x /= scaleX2; + zeroPoint.y /= scaleY2; + let lineAngle = parseFloat(DDeiUtil$1.getLineAngle(0, 0, zeroPoint.x, zeroPoint.y).toFixed(4)); + if (lineAngle < -45 && lineAngle > -135) { + return -90; + } else if (lineAngle > -45 && lineAngle < 45) { + return 0; + } else if (lineAngle > 45 && lineAngle < 135) { + return 90; + } else { + switch (lineAngle) { + case -45: + return 1002; + case 45: + return 1003; + case -135: + return 1001; + case 135: + return 1004; + } + return 180; + } + } + toJSON() { + var _a3, _b2, _c2; + let json = super.toJSON(); + let ruleDisplay; + let ruleInit; + if (((_a3 = this.stage.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.stage.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.stage.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = this.stage.ruler.display; + } else if (this.stage.ddInstance.ruler != null && this.stage.ddInstance.ruler != void 0) { + if (typeof this.stage.ddInstance.ruler == "boolean") { + ruleDisplay = this.stage.ddInstance.ruler ? 1 : 0; + } else { + ruleInit = this.stage.ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.display", true); + } + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.unit", true, ruleInit); + if (ruleDisplay) { + if (this.cpv) { + json.cpv = cloneDeep(this.cpv); + let cpv = DDeiUtil$1.toRulerCoord({ x: this.cpv.x, y: this.cpv.y }, this.stage, unit); + json.cpv.x = cpv.x; + json.cpv.y = cpv.y; + } + if (this.hpv) { + json.hpv = cloneDeep(this.hpv); + for (let i2 = 0; i2 < this.hpv.length; i2++) { + let hpv = DDeiUtil$1.toRulerCoord({ x: this.hpv[i2].x, y: this.hpv[i2].y }, this.stage, unit); + json.hpv[i2].x = hpv.x; + json.hpv[i2].y = hpv.y; + } + } + if (this.bpv) { + json.bpv = cloneDeep(this.bpv); + let bpv2 = DDeiUtil$1.toRulerCoord({ x: this.bpv.x, y: this.bpv.y }, this.stage, unit); + json.bpv.x = bpv2.x; + json.bpv.y = bpv2.y; + } + if (this.exPvs) { + json.exPvs = cloneDeep(this.exPvs); + for (let i2 in this.exPvs) { + let pv = DDeiUtil$1.toRulerCoord({ x: this.exPvs[i2].x, y: this.exPvs[i2].y }, this.stage, unit); + json.exPvs[i2].x = pv.x; + json.exPvs[i2].y = pv.y; + } + } + } + return json; + } + }; + __publicField2(_DDeiPolygon, "ClsName", "DDeiPolygon"); + let DDeiPolygon = _DDeiPolygon; + const __vite_glob_0_7$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiPolygon, + default: DDeiPolygon + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiPolygonContainer = class _DDeiPolygonContainer2 extends DDeiPolygon { + constructor(props) { + super(props); + __publicField2(this, "modelType", "DDeiPolygonContainer"); + __publicField2(this, "baseModelType", "DDeiContainer"); + __publicField2(this, "layout"); + __publicField2(this, "layoutData"); + __publicField2(this, "layoutManager"); + __publicField2(this, "models"); + __publicField2(this, "midList"); + this.layout = props.layout; + this.layoutData = props.layoutData; + this.models = props.models ? props.models : /* @__PURE__ */ new Map(); + this.midList = props.midList ? props.midList : new Array(); + this.layoutManager = DDeiLayoutManagerFactory.getLayoutInstance(this.layout); + this.layoutManager.container = this; + } + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + var _a3; + let container2 = new _DDeiPolygonContainer2(json); + container2.layer = tempData["currentLayer"]; + container2.stage = tempData["currentStage"]; + container2.pModel = tempData["currentContainer"]; + if (!container2.pModel) { + container2.pModel = container2.layer; + } + let ddInstance = (_a3 = container2.stage) == null ? void 0 : _a3.ddInstance; + tempData[container2.id] = container2; + let models = /* @__PURE__ */ new Map(); + let midList = new Array(); + for (let key in json.models) { + tempData["currentContainer"] = container2; + let item = json.models[key]; + let model = ddInstance.controlModelClasses[item.modelType].loadFromJSON(item, tempData); + models.set(key, model); + tempData["currentContainer"] = null; + midList.push(model.id); + } + container2.models = models; + container2.midList = midList; + container2.initPVS(); + container2.initRender(); + return container2; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}) { + let model = new _DDeiPolygonContainer2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + model.initPVS(); + return model; + } + // ============================ 方法 =============================== + /** + * 计算当前容器的模型总数量 + */ + calModelNumber() { + let num = 0; + this.midList.forEach((mid) => { + let model = this.models.get(mid); + if ((model == null ? void 0 : model.baseModelType) == "DDeiContainer") { + num += model.calModelNumber(); + } else if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + num += model.calModelNumber(); + } else { + num++; + } + }); + return num; + } + /** + * 初始化渲染器 + */ + initRender() { + DDeiConfig$1.bindRender(this); + this.render.init(); + this.models.forEach((item, key) => { + item.initRender(); + }); + delete this.__destroyed; + } + /** + * 添加模型,并维护关系 + * @param model 被添加的模型 + */ + addModel(model, notify = true) { + if (this.midList.indexOf(model.id) == -1) { + model.stage = this.stage; + this.models.set(model.id, model); + this.midList.push(model.id); + model.pModel = this; + model.layer = this.layer; + this.resortModelByZIndex(); + if (notify) { + this.notifyChange(); + } + } + } + /** + * 移除模型,并维护关系 + * @param model 被移除的模型 + * @param destroy 销毁,缺省false + */ + removeModels(models, destroy = false, notify = true) { + models == null ? void 0 : models.forEach((model) => { + this.removeModel(model, destroy); + }); + if (notify) { + this.notifyChange(); + } + } + /** + * 移除模型,并维护关系 + * @param model 被移除的模型 + * @param destroy 销毁,缺省false + */ + removeModel(model, destroy = false, notify = true) { + var _a3; + this.models.delete(model.id); + let idx = this.midList.indexOf(model.id); + if (idx != -1) { + this.midList.splice(idx, 1); + } + if (destroy) { + model.destroyed(); + } + model.pModel = null; + model.stage = null; + model.render = null; + if ((_a3 = this.stage) == null ? void 0 : _a3.render) { + this.stage.render.refreshJumpLine = false; + } + if (notify) { + this.notifyChange(); + } + } + /** + * 移除自身的方法 + */ + destroyed() { + this.midList.forEach((key) => { + let item = this.models.get(key); + item.destroyed(); + }); + super.destroyed(); + } + /** + * 移除渲染器 + */ + destroyRender() { + super.destroyRender(); + this.midList.forEach((key) => { + let item = this.models.get(key); + item == null ? void 0 : item.destroyRender(); + }); + } + /** + * 仅变换自身向量 + */ + transSelfVectors(matrix2) { + super.transVectors(matrix2); + } + /** + * 变换向量 + */ + transVectors(matrix2, params) { + super.transVectors(matrix2, params); + if (!(params == null ? void 0 : params.ignoreChildren)) { + this.midList.forEach((key) => { + let item = this.models.get(key); + item.transVectors(matrix2, params); + }); + } + } + /** + * 变换向量,只能用于两个结构和数据相同的变量进行交换,如影子控件 + */ + syncVectors(source) { + super.syncVectors(source); + this.midList.forEach((key) => { + let itemDist = this.models.get(key); + let itemSource = source.models.get(key); + itemDist.syncVectors(itemSource); + }); + } + /** + * 获取实际的内部容器控件 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainer() { + return this.layoutManager ? this.layoutManager.getAccuContainer() : this; + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainerByPos(x2, y2) { + return this.layoutManager ? this.layoutManager.getAccuContainerByPos(x2, y2) : this; + } + /** + * 根据基础模型获取控件 + * @param bmt 基础模型类别 + */ + getModelsByBaseType(bmt) { + let returnValues = []; + this.midList.forEach((mid) => { + let model = this.models.get(mid); + if ((model == null ? void 0 : model.baseModelType) == bmt) { + returnValues.push(model); + } else if ((model == null ? void 0 : model.baseModelType) == "DDeiContainer") { + let datas2 = model.getModelsByBaseType(bmt); + datas2.forEach((dt) => { + returnValues.push(dt); + }); + } + }); + return returnValues; + } + /** + * 获取子模型 + */ + getSubModels(ignoreModelIds, level = 1, rect) { + let models = []; + this.midList.forEach((mid) => { + if (ignoreModelIds && (ignoreModelIds == null ? void 0 : ignoreModelIds.indexOf(mid)) != -1) { + return; + } + let subModel = this.models.get(mid); + if (subModel) { + if (!rect || subModel.isInRect(rect.x, rect.y, rect.x1, rect.y1)) { + if (level > 1 && subModel.getSubModels) { + let subModels = subModel.getSubModels(ignoreModelIds, level - 1, rect); + models = models.concat(subModels); + } + models.push(subModel); + } + } + }); + return models; + } + /** + * 获取子模型,通过一个过滤器 + */ + getSubModelsByFilter(filterName = null, ignoreModelIds, level = 1, params) { + let models = []; + this.midList.forEach((mid) => { + if (ignoreModelIds && (ignoreModelIds == null ? void 0 : ignoreModelIds.indexOf(mid)) != -1) { + return; + } + let subModel = null; + if (this.models.get) { + subModel = this.models.get(mid); + } else { + subModel = this.models[mid]; + } + if (subModel) { + let filterMethod = null; + if (filterName) { + let define2 = DDeiUtil$1.getControlDefine(subModel); + if (define2 && define2.filters && define2.filters[filterName]) { + filterMethod = define2.filters[filterName]; + } + } + if (!filterMethod || filterMethod(subModel, params)) { + if (level > 1 && (subModel == null ? void 0 : subModel.getSubModelsByFilter)) { + let subModels = subModel.getSubModelsByFilter(filterName, ignoreModelIds, level - 1, params); + models = models.concat(subModels); + } + models.push(subModel); + } + } + }); + return models; + } + /** + * 将控件设置到顶层 + */ + pushTop(models) { + models.forEach((item) => { + let lastItem = this.models.get(this.midList[this.midList.length - 1]); + if (lastItem.id != item.id) { + let lastIndex = lastItem.zIndex ? lastItem == null ? void 0 : lastItem.zIndex : 0; + item.zIndex = lastIndex + 1; + } + }); + this.resortModelByZIndex(); + } + /** + * 将控件设置到底层 + */ + pushBottom(models) { + models.forEach((item) => { + item.zIndex = null; + let oldIdIndex = this.midList.indexOf(item.id); + if (oldIdIndex > 0) { + this.midList.splice(oldIdIndex, 1); + this.midList.splice(0, 0, item.id); + } + }); + this.resortModelByZIndex(); + } + /** + * 将控件设置到上一层 + */ + pushUp(models) { + models.forEach((item) => { + if (!item.zIndex) { + item.zIndex = 1; + } else { + item.zIndex++; + } + }); + this.resortModelByZIndex(); + } + /** + * 将控件设置到下一层 + */ + pushDown(models) { + models.forEach((item) => { + if (!item.zIndex || item.zIndex <= 1) { + item.zIndex = null; + let oldIdIndex = this.midList.indexOf(item.id); + if (oldIdIndex > 0) { + let temp = this.midList[oldIdIndex]; + this.midList[oldIdIndex] = this.midList[oldIdIndex - 1]; + this.midList[oldIdIndex - 1] = temp; + } + } else { + item.zIndex--; + } + }); + this.resortModelByZIndex(); + } + /** + * 按照Zindex的顺序,从小到大排列,并重新设置子元素的zindex确保其连续,最后将排序后的List设置成新的midList + */ + resortModelByZIndex() { + let newMidList = new Array(); + let hadZIndexList = new Array(); + for (let mg = 0; mg < this.midList.length; mg++) { + let item = this.models.get(this.midList[mg]); + if (item.zIndex && item.zIndex > 0) { + let insertIndex = hadZIndexList.length; + for (let j2 = 0; j2 < hadZIndexList.length; j2++) { + if (this.models.get(hadZIndexList[j2]).zIndex > item.zIndex) { + insertIndex = j2; + break; + } + } + hadZIndexList.splice(insertIndex, 0, item.id); + } else { + newMidList.push(item.id); + } + } + this.midList = newMidList.concat(hadZIndexList); + } + cascadeRemoveSelf() { + var _a3, _b2; + let newContainer = this.pModel; + if (newContainer.baseModelType == "DDeiLayer" && !newContainer.layoutManager) { + let freeLayoutManager = DDeiLayoutManagerFactory.getLayoutInstance("free"); + freeLayoutManager.container = newContainer; + newContainer.layoutManager = freeLayoutManager; + } + if (this.layout == "compose" && this.models.size <= 1) { + let models = Array.from(this.models.values()); + (_a3 = newContainer.layoutManager) == null ? void 0 : _a3.append(null, null, models); + newContainer.changeParentsBounds(); + (_b2 = newContainer.layoutManager) == null ? void 0 : _b2.updateLayout(null, null, models); + newContainer.removeModel(this, true); + } + newContainer == null ? void 0 : newContainer.cascadeRemoveSelf(); + } + /** + * 获取选中状态的所有控件 + * @returns + */ + getSelectedModels() { + let controls2 = /* @__PURE__ */ new Map(); + this.models.forEach((item, key) => { + if (item.state == DDeiEnumControlState.SELECTED) { + controls2.set(item.id, item); + } + }); + return controls2; + } + /** + * 取消选择控件,默认取消所有 + */ + cancelSelectModels(models, ignoreModels) { + if (!models) { + models = Array.from(this.models.values()); + } + models.forEach((item) => { + if (!ignoreModels || (ignoreModels == null ? void 0 : ignoreModels.indexOf(item)) == -1) { + item.setState(DDeiEnumControlState.DEFAULT); + } + }); + } + /** + * 取消选择控件,默认取消所有 + */ + cancelAllLevelSelectModels(ignoreModels) { + this.models.forEach((item) => { + if (!ignoreModels || (ignoreModels == null ? void 0 : ignoreModels.indexOf(item)) == -1) { + item.setState(DDeiEnumControlState.DEFAULT); + } + if (item.baseModelType == "DDeiContainer") { + item.cancelAllLevelSelectModels(ignoreModels); + } + }); + } + /** + * 根据ID获取模型 + * @param id 模型id + */ + getModelById(id) { + let reutrnModel = null; + if (id) { + if (this.models.has(id)) { + reutrnModel = this.models.get(id); + } else { + this.models.forEach((item) => { + let container2 = item.getAccuContainer(); + if (container2) { + let rm = container2.getModelById(id); + if (rm) { + reutrnModel = rm; + } + } + }); + } + } + if (!reutrnModel) { + reutrnModel = null; + } + return reutrnModel; + } + /** + * 修改上层模型大小 + */ + changeParentsBounds() { + if (this.layoutManager) { + this.layoutManager.changeParentsBounds(); + } + return true; + } + /** + * 通过下层模型更新本层模型的信息 + */ + updateBoundsByModels() { + let subModels = Array.from(this.models.values()); + let outRect = DDeiAbstractShape.getOutRectByPV(subModels); + this.setSelfBounds(outRect.x, outRect.y, outRect.width, outRect.height); + this.setModelChanged(); + } + //仅设置自身的大小以及宽高 + setSelfBounds(x2, y2, width, height) { + let m12 = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + if (this.rotate) { + let angle2 = DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let scaleMatrix2 = new Matrix3( + width / this.essBounds.width, + 0, + 0, + 0, + height / this.essBounds.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + if (this.rotate) { + let angle2 = -DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let move2Matrix = new Matrix3( + 1, + 0, + x2 + width / 2, + 0, + 1, + y2 + height / 2, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + this.transSelfVectors(m12); + } + /** + * 修改子元素大小 + */ + changeChildrenBounds() { + if (this.layoutManager) { + this.layoutManager.changeSubModelBounds(); + } + return true; + } + /** + * 更新关联图形 + */ + updateLinkModels(ignoreModelIds) { + super.updateLinkModels(ignoreModelIds); + this.models.forEach((model) => { + model.updateLinkModels(ignoreModelIds); + }); + } + getAPVS() { + let arr = [this.cpv]; + this.models.forEach((model) => { + let modelarr = model.getAPVS(); + arr = arr.concat(modelarr); + }); + return arr; + } + removeModelById(ids) { + ids == null ? void 0 : ids.forEach((id) => { + let model = this.getModelById(id); + if (model) { + this.removeModel(model); + } + }); + this.models.forEach((model) => { + if (model.baseModelType == "DDeiContainer") { + model.removeModelById(ids); + } + }); + } + toJSON() { + var _a3, _b2, _c2; + let json = super.toJSON(); + let ruleDisplay; + let ruleInit; + if (((_a3 = this.stage.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.stage.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.stage.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = this.stage.ruler.display; + } else if (this.stage.ddInstance.ruler != null && this.stage.ddInstance.ruler != void 0) { + if (typeof this.stage.ddInstance.ruler == "boolean") { + ruleDisplay = this.stage.ddInstance.ruler ? 1 : 0; + } else { + ruleInit = this.stage.ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.display", true); + } + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.unit", true, ruleInit); + if (ruleDisplay) { + if (this.cpv) { + json.cpv = cloneDeep(this.cpv); + let cpv = DDeiUtil$1.toRulerCoord({ x: this.cpv.x, y: this.cpv.y }, this.stage, unit); + json.cpv.x = cpv.x; + json.cpv.y = cpv.y; + } + if (this.pvs) { + json.pvs = cloneDeep(this.pvs); + for (let i2 = 0; i2 < this.pvs.length; i2++) { + let pv = DDeiUtil$1.toRulerCoord({ x: this.pvs[i2].x, y: this.pvs[i2].y }, this.stage, unit); + json.pvs[i2].x = pv.x; + json.pvs[i2].y = pv.y; + } + } + if (this.exPvs) { + json.exPvs = cloneDeep(this.exPvs); + for (let i2 in this.exPvs) { + let pv = DDeiUtil$1.toRulerCoord({ x: this.exPvs[i2].x, y: this.exPvs[i2].y }, this.stage, unit); + json.exPvs[i2].x = pv.x; + json.exPvs[i2].y = pv.y; + } + } + } + return json; + } + }; + __publicField2(_DDeiPolygonContainer, "ClsName", "DDeiPolygonContainer"); + let DDeiPolygonContainer = _DDeiPolygonContainer; + const __vite_glob_0_6$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiPolygonContainer, + default: DDeiPolygonContainer + }, Symbol.toStringTag, { value: "Module" })); + var DDeiEnumState = /* @__PURE__ */ ((DDeiEnumState2) => { + DDeiEnumState2[DDeiEnumState2["IN_ACTIVITY"] = -1] = "IN_ACTIVITY"; + DDeiEnumState2[DDeiEnumState2["NONE"] = 0] = "NONE"; + return DDeiEnumState2; + })(DDeiEnumState || {}); + const _DDeiStage = class _DDeiStage2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "layers"); + __publicField2(this, "layerIndex"); + __publicField2(this, "idIdx"); + __publicField2(this, "modelType", "DDeiStage"); + __publicField2(this, "ddInstance", null); + __publicField2(this, "selectedModels", null); + __publicField2(this, "histroy", []); + __publicField2(this, "histroyIdx", -1); + __publicField2(this, "unicode"); + __publicField2(this, "ratio", 1.2); + __publicField2(this, "width"); + __publicField2(this, "height"); + __publicField2(this, "wpv"); + __publicField2(this, "links"); + __publicField2(this, "mark"); + __publicField2(this, "paper"); + __publicField2(this, "spv", null); + __publicField2(this, "ruler"); + __publicField2(this, "grid"); + __publicField2(this, "modelCode", "DDeiStage"); + var _a3; + this.id = props.id; + this.layers = []; + this.layerIndex = props.layerIndex != void 0 && props.layerIndex != null && props.layerIndex >= 0 ? props.layerIndex : -1; + this.idIdx = props.idIdx ? props.idIdx : 0; + this.unicode = props.unicode ? props.unicode : DDeiUtil$1.getUniqueCode(); + this.histroy = props.histroy ? props.histroy : []; + this.histroyIdx = props.histroyIdx || props.histroyIdx == 0 ? props.histroyIdx : -1; + this.ratio = props.ratio; + this.width = props.width; + this.height = props.height; + this.wpv = props.wpv; + this.mark = props.mark; + this.paper = props.paper; + this.ruler = props.ruler; + this.grid = props.grid; + this.global = props.global; + if (props.spv) { + this.spv = new Vector3(props.spv.x, props.spv.y, 1); + } + this.links = []; + (_a3 = props == null ? void 0 : props.links) == null ? void 0 : _a3.forEach((link2) => { + this.links.push(link2); + }); + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + /** + * 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + */ + static loadFromJSON(json, tempData = {}) { + var _a3; + let stage2 = new _DDeiStage2(json); + stage2.ddInstance = tempData["currentDdInstance"]; + if (!stage2.ratio) { + stage2.ratio = (_a3 = stage2.ddInstance) == null ? void 0 : _a3.ratio; + } + tempData["currentStage"] = stage2; + tempData[stage2.id] = stage2; + let layers = []; + json.layers.forEach((layer2) => { + let model = DDeiLayer.loadFromJSON(layer2, tempData); + layers.push(model); + }); + stage2.layers = layers; + stage2.initHistroy(); + stage2.initRender(); + if (stage2.links) { + let links = []; + stage2.links.forEach((lk) => { + let sm = null; + let dm = null; + if (lk.sm) { + sm = lk.sm; + } else if (lk.smid) { + sm = stage2.getModelById(lk.smid); + } + if (lk.dm) { + dm = lk.dm; + } else if (lk.dmid) { + dm = stage2.getModelById(lk.dmid); + } + lk.stage = stage2; + lk.sm = sm; + lk.dm = dm; + let link2 = new DDeiLink(lk); + links.push(link2); + }); + stage2.links = links; + stage2.refreshLinkCache(); + } + let models = stage2.getLayerModels([], 100); + models.forEach((model) => { + if (model.baseModelType == "DDeiLine") { + model.initPVS(); + } + model.initLinkModels(); + }); + return stage2; + } + /** + * 通过JSON初始化对象,数据未传入时将初始化数据 + */ + static initByJSON(json, tempData = {}) { + var _a3; + let stage2 = new _DDeiStage2(json); + stage2.ddInstance = tempData["currentDdInstance"]; + if (!stage2.ratio) { + stage2.ratio = (_a3 = stage2.ddInstance) == null ? void 0 : _a3.ratio; + } + let dDeiLayer1 = DDeiLayer.initByJSON({ id: "layer_default", name: "L-1" }); + dDeiLayer1.index = 0; + dDeiLayer1.stage = stage2; + stage2.layers[0] = dDeiLayer1; + stage2.layerIndex = 0; + stage2.initHistroy(); + return stage2; + } + // ============================ 方法 =============================== + /** + * 添加连接点 + * @param link 链接点 + */ + addLink(...links) { + links == null ? void 0 : links.forEach((link2) => { + if (link2) { + if (this.links.indexOf(link2) == -1) { + this.links.push(link2); + } + } + }); + this.refreshLinkCache(); + } + /** + * 删除连接点 + * @param link 链接点 + */ + removeLink(...links) { + links == null ? void 0 : links.forEach((link2) => { + if (link2) { + let index = this.links.indexOf(link2); + if (index != -1) { + this.links.splice(index, 1); + } + } + }); + this.refreshLinkCache(); + } + /** + * 刷新链接缓存 + */ + refreshLinkCache() { + this.sourceLinkCache = /* @__PURE__ */ new Map(); + this.distLinkCache = /* @__PURE__ */ new Map(); + this.links.forEach((link2) => { + if (link2.sm) { + let smid = link2.sm.id; + if (!this.sourceLinkCache.has(smid)) { + this.sourceLinkCache.set(smid, []); + } + let sourceLinks = this.sourceLinkCache.get(smid); + if (sourceLinks.indexOf(link2) == -1) { + sourceLinks.push(link2); + } + } + if (link2.dm) { + let dmid = link2.dm.id; + if (!this.distLinkCache.has(dmid)) { + this.distLinkCache.set(dmid, []); + } + let distLinks = this.distLinkCache.get(dmid); + if (distLinks.indexOf(link2) == -1) { + distLinks.push(link2); + } + } + }); + } + /** + * 获取源模型的链接 + * @param modelId 模型ID + */ + getSourceModelLinks(modelId) { + var _a3; + if (modelId) { + return (_a3 = this.sourceLinkCache) == null ? void 0 : _a3.get(modelId); + } + } + getPaperArea(paperType) { + let stageRatio2 = this.getStageRatio(); + let offsetWidth = 1 * stageRatio2 / 2; + let paperSize = DDeiUtil$1.getPaperSize(this, paperType, false); + let paperWidth = paperSize.width; + let paperHeight = paperSize.height; + if (!this.spv) { + let sx = this.width / 2 - paperWidth / 2; + let sy = this.height / 2 - paperHeight / 2; + this.spv = new Vector3(sx, sy, 1); + } + let startPaperX = this.spv.x + 1; + let startPaperY = this.spv.y + 1; + let posX = startPaperX + offsetWidth; + let posY = startPaperY + offsetWidth; + this.paperStartX = posX; + this.paperStartY = posY; + let maxOutRect = DDeiAbstractShape.getOutRectByPV(this.getLayerModels([], 100)); + let leftExtNum = 0, rightExtNum = 0, topExtNum = 0, bottomExtNum = 0; + if (maxOutRect.width > 0 && maxOutRect.height > 0) { + if (maxOutRect.x < startPaperX) { + leftExtNum = parseInt((startPaperX - maxOutRect.x) / paperWidth); + if (Math.abs((startPaperX - maxOutRect.x) % paperWidth) > 1) { + leftExtNum++; + } + } + if (maxOutRect.x1 > startPaperX + paperWidth) { + rightExtNum = parseInt((maxOutRect.x1 - startPaperX - paperWidth) / paperWidth); + if (Math.abs((maxOutRect.x1 - startPaperX - paperWidth) % paperWidth) > 1) { + rightExtNum++; + } + } + if (maxOutRect.y < startPaperY) { + topExtNum = parseInt((startPaperY - maxOutRect.y) / paperHeight); + if (Math.abs((startPaperY - maxOutRect.y) % paperHeight) > 1) { + topExtNum++; + } + } + if (maxOutRect.y1 > startPaperY + paperHeight) { + bottomExtNum = parseInt((maxOutRect.y1 - startPaperY - paperHeight) / paperHeight); + if (Math.abs((maxOutRect.y1 - startPaperY - paperHeight) % paperHeight) > 1) { + bottomExtNum++; + } + } + } + let paperOutRect = { + x: posX + -leftExtNum * paperWidth, + y: posY + -topExtNum * paperHeight, + w: (rightExtNum + leftExtNum + 1) * paperWidth, + h: (bottomExtNum + topExtNum + 1) * paperHeight, + unitWidth: paperWidth, + unitHeight: paperHeight + }; + paperOutRect.x /= stageRatio2; + paperOutRect.y /= stageRatio2; + paperOutRect.w /= stageRatio2; + paperOutRect.h /= stageRatio2; + paperOutRect.unitWidth /= stageRatio2; + paperOutRect.unitHeight /= stageRatio2; + return paperOutRect; + } + /** + * 获取目标模型的链接 + * @param modelId 模型ID + */ + getDistModelLinks(modelId) { + var _a3; + if (modelId) { + return (_a3 = this.distLinkCache) == null ? void 0 : _a3.get(modelId); + } + } + /** + * 计算当前stage的模型总数量 + */ + calModelNumber() { + let num = 0; + this.layers.forEach((layer2) => { + num += layer2.calModelNumber(); + }); + return num; + } + /** + * 初始化渲染器 + */ + initRender() { + DDeiConfig$1.bindRender(this); + this.render.init(); + for (let i2 = 0; i2 < this.layers.length; i2++) { + this.layers[i2].initRender(); + } + DDeiLine.calLineCross(this.layers[this.layerIndex]); + this.initStageSize(); + } + initStageSize() { + var _a3, _b2, _c2, _d2, _e2; + let stage2 = this; + if (!stage2.width || !stage2.height || !stage2.spv) { + let paperType; + if ((_a3 = stage2.paper) == null ? void 0 : _a3.type) { + paperType = stage2.paper.type; + } else if (stage2.ddInstance.paper) { + if (typeof stage2.ddInstance.paper == "string") { + paperType = stage2.ddInstance.paper; + } else { + paperType = stage2.ddInstance.paper.type; + } + } else { + paperType = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.type", true); + } + let paperSize = DDeiUtil$1.getPaperSize(stage2, paperType, false); + let w = stage2.ddInstance.render.canvas.width / stage2.ddInstance.render.ratio; + let h = stage2.ddInstance.render.canvas.height / stage2.ddInstance.render.ratio; + if (!stage2.width) { + stage2.width = ((_b2 = stage2.ddInstance) == null ? void 0 : _b2.width) ? (_c2 = stage2.ddInstance) == null ? void 0 : _c2.width : (paperSize == null ? void 0 : paperSize.width) ? w > 2 * paperSize.width ? w : 2 * paperSize.width : w; + } + if (!stage2.height) { + stage2.height = ((_d2 = stage2.ddInstance) == null ? void 0 : _d2.height) ? (_e2 = stage2.ddInstance) == null ? void 0 : _e2.height : (paperSize == null ? void 0 : paperSize.height) ? h > 2 * paperSize.height ? h : 2 * paperSize.height : h; + } + let stageRatio2 = stage2.getStageRatio(); + if (!stage2.spv) { + let sx = stage2.width / 2 - paperSize.width / 2 - (stageRatio2 - 1) * (paperSize.width / (stageRatio2 * 2)); + let sy = stage2.height / 2 - paperSize.height / 2 - (stageRatio2 - 1) * (paperSize.height / (stageRatio2 * 2)); + stage2.spv = new Vector3(sx, sy, 1); + } + if (!stage2.wpv) { + stage2.wpv = { + x: stage2.width > w ? -(stage2.width - w) / 2 : 0, + y: stage2.height > h ? -(stage2.height - h) / 2 : 0, + z: 0 + }; + } + } + } + notifyChange() { + DDeiUtil$1.notifyChange(this.ddInstance); + } + /** + * 添加图层到某一层,如果不指定则添加到最外层 + * @param layer 被添加的图层 + * @param layerIndex 图层Index + */ + addLayer(layer2, layerIndex, notify = true) { + var _a3; + if (!layer2) { + let curIdx = this.idIdx++; + layer2 = DDeiLayer.initByJSON({ id: "layer_" + curIdx, name: "L-" + curIdx }); + } else if (((_a3 = layer2.constructor) == null ? void 0 : _a3.ClsName) == "DDeiLayer") + ; + else { + let json = layer2; + if (!(json == null ? void 0 : json.id)) { + let curIdx = this.idIdx++; + json.id = "layer_" + curIdx; + } + if (!(json == null ? void 0 : json.name)) { + json.name = "L-" + this.idIdx; + } + layer2 = DDeiLayer.initByJSON(json); + } + layer2.stage = this; + if (!layerIndex || layerIndex < 0) { + layerIndex = 0; + } else if (layerIndex > this.layers.length - 1) { + layerIndex = this.layers.length - 1; + } + this.layers.splice(layerIndex, 0, layer2); + for (let i2 = 0; i2 < this.layers.length; i2++) { + this.layers[i2].index = i2; + } + this.layerIndex = layerIndex; + if (notify) { + this.notifyChange(); + } + return layer2; + } + /** + * 修改当前图层 + * @param layerIndex 图层下标 + */ + changeLayer(layerIndex) { + this.layerIndex = layerIndex; + } + /** + * 获取画布缩放比率 + */ + getStageRatio() { + let stageRatio2 = parseFloat(this.ratio) ? parseFloat(this.ratio) : 1; + if (!stageRatio2 || isNaN(stageRatio2)) { + stageRatio2 = this.ddInstance.ratio; + } + return stageRatio2; + } + /** + * 设置全局缩放比率 + */ + setStageRatio(newValue = 1) { + if (newValue != this.ratio) { + if (this.ratio || this.ratio == 0) { + this.oldRatio = this.ratio; + } + this.ratio = newValue; + } + } + /** + * 隐藏图层 + * @param layerIndex 图层下标,不传则为当前图层 + */ + hiddenLayer(layerIndex) { + if (!layerIndex) { + layerIndex = this.layerIndex; + } + this.layers[layerIndex].display = 0; + } + /** + * 显示图层 + * @param layerIndex 图层下标,不传则为当前图层 + * @param temp 是否临时显示 + */ + displayLayer(layerIndex, temp = false) { + if (!layerIndex || layerIndex < 0 || layerIndex > this.layers[layerIndex].length - 1) { + layerIndex = this.layerIndex; + } + if (temp) { + this.layers.forEach((layer2) => { + layer2.tempDisplay = false; + }); + this.layers[layerIndex].tempDisplay = true; + } else { + this.layers[layerIndex].display = 1; + } + } + /** + * 移除图层,如果不指定则移除当前图层 + * @param layerIndex 移除图层的index + */ + removeLayer(layerIndex, notify = true) { + if (this.layers.length <= 1) { + return null; + } + if (!layerIndex && layerIndex != 0) { + layerIndex = this.layerIndex; + } + if (layerIndex < 0) { + layerIndex = 0; + } else if (layerIndex > this.layers.length - 1) { + layerIndex = this.layers.length - 1; + } + let layer2 = this.layers[layerIndex]; + this.layers.splice(layerIndex, 1); + if (layerIndex > this.layers.length - 1) { + layerIndex = this.layers.length - 1; + } + for (let i2 = 0; i2 < this.layers.length; i2++) { + this.layers[i2].index = i2; + } + this.layerIndex = layerIndex; + if (notify) { + this.notifyChange(); + } + return layer2; + } + /** + * 添加模型到当前图层 + */ + addModel(model) { + if (this.layerIndex != -1) { + if (this.layers[this.layerIndex]) { + this.layers[this.layerIndex].addModel(model); + } + } + } + destroyed() { + this.layers.forEach((layer2) => { + layer2.destroyed(); + }); + } + /** + * 移除渲染器 + */ + destroyRender() { + this.layers.forEach((layer2) => { + layer2.destroyRender(); + }); + this.render = null; + } + /** + * 移除当前图层模型 + */ + removeModel(model, destroy = false) { + if (this.layerIndex != -1) { + if (this.layers[this.layerIndex]) { + this.layers[this.layerIndex].removeModel(model, destroy); + } + } + } + /** + * 清除当前画布所有控件 + */ + clearModels(destroy = false) { + this.layers.forEach((layer2) => { + layer2.clearModels(destroy); + }); + } + /** + * 根据ID删除元素 + */ + removeModelById(ids) { + this.layers.forEach((layer2) => { + layer2.removeModelById(ids); + }); + } + /** + * 选择控件 + */ + makeSelectModels(models, cancelSelectOther = true) { + if (cancelSelectOther) { + for (let i2 = 0; i2 < this.layers.length; i2++) { + this.layers[i2].cancelAllLevelSelectModels(); + } + } + models == null ? void 0 : models.forEach((model) => { + model.state = DDeiEnumControlState.SELECTED; + }); + } + /** + * 全部取消所有已选控件 + */ + cancelSelectModels(models, ignoreModels) { + for (let i2 = 0; i2 < this.layers.length; i2++) { + this.layers[i2].cancelSelectModels(models, ignoreModels); + } + } + /** + * 根据ID获取控件 + * @param id 控件ID + * @param allLayer 是否查询所有layer,true是,false只查询当前layer + */ + getModelById(id, allLayer = false) { + let reutrnModel = null; + let curLayer = this.layers[this.layerIndex]; + if (curLayer) { + reutrnModel = curLayer.getModelById(id); + } + if (!reutrnModel && allLayer) { + for (let i2 = 0; i2 < this.layers.length; i2++) { + if (i2 != this.layerIndex) { + reutrnModel = this.layers[i2].getModelById(id); + if (reutrnModel) { + break; + } + } + } + } + return reutrnModel; + } + /** + * 根据基础模型获取控件 + * @param bmt 基础模型类别 + */ + getModelsByBaseType(bmt) { + let returnValues = []; + this.layers.forEach((layer2) => { + let datas2 = layer2.getModelsByBaseType(bmt); + datas2.forEach((dt) => { + returnValues.push(dt); + }); + }); + return returnValues; + } + /** + * 更改选中控件 + */ + changeSelecetdModels(selectedModels) { + var _a3; + if (this.selectedModels != selectedModels) { + (_a3 = this.selectedModels) == null ? void 0 : _a3.forEach((item) => { + var _a22, _b2, _c2; + (_b2 = (_a22 = item.getTopContainer()) == null ? void 0 : _a22.render) == null ? void 0 : _b2.enableRefreshShape(); + (_c2 = item.render) == null ? void 0 : _c2.enableRefreshShape(); + }); + selectedModels == null ? void 0 : selectedModels.forEach((item) => { + var _a22, _b2, _c2; + (_b2 = (_a22 = item.getTopContainer()) == null ? void 0 : _a22.render) == null ? void 0 : _b2.enableRefreshShape(); + (_c2 = item.render) == null ? void 0 : _c2.enableRefreshShape(); + }); + this.selectedModels = selectedModels; + } + } + /** + * 获取所有图层的模型 + */ + getLayerModels(ignoreModelIds, level = 1, rect) { + let models = []; + for (let i2 = 0; i2 < this.layers.length; i2++) { + let subModels = this.layers[i2].getSubModels(ignoreModelIds, level, rect); + models = models.concat(subModels); + } + return models; + } + /** + * 获取多个图层之间的所有对齐模型 + * @param data 判定的数据 + * @param souceModels 源模型,可能包含多个 + * @param points 判定的点,如果传入,则直接以这个点作为判定点,忽略其他点 + * @returns + */ + getAlignData(data, souceModels, points = null) { + let hpoint = {}; + let vpoint = {}; + let hasH = false; + let hasV = false; + let hAds = Infinity; + let vAds = Infinity; + if (souceModels.set) { + souceModels = Array.from(souceModels.values()); + } + let fModel = null; + let sourceModelKeys = []; + for (let k = 0; k < souceModels.length; k++) { + let item = souceModels[k]; + let id = item.id; + if (id.lastIndexOf("_shadow") != -1) { + id = id.substring(id, id.lastIndexOf("_shadow")); + } + sourceModelKeys.push(id); + if (!fModel) { + fModel = this.getModelById(id); + } + } + let canvas = this.ddInstance.render.getCanvas(); + let rat1 = this.ddInstance.render.ratio; + let x2 = -this.wpv.x; + let y2 = -this.wpv.y; + let x1 = x2 + canvas.width / rat1; + let y1 = y2 + canvas.height / rat1; + let stageRatio2 = this.getStageRatio(); + let curLevelModels = fModel.pModel.getSubModels(sourceModelKeys, 1, { x: x2 / stageRatio2, y: y2 / stageRatio2, x1: x1 / stageRatio2, y1: y1 / stageRatio2 }); + curLevelModels.forEach((model) => { + let outPVS = (points == null ? void 0 : points.length) > 0 ? points : data.pvs; + let inPVS = model.getAPVS(); + outPVS.forEach((pv) => { + inPVS == null ? void 0 : inPVS.forEach((mpv) => { + let pvy = pv.y; + let pvx = pv.x; + let mpvy = mpv.y; + let mpvx = mpv.x; + if (Math.abs(pvy - mpvy) < 1) { + hasH = true; + if (!hpoint[pvy]) { + hpoint[pvy] = { sx: Math.min(pvx, mpvx), ex: Math.max(pvx, mpvx) }; + } else { + hpoint[pvy].sx = Math.min(hpoint[pvy].sx, pvx, mpvx); + hpoint[pvy].ex = Math.max(hpoint[pvy].sx, pvx, mpvx); + } + } + if (hAds == Infinity && Math.abs(pvy - mpvy) <= this.ddInstance.GLOBAL_ADV_WEIGHT) { + hAds = pvy - mpvy; + } + if (Math.abs(pvx - mpvx) < 1) { + hasV = true; + if (!vpoint[pvx]) { + vpoint[pvx] = { sy: Math.min(pvy, mpvy), ey: Math.max(pvy, mpvy) }; + } else { + vpoint[pvx].sy = Math.min(vpoint[pvx].sy, pvy, mpvy); + vpoint[pvx].ey = Math.max(vpoint[pvx].sy, pvy, mpvy); + } + } + if (vAds == Infinity && Math.abs(pvx - mpvx) <= this.ddInstance.GLOBAL_ADV_WEIGHT) { + vAds = pvx - mpvx; + } + }); + }); + }); + return { hpoint: hasH ? hpoint : null, vpoint: hasV ? vpoint : null, hAds, vAds }; + } + /** + * 将模型转换为JSON + */ + toJSON() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + let json = new Object(); + let skipFields = (_a3 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _a3.SKIP; + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_b2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _b2.SKIP; + } + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_c2 = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _c2.SKIP; + } + let toJSONFields = (_d2 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _d2.TOJSON; + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_e2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _e2.TOJSON; + } + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_f = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _f.TOJSON; + } + for (let i2 in this) { + if (!skipFields || (skipFields == null ? void 0 : skipFields.indexOf(i2)) == -1) { + if (toJSONFields && toJSONFields.indexOf(i2) != -1 && this[i2]) { + if (Array.isArray(this[i2])) { + let array = []; + this[i2].forEach((element) => { + if (Array.isArray(element)) { + let subArray = []; + element.forEach((subEle) => { + if (subEle == null ? void 0 : subEle.toJSON) { + subArray.push(subEle.toJSON()); + } else { + subArray.push(subEle); + } + }); + array.push(subArray); + } else if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + }); + json[i2] = array; + } else if (this[i2].set && this[i2].has) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + json[i2] = map; + } else if (this[i2].toJSON) { + json[i2] = this[i2].toJSON(); + } else { + json[i2] = this[i2]; + } + } else { + json[i2] = this[i2]; + } + } + } + let ruleDisplay; + let ruleInit; + if (((_g = this.ruler) == null ? void 0 : _g.display) || ((_h = this.ruler) == null ? void 0 : _h.display) == 0 || ((_i = this.ruler) == null ? void 0 : _i.display) == false) { + ruleDisplay = this.ruler.display; + } else if (this.ddInstance.ruler != null && this.ddInstance.ruler != void 0) { + if (typeof this.ddInstance.ruler == "boolean") { + ruleDisplay = this.ddInstance.ruler ? 1 : 0; + } else { + ruleInit = this.ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this, "ruler.display", true); + } + if (ruleDisplay) { + json.unit = DDeiModelArrtibuteValue.getAttrValueByState(this, "ruler.unit", true, ruleInit); + } + return json; + } + /** + * 初始化日志,记录初始化状态 + */ + initHistroy() { + if (this.histroy.length == 0 && this.histroyIdx == -1) { + this.histroy.push({ time: (/* @__PURE__ */ new Date()).getTime(), data: JSON.stringify(this.toJSON()) }); + this.histroyIdx = 0; + } + } + /** + * 记录日志 + * @param layerIndex 图层下标 + */ + addHistroy(data) { + if (this.histroyIdx == -1) { + this.histroy = this.histroy.slice(0, 1); + this.histroyIdx = 0; + } else { + this.histroy = this.histroy.slice(0, this.histroyIdx + 1); + } + this.histroy.push({ time: (/* @__PURE__ */ new Date()).getTime(), data }); + this.histroyIdx = this.histroy.length - 1; + } + /** + * 返回上一个历史数据,并将下标-1 + * @param layerIndex 图层下标 + */ + revokeHistroyData() { + if (this.histroyIdx != -1) { + this.histroyIdx--; + if (this.histroyIdx == -1) { + this.histroyIdx = 0; + return this.histroy[0]; + } else { + return this.histroy[this.histroyIdx]; + } + } + } + /** + * 撤销上一次撤销并将下标+1 + * @param layerIndex 图层下标 + */ + reRevokeHistroyData() { + if (this.histroyIdx < this.histroy.length - 1) { + this.histroyIdx++; + return this.histroy[this.histroyIdx]; + } + } + /** + * 根据属性搜索控件 + * @param keywords 关键字/正则表达式 + * @param attr 搜索的属性 + * @param isReg 是否正则表达式 + * @param matchCase 区分大小写 + * @param matchAll 全字匹配 + */ + searchModels(keywords, attr, isReg = false, matchCase = false, matchAll = false) { + let resultArray = new Array(); + if (keywords && attr) { + let models = this.getLayerModels([], 100); + if (isReg) + ; + else { + for (let i2 = 0; i2 < models.length; i2++) { + let model = models[i2]; + let data = model[attr]; + if (data && typeof data == "string") { + if (!matchCase) { + data = data.toLowerCase(); + keywords = keywords.toLowerCase(); + } + if (!matchAll) { + let searchIndex = 0; + while (true) { + let ix = data.indexOf(keywords, searchIndex); + if (ix != -1) { + resultArray.push({ model, attr, index: ix, len: keywords.length }); + searchIndex = ix + 1; + } else { + break; + } + } + } else { + if (data == keywords) { + resultArray.push({ model, attr, index: 0, len: keywords.length }); + } + } + } + } + } + } + return resultArray; + } + /** + * 返回画布图片 + * @models 选中控件模型,如果不传入则返回整个画布 + */ + toImageDataUrl(models = null) { + let ddInstance = this.ddInstance; + if (ddInstance == null ? void 0 : ddInstance.render) { + let canvas = document.createElement("canvas"); + let ctx = canvas.getContext("2d"); + let rat1 = ddInstance.render.ratio; + let allLayers = false; + if (!models || models.length < 0) { + models = this.getLayerModels(null, 100); + allLayers = true; + } + let outRect = DDeiAbstractShape.getOutRectByPV(models); + let stageRatio2 = this.getStageRatio(); + outRect.x *= stageRatio2; + outRect.y *= stageRatio2; + outRect.width *= stageRatio2; + outRect.height *= stageRatio2; + let lineOffset = 5 * stageRatio2; + let addWidth = 2 * lineOffset; + let editorId = DDeiUtil$1.getEditorId(ddInstance); + let containerDiv = document.getElementById(editorId + "_ddei_cut_img_div"); + canvas.setAttribute("style", "-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;zoom:" + 1 / rat1); + let cW = (outRect.width + addWidth) * rat1; + let cH = (outRect.height + addWidth) * rat1; + canvas.setAttribute("width", cW); + canvas.setAttribute("height", cH); + ctx.translate((-outRect.x + lineOffset - 5 * stageRatio2) * rat1, (-outRect.y + lineOffset - 5 * stageRatio2) * rat1); + containerDiv.appendChild(canvas); + if (allLayers) { + let layers = this.layers; + layers.forEach((ly) => { + ly.midList.forEach((mid) => { + var _a3, _b2; + let model = ly.models.get(mid); + (_a3 = model == null ? void 0 : model.render) == null ? void 0 : _a3.clearCachedValue(); + (_b2 = model == null ? void 0 : model.render) == null ? void 0 : _b2.drawShape(); + if (model.baseModelType == "DDeiLine") { + let lineRect = DDeiAbstractShape.getOutRectByPV([model]); + ctx.drawImage(model.render.tempCanvas, (lineRect.x - 5) * stageRatio2 * rat1, (lineRect.y - 5) * stageRatio2 * rat1); + } else if (!model.render.viewer) { + ctx.drawImage(model.render.tempCanvas, model.x * stageRatio2 * rat1, model.y * stageRatio2 * rat1); + } + }); + }); + } else { + models[0].pModel.midList.forEach((mid) => { + models.forEach((item) => { + if (item.id == mid) { + let rendList = DDeiUtil$1.sortRendList(item); + rendList.forEach((rendItem) => { + rendItem.render.clearCachedValue(); + rendItem.render.drawShape({}); + if (rendItem.baseModelType == "DDeiLine") { + let lineRect = DDeiAbstractShape.getOutRectByPV([rendItem]); + ctx.drawImage(rendItem.render.tempCanvas, (lineRect.x - 5) * stageRatio2 * rat1, (lineRect.y - 5) * stageRatio2 * rat1); + } else if (!rendItem.render.viewer) { + ctx.drawImage(rendItem.render.tempCanvas, rendItem.x * stageRatio2 * rat1, rendItem.y * stageRatio2 * rat1); + } + this.drawComposeImageToCanvas(rendItem, ctx, stageRatio2, rat1); + }); + } + }); + }); + } + let dataURL = canvas.toDataURL(); + containerDiv.removeChild(canvas); + return dataURL; + } + return null; + } + drawComposeImageToCanvas(model, ctx, stageRatio2, rat1) { + var _a3; + (_a3 = model.composes) == null ? void 0 : _a3.forEach((comp) => { + comp.render.clearCachedValue(); + comp.render.drawShape(); + if (comp.baseModelType == "DDeiLine") { + let lineRect = DDeiAbstractShape.getOutRectByPV([comp]); + ctx.drawImage(comp.render.tempCanvas, (lineRect.x - 5) * stageRatio2 * rat1, (lineRect.y - 5) * stageRatio2 * rat1); + } else if (!comp.render.viewer) { + ctx.drawImage(comp.render.tempCanvas, comp.x * stageRatio2 * rat1, comp.y * stageRatio2 * rat1); + } + this.drawComposeImageToCanvas(comp, ctx, stageRatio2, rat1); + }); + } + }; + __publicField2(_DDeiStage, "ClsName", "DDeiStage"); + let DDeiStage = _DDeiStage; + const __vite_glob_0_11$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiStage, + default: DDeiStage + }, Symbol.toStringTag, { value: "Module" })); + class DDeiFuncCallResult { + constructor() { + __publicField2(this, "state", 0); + } + } + const _DDei = class _DDei2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "containerid"); + __publicField2(this, "stage"); + __publicField2(this, "modelType", "DDei"); + __publicField2(this, "disabled", false); + __publicField2(this, "pixel", 2); + __publicField2(this, "controlModelClasses"); + __publicField2(this, "controlViewClasses"); + __publicField2(this, "state", DDeiEnumState.NONE); + __publicField2(this, "bus", null); + __publicField2(this, "editMode", 1); + __publicField2(this, "width", 0); + __publicField2(this, "height", 0); + __publicField2(this, "ratio", 1); + __publicField2(this, "mark", null); + __publicField2(this, "ruler", null); + __publicField2(this, "grid", null); + __publicField2(this, "paper", null); + __publicField2(this, "background", null); + __publicField2(this, "EXT_STAGE_WIDTH", true); + __publicField2(this, "EXT_STAGE_HEIGHT", true); + __publicField2(this, "GLOBAL_ALLOW_STAGE_RATIO", true); + __publicField2(this, "GLOBAL_ADV_WEIGHT", 5); + __publicField2(this, "GLOBAL_HELP_LINE_ENABLE", true); + __publicField2(this, "EVENT_LOAD_FILE", null); + __publicField2(this, "EVENT_SAVE_FILE", null); + __publicField2(this, "EVENT_CONTROL_SELECT_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_SELECT_AFTER", null); + __publicField2(this, "EVENT_CONTROL_CREATE_BEFORE", null); + __publicField2(this, "EVENT_MOUSE_OPERATING", null); + __publicField2(this, "EVENT_CONTROL_CREATE_AFTER", null); + __publicField2(this, "EVENT_CONTROL_DRAG_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_DRAG_AFTER", null); + __publicField2(this, "EVENT_LINE_DRAG_BEFORE", null); + __publicField2(this, "EVENT_LINE_DRAG_AFTER", null); + __publicField2(this, "EVENT_CONTROL_DEL_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_DEL_AFTER", null); + __publicField2(this, "EVENT_CONTROL_EDIT_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_EDIT_AFTER", null); + __publicField2(this, "EVENT_CONTROL_VIEW_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_VIEW_AFTER", null); + __publicField2(this, "EVENT_STAGE_CHANGE_WPV", null); + __publicField2(this, "EVENT_STAGE_CHANGE_RATIO", null); + __publicField2(this, "dpi", null); + this.id = props.id; + this.containerid = props.containerid; + this.stage = null; + this.EVENT_CONTROL_SELECT_BEFORE = _DDei2.beforeOperateValid; + this.EVENT_CONTROL_CREATE_BEFORE = _DDei2.beforeOperateValid; + this.EVENT_CONTROL_DRAG_BEFORE = _DDei2.beforeOperateValid; + this.EVENT_CONTROL_DEL_BEFORE = _DDei2.beforeOperateValid; + this.EVENT_CONTROL_EDIT_BEFORE = _DDei2.beforeOperateValid; + this.EVENT_CONTROL_VIEW_BEFORE = _DDei2.beforeOperateValid; + } + // ============================ 静态方法 ============================ + /** + * 选中前,一般用于校验,默认根据权限配置参数进行校验 + */ + static beforeOperateValid(operate, data, ddInstance, evt) { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", ddInstance); + let rs = new DDeiFuncCallResult(); + rs.state = 1; + let models = data == null ? void 0 : data.models; + let propName = data == null ? void 0 : data.propName; + for (let i2 = 0; i2 < (models == null ? void 0 : models.length); i2++) { + let access = DDeiUtil$1.isAccess( + operate, + models[i2], + propName, + modeName, + ddInstance + ); + if (!access) { + rs.state = -2; + return rs; + } + } + return rs; + } + /** + * 给予container构建一个DDei实例 + * 每一个DDei至少包含1个文件 + * @param {id} id 文件id + * @param {containerid} containerid 容器id + * @param {stagejson} stagejson 内容JSON,如果没有则会创建一个 + */ + static newInstance(id, containerid, stagejson, editor) { + if (id && containerid) { + if (!_DDei2.INSTANCE_POOL.get(id)) { + let ddInstance = new _DDei2({ id, containerid }); + if (editor) { + editor.ddInstance = ddInstance; + } + if (stagejson) { + ddInstance.stage = DDeiStage.loadFromJSON(stagejson, { currentDdInstance: ddInstance }); + } else { + ddInstance.stage = DDeiStage.initByJSON({ id: "stage_1" }, { currentDdInstance: ddInstance }); + } + ddInstance.stage.ddInstance = ddInstance; + _DDei2.INSTANCE_POOL.set(id, ddInstance); + ddInstance.bus = new DDeiBus$1({ ddInstance }); + ddInstance.dpi = DDeiUtil$1.getDPI(); + return ddInstance; + } else { + let ddInstance = _DDei2.INSTANCE_POOL.get(id); + return ddInstance; + } + } + } + //以上字段为初始化时传入的全局控制变量或钩子函数,在运行时不会改变 + // ============================ 方法 ============================ + /** + * 初始化渲染器 + */ + initRender() { + if (this.render) { + this.render.destroyed(); + } + DDeiConfig$1.bindRender(this); + this.render.init(); + this.stage.initRender(); + } + /** + * 修改当前编辑模式 + * @param mode 编辑模式 + */ + changeEditMode(mode) { + if (this.editMode != mode) { + this.editMode = mode; + } + } + /** + * 应用外部配置文件,覆写配置文件内容 + * @param config + */ + applyConfig(config2) { + if (config2) { + for (let i2 in config2) { + if (i2 != "SERI_FIELDS") { + this[i2] = config2[i2]; + } + } + } + } + /** + * 将模型转换为JSON + */ + toJSON() { + var _a3, _b2, _c2, _d2, _e2, _f; + let json = new Object(); + let skipFields = (_a3 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _a3.SKIP; + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_b2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _b2.SKIP; + } + if (!((skipFields == null ? void 0 : skipFields.length) > 0)) { + skipFields = (_c2 = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _c2.SKIP; + } + let toJSONFields = (_d2 = DDeiConfig$1.SERI_FIELDS[this.modelType]) == null ? void 0 : _d2.TOJSON; + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_e2 = DDeiConfig$1.SERI_FIELDS[this.baseModelType]) == null ? void 0 : _e2.TOJSON; + } + if (!((toJSONFields == null ? void 0 : toJSONFields.length) > 0)) { + toJSONFields = (_f = DDeiConfig$1.SERI_FIELDS["AbstractShape"]) == null ? void 0 : _f.TOJSON; + } + for (let i2 in this) { + if (!skipFields || (skipFields == null ? void 0 : skipFields.indexOf(i2)) == -1) { + if (toJSONFields && toJSONFields.indexOf(i2) != -1 && this[i2]) { + if (Array.isArray(this[i2])) { + let array = []; + this[i2].forEach((element) => { + if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + }); + json[i2] = array; + } else if (this[i2].set && this[i2].has) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + json[i2] = map; + } else if (this[i2].toJSON) { + json[i2] = this[i2].toJSON(); + } else { + json[i2] = this[i2]; + } + } else { + json[i2] = this[i2]; + } + } + } + return json; + } + }; + __publicField2(_DDei, "INSTANCE_POOL", /* @__PURE__ */ new Map()); + __publicField2(_DDei, "KEY_DOWN_STATE", /* @__PURE__ */ new Map()); + let DDei = _DDei; + var DDeiEnumOperateState = /* @__PURE__ */ ((DDeiEnumOperateState2) => { + DDeiEnumOperateState2[DDeiEnumOperateState2["NONE"] = 0] = "NONE"; + DDeiEnumOperateState2[DDeiEnumOperateState2["CONTROL_CONFIRMING"] = 1] = "CONTROL_CONFIRMING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["CONTROL_CREATING"] = 2] = "CONTROL_CREATING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["CONTROL_DRAGING"] = 3] = "CONTROL_DRAGING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["CONTROL_CHANGING_BOUND"] = 4] = "CONTROL_CHANGING_BOUND"; + DDeiEnumOperateState2[DDeiEnumOperateState2["CONTROL_ROTATE"] = 5] = "CONTROL_ROTATE"; + DDeiEnumOperateState2[DDeiEnumOperateState2["SELECT_WORKING"] = 10] = "SELECT_WORKING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["TABLE_INNER_DRAG"] = 11] = "TABLE_INNER_DRAG"; + DDeiEnumOperateState2[DDeiEnumOperateState2["GRAB_WORKING"] = 20] = "GRAB_WORKING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["STAGE_SCROLL_WORKING"] = 21] = "STAGE_SCROLL_WORKING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["TEXT_CREATING"] = 30] = "TEXT_CREATING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["LINE_POINT_CHANGING"] = 40] = "LINE_POINT_CHANGING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["LINE_POINT_CHANGING_CONFIRM"] = 41] = "LINE_POINT_CHANGING_CONFIRM"; + DDeiEnumOperateState2[DDeiEnumOperateState2["QUICK_EDITING"] = 50] = "QUICK_EDITING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["QUICK_EDITING_TEXT_SELECTING"] = 51] = "QUICK_EDITING_TEXT_SELECTING"; + DDeiEnumOperateState2[DDeiEnumOperateState2["OV_POINT_CHANGING"] = 60] = "OV_POINT_CHANGING"; + return DDeiEnumOperateState2; + })(DDeiEnumOperateState || {}); + const _DDeiSelector = class _DDeiSelector2 extends DDeiRectangle { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "modelType", "DDeiSelector"); + __publicField2(this, "baseModelType", "DDeiSelector"); + __publicField2(this, "paddingWeight"); + __publicField2(this, "operateIconFill"); + __publicField2(this, "passIndex", -1); + __publicField2(this, "opvsIndex", -1); + __publicField2(this, "passType", ""); + __publicField2(this, "passChange", false); + this.paddingWeight = props.paddingWeight; + this.operateIconFill = props.operateIconFill; + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json) { + let shape = new _DDeiSelector2(json); + return shape; + } + // ============================ 方法 =============================== + /** + * 设置passindex + * @param index pass值 + */ + setPassIndex(passType, passIndex, opvsIndex) { + if (this.passType != passType || this.passIndex != passIndex || this.opvsIndex != opvsIndex) { + this.passIndex = passIndex; + this.passType = passType; + this.opvsIndex = opvsIndex; + this.passChange = true; + } + } + /** + * 重制状态 + */ + resetState(x2 = -1, y2 = -1) { + this.startX = x2; + this.startY = y2; + this.updatePVSByRect(0, 0, 0, 0); + this.setState(DDeiEnumControlState.DEFAULT); + } + /** + * 获取当前选择器包含的模型 + * @returns + */ + getIncludedModels() { + let rectPVS = this.pvs; + let selectBounds = DDeiAbstractShape.pvsToOutRect(rectPVS); + let looseWeight = 2; + selectBounds.x -= looseWeight; + selectBounds.y -= looseWeight; + selectBounds.x1 += 2 * looseWeight; + selectBounds.y1 += 2 * looseWeight; + let models = /* @__PURE__ */ new Map(); + this.stage.layers[this.stage.layerIndex].models.forEach((item, key) => { + if (item.id != this.id) { + let pvs2 = item.pvs; + let inRectNum = 0; + pvs2.forEach((pv) => { + if (selectBounds.x <= pv.x && selectBounds.y < pv.y && selectBounds.x1 >= pv.x && selectBounds.y1 >= pv.y) { + inRectNum++; + } + }); + if (pvs2.length > 3 && inRectNum >= pvs2.length - 1) { + models.set(item.id, item); + } else if (inRectNum == pvs2.length) { + models.set(item.id, item); + } + } + }); + return models; + } + /** + * 获取画布缩放比率 + */ + getStageRatio() { + var _a3; + return (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + } + updatePVSByRect(x2, y2, w, h) { + let pvs2 = []; + pvs2.push(new Vector3(x2, y2, 1)); + pvs2.push(new Vector3(x2 + w, y2, 1)); + pvs2.push(new Vector3(x2 + w, y2 + h, 1)); + pvs2.push(new Vector3(x2, y2 + h, 1)); + this.cpv = this.cpv = new Vector3(x2 + w / 2, y2 + h / 2, 1); + this.pvs = pvs2; + this.initHPV(); + this.calRotate(); + this.calOPVS(); + this.calLoosePVS(); + } + /** + * 根据已选择的控件更新向量信息 + * @param pContainerModel 上层容器控件 + */ + updatePVSByModels(models) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + if (!models) { + models = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels; + } + if (!models) { + let pContainerModel = this.stage.layers[this.stage.layerIndex]; + models = pContainerModel.getSelectedModels(); + } + if ((models == null ? void 0 : models.size) > 0 || (models == null ? void 0 : models.length) > 0) { + if (models.set) { + models = Array.from(models.values()); + } + let paddingWeightInfo = ((_b2 = this.paddingWeight) == null ? void 0 : _b2.selected) ? this.paddingWeight.selected : DDeiConfig$1.SELECTOR.PADDING_WEIGHT.selected; + let paddingWeight = 0; + if (models.length > 1) { + paddingWeight = paddingWeightInfo.multiple; + } else { + paddingWeight = paddingWeightInfo.single; + } + let pvs2 = null; + let exeCalLoosePVS = true; + if (models.length == 1) { + if (models[0].baseModelType == "DDeiLine") { + exeCalLoosePVS = false; + pvs2 = cloneDeep(models[0].pvs); + this.cpv = cloneDeep(models[0].cpv); + } + pvs2 = DDeiUtil$1.pointsToZero(models[0].operatePVS, models[0].cpv, models[0].rotate); + let oct = DDeiAbstractShape.pvsToOutRect(pvs2); + pvs2 = [new Vector3(oct.x, oct.y, 1), new Vector3(oct.x1, oct.y, 1), new Vector3(oct.x1, oct.y1, 1), new Vector3(oct.x, oct.y1, 1)]; + pvs2 = DDeiUtil$1.zeroToPoints(pvs2, models[0].cpv, models[0].rotate); + this.cpv = clone(models[0].cpv); + let defineSample2 = (_d2 = (_c2 = DDeiUtil$1.getControlDefine(models[0])) == null ? void 0 : _c2.define) == null ? void 0 : _d2.sample; + this.eqrat = ((_f = (_e2 = models[0]) == null ? void 0 : _e2.sample) == null ? void 0 : _f.eqrat) || (defineSample2 == null ? void 0 : defineSample2.eqrat); + } else { + this.eqrat = false; + for (let i2 = 0; i2 < models.length; i2++) { + let defineSample2 = (_h = (_g = DDeiUtil$1.getControlDefine(models[i2])) == null ? void 0 : _g.define) == null ? void 0 : _h.sample; + if (((_j = (_i = models[i2]) == null ? void 0 : _i.sample) == null ? void 0 : _j.eqrat) || (defineSample2 == null ? void 0 : defineSample2.eqrat)) { + this.eqrat = true; + break; + } + } + let outRectBounds = DDeiAbstractShape.getOutRectByPV(models); + pvs2 = DDeiAbstractShape.getOutPV(models); + pvs2[0].x -= paddingWeight; + pvs2[0].y -= paddingWeight; + pvs2[1].x += paddingWeight; + pvs2[1].y -= paddingWeight; + pvs2[2].x += paddingWeight; + pvs2[2].y += paddingWeight; + pvs2[3].x -= paddingWeight; + pvs2[3].y += paddingWeight; + this.cpv = new Vector3(outRectBounds.x + outRectBounds.width / 2, outRectBounds.y + outRectBounds.height / 2, 1); + } + this.pvs = pvs2; + this.initHPV(); + this.calRotate(); + this.calOPVS(); + if (exeCalLoosePVS) { + this.calLoosePVS(); + } + this.setState(DDeiEnumControlState.SELECTED); + } else { + this.resetState(); + } + } + /** + * 变换向量 + */ + transVectors(matrix2, params) { + this.cpv.applyMatrix3(matrix2); + this.pvs.forEach((pv) => { + pv.applyMatrix3(matrix2); + }); + for (let i2 in this.exPvs) { + let pv = this.exPvs[i2]; + pv.applyMatrix3(matrix2); + } + this.initHPV(); + this.calRotate(); + this.calOPVS(); + this.calLoosePVS(); + } + /** + * 基于当前向量计算宽松判定向量 + */ + calLoosePVS() { + var _a3, _b2, _c2, _d2, _e2; + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let looseWeight = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight / 2; + let tempPVS = cloneDeep(this.pvs); + let move1Matrix = new Matrix3( + 1, + 0, + -this.cpv.x, + 0, + 1, + -this.cpv.y, + 0, + 0, + 1 + ); + tempPVS.forEach((fpv) => { + fpv.applyMatrix3(move1Matrix); + }); + if (this.rotate && this.rotate != 0) { + let angle2 = DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + tempPVS.forEach((fpv) => { + fpv.applyMatrix3(rotateMatrix); + }); + } + this.x = tempPVS[0].x / stageRatio2; + this.y = tempPVS[0].y / stageRatio2; + let models = null; + if (((_c2 = (_b2 = this.stage) == null ? void 0 : _b2.selectedModels) == null ? void 0 : _c2.size) > 0) { + models = Array.from(this.stage.selectedModels.values()); + } + if (this.stage.render.operateState == DDeiEnumOperateState.SELECT_WORKING || !((models == null ? void 0 : models.length) == 1 && ((_d2 = models[0]) == null ? void 0 : _d2.baseModelType) == "DDeiLine" || tempPVS.length == 2)) { + this.width = (tempPVS[1].x - tempPVS[0].x) / stageRatio2; + this.height = (tempPVS[3].y - tempPVS[0].y) / stageRatio2; + this.essBounds = { x: tempPVS[0].x, y: tempPVS[0].y, width: tempPVS[1].x - tempPVS[0].x, height: tempPVS[3].y - tempPVS[0].y }; + this.loosePVS = []; + this.loosePVS[0] = new Vector3(tempPVS[0].x - looseWeight, tempPVS[0].y - looseWeight, 1); + this.loosePVS[1] = new Vector3(tempPVS[0].x + (tempPVS[1].x - tempPVS[0].x) / 2 - looseWeight, tempPVS[0].y - looseWeight, 1); + this.loosePVS[2] = new Vector3(this.loosePVS[1].x, this.loosePVS[1].y - 40, 1); + this.loosePVS[3] = new Vector3(this.loosePVS[2].x + 2 * looseWeight, this.loosePVS[2].y, 1); + this.loosePVS[4] = new Vector3(this.loosePVS[3].x, this.loosePVS[3].y - 40, 1); + this.loosePVS[5] = new Vector3(tempPVS[1].x + looseWeight, tempPVS[1].y - looseWeight, 1); + this.loosePVS[6] = new Vector3(this.loosePVS[5].x, tempPVS[2].y + looseWeight, 1); + this.loosePVS[7] = new Vector3(tempPVS[3].x - looseWeight, this.loosePVS[6].y, 1); + } else if ((models == null ? void 0 : models.length) == 1 && ((_e2 = models[0]) == null ? void 0 : _e2.baseModelType) == "DDeiLine" || tempPVS.length == 2) { + this.width = (tempPVS[1].x - tempPVS[0].x) / stageRatio2; + this.height = (tempPVS[1].y - tempPVS[0].y) / stageRatio2; + this.essBounds = { x: tempPVS[0].x, y: tempPVS[0].y, width: tempPVS[1].x - tempPVS[0].x, height: tempPVS[1].y - tempPVS[0].y }; + this.loosePVS = []; + this.loosePVS[0] = new Vector3(tempPVS[0].x - looseWeight, tempPVS[0].y - looseWeight, 1); + this.loosePVS[1] = new Vector3(tempPVS[1].x + looseWeight, tempPVS[0].y - looseWeight, 1); + this.loosePVS[2] = new Vector3(tempPVS[1].x + looseWeight, tempPVS[1].y + looseWeight, 1); + this.loosePVS[3] = new Vector3(tempPVS[0].x - looseWeight, tempPVS[1].y + looseWeight, 1); + } + if (this.rotate && this.rotate != 0) { + let angle2 = -DDeiUtil$1.preciseTimes(this.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + this.loosePVS.forEach((fpv) => { + fpv.applyMatrix3(rotateMatrix); + }); + } + let move2Matrix = new Matrix3( + 1, + 0, + this.cpv.x, + 0, + 1, + this.cpv.y, + 0, + 0, + 1 + ); + this.loosePVS.forEach((fpv) => { + fpv.applyMatrix3(move2Matrix); + }); + this.x += this.cpv.x / stageRatio2; + this.y += this.cpv.y / stageRatio2; + this.essBounds.x += this.cpv.x; + this.essBounds.y += this.cpv.y; + } + /** + * 根据向量点计算操作图标的向量点 + */ + calOPVS() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + let models = null; + if (((_b2 = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + models = Array.from(this.stage.selectedModels.values()); + } + if ((models == null ? void 0 : models.length) == 1 && ((_c2 = models[0]) == null ? void 0 : _c2.baseModelType) == "DDeiLine") { + let lineModel = models[0]; + let type = DDeiModelArrtibuteValue.getAttrValueByState(lineModel, "type", true); + let { startDX, startDY, endDX, endDY } = lineModel.render.getPointShapeSize(); + let opvs = []; + let opvsType = []; + let pvs2 = lineModel.pvs; + opvs.push(pvs2[0]); + opvsType.push(1); + switch (type) { + case 2: { + for (let i2 = 1; i2 < pvs2.length; i2++) { + let x2 = (pvs2[i2].x + pvs2[i2 - 1].x) / 2; + let y2 = (pvs2[i2].y + pvs2[i2 - 1].y) / 2; + opvs.push(new Vector3(x2, y2, 1)); + opvsType.push(3); + if (i2 != pvs2.length - 1) { + opvs.push(pvs2[i2]); + opvsType.push(2); + } + } + break; + } + case 3: { + if (pvs2.length >= 4) { + for (let i2 = 4; i2 <= pvs2.length; i2 += 3) { + let i0 = i2 - 4; + let i1 = i2 - 3; + let i22 = i2 - 2; + let i3 = i2 - 1; + if (i0 != 0) { + opvs.push(new Vector3(pvs2[i0].x, pvs2[i0].y, 1)); + opvsType.push(4); + } + let stratX = pvs2[i0].x; + let stratY = pvs2[i0].y; + let endX = pvs2[i3].x; + let endY = pvs2[i3].y; + if (i0 == 0) { + stratX = pvs2[i0].x + startDX; + stratY = pvs2[i0].y + startDY; + } + if (i2 == pvs2.length) { + endX = pvs2[i3].x + endDX; + endY = pvs2[i3].y + endDY; + } + let btx = stratX * DDeiUtil$1.p331t3 + DDeiUtil$1.p331t2t3 * pvs2[i1].x + DDeiUtil$1.p33t21t3 * pvs2[i22].x + DDeiUtil$1.p33t3 * endX; + let bty = stratY * DDeiUtil$1.p331t3 + DDeiUtil$1.p331t2t3 * pvs2[i1].y + DDeiUtil$1.p33t21t3 * pvs2[i22].y + DDeiUtil$1.p33t3 * endY; + opvs.push(new Vector3(btx, bty, 1)); + opvsType.push(4); + btx = stratX * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].x + DDeiUtil$1.p66t21t3 * pvs2[i22].x + DDeiUtil$1.p66t3 * endX; + bty = stratY * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].y + DDeiUtil$1.p66t21t3 * pvs2[i22].y + DDeiUtil$1.p66t3 * endY; + opvs.push(new Vector3(btx, bty, 1)); + opvsType.push(4); + } + } + break; + } + } + opvs.push(pvs2[pvs2.length - 1]); + opvsType.push(1); + this.opvs = opvs; + this.opvsType = opvsType; + } else { + let canRotate = DDei.beforeOperateValid(DDeiEnumOperateType.ROTATE, { models }, (_d2 = this.stage) == null ? void 0 : _d2.ddInstance, null); + let canScale = DDei.beforeOperateValid(DDeiEnumOperateType.SCALE, { models }, (_e2 = this.stage) == null ? void 0 : _e2.ddInstance, null); + let pvs2 = this.pvs; + let opvs = []; + let opvsType = []; + let lockWidth = 0; + let scale = 0; + if ((models == null ? void 0 : models.length) == 1) { + scale = (_g = (_f = models[0]) == null ? void 0 : _f.render) == null ? void 0 : _g.getCachedValue("textStyle.scale"); + if (scale == 3) { + lockWidth = (_i = (_h = models[0]) == null ? void 0 : _h.render) == null ? void 0 : _i.getCachedValue("textStyle.lockWidth"); + } + } + if ((pvs2 == null ? void 0 : pvs2.length) > 0) { + if (canScale.state == 0 || canScale.state == 1) { + if (scale == 3) { + if (lockWidth == 1) { + opvs[3] = { x: (pvs2[1].x + pvs2[2].x) / 2, y: (pvs2[1].y + pvs2[2].y) / 2 }; + opvs[7] = { x: (pvs2[0].x + pvs2[3].x) / 2, y: (pvs2[0].y + pvs2[3].y) / 2 }; + } + } else { + opvs[1] = { x: (pvs2[0].x + pvs2[1].x) / 2, y: (pvs2[0].y + pvs2[1].y) / 2 }; + opvs[3] = { x: (pvs2[1].x + pvs2[2].x) / 2, y: (pvs2[1].y + pvs2[2].y) / 2 }; + opvs[5] = { x: (pvs2[2].x + pvs2[3].x) / 2, y: (pvs2[2].y + pvs2[3].y) / 2 }; + opvs[7] = { x: (pvs2[0].x + pvs2[3].x) / 2, y: (pvs2[0].y + pvs2[3].y) / 2 }; + if (!this.eqrat) { + opvs[2] = { x: pvs2[1].x, y: pvs2[1].y }; + opvs[4] = { x: pvs2[2].x, y: pvs2[2].y }; + opvs[6] = { x: pvs2[3].x, y: pvs2[3].y }; + opvs[8] = { x: pvs2[0].x, y: pvs2[0].y }; + } + } + } + let v1 = new Vector3(pvs2[1].x, pvs2[1].y, 1); + let moveMatrix2 = new Matrix3( + 1, + 0, + -(pvs2[0].x + pvs2[1].x) / 2, + 0, + 1, + -(pvs2[0].y + pvs2[1].y) / 2, + 0, + 0, + 1 + ); + v1.applyMatrix3(moveMatrix2); + let angle1 = (new Vector3(1, 0, 0).angleTo(new Vector3(v1.x, v1.y, 0)) * 180 / Math.PI).toFixed(4); + let angle2 = 0; + if (v1.x >= 0 && v1.y >= 0) { + angle2 = (angle1 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (v1.x <= 0 && v1.y >= 0) { + angle2 = (angle1 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (v1.x <= 0 && v1.y <= 0) { + angle2 = (-angle1 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } else if (v1.x >= 0 && v1.y <= 0) { + angle2 = (-angle1 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + } + if (canRotate.state == 0 || canRotate.state == 1) { + let angleR1 = (90 * DDeiConfig$1.ROTATE_UNIT).toFixed(4) - angle2; + v1 = new Vector3(20, 0, 1); + let rotateMatrix = new Matrix3( + Math.cos(angleR1), + Math.sin(angleR1), + 0, + -Math.sin(angleR1), + Math.cos(angleR1), + 0, + 0, + 0, + 1 + ); + v1.applyMatrix3(rotateMatrix); + let removeMatrix = new Matrix3( + 1, + 0, + (pvs2[0].x + pvs2[1].x) / 2, + 0, + 1, + (pvs2[0].y + pvs2[1].y) / 2, + 0, + 0, + 1 + ); + v1.applyMatrix3(removeMatrix); + opvs[9] = v1; + } + let v2 = new Vector3(25, 0, 1); + let angleR2 = (135 * DDeiConfig$1.ROTATE_UNIT).toFixed(4) - angle2; + let rotateMatrix2 = new Matrix3( + Math.cos(angleR2), + Math.sin(angleR2), + 0, + -Math.sin(angleR2), + Math.cos(angleR2), + 0, + 0, + 0, + 1 + ); + v2.applyMatrix3(rotateMatrix2); + let removeMatrix2 = new Matrix3( + 1, + 0, + pvs2[0].x, + 0, + 1, + pvs2[0].y, + 0, + 0, + 1 + ); + v2.applyMatrix3(removeMatrix2); + opvs[10] = v2; + this.opvs = opvs; + this.opvsType = opvsType; + } + } + } + /** + * 返回当前坐标是否在操作点上,并返回操作点的类型 + * @param direct 操作点下标 + * @param x + * @param y + */ + isOpvOnLine(x2, y2) { + let weight = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight; + let halfWeigth = weight * 0.5; + for (let i2 = 0; i2 < this.opvs.length; i2++) { + let pv = this.opvs[i2]; + if (DDeiAbstractShape.isInsidePolygon( + [ + { x: pv.x - halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y + halfWeigth }, + { x: pv.x - halfWeigth, y: pv.y + halfWeigth } + ], + { x: x2, y: y2 } + )) { + return { type: this.opvsType[i2], index: i2 }; + } + } + return null; + } + /** + * 判断是否在某个操作点上 + * @param direct 操作点下标 + * @param x + * @param y + */ + isOpvOn(direct, x2, y2) { + if (this.opvs && this.opvs[direct]) { + let pv = this.opvs[direct]; + if (pv) { + let width = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight; + let halfWidth = width * 0.5; + return DDeiAbstractShape.isInsidePolygon( + [ + { x: pv.x - halfWidth, y: pv.y - halfWidth }, + { x: pv.x + halfWidth, y: pv.y - halfWidth }, + { x: pv.x + halfWidth, y: pv.y + halfWidth }, + { x: pv.x - halfWidth, y: pv.y + halfWidth } + ], + { x: x2, y: y2 } + ); + } + } + return false; + } + /** + * 判断图形是否在一个区域内,采用宽松的判定模式,允许传入一个大小值 + * @param x + * @param y + * @param loose 宽松判定,默认false + * @returns 是否在区域内 + */ + isInAreaLoose(x2 = void 0, y2 = void 0, loose = false) { + var _a3, _b2, _c2; + let models = null; + if (((_b2 = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + models = Array.from(this.stage.selectedModels.values()); + } + if ((models == null ? void 0 : models.length) == 1 && ((_c2 = models[0]) == null ? void 0 : _c2.baseModelType) == "DDeiLine") { + return models[0].isInAreaLoose(x2, y2, loose); + } else { + return super.isInAreaLoose(x2, y2, loose); + } + } + }; + __publicField2(_DDeiSelector, "ClsName", "DDeiSelector"); + let DDeiSelector = _DDeiSelector; + const __vite_glob_0_9$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiSelector, + default: DDeiSelector + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTableCell = class _DDeiTableCell2 extends DDeiPolygonContainer { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "modelType", "DDeiTableCell"); + __publicField2(this, "baseModelType", "DDeiTableCell"); + __publicField2(this, "table"); + __publicField2(this, "mergeRowNum"); + __publicField2(this, "mergeColNum"); + __publicField2(this, "mergedCell"); + __publicField2(this, "originWidth"); + __publicField2(this, "originHeight"); + __publicField2(this, "row"); + __publicField2(this, "col"); + this.table = props.table; + this.row = props.row; + this.col = props.col; + this.mergeRowNum = props.mergeRowNum; + this.mergeColNum = props.mergeColNum; + this.mergedCell = props.mergedCell; + this.originWidth = props.originWidth; + this.originHeight = props.originHeight; + } + // ============================ 方法 =============================== + /** + * 当前单元格是否为合并单元格 + */ + isMergeCell() { + return this.mergeRowNum > 1 || this.mergeColNum > 1; + } + /** + * 当前单元格是否为被合并单元格 + */ + isMergedCell() { + return this.mergedCell != null; + } + /** + * 设置当前单元格状态为选中 + */ + selectCell() { + this.setState(DDeiEnumControlState.SELECTED); + this.table.curRow = this.row; + this.table.curCol = this.col; + } + /** + * 选择或者取消选择当前单元格 + */ + selectOrCancelCell() { + if (this.state == DDeiEnumControlState.SELECTED) { + this.setState(DDeiEnumControlState.DEFAULT); + this.table.curRow = -1; + this.table.curCol = -1; + } else { + this.selectCell(); + } + } + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + var _a3; + let container2 = new _DDeiTableCell2(json); + container2.layer = tempData["currentLayer"]; + container2.stage = tempData["currentStage"]; + container2.pModel = tempData["currentContainer"]; + if (!container2.pModel) { + container2.pModel = container2.layer; + } + tempData[container2.id] = container2; + let ddInstance = (_a3 = container2.stage) == null ? void 0 : _a3.ddInstance; + let models = /* @__PURE__ */ new Map(); + for (let key in json.models) { + tempData["currentContainer"] = container2; + let item = json.models[key]; + let model = ddInstance.controlModelClasses[item.modelType].loadFromJSON(item, tempData); + models.set(key, model); + tempData["currentContainer"] = null; + } + container2.models = models; + container2.initPVS(); + container2.initRender(); + return container2; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}) { + let model = new _DDeiTableCell2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + model.initPVS(); + return model; + } + }; + __publicField2(_DDeiTableCell, "ClsName", "DDeiTableCell"); + let DDeiTableCell = _DDeiTableCell; + const __vite_glob_0_12$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTableCell, + default: DDeiTableCell + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTableSelector = class _DDeiTableSelector2 extends DDeiSelector { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "modelType", "DDeiTableSelector"); + __publicField2(this, "baseModelType", "DDeiSelector"); + __publicField2(this, "table"); + this.table = props.table; + } + // ============================ 方法 =============================== + /** + * 根据已选择的表格单元格,更新自身的大小以及位置 + */ + updatedBounds() { + if (this.table.state == DDeiEnumControlState.DEFAULT) { + this.setBounds(0, 0, 0, 0); + } else { + let minMax = this.table.getMinMaxRowAndCol(this.table.getSelectedCells()); + if (minMax) { + let rect = this.table.getCellPositionRect(minMax.minRow, minMax.minCol, minMax.maxRow, minMax.maxCol); + let tableAbsPos = this.table.getAbsPosition(); + this.setBounds(tableAbsPos.x + rect.x, tableAbsPos.y + rect.y, rect.width, rect.height); + } else { + this.setBounds(0, 0, 0, 0); + } + } + } + // ============================ 静态变量 ============================ + // ============================ 静态方法 ============================ + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}) { + let model = new _DDeiTableSelector2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + model.initPVS(); + return model; + } + // ============================ 方法 =============================== + /** + * 获取画布缩放比率 + */ + getStageRatio() { + if (this.stage) { + let stageRatio2 = parseFloat(this.stage.ratio) ? this.stage.ratio : 1; + if (!stageRatio2 || isNaN(stageRatio2)) { + stageRatio2 = this.stage.ddInstance.ratio; + } + return stageRatio2; + } else { + return 1; + } + } + }; + __publicField2(_DDeiTableSelector, "ClsName", "DDeiTableSelector"); + let DDeiTableSelector = _DDeiTableSelector; + const __vite_glob_0_13$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTableSelector, + default: DDeiTableSelector + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTable = class _DDeiTable2 extends DDeiAbstractShape { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "modelType", "DDeiTable"); + __publicField2(this, "baseModelType", "DDeiTable"); + __publicField2(this, "cols"); + __publicField2(this, "rows"); + __publicField2(this, "initRowNum", 5); + __publicField2(this, "initColNum", 5); + __publicField2(this, "curCol", -1); + __publicField2(this, "curRow", -1); + __publicField2(this, "selector", null); + this.cols = props.cols; + this.rows = props.rows; + this.initRowNum = props.initRowNum ? props.initRowNum : 5; + this.initColNum = props.initColNum ? props.initColNum : 5; + } + // ============================ 方法 =============================== + /** + * 初始化渲染器 + */ + initRender() { + DDeiConfig$1.bindRender(this); + this.render.init(); + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + cellObj.stage = this.stage; + cellObj.table = this; + cellObj.layer = this.layer; + cellObj.pModel = this; + cellObj.ddInstance = this.ddInstance; + cellObj.initRender(); + } + } + this.initSelector(); + } + /** + * 初始化表格 + */ + initTable() { + var _a3, _b2, _c2; + if (!(((_a3 = this.rows) == null ? void 0 : _a3.length) > 0 && ((_b2 = this.cols) == null ? void 0 : _b2.length) > 0)) { + let initWidth = parseFloat((this.width / this.initColNum).toFixed(4)); + let initHeight = parseFloat((this.height / this.initRowNum).toFixed(4)); + this.rows = []; + this.cols = []; + for (let i2 = 0; i2 < this.initRowNum; i2++) { + this.rows[i2] = []; + for (let j2 = 0; j2 < this.initColNum; j2++) { + if (i2 == 0) { + this.cols[j2] = []; + } + let initJSON = DDeiUtil$1.getSubControlJSON(this.modelCode, (_c2 = this.stage) == null ? void 0 : _c2.ddInstance); + initJSON.id = this.id + "_c_" + i2 + "_" + j2; + let x2 = (j2 + 0.5) * initWidth; + let y2 = (i2 + 0.5) * initHeight; + initJSON.row = i2; + initJSON.col = j2; + initJSON.width = initWidth; + initJSON.height = initHeight; + initJSON.table = this; + this.rows[i2][j2] = DDeiTableCell.initByJSON(initJSON, { currentStage: this.stage }); + this.rows[i2][j2].cpv.x += this.x + x2; + this.rows[i2][j2].cpv.y += this.y + y2; + this.rows[i2][j2].pvs.forEach((pv) => { + pv.x += this.x + x2; + pv.y += this.y + y2; + }); + this.rows[i2][j2].calLoosePVS(); + this.cols[j2][i2] = this.rows[i2][j2]; + } + } + } + } + /** + * 初始化选择器 + */ + initSelector() { + if (!this.selector) { + this.selector = DDeiTableSelector.initByJSON({ + id: this.id + "_table_selector", + border: DDeiConfig$1.TABLE.selector.border, + fill: { default: {}, selected: {} }, + table: this + }); + this.selector.stage = this.stage; + DDeiConfig$1.bindRender(this.selector); + this.selector.initRender(); + this.selector.resetState(); + } + } + /** + * 清除所有选中的单元格,并将curRow和curCol归位 + */ + clearSelectionCells() { + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + cellObj.setState(DDeiEnumControlState.DEFAULT); + } + } + this.curRow = -1; + this.curCol = -1; + } + //重设所有单元格的行列关系,以及对应的坐标、向量等 + resetCellData() { + let tmpY = 0; + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + let tmpX = 0; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + cellObj.row = i2; + cellObj.col = j2; + cellObj.setPosition(tmpX, tmpY); + if (cellObj.mergedCell != null || cellObj.mergeRowNum > 1 || cellObj.mergeColNum > 1) { + tmpX = tmpX + cellObj.originWidth; + } else { + tmpX = tmpX + cellObj.width; + } + if (j2 == rowObj.length - 1) { + if (cellObj.mergedCell != null || cellObj.mergeRowNum > 1 || cellObj.mergeColNum > 1) { + tmpY = tmpY + cellObj.originHeight; + } else { + tmpY = tmpY + cellObj.height; + } + } + } + } + } + /** + * 获取子模型 + */ + getSubModels(ignoreModelIds, level = 1) { + let models = []; + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let subModels = rowObj[j2].getSubModels(ignoreModelIds, level - 1); + models = models.concat(subModels); + } + } + return models; + } + /** + * 设置表格大小 + * @param w + * @param h + */ + setSize(w, h) { + if (this.width && this.height) { + let wR = w / this.width; + let hR = h / this.height; + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + cellObj.setBounds(cellObj.x * wR, cellObj.y * hR, cellObj.width * wR, cellObj.height * hR); + cellObj.originWidth = cellObj.originWidth * wR; + cellObj.originHeight = cellObj.originHeight * hR; + } + } + } + super.setSize(w, h); + } + /** + * 在第row行(下标)之下插入一个新行,插入的行的大小等于row的大小 + * 插入后会重新维护所有行列关系 + * 插入后会维护合并单元格关系 + * 插入行后会往下增加表格的总高度,使表格高度=SUM(行高) + * @param row 行数 + * @param direction 1向上,2向下 + */ + insertRow(row, direction) { + var _a3; + let firstInsert = false; + if (row < 0) { + row = 0; + firstInsert = true; + } else if (row > this.rows.length - 1) { + row = this.rows.length - 1; + } + let currentRow = this.rows[row]; + let newRow = []; + let corssMergeCell = []; + let addHeight = 0; + for (let i2 = 0; i2 < currentRow.length; i2++) { + let oldCell = currentRow[i2]; + let newWidth = 0; + let newHeight = 0; + if (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1 || oldCell.mergedCell) { + newWidth = oldCell.originWidth; + newHeight = oldCell.originHeight; + } else { + newWidth = oldCell.width; + newHeight = oldCell.height; + } + let initJSON = DDeiUtil$1.getSubControlJSON(this.modelCode, (_a3 = this.stage) == null ? void 0 : _a3.ddInstance); + initJSON.width = newWidth; + initJSON.height = newHeight; + initJSON.table = this; + let newCell = DDeiTableCell.initByJSON(initJSON, { currentStage: this.stage }); + newCell.cpv.x += x; + newCell.cpv.y += y; + newCell.pvs.forEach((pv) => { + pv.x += x; + pv.y += y; + }); + newCell.calLoosePVS(); + newCell.layer = this.layer; + newCell.stage = this.stage; + newCell.pModel = this; + newCell.initRender(); + newRow[i2] = newCell; + if (i2 == 0) { + addHeight = newCell.height; + } + let mCell = null; + if (!firstInsert && (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1 || oldCell.mergedCell)) { + if (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1) { + mCell = oldCell; + } else if (oldCell.mergedCell) { + mCell = this.rows[oldCell.mergedCell.row][oldCell.mergedCell.col]; + } + newCell.mergedCell = mCell; + if (corssMergeCell.indexOf(mCell) == -1) { + corssMergeCell[corssMergeCell.length] = mCell; + mCell.mergeRowNum = mCell.mergeRowNum + 1; + mCell.setSize(void 0, parseFloat(mCell.height) + parseFloat(newCell.height)); + } + newCell.originWidth = newCell.width; + newCell.originHeight = newCell.height; + newCell.height = 0; + newCell.width = 0; + } + } + this.height = this.height + addHeight; + this.setModelChanged(); + for (let i2 = 0; i2 < this.cols.length; i2++) { + let currentCol = this.cols[i2]; + if (firstInsert) { + currentCol.splice(0, 0, newRow[i2]); + } else { + currentCol.splice(row + 1, 0, newRow[i2]); + } + } + if (firstInsert) { + this.rows.splice(0, 0, newRow); + } else { + this.rows.splice(row + 1, 0, newRow); + } + this.resetCellData(); + window.globalTableCopyData = null; + window.globalTableCutData = null; + if (this.copyAreaShape) { + this.copyAreaShape.style.display = "none"; + } + this.clearSelectionCells(); + if (firstInsert) { + if (direction == 1) { + this.curRow = 0; + } else { + this.curRow = 1; + } + } else { + this.curRow = row + 1; + } + this.setState(DDeiEnumControlState.SELECTED); + for (let i2 = 0; i2 < this.cols.length; i2++) { + this.cols[i2][this.curRow].setState(DDeiEnumControlState.SELECTED); + } + this.changeChildrenBounds(); + } + /** + * 修改自身状态 + */ + setState(state) { + super.setState(state); + if (this.state == DDeiEnumControlState.DEFAULT) { + this.selector.resetState(); + } + } + /** + * 计算单元格的点旋转后的坐标 + * @param rotateMatrix 旋转矩阵 + */ + calCellsRotatePointVectors(rotateMatrix) { + var _a3; + let looseWeight = 10; + let parentCenterPointVector = this.centerPointVector; + if (parentCenterPointVector) { + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let item = rowObj[j2]; + let halfWidth = item.width * 0.5; + let halfHeight = item.height * 0.5; + let vc, vc1, vc2, vc3, vc4; + let loosePointVectors = null; + if (((_a3 = item.pointVectors) == null ? void 0 : _a3.length) > 0) { + vc = item.centerPointVector; + vc1 = item.pointVectors[0]; + vc2 = item.pointVectors[1]; + vc3 = item.pointVectors[2]; + vc4 = item.pointVectors[3]; + loosePointVectors = item.loosePointVectors; + } else { + item.pointVectors = []; + let absBoundsOrigin = item.getAbsBounds(); + vc = new Vector3(absBoundsOrigin.x + halfWidth, absBoundsOrigin.y + halfHeight, 1); + vc1 = new Vector3(vc.x - halfWidth, vc.y - halfHeight, 1); + vc2 = new Vector3(vc.x + halfWidth, vc.y - halfHeight, 1); + vc3 = new Vector3(vc.x + halfWidth, vc.y + halfHeight, 1); + vc4 = new Vector3(vc.x - halfWidth, vc.y + halfHeight, 1); + item.pointVectors.push(vc1); + item.pointVectors.push(vc2); + item.pointVectors.push(vc3); + item.pointVectors.push(vc4); + item.centerPointVector = vc; + let stageRatio2 = item.getStageRatio(); + let globalScaleMatrix = new Matrix3( + stageRatio2, + 0, + 0, + 0, + stageRatio2, + 0, + 0, + 0, + 1 + ); + item.centerPointVector.applyMatrix3(globalScaleMatrix); + item.pointVectors.forEach((pv) => { + pv.applyMatrix3(globalScaleMatrix); + }); + loosePointVectors = []; + loosePointVectors.push(new Vector3(vc1.x - looseWeight, vc1.y - looseWeight, vc1.z)); + loosePointVectors.push(new Vector3(vc2.x + looseWeight, vc2.y - looseWeight, vc2.z)); + loosePointVectors.push(new Vector3(vc3.x + looseWeight, vc3.y + looseWeight, vc3.z)); + loosePointVectors.push(new Vector3(vc4.x - looseWeight, vc4.y + looseWeight, vc4.z)); + item.loosePointVectors = loosePointVectors; + } + vc1.applyMatrix3(rotateMatrix); + vc2.applyMatrix3(rotateMatrix); + vc3.applyMatrix3(rotateMatrix); + vc4.applyMatrix3(rotateMatrix); + vc.applyMatrix3(rotateMatrix); + loosePointVectors == null ? void 0 : loosePointVectors.forEach((pv) => { + pv.applyMatrix3(rotateMatrix); + }); + item.calChildrenRotatePointVectors(rotateMatrix); + } + } + } + } + /** + * 修改上层模型大小 + */ + changeParentsBounds() { + if (this.pModel) { + this.pModel.changeParentsBounds(); + } + return true; + } + /** + * 修改子元素大小 + */ + changeChildrenBounds(originRect, newRect) { + var _a3; + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cell = rowObj[j2]; + (_a3 = cell == null ? void 0 : cell.layoutManager) == null ? void 0 : _a3.changeSubModelBounds(); + } + } + return true; + } + /** + * 在第col列(下标)之下插入一个新列,插入的列的大小等于col的大小 + * 插入后会重新维护所有行列关系 + * 插入后会维护合并单元格关系 + * 插入行后会往下增加表格的总高度,使表格高度=SUM(行高) + * @param col + * @param direction 1左边,2右边 + */ + insertCol(col, direction) { + var _a3; + let firstInsert = false; + if (col < 0) { + col = 0; + firstInsert = true; + } else if (col > this.cols.length - 1) { + col = this.cols.length - 1; + } + let currentCol = this.cols[col]; + let newCol = []; + let corssMergeCell = []; + let addWidth = 0; + for (let i2 = 0; i2 < currentCol.length; i2++) { + let oldCell = currentCol[i2]; + let newWidth = 0; + let newHeight = 0; + if (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1 || oldCell.mergedCell) { + newWidth = oldCell.originWidth; + newHeight = oldCell.originHeight; + } else { + newWidth = oldCell.width; + newHeight = oldCell.height; + } + let initJSON = DDeiUtil$1.getSubControlJSON(this.modelCode, (_a3 = this.stage) == null ? void 0 : _a3.ddInstance); + initJSON.width = newWidth; + initJSON.height = newHeight; + initJSON.table = this; + let newCell = DDeiTableCell.initByJSON(initJSON); + newCell.layer = this.layer; + newCell.stage = this.stage; + newCell.pModel = this; + newCell.initRender(); + newCol[i2] = newCell; + if (i2 == 0) { + addWidth = newCell.width; + } + let mCell = null; + if (!firstInsert && (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1 || oldCell.mergedCell)) { + if (oldCell.mergeRowNum > 1 || oldCell.mergeColNum > 1) { + mCell = oldCell; + } else if (oldCell.mergedCell) { + mCell = this.rows[oldCell.mergedCell.row][oldCell.mergedCell.col]; + } + newCell.mergedCell = mCell; + if (corssMergeCell.indexOf(mCell) == -1) { + corssMergeCell[corssMergeCell.length] = mCell; + mCell.mergeColNum = mCell.mergeColNum + 1; + mCell == null ? void 0 : mCell.setSize(parseFloat(mCell.width) + parseFloat(newCell.width)); + } + newCell.originWidth = newCell.width; + newCell.originHeight = newCell.height; + newCell.height = 0; + newCell.width = 0; + } + } + this.width = this.width + addWidth; + this.setModelChanged(); + for (let i2 = 0; i2 < this.rows.length; i2++) { + let currentRow = this.rows[i2]; + if (firstInsert) { + currentRow.splice(0, 0, newCol[i2]); + } else { + currentRow.splice(col + 1, 0, newCol[i2]); + } + } + if (firstInsert) { + this.cols.splice(0, 0, newCol); + } else { + this.cols.splice(col + 1, 0, newCol); + } + this.resetCellData(); + window.globalTableCopyData = null; + window.globalTableCutData = null; + if (this.copyAreaShape) { + this.copyAreaShape.style.display = "none"; + } + this.clearSelectionCells(); + if (firstInsert) { + if (direction == 1) { + this.curCol = 0; + } else { + this.curCol = 1; + } + } else { + this.curCol = col + 1; + } + this.setState(DDeiEnumControlState.SELECTED); + for (let i2 = 0; i2 < this.rows.length; i2++) { + this.rows[i2][this.curCol].setState(DDeiEnumControlState.SELECTED); + } + this.changeChildrenBounds(); + } + /** + * 删除行 + * @param row + */ + removeRow(row) { + if (this.rows.length <= 1) { + return; + } + let firstRemove = false; + if (row < 0) { + row = 0; + firstRemove = true; + } else if (row > this.rows.length - 1) { + row = this.rows.length - 1; + } + let removeCells = null; + if (firstRemove) { + removeCells = this.rows[0]; + } else { + removeCells = this.rows[row]; + } + let removeHeight = 0; + let corssMergeCell = []; + for (let x2 = 0; x2 < removeCells.length; x2++) { + let removeCell = removeCells[x2]; + removeHeight = removeCell.height; + let mCell = null; + if (removeCell.mergeRowNum == 1) + ; + else if (removeCell.mergeRowNum > 1 || removeCell.mergeColNum > 1) { + mCell = this.rows[removeCell.row + 1][x2]; + mCell.setSize(removeCell.width, removeCell.height); + mCell.mergeRowNum = removeCell.mergeRowNum; + mCell.mergeColNum = removeCell.mergeColNum; + for (let i2 = mCell.row; i2 < mCell.row + removeCell.mergeRowNum - 1; i2++) { + for (let j2 = mCell.col; j2 < mCell.col + mCell.mergeColNum; j2++) { + this.rows[i2][j2].mergedCell = mCell; + } + } + removeHeight = removeCell.originHeight; + } else if (removeCell.mergedCell != null) { + mCell = removeCell.mergedCell; + removeHeight = removeCell.originHeight; + } + if (mCell != null) { + if (corssMergeCell.indexOf(mCell) == -1) { + corssMergeCell[corssMergeCell.length] = mCell; + mCell.mergeRowNum = mCell.mergeRowNum - 1; + mCell.setSize(mCell.width, parseInt(mCell.height) - removeHeight); + } + } + } + if (firstRemove) { + this.rows.splice(0, 1); + } else { + this.rows.splice(row, 1); + } + this.height = this.height - removeHeight; + this.setModelChanged(); + for (let i2 = 0; i2 < this.cols.length; i2++) { + let currentCol = this.cols[i2]; + if (firstRemove) { + currentCol.splice(0, 1); + } else { + currentCol.splice(row, 1); + } + } + if (row < 0) { + this.curRow = 0; + } else if (row > this.rows.length - 1) { + this.curRow = this.rows.length - 1; + } else { + this.curRow = row; + } + this.resetCellData(); + } + /** + * 删除列 + * @param col + */ + removeCol(col) { + if (this.cols.length <= 1) { + return; + } + let firstRemove = false; + if (col < 0) { + col = 0; + firstRemove = true; + } else if (col > this.cols.length - 1) { + col = this.cols.length - 1; + } + let removeCells = null; + if (firstRemove) { + removeCells = this.cols[0]; + } else { + removeCells = this.cols[col]; + } + let removeWidth = 0; + let corssMergeCell = []; + for (let x2 = 0; x2 < removeCells.length; x2++) { + let removeCell = removeCells[x2]; + removeWidth = removeCell.width; + let mCell = null; + if (removeCell.mergeColNum == 1) + ; + else if (removeCell.mergeColNum > 1 || removeCell.mergeRowNum > 1) { + mCell = this.rows[x2][removeCell.col + 1]; + mCell.setSize(removeCell.width, removeCell.height); + mCell.mergeRowNum = removeCell.mergeRowNum; + mCell.mergeColNum = removeCell.mergeColNum; + for (let i2 = mCell.col; i2 < mCell.col + removeCell.mergeColNum - 1; i2++) { + for (let j2 = mCell.row; j2 < mCell.row + mCell.mergeRowNum; j2++) { + this.rows[j2][i2].mergedCell = mCell; + } + } + removeWidth = removeCell.originWidth; + } else if (removeCell.mergedCell != null) { + mCell = removeCell.mergedCell; + removeWidth = removeCell.originWidth; + } + if (mCell != null) { + if (corssMergeCell.indexOf(mCell) == -1) { + corssMergeCell[corssMergeCell.length] = mCell; + mCell.mergeColNum = mCell.mergeColNum - 1; + mCell.setSize(parseInt(mCell.width) - removeWidth, mCell.height); + } + } + } + this.width = this.width - removeWidth; + this.setModelChanged(); + if (firstRemove) { + this.cols.splice(0, 1); + } else { + this.cols.splice(col, 1); + } + for (let i2 = 0; i2 < this.rows.length; i2++) { + let currentRow = this.rows[i2]; + if (firstRemove) { + currentRow.splice(0, 1); + } else { + currentRow.splice(col, 1); + } + } + if (col < 0) { + this.curCol = 0; + } else if (col > this.cols.length - 1) { + this.curCol = this.cols.length - 1; + } else { + this.curCol = col; + } + this.resetCellData(); + } + // 取得区域内的所有单元格 + getCellsByRect(minRow, minCol, maxRow, maxCol) { + let returnCells = []; + for (let i2 = minRow; i2 <= maxRow; i2++) { + for (let j2 = minCol; j2 <= maxCol; j2++) { + returnCells[returnCells.length] = this.rows[i2][j2]; + } + } + return returnCells; + } + /** + * 合并选中的单元格 + */ + mergeSelectedCells() { + let selectedCells = this.getSelectedCells(); + this.cancelMergeCells(selectedCells); + selectedCells = this.getSelectedCells(); + this.mergeCells(selectedCells); + } + /** + * 合并的单元格 + */ + mergeCells(selectedCells) { + var _a3, _b2, _c2; + let minMaxRowCol = this.getMinMaxRowAndCol(selectedCells); + let firstCell = this.rows[minMaxRowCol.minRow][minMaxRowCol.minCol]; + let mergeHeight = 0; + for (let i2 = minMaxRowCol.minRow; i2 <= minMaxRowCol.maxRow; i2++) { + mergeHeight = mergeHeight + this.rows[i2][minMaxRowCol.minCol].height; + } + let mergeWidth = 0; + for (let j2 = minMaxRowCol.minCol; j2 <= minMaxRowCol.maxCol; j2++) { + mergeWidth = mergeWidth + this.rows[minMaxRowCol.minRow][j2].width; + } + firstCell.originWidth = firstCell.width; + firstCell.originHeight = firstCell.height; + for (let i2 = minMaxRowCol.minRow; i2 <= minMaxRowCol.maxRow; i2++) { + for (let j2 = minMaxRowCol.minCol; j2 <= minMaxRowCol.maxCol; j2++) { + this.rows[i2][j2].originWidth = this.rows[i2][j2].width; + this.rows[i2][j2].originHeight = this.rows[i2][j2].height; + this.rows[i2][j2].setSize(0, 0); + this.rows[i2][j2].mergedCell = firstCell; + if ((!firstCell.text || firstCell.text.trim() == "") && firstCell.midList.length == 0) { + if (this.rows[i2][j2].midList.length > 0) { + (_c2 = (_b2 = (_a3 = this.stage) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.bus) == null ? void 0 : _c2.push(DDeiEnumBusCommandType.ModelChangeContainer, { oldContainer: this.rows[i2][j2], newContainer: firstCell, models: Array.from(this.rows[i2][j2].models.values()) }, { offsetX: 0, offsetY: 0 }); + } else if (this.rows[i2][j2].text && this.rows[i2][j2].text.trim() != "") { + firstCell.text = this.rows[i2][j2].text; + this.rows[i2][j2].text = ""; + } + } + this.rows[i2][j2].setState(DDeiEnumControlState.DEFAULT); + } + } + firstCell.mergeRowNum = minMaxRowCol.maxRow - minMaxRowCol.minRow + 1; + firstCell.mergeColNum = minMaxRowCol.maxCol - minMaxRowCol.minCol + 1; + firstCell.setSize(mergeWidth, mergeHeight); + firstCell.setState(DDeiEnumControlState.SELECTED); + this.curRow = firstCell.row; + this.curCol = firstCell.col; + this.changeChildrenBounds(); + } + /** + * 将当前选中的单元格取消合并 + */ + cancelSelectedMergeCells() { + let selectedCells = this.getSelectedCells(); + this.cancelMergeCells(selectedCells); + } + /** + * 取得区域的开始和结束坐标 + */ + getCellPositionRect(startRow, startCol, endRow, endCol) { + let x2 = 0, y2 = 0, width = 0, height = 0; + x2 = this.rows[startRow][startCol].x; + y2 = this.rows[startRow][startCol].y; + for (let i2 = startRow; i2 <= endRow; i2++) { + let rowWidth = 0; + for (let j2 = startCol; j2 <= endCol; j2++) { + rowWidth = rowWidth + this.rows[i2][j2].width; + } + if (rowWidth > width) { + width = rowWidth; + } + } + for (let i2 = startCol; i2 <= endCol; i2++) { + let colHeight = 0; + for (let j2 = startRow; j2 <= endRow; j2++) { + colHeight = colHeight + this.cols[i2][j2].height; + } + if (colHeight > height) { + height = colHeight; + } + } + return { x: x2, y: y2, width, height }; + } + /** + * 取消合并传入的单元格 + */ + cancelMergeCells(cells) { + if (cells != null) { + for (let c = 0; c < cells.length; c++) { + let firstCell = cells[c]; + for (let i2 = firstCell.row; i2 < firstCell.row + firstCell.mergeRowNum; i2++) { + for (let j2 = firstCell.col; j2 < firstCell.col + firstCell.mergeColNum; j2++) { + let cel = this.rows[i2][j2]; + cel.setSize(cel.originWidth, cel.originHeight); + cel.originWidth = null; + cel.originHeight = null; + cel.mergedCell = null; + cel.setState(DDeiEnumControlState.SELECTED); + } + } + firstCell.mergeRowNum = null; + firstCell.mergeColNum = null; + this.curRow = firstCell.row; + this.curCol = firstCell.col; + } + this.changeChildrenBounds(); + } + } + /** + * 根据表格内坐标获取单元格 + */ + getCellByTablePosition(x2, y2) { + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cell = rowObj[j2]; + if (cell.width <= 0 || cell.height <= 0) { + continue; + } + if (cell.isInAreaLoose(x2, y2)) { + return cell; + } + } + } + return null; + } + // 返回当前表格所有选中的单元格,ignoreMerged默认为false,不忽略 + getSelectedCells() { + let arr = []; + for (let i2 = 0; i2 < this.rows.length; i2++) { + for (let j2 = 0; j2 < this.rows[i2].length; j2++) { + if (this.rows[i2][j2].state == DDeiEnumControlState.SELECTED) { + arr[arr.length] = this.rows[i2][j2]; + } + } + } + return arr; + } + /** + * 根据ID获取模型 + * @param id 模型id + */ + getModelById(id) { + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cell = rowObj[j2]; + let returnModel = cell.getModelById(id); + if (returnModel) { + return returnModel; + } + } + } + } + /** + * 获取实际的内部容器控件 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainer() { + return this; + } + /** + * 获取实际的内部容器控件 + * @param x 相对路径坐标 + * @param y 相对路径坐标 + * @return 容器控件根据布局的模式不同返回不同的内部控件,普通控件返回null + */ + getAccuContainerByPos(x2, y2) { + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cell = rowObj[j2]; + if (cell.width <= 0 || cell.height <= 0) { + continue; + } + if (cell.isInAreaLoose(x2, y2)) { + return cell; + } + } + } + return null; + } + // 判断两个区域是否有重合 + isOverlap(rect1, rect2) { + let l1 = { x: rect1.minCol, y: rect1.minRow }; + let r1 = { x: rect1.maxCol, y: rect1.maxRow }; + let l2 = { x: rect2.minCol, y: rect2.minRow }; + let r2 = { x: rect2.maxCol, y: rect2.maxRow }; + if (l1.x > r2.x || l2.x > r1.x || l1.y > r2.y || l2.y > r1.y) + return false; + return true; + } + // 判断区域内是否存在合并单元格或被合并单元格 + hasMergeCell(minRow, minCol, maxRow, maxCol) { + for (let i2 = minRow; i2 <= maxRow && i2 <= this.rows.length - 1; i2++) { + for (let j2 = minCol; j2 <= maxCol && j2 <= this.cols.length - 1; j2++) { + if (this.rows[i2][j2].isMergeCell() || this.rows[i2][j2].isMergedCell()) { + return true; + } + } + } + return false; + } + /** + * 获取单元格的最大外接矩形区域 + * @arr 单元格 + */ + getMinMaxRowAndCol(arr) { + let minCol = -1, maxCol = -1, minRow = -1, maxRow = -1; + for (let i2 = 0; i2 < arr.length; i2++) { + if (i2 == 0) { + minRow = arr[i2].row; + minCol = arr[i2].col; + maxRow = arr[i2].row; + maxCol = arr[i2].col; + if (arr[i2].mergeRowNum > 1 || arr[i2].mergeColNum > 1) { + maxRow = arr[i2].row + arr[i2].mergeRowNum - 1; + maxCol = arr[i2].col + arr[i2].mergeColNum - 1; + } + } else { + if (minRow > arr[i2].row) { + minRow = arr[i2].row; + } + if (minCol > arr[i2].col) { + minCol = arr[i2].col; + } + if (arr[i2].mergeRowNum > 1 || arr[i2].mergeColNum > 1) { + let r1 = arr[i2].row + arr[i2].mergeRowNum - 1; + let c1 = arr[i2].col + arr[i2].mergeColNum - 1; + if (maxRow < r1) { + maxRow = r1; + } + if (maxCol < c1) { + maxCol = c1; + } + } else { + if (maxRow < arr[i2].row) { + maxRow = arr[i2].row; + } + if (maxCol < arr[i2].col) { + maxCol = arr[i2].col; + } + } + } + } + if (minRow != -1 && maxRow != -1 && minCol != -1 && maxCol != -1) { + for (let i2 = minRow; i2 <= maxRow; i2++) { + for (let j2 = minCol; j2 <= maxCol; j2++) { + if (this.rows[i2][j2].mergeRowNum > 1 || this.rows[i2][j2].mergeColNum > 1) { + if (this.rows[i2][j2].row + this.rows[i2][j2].mergeRowNum - 1 > maxRow || this.rows[i2][j2].col + this.rows[i2][j2].mergeColNum - 1 > maxCol) { + arr[arr.length] = this.rows[i2][j2]; + return this.getMinMaxRowAndCol(arr); + } + } else if (this.rows[i2][j2].mergedCell != null) { + let mCell = this.rows[this.rows[i2][j2].mergedCell.row][this.rows[i2][j2].mergedCell.col]; + if (mCell.row + mCell.mergeRowNum - 1 > maxRow || mCell.col + mCell.mergeColNum - 1 > maxCol || mCell.col < minCol || mCell.row < minRow) { + arr[arr.length] = mCell; + return this.getMinMaxRowAndCol(arr); + } + } + } + } + } + if (minCol != -1 && maxCol != -1 && minRow != -1 && maxRow != -1) { + return { minCol, maxCol, minRow, maxRow }; + } + return null; + } + /** + * 判断指定区域内的所有单元格是否都被选中 + * @param r 行 + * @param c 列 + * @param r1 行1 + * @param c1 列1 + * @returns true都选中,false都没选中 + */ + isAllSelected(r, c, r1, c1) { + let returnData = true; + let minCol = c > c1 ? c1 : c; + let maxCol = c > c1 ? c : c1; + let minRow = r > r1 ? r1 : r; + let maxRow = r > r1 ? r : r1; + for (let i2 = minRow; i2 <= maxRow; i2++) { + for (let j2 = minCol; j2 <= maxCol; j2++) { + if (this.rows[i2][j2].mergedCell != null) { + continue; + } + if (this.rows[i2][j2].state != DDeiEnumControlState.SELECTED) { + return false; + } + } + } + return returnData; + } + /** + * 从上边调整表格的大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + changeTableSizeToTop(x2, y2) { + let table2 = this; + let dragObj = table2.stage.render.dragObj; + let changeHeight = dragObj.y - y2; + dragObj.y = dragObj.y - changeHeight; + if (changeHeight != 0) { + let processedCells = []; + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let afterCell = table2.cols[i2][0]; + if (afterCell.height != 0 && afterCell.height + changeHeight < 5 || afterCell.originHeight != null && afterCell.originHeight + changeHeight < 5) { + return; + } + } + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let rowObj = table2.cols[i2]; + let afterCell = table2.cols[i2][0]; + if (processedCells.indexOf(afterCell) == -1) { + if (!afterCell.isMergedCell() && !afterCell.isMergeCell()) { + afterCell.setSize(void 0, afterCell.height + changeHeight); + processedCells[processedCells.length] = afterCell; + } else if (afterCell.isMergeCell()) { + let mCell = afterCell; + mCell.originHeight = mCell.originHeight + changeHeight; + mCell.setSize(void 0, mCell.height + changeHeight); + processedCells[processedCells.length] = mCell; + } else if (afterCell.isMergedCell()) { + afterCell.originHeight = afterCell.originHeight + changeHeight; + processedCells[processedCells.length] = afterCell; + } + } + for (let j2 = 1; j2 < rowObj.length; j2++) { + rowObj[j2].setPosition(void 0, rowObj[j2].y + changeHeight); + } + } + table2.height = table2.height + changeHeight; + table2.setPosition(void 0, table2.y - changeHeight); + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * 从下边调整表格的大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + changeTableSizeToBottom(x2, y2) { + let table2 = this; + let dragObj = table2.stage.render.dragObj; + let changeHeight = y2 - dragObj.y; + dragObj.y = dragObj.y + changeHeight; + if (changeHeight != 0) { + let processedCells = []; + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let beforeCell = table2.cols[i2][table2.rows.length - 1]; + if (beforeCell.height != 0 && beforeCell.height + changeHeight < 5 || beforeCell.originHeight != null && beforeCell.originHeight + changeHeight < 5) { + return; + } + } + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let beforeCell = table2.cols[i2][table2.rows.length - 1]; + if (processedCells.indexOf(beforeCell) == -1) { + if (!beforeCell.isMergedCell() && !beforeCell.isMergeCell()) { + beforeCell.setSize(void 0, beforeCell.height + changeHeight); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergeCell()) { + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + beforeCell.setSize(void 0, beforeCell.height + changeHeight); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergedCell()) { + let mCell = beforeCell.mergedCell; + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + if (processedCells.indexOf(mCell) == -1) { + processedCells[processedCells.length] = mCell; + mCell.setSize(void 0, mCell.height + changeHeight); + } + processedCells[processedCells.length] = beforeCell; + } + } + } + table2.height = table2.height + changeHeight; + table2.setModelChanged(); + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * 从左边调整表格的大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + changeTableSizeToLeft(x2, y2) { + let table2 = this; + let dragObj = table2.stage.render.dragObj; + let changeWidth = dragObj.x - x2; + dragObj.x = dragObj.x - changeWidth; + if (changeWidth != 0) { + let processedCells = []; + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let afterCell = table2.rows[i2][0]; + if (afterCell.width != 0 && afterCell.width + changeWidth < 5 || afterCell.originWidth != null && afterCell.originWidth + changeWidth < 5) { + return; + } + } + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let rowObj = table2.rows[i2]; + let afterCell = table2.rows[i2][0]; + if (processedCells.indexOf(afterCell) == -1) { + if (!afterCell.isMergedCell() && !afterCell.isMergeCell()) { + afterCell.setSize(afterCell.width + changeWidth); + processedCells[processedCells.length] = afterCell; + } else if (afterCell.isMergeCell()) { + let mCell = afterCell; + mCell.originWidth = mCell.originWidth + changeWidth; + mCell.setSize(mCell.width + changeWidth); + processedCells[processedCells.length] = mCell; + } else if (afterCell.isMergedCell()) { + afterCell.originWidth = afterCell.originWidth + changeWidth; + processedCells[processedCells.length] = afterCell; + } + } + for (let j2 = 1; j2 < rowObj.length; j2++) { + rowObj[j2].setPosition(rowObj[j2].x + changeWidth); + } + } + table2.width = table2.width + changeWidth; + table2.setPosition(table2.x - changeWidth); + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * 从右边调整表格的大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + changeTableSizeToRight(x2, y2) { + let table2 = this; + let dragObj = table2.stage.render.dragObj; + let changeWidth = x2 - dragObj.x; + dragObj.x = dragObj.x + changeWidth; + if (changeWidth != 0) { + let processedCells = []; + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let beforeCell = table2.rows[i2][table2.cols.length - 1]; + if (beforeCell.width != 0 && beforeCell.width + changeWidth < 5 || beforeCell.originWidth != null && beforeCell.originWidth + changeWidth < 5) { + return; + } + } + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let beforeCell = table2.rows[i2][table2.cols.length - 1]; + if (processedCells.indexOf(beforeCell) == -1) { + if (!beforeCell.isMergedCell() && !beforeCell.isMergeCell()) { + beforeCell.setSize(beforeCell.width + changeWidth); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergeCell()) { + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + beforeCell.setSize(beforeCell.width + changeWidth); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergedCell()) { + let mCell = beforeCell.mergedCell; + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + if (processedCells.indexOf(mCell) == -1) { + processedCells[processedCells.length] = mCell; + mCell.setSize(mCell.width + changeWidth); + } + processedCells[processedCells.length] = beforeCell; + } + } + } + table2.width = table2.width + changeWidth; + table2.setModelChanged(); + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * 拖拽行大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + dragRow(x2, y2) { + let cell = this.dragCell; + let table2 = this; + if (cell.row >= table2.rows.length - 1) { + return; + } + for (let i2 = 0; i2 < table2.rows.length; i2++) { + if (table2.cols[cell.col][i2].specilCol) { + this.specilDrag = true; + for (let j2 = 0; j2 < table2.rows.length; j2++) { + if (!table2.cols[cell.col][j2].specilCol) { + table2.cols[cell.col][j2].specilCol = true; + } + } + break; + } + } + let dragObj = table2.stage.render.dragObj; + let changeHeight = y2 - dragObj.y; + dragObj.y = dragObj.y + changeHeight; + if (changeHeight != 0) { + if (this.specilDrag) { + let pass = false; + for (let i2 = 0; i2 < table2.rows.length; i2++) { + if (table2.cols[cell.col][i2].isMergedCell() || table2.cols[cell.col][i2].isMergeCell()) { + pass = true; + break; + } + } + if (cell.height != 0 && cell.height + changeHeight < 5 || table2.cols[cell.col][cell.row + 1].height != 0 && table2.cols[cell.col][cell.row + 1].height - changeHeight < 5) { + pass = true; + } + if (!pass) { + cell.setSize(void 0, cell.height + changeHeight); + table2.cols[cell.col][cell.row + 1].setSize(void 0, table2.cols[cell.col][cell.row + 1].height - changeHeight); + table2.cols[cell.col][cell.row + 1].setPosition(void 0, table2.cols[cell.col][cell.row + 1].y + changeHeight); + for (let i2 = 0; i2 < table2.rows.length; i2++) { + table2.cols[cell.col][i2].specilCol = true; + } + return; + } + } + let processedCells = []; + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let beforeCell = table2.cols[i2][cell.row]; + let afterCell = table2.cols[i2][cell.row + 1]; + if (!beforeCell.specilCol && (beforeCell.height != 0 && beforeCell.height + changeHeight < 5 || beforeCell.originHeight != null && beforeCell.originHeight + changeHeight < 5)) { + return; + } + if (!afterCell.specilCol && (afterCell.height != 0 && afterCell.height - changeHeight < 5 || afterCell.originHeight != null && afterCell.originHeight - changeHeight < 5)) { + return; + } + } + for (let i2 = 0; i2 < table2.cols.length; i2++) { + let beforeCell = table2.cols[i2][cell.row]; + if (processedCells.indexOf(beforeCell) == -1 && !beforeCell.specilCol) { + if (!beforeCell.isMergedCell() && !beforeCell.isMergeCell()) { + beforeCell.setSize(void 0, beforeCell.height + changeHeight); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergeCell()) { + let mCell = beforeCell; + if (mCell.mergeRowNum == 1) { + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + beforeCell.setSize(void 0, beforeCell.height + changeHeight); + processedCells[processedCells.length] = beforeCell; + } else { + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + processedCells[processedCells.length] = beforeCell; + } + } else if (beforeCell.isMergedCell()) { + let mCell = beforeCell.mergedCell; + if (mCell.row + mCell.mergeRowNum - 1 == beforeCell.row) { + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + if (processedCells.indexOf(mCell) == -1) { + processedCells[processedCells.length] = mCell; + mCell.setSize(void 0, mCell.height + changeHeight); + } + processedCells[processedCells.length] = beforeCell; + } else { + beforeCell.originHeight = beforeCell.originHeight + changeHeight; + processedCells[processedCells.length] = beforeCell; + } + } + } + let afterCell = table2.cols[i2][cell.row + 1]; + if (processedCells.indexOf(afterCell) == -1 && !afterCell.specilCol) { + if (!afterCell.isMergedCell() && !afterCell.isMergeCell()) { + afterCell.setSize(void 0, afterCell.height - changeHeight); + afterCell.setPosition(void 0, afterCell.y + changeHeight); + processedCells[processedCells.length] = afterCell; + } else if (afterCell.isMergeCell()) { + let mCell = afterCell; + mCell.originHeight = mCell.originHeight - changeHeight; + mCell.setSize(void 0, mCell.height - changeHeight); + mCell.setPosition(void 0, mCell.y + changeHeight); + processedCells[processedCells.length] = mCell; + for (let x3 = mCell.col + 1; x3 < mCell.col + mCell.mergeColNum; x3++) { + if (!table2.cols[x3][mCell.row].specilCol) { + table2.cols[x3][mCell.row].originHeight = table2.cols[x3][mCell.row].originHeight - changeHeight; + table2.cols[x3][mCell.row].setPosition(void 0, table2.cols[x3][mCell.row].y + changeHeight); + processedCells[processedCells.length] = table2.cols[x3][mCell.row]; + } + } + } else if (afterCell.isMergedCell()) { + let mCell = afterCell.mergedCell; + if (mCell.row + mCell.mergeRowNum == afterCell.row) { + afterCell.originHeight = afterCell.originHeight - changeHeight; + if (processedCells.indexOf(mCell) == -1) { + mCell.setSize(void 0, mCell.height - changeHeight); + processedCells[processedCells.length] = mCell; + } + processedCells[processedCells.length] = afterCell; + } else { + afterCell.originHeight = afterCell.originHeight - changeHeight; + afterCell.setPosition(void 0, afterCell.y + changeHeight); + processedCells[processedCells.length] = afterCell; + } + } + } + } + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * 拖拽时选中单元格 + * @param x + * @param y + */ + dragAndSelectedCell(x2, y2) { + let cell = this.dragCell; + let table2 = this; + if (!table2.tempUpCel) { + table2.tempUpCel = cell; + } + let targetCell = table2.getCellByTablePosition(x2, y2); + if (targetCell && table2.tempUpCel != targetCell) { + let minMax = table2.getMinMaxRowAndCol([cell, table2.tempUpCel]); + for (let i2 = minMax.minRow; i2 <= minMax.maxRow; i2++) { + for (let j2 = minMax.minCol; j2 <= minMax.maxCol; j2++) { + table2.rows[i2][j2].setState(DDeiEnumControlState.DEFAULT); + } + } + table2.tempUpCel = targetCell; + minMax = table2.getMinMaxRowAndCol([cell, table2.tempUpCel]); + for (let i2 = minMax.minRow; i2 <= minMax.maxRow; i2++) { + for (let j2 = minMax.minCol; j2 <= minMax.maxCol; j2++) { + table2.rows[i2][j2].setState(DDeiEnumControlState.SELECTED); + } + } + } + } + /** + * 拖拽列大小 + * 该方法在拖拽过程中调用,会处理由拖拽引起的合并单元格的变动 + */ + dragCol(x2, y2) { + let cell = this.dragCell; + let table2 = this; + if (cell.col >= table2.cols.length - 1) { + return; + } + for (let i2 = 0; i2 < table2.cols.length; i2++) { + if (table2.rows[cell.row][i2].specilRow) { + this.specilDrag = true; + for (let j2 = 0; j2 < table2.cols.length; j2++) { + if (!table2.rows[cell.row][j2].specilRow) { + table2.rows[cell.row][j2].specilRow = true; + } + } + break; + } + } + let dragObj = table2.stage.render.dragObj; + let changeWidth = x2 - dragObj.x; + dragObj.x = dragObj.x + changeWidth; + if (changeWidth != 0) { + if (this.specilDrag) { + let pass = false; + for (let i2 = 0; i2 < table2.cols.length; i2++) { + if (table2.rows[cell.row][i2].isMergedCell() || table2.rows[cell.row][i2].isMergeCell()) { + pass = true; + break; + } + } + if (cell.width != 0 && cell.width + changeWidth < 5 || table2.rows[cell.row][cell.col + 1].width != 0 && table2.rows[cell.row][cell.col + 1].width - changeWidth < 5) { + pass = true; + } + if (!pass) { + cell.setSize(cell.width + changeWidth); + table2.rows[cell.row][cell.col + 1].setSize(table2.rows[cell.row][cell.col + 1].width - changeWidth); + table2.rows[cell.row][cell.col + 1].setPosition(table2.rows[cell.row][cell.col + 1].x + changeWidth); + for (let i2 = 0; i2 < table2.cols.length; i2++) { + table2.rows[cell.row][i2].specilRow = true; + } + return; + } + } + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let beforeCell = table2.rows[i2][cell.col]; + let afterCell = table2.rows[i2][cell.col + 1]; + if (!beforeCell.specilRow && (beforeCell.width != 0 && beforeCell.width + changeWidth < 5 || beforeCell.originWidth != null && beforeCell.originWidth + changeWidth < 5)) { + return; + } + if (!afterCell.specilRow && (afterCell.width != 0 && afterCell.width - changeWidth < 5 || afterCell.originWidth != null && afterCell.originWidth - changeWidth < 5)) { + return; + } + } + let processedCells = []; + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let beforeCell = table2.rows[i2][cell.col]; + if (processedCells.indexOf(beforeCell) == -1 && !beforeCell.specilRow) { + if (!beforeCell.isMergedCell() && !beforeCell.isMergeCell()) { + beforeCell.setSize(beforeCell.width + changeWidth); + processedCells[processedCells.length] = beforeCell; + } else if (beforeCell.isMergeCell()) { + let mCell = beforeCell; + if (mCell.mergeColNum == 1) { + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + beforeCell.setSize(beforeCell.width + changeWidth); + processedCells[processedCells.length] = beforeCell; + } else { + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + processedCells[processedCells.length] = beforeCell; + } + } else if (beforeCell.isMergedCell()) { + let mCell = beforeCell.mergedCell; + if (mCell.col + mCell.mergeColNum - 1 == beforeCell.col) { + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + if (processedCells.indexOf(mCell) == -1) { + processedCells[processedCells.length] = mCell; + mCell.setSize(mCell.width + changeWidth); + } + processedCells[processedCells.length] = beforeCell; + } else { + beforeCell.originWidth = beforeCell.originWidth + changeWidth; + processedCells[processedCells.length] = beforeCell; + } + } + } + let afterCell = table2.rows[i2][cell.col + 1]; + if (processedCells.indexOf(afterCell) == -1 && !afterCell.specilRow) { + if (!afterCell.isMergedCell() && !afterCell.isMergeCell()) { + afterCell.setSize(afterCell.width - changeWidth); + afterCell.setPosition(afterCell.x + changeWidth); + processedCells[processedCells.length] = afterCell; + } else if (afterCell.isMergeCell()) { + let mCell = afterCell; + mCell.originWidth = mCell.originWidth - changeWidth; + mCell.setSize(mCell.width - changeWidth); + mCell.setPosition(mCell.x + changeWidth); + processedCells[processedCells.length] = mCell; + for (let x3 = mCell.row + 1; x3 < mCell.row + mCell.mergeRowNum; x3++) { + if (!table2.rows[x3][mCell.col].specilRow) { + table2.rows[x3][mCell.col].originWidth = table2.rows[x3][mCell.col].originWidth - changeWidth; + table2.rows[x3][mCell.col].setPosition(table2.rows[x3][mCell.col].x + changeWidth); + processedCells[processedCells.length] = table2.rows[x3][mCell.col]; + } + } + } else if (afterCell.isMergedCell()) { + let mCell = afterCell.mergedCell; + if (mCell.col + mCell.mergeColNum == afterCell.col) { + afterCell.originWidth = afterCell.originWidth - changeWidth; + if (processedCells.indexOf(mCell) == -1) { + mCell.setSize(mCell.width - changeWidth); + processedCells[processedCells.length] = mCell; + } + processedCells[processedCells.length] = afterCell; + } else { + afterCell.originWidth = afterCell.originWidth - changeWidth; + afterCell.setPosition(afterCell.x + changeWidth); + processedCells[processedCells.length] = afterCell; + } + } + } + } + this.updateCopyShapeArea(); + this.changeChildrenBounds(); + } + } + /** + * TODO 更新复制图形的区域 + */ + updateCopyShapeArea() { + if (window.globalTableCopyData || window.globalTableCutData) { + let sourceCells = null; + if (window.globalTableCopyData && window.globalTableCopyData.length > 0) { + sourceCells = window.globalTableCopyData; + } else { + sourceCells = window.globalTableCutData; + } + if (sourceCells[0].table == this) { + let minMaxColRow = this.getMinMaxRowAndCol(sourceCells); + let rect = this.getCellPositionRect(minMaxColRow.minRow, minMaxColRow.minCol, minMaxColRow.maxRow, minMaxColRow.maxCol); + this.copyAreaShape.style.width = rect.width - 1 + "px"; + this.copyAreaShape.style.height = rect.height - 1 + "px"; + this.copyAreaShape.style.left = PDSetting.DEFAULT_TABLE_BORDER_PADDING + rect.x - 1 + "px"; + this.copyAreaShape.style.top = PDSetting.DEFAULT_TABLE_BORDER_PADDING + rect.y - 1 + "px"; + this.copyAreaShape.style.display = "block"; + } + } + } + /** + * 变换向量 + */ + transVectors(matrix2, params) { + super.transVectors(matrix2); + for (let i2 = 0; i2 < this.rows.length; i2++) { + let rowObj = this.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + cellObj.transVectors(matrix2); + } + } + } + // ============================ 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static loadFromJSON(json, tempData = {}) { + let model = new _DDeiTable2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + if (!model.pModel) { + model.pModel = model.layer; + } + tempData[model.id] = model; + let rows = []; + let cols = []; + for (let i2 = 0; i2 < json.rows.length; i2++) { + let rowJSON = json.rows[i2]; + rows[i2] = []; + for (let j2 = 0; j2 < rowJSON.length; j2++) { + if (i2 == 0) { + cols[j2] = []; + } + let cell = DDeiTableCell.loadFromJSON(rowJSON[j2], tempData); + cell.table = model; + rows[i2][j2] = cell; + cols[j2][i2] = cell; + } + } + for (let i2 = 0; i2 < rows.length; i2++) { + for (let j2 = 0; j2 < cols.length; j2++) { + let cellJSON = json.rows[i2][j2]; + if (cellJSON.mergeRowNum > 1 || cellJSON.mergeColNum > 1) { + let mergedCell = rows[i2][j2]; + for (let mr = 0; mr < cellJSON.mergeRowNum; mr++) { + for (let mj = 0; mj < cellJSON.mergeColNum; mj++) { + let mergeCell = rows[i2 + mr][j2 + mj]; + mergeCell.mergedCell = mergedCell; + } + } + } + } + } + model.rows = rows; + model.cols = cols; + model.initPVS(); + model.initRender(); + return model; + } + // 通过JSON初始化对象,数据未传入时将初始化数据 + static initByJSON(json, tempData = {}) { + let model = new _DDeiTable2(json); + model.layer = tempData["currentLayer"]; + model.stage = tempData["currentStage"]; + model.pModel = tempData["currentContainer"]; + model.initPVS(); + model.initTable(); + return model; + } + }; + __publicField2(_DDeiTable, "ClsName", "DDeiTable"); + __publicField2(_DDeiTable, "initSubControlJson", null); + let DDeiTable = _DDeiTable; + const __vite_glob_0_14$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTable, + default: DDeiTable + }, Symbol.toStringTag, { value: "Module" })); + class DDeiAbstractShapeRender { + constructor(props) { + __publicField2(this, "model"); + __publicField2(this, "stage"); + __publicField2(this, "layer"); + __publicField2(this, "ddRender"); + __publicField2(this, "stageRender"); + __publicField2(this, "layerRender"); + __publicField2(this, "renderCacheData", /* @__PURE__ */ new Map()); + __publicField2(this, "refreshShape", true); + this.model = props.model; + this.ddRender = null; + } + enableRefreshShape() { + var _a3, _b2; + this.refreshShape = true; + (_a3 = this.model.composes) == null ? void 0 : _a3.forEach((comp) => { + var _a22; + (_a22 = comp.render) == null ? void 0 : _a22.enableRefreshShape(); + }); + (_b2 = this.model.linkModels) == null ? void 0 : _b2.forEach((lm) => { + var _a22; + if (lm.dm) { + (_a22 = lm.dm.render) == null ? void 0 : _a22.enableRefreshShape(); + } + }); + } + /** + * 获取html + */ + getHTML() { + return null; + } + /** + * 获取缓存的渲染数据 + */ + getCachedValue(attrPath) { + let returnValue = null; + if (!this.renderCacheData.has(attrPath)) { + returnValue = DDeiModelArrtibuteValue.getAttrValueByState(this.model, attrPath, true); + this.setCachedValue(attrPath, returnValue); + } else { + returnValue = this.renderCacheData.get(attrPath); + } + return returnValue; + } + /** + * 设置渲染缓存数据 + */ + setCachedValue(attrPath, value) { + if (attrPath) { + if (Array.isArray(attrPath)) { + attrPath.forEach((item) => { + this.renderCacheData.set(item, value); + this.changeComposesCacheValue(item, value); + }); + } else { + this.renderCacheData.set(attrPath, value); + this.changeComposesCacheValue(attrPath, value); + } + } + } + clearCachedValue() { + this.renderCacheData.clear(); + this.enableRefreshShape(); + this.clearComposesCacheValue(); + } + clearComposesCacheValue() { + var _a3, _b2, _c2; + let define2 = (_a3 = DDeiUtil$1.getControlDefine(this.model)) == null ? void 0 : _a3.define; + if (((_b2 = define2 == null ? void 0 : define2.composes) == null ? void 0 : _b2.length) > 0) { + for (let i2 = 0; i2 < define2.composes.length; i2++) { + let comDef = define2.composes[i2]; + let comModel = this.model.composes[i2]; + if (((_c2 = comDef.attrLinks) == null ? void 0 : _c2.length) > 0) { + comDef.attrLinks.forEach((attrLink) => { + attrLink.mapping.forEach((mp) => { + var _a22, _b22; + if (mp == "*") { + (_a22 = comModel.render) == null ? void 0 : _a22.clearCachedValue(); + } else { + (_b22 = comModel.render) == null ? void 0 : _b22.clearCachedValue(); + } + }); + }); + } + } + } + } + changeComposesCacheValue(attrPath, value) { + var _a3, _b2, _c2; + let define2 = (_a3 = DDeiUtil$1.getControlDefine(this.model)) == null ? void 0 : _a3.define; + if (((_b2 = define2 == null ? void 0 : define2.composes) == null ? void 0 : _b2.length) > 0) { + for (let i2 = 0; i2 < define2.composes.length; i2++) { + let comDef = define2.composes[i2]; + let comModel = this.model.composes[i2]; + if (((_c2 = comDef.attrLinks) == null ? void 0 : _c2.length) > 0) { + comDef.attrLinks.forEach((attrLink) => { + var _a22; + if (attrPath.startsWith(attrLink.code) && ((_a22 = attrLink.mapping) == null ? void 0 : _a22.length) > 0) { + attrLink.mapping.forEach((mp) => { + if (mp == "*") { + comModel.render.setCachedValue(attrPath, value); + } else { + comModel.render.setCachedValue(mp, value); + } + }); + } + }); + } + } + } + } + // ============================== 事件 =============================== + /** + * 拖拽本控件结束 + * @param evt + */ + controlDragEnd(evt) { + } + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + } + /** + * 绘制图形 + */ + mouseUp(evt) { + this.controlSelect(); + } + /** + * 选中 + */ + controlSelect(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + let pContainerModel = this.model.pModel; + let pushMulits = []; + this.stageRender.currentOperateContainer = pContainerModel; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_SELECT_BEFORE", DDeiEnumOperateType.SELECT, { models: [this.model] }, (_a3 = this.stage) == null ? void 0 : _a3.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + if (isCtrl) { + if (((_b2 = this.stageRender.currentOperateShape) == null ? void 0 : _b2.state) == DDeiEnumControlState.SELECTED) { + pushMulits.push({ actionType: DDeiEnumBusCommandType.ModelChangeSelect, data: [{ id: this.model.id, value: DDeiEnumControlState.DEFAULT }] }); + } else { + pushMulits.push({ actionType: DDeiEnumBusCommandType.ModelChangeSelect, data: [{ id: this.model.id, value: DDeiEnumControlState.SELECTED }] }); + } + } else { + pushMulits.push({ actionType: DDeiEnumBusCommandType.CancelCurLevelSelectedModels, data: { ignoreModels: [this.model] } }); + pushMulits.push({ actionType: DDeiEnumBusCommandType.ModelChangeSelect, data: [{ id: this.model.id, value: DDeiEnumControlState.SELECTED }] }); + } + this.model.layer.render.enableRefreshShape(); + pushMulits.push({ actionType: DDeiEnumBusCommandType.StageChangeSelectModels }); + (_e2 = (_d2 = (_c2 = this.stage) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.bus) == null ? void 0 : _e2.pushMulit(pushMulits, evt); + (_h = (_g = (_f = this.stage) == null ? void 0 : _f.ddInstance) == null ? void 0 : _g.bus) == null ? void 0 : _h.executeAll(); + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_SELECT_AFTER", DDeiEnumOperateType.SELECT, { models: [this.model] }, (_i = this.stage) == null ? void 0 : _i.ddInstance, evt); + } + return true; + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + var _a3, _b2, _c2; + if (this.layer) { + this.stage.ddInstance.bus.insert(DDeiEnumBusCommandType.ChangeCursor, { cursor: "all-scroll" }, evt, 0); + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", (_a3 = this.ddRender) == null ? void 0 : _a3.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [this.model], + null, + modeName, + (_b2 = this.ddRender) == null ? void 0 : _b2.model + ); + if (accessLink) { + let stageRatio2 = (_c2 = this.stage) == null ? void 0 : _c2.getStageRatio(); + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + ex /= stageRatio2; + ey /= stageRatio2; + this.changeOpPoints(ex, ey); + } + } + } + changeOpPoints(ex, ey, pointMode = null) { + var _a3; + let appendPoints = []; + let hasPoint = false; + let projPoint; + if (((_a3 = this.stageRender) == null ? void 0 : _a3.operateState) == DDeiEnumOperateState.LINE_POINT_CHANGING) { + projPoint = this.model.getProjPoint({ x: ex, y: ey }, { in: -8, out: 15 }); + } else { + let modelWeight = Math.min(this.model.width, this.model.height); + let inWeight = -8; + if (modelWeight <= 24) { + inWeight = 0; + } + projPoint = this.model.getProjPoint({ x: ex, y: ey }, { in: inWeight, out: 15 }); + } + let pots = []; + if (projPoint) { + projPoint.model = this.model; + projPoint.mode = pointMode; + hasPoint = true; + pots.push(projPoint); + } + let centerOpPoints = this.model.getCenterOpPoints(); + centerOpPoints.forEach((op) => { + op.model = this.model; + op.mode = 3; + if (op.oppoint == 1 || op.oppoint == 3) { + let dist = DDeiUtil$1.getPointDistance(op.x, op.y, ex, ey); + if (Math.abs(dist) <= 5) { + op.isMiddle = true; + this.stage.tempCursorOPpoint = op; + delete op.mode; + hasPoint = true; + } + } + if (op.oppoint == 3) { + let rotate2 = this.model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let bpv2 = DDeiUtil$1.pointsToZero([this.model.bpv], this.model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + let dist1 = DDeiUtil$1.getPointDistance(0, 0, (ex - op.x) / scaleX2, (ey - op.y) / scaleY2); + if (Math.abs(op.r - dist1) <= 5) { + let dr = op.r - dist1; + let rotate22 = DDeiUtil$1.getLineAngle(op.x, op.y, ex, ey); + let dx = dr * Math.cos(rotate22 * DDeiConfig$1.ROTATE_UNIT); + let dy = dr * Math.sin(rotate22 * DDeiConfig$1.ROTATE_UNIT); + let op1 = new Vector3(ex + dx, ey + dy, 1); + op1.model = this.model; + op1.oppoint = op.oppoint; + pots.push(op1); + hasPoint = true; + } + } else { + let angle2 = DDeiUtil$1.getLineAngle(this.model.cpv.x, this.model.cpv.y, op.x, op.y); + angle2 -= this.model.rotate ? this.model.rotate : 0; + op.sita = angle2; + appendPoints.push(op); + } + }); + pots.forEach((po) => { + let insert = true; + for (let i2 = 0; i2 < centerOpPoints.length; i2++) { + let co = centerOpPoints[i2]; + if (co.isMiddle) { + let dist = DDeiUtil$1.getPointDistance(po.x, po.y, co.x, co.y); + if (Math.abs(dist) <= 5) { + insert = false; + } + } + } + if (insert) { + let angle2 = DDeiUtil$1.getLineAngle(this.model.cpv.x, this.model.cpv.y, po.x, po.y); + angle2 -= this.model.rotate ? this.model.rotate : 0; + po.sita = angle2; + this.stage.tempCursorOPpoint = po; + appendPoints.push(po); + } + }); + if (appendPoints.length > 0) { + appendPoints.forEach((po) => { + this.layer.opPoints.push(po); + }); + this.layer.opPoints.push({ isSplit: 1 }); + } + if (hasPoint) { + this.stage.ddInstance.bus.insert(DDeiEnumBusCommandType.ChangeCursor, { cursor: "pointer" }, null, 1); + } + } + //数据 + refreshView(editor, vNode, tempShape, composeRender) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M; + let shapeElement = vNode.el; + let model = this.model; + let stage2 = model.stage; + let ddInstance = stage2.ddInstance; + let render = model.render; + let ruleWeight = 0; + if (stage2.render.tempRuleDisplay == 1 || stage2.render.tempRuleDisplay == "1") { + ruleWeight = 15; + } + let stageRatio2 = model.getStageRatio(); + let rat1 = window.remRatio; + if (DDeiUtil$1.isModelHidden(model)) { + shapeElement.style.display = "none"; + } else { + shapeElement.style.width = model.width * rat1 + "px"; + shapeElement.style.height = model.height * rat1 + "px"; + let transform = ""; + if (stageRatio2 > 0 && stageRatio2 != 1) { + transform += " scale(" + stageRatio2 + ")"; + } + if (model.rotate) { + transform += " rotate(" + model.rotate + "deg)"; + } + if (this.model.mirrorX) { + transform += " rotateY(180deg)"; + } + if (this.model.mirrorY) { + transform += " rotateX(180deg)"; + } + shapeElement.style.transform = transform; + let type = ((_a3 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _a3.type) || ((_b2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _b2.type) == 0 ? (_c2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _c2.type : render.getCachedValue("border.type"); + let opacity = ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.opacity) || ((_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.opacity) == 0 ? (_f = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _f.opacity : render.getCachedValue("border.opacity"); + let width = ((_g = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _g.width) || ((_h = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _h.width) == 0 ? (_i = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _i.width : render.getCachedValue("border.width"); + let dash = ((_j = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _j.dash) || ((_k = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _k.dash) == 0 ? (_l = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _l.dash : render.getCachedValue("border.dash"); + let color = ((_m = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _m.color) || ((_n = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _n.color) == 0 ? (_o = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _o.color : render.getCachedValue("border.color"); + let drawLine = (type == 1 || type == "1") && width > 0; + if (drawLine) { + let type2 = !dash || dash.length == 0 ? "solid" : "dashed"; + if (!color) { + color = "var(--border)"; + } + if (opacity >= 0 && opacity < 1) { + let value16 = parseInt(opacity * 255); + color += value16.toString(16); + } + shapeElement.style.setProperty("--borderColor", color); + shapeElement.style.setProperty("--borderType", type2); + shapeElement.style.setProperty("--borderWidth", width + "px"); + } + shapeElement.style.left = model.cpv.x * stageRatio2 + stage2.wpv.x - (shapeElement.offsetWidth ? shapeElement.offsetWidth : model.width * rat1) / 2 - ruleWeight + "px"; + shapeElement.style.top = model.cpv.y * stageRatio2 + stage2.wpv.y - (shapeElement.offsetHeight ? shapeElement.offsetHeight : model.height * rat1) / 2 - ruleWeight + "px"; + let fillColor = ((_p = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _p.color) ? tempShape.fill.color : render.getCachedValue("fill.color"); + if (!fillColor) { + fillColor = DDeiUtil$1.getStyleValue("canvas-control-background", ddInstance); + } + let fillOpacity = ((_q = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _q.opacity) ? tempShape.fill.opacity : render.getCachedValue("fill.opacity"); + let fillType = ((_r = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _r.type) ? tempShape.fill.type : render.getCachedValue("fill.type"); + if (fillType == 1) { + if (fillOpacity >= 0 && fillOpacity < 1) { + let value16 = parseInt(fillOpacity * 255); + fillColor += value16.toString(16); + } + shapeElement.style.setProperty("--fillColor", fillColor); + } + let round = ((_s = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _s.round) ? (_t = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _t.round : render.getCachedValue("border.round"); + if (round) { + shapeElement.style.setProperty("--borderRound", round + "px"); + } + let fiFamily = ((_u = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _u.family) ? (_v = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _v.family : render.getCachedValue("font.family"); + let fiSize = ((_w = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _w.size) ? (_x = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _x.size : render.getCachedValue("font.size"); + let fiColor = ((_y = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _y.color) ? (_z = tempShape == null ? void 0 : tempShape.font) == null ? void 0 : _z.color : render.getCachedValue("font.color"); + if (!fiColor) { + fiColor = DDeiUtil$1.getStyleValue("canvas-control-title", ddInstance); + } + if (fiFamily) { + shapeElement.style.setProperty("--fontFamily", fiFamily); + } + if (fiSize) { + shapeElement.style.setProperty("--fontSize", fiSize + "px"); + } + if (fiColor) { + shapeElement.style.setProperty("--fontColor", fiColor); + } + let bold = ((_A = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _A.bold) ? (_B = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _B.bold : render.getCachedValue("textStyle.bold"); + if (bold == 1 || bold == "1") { + shapeElement.style.setProperty("--fontWeight", "bold"); + } + let italic = ((_C = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _C.italic) ? (_D = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _D.italic : render.getCachedValue("textStyle.italic"); + if (italic == 1 || italic == "1") { + shapeElement.style.setProperty("--fontStyle", "italic"); + } + let underline = ((_E = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _E.underline) ? (_F = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _F.underline : render.getCachedValue("textStyle.underline"); + if (underline == "1" || underline == 1) { + shapeElement.style.setProperty("--textDecoration", "underline"); + } else { + let deleteline = ((_G = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _G.deleteline) ? (_H = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _H.deleteline : render.getCachedValue("textStyle.deleteline"); + if (deleteline == "1" || deleteline == 1) { + shapeElement.style.setProperty("--textDecoration", "line-through"); + } else { + let overline = ((_I = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _I.topline) ? (_J = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _J.topline : render.getCachedValue("textStyle.topline"); + if (overline == "1" || overline == 1) { + shapeElement.style.setProperty("--textDecoration", "overline"); + } + } + } + let textBgColor = ((_K = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _K.bgcolor) ? (_L = tempShape == null ? void 0 : tempShape.textStyle) == null ? void 0 : _L.bgcolor : render.getCachedValue("textStyle.bgcolor"); + if (textBgColor) { + shapeElement.style.setProperty("--textBgColor", textBgColor); + } + shapeElement.style.zIndex = model.render.tempZIndex; + shapeElement.style.display = "block"; + if (model.baseModelType == "DDeiContainer") { + for (let m = 0; m < ((_M = model.midList) == null ? void 0 : _M.length); m++) { + let key = model.midList[m]; + let item = model.models.get(key); + if (item == null ? void 0 : item.render) { + item.render.tempZIndex = model.render.tempZIndex + (m + 1); + item.render.drawShape(tempShape, composeRender); + } + } + } + if (vNode.component.ctx.refreshView) { + vNode.component.ctx.refreshView(model, vNode, tempShape, composeRender); + } + } + } + removeViewerCanvas() { + var _a3, _b2; + if (!this.viewer) { + (_a3 = this.tempCanvas) == null ? void 0 : _a3.remove(); + (_b2 = this.model.composes) == null ? void 0 : _b2.forEach((comp) => { + comp.render.removeViewerCanvas(); + }); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } + } + const __vite_glob_1_9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiAbstractShapeRender, + default: DDeiAbstractShapeRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiRectangleCanvasRender = class _DDeiRectangleCanvasRender2 extends DDeiAbstractShapeRender { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "textUsedArea", []); + __publicField2(this, "clip", true); + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiRectangleCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 初始化 + */ + init() { + this.ddRender = this.model.stage.ddInstance.render; + this.stage = this.model.stage; + this.stageRender = this.model.stage.render; + if (this.model.layer) { + this.layer = this.model.layer; + this.layerRender = this.model.layer.render; + } + } + initImage() { + let that = this; + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "fill.image"); + if ((this.model.bgImageBase64 || bgImage) && !this.imgObj) { + let img = new Image(); + img.onload = function() { + that.imgObj = img; + that.upFillImage = bgImage; + that.ddRender.model.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + that.ddRender.model.bus.executeAll(); + }; + img.src = this.model.bgImageBase64 ? this.model.bgImageBase64 : bgImage; + } + } + /** + * 创建图形 + */ + drawShape(tempShape) { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model], tempShape }, this.ddRender.model, null); + if (rsState1 == 0 || rsState1 == 1) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + this.drawBorder(tempShape); + this.drawFill(tempShape); + this.drawText(tempShape); + this.tempFillAreaRect = null; + ctx.restore(); + } + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + } + } + /** + * 生成边框的区域向量 + */ + getBorderPVS(tempBorder) { + let topRound = this.getBorderInfo(tempBorder, 1, "round"); + let topType = this.getBorderInfo(tempBorder, 1, "type"); + let topWidth = this.getBorderInfo(tempBorder, 1, "width"); + let rightType = this.getBorderInfo(tempBorder, 2, "type"); + let rightWidth = this.getBorderInfo(tempBorder, 2, "width"); + let bottomType = this.getBorderInfo(tempBorder, 3, "type"); + let bottomWidth = this.getBorderInfo(tempBorder, 3, "width"); + let leftType = this.getBorderInfo(tempBorder, 4, "type"); + let leftWidth = this.getBorderInfo(tempBorder, 4, "width"); + if (!topType) { + topWidth = 0; + } + if (rightType) { + rightWidth = 0; + } + if (bottomType) { + bottomWidth = 0; + } + if (leftType) { + leftWidth = 0; + } + leftWidth = leftWidth / 2; + rightWidth = rightWidth / 2; + bottomWidth = bottomWidth / 2; + topWidth = topWidth / 2; + let borderPVS = []; + let essBounds = this.model.essBounds; + borderPVS[0] = new Vector3(essBounds.x + topRound, essBounds.y + topWidth, 1); + borderPVS[4] = new Vector3(essBounds.x + leftWidth, essBounds.y + topWidth, 1); + borderPVS[1] = new Vector3(essBounds.x + essBounds.width - rightWidth, essBounds.y + topWidth, 1); + borderPVS[2] = new Vector3(essBounds.x + essBounds.width - rightWidth, essBounds.y + essBounds.height - bottomWidth, 1); + borderPVS[3] = new Vector3(essBounds.x + leftWidth, essBounds.y + essBounds.height - bottomWidth, 1); + if (this.model.rotate && this.model.rotate != 0) { + let m12 = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -this.model.cpv.x, + 0, + 1, + -this.model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + let angle2 = -(this.model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + let move2Matrix = new Matrix3( + 1, + 0, + this.model.cpv.x, + 0, + 1, + this.model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + borderPVS.forEach((fpv) => { + fpv.applyMatrix3(m12); + }); + } + this.borderPVS = borderPVS; + } + /** + * 取得边框的绘制区域 + */ + getBorderRatPos() { + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let absBounds = this.model.getAbsBounds(); + return DDeiUtil$1.getRatioPosition(absBounds, ratio); + } + /** + * 获取边框信息 + * @param tempBorder + */ + getBorderInfo(tempBorder, direct, path) { + let borderInfo = null; + if (tempBorder) { + try { + let returnJSON = DDeiUtil$1.getDataByPath(tempBorder, path.split(".")); + borderInfo = returnJSON.data; + } catch (e) { + } + } else { + let attrpath = null; + if (direct == 1) { + attrpath = "border.top." + path; + } else if (direct == 2) { + attrpath = "border.right." + path; + } else if (direct == 3) { + attrpath = "border.bottom." + path; + } else if (direct == 4) { + attrpath = "border.left." + path; + } + borderInfo = this.getCachedValue(attrpath); + } + return borderInfo; + } + /** + * 绘制边框 + * @param tempBorder 临时边框,优先级最高 + * @param usePV 是否采用向量输出 + */ + drawBorder(tempBorder) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let type = this.getBorderInfo(tempBorder, 1, "type"); + let color = this.getBorderInfo(tempBorder, 1, "color"); + let opacity = this.getBorderInfo(tempBorder, 1, "opacity"); + let width = this.getBorderInfo(tempBorder, 1, "width"); + let dash = this.getBorderInfo(tempBorder, 1, "dash"); + let round = this.getBorderInfo(null, 1, "round"); + if (!(type == 0 || type == "0") && color && (!opacity || opacity > 0) && width > 0) { + let lineOffset = 1 * ratio / 2; + let lineWidth = width * ratio; + ctx.lineWidth = lineWidth; + ctx.beginPath(); + if (dash) { + ctx.setLineDash(dash); + } + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.strokeStyle = DDeiUtil$1.getColor(color); + this.getBorderPVS(tempBorder); + let pvs2 = this.borderPVS; + if ((pvs2 == null ? void 0 : pvs2.length) > 0) { + lineOffset = 0; + ctx.moveTo(pvs2[0].x * rat1 + lineOffset, pvs2[0].y * rat1 + lineOffset); + ctx.arcTo(pvs2[1].x * rat1 + lineOffset, pvs2[1].y * rat1 + lineOffset, pvs2[2].x * rat1 + lineOffset, pvs2[2].y * rat1 + lineOffset, round * rat1); + ctx.arcTo(pvs2[2].x * rat1 + lineOffset, pvs2[2].y * rat1 + lineOffset, pvs2[3].x * rat1 + lineOffset, pvs2[3].y * rat1 + lineOffset, round * rat1); + ctx.arcTo(pvs2[3].x * rat1 + lineOffset, pvs2[3].y * rat1 + lineOffset, pvs2[4].x * rat1 + lineOffset, pvs2[4].y * rat1 + lineOffset, round * rat1); + ctx.arcTo(pvs2[4].x * rat1 + lineOffset, pvs2[4].y * rat1 + lineOffset, pvs2[1].x * rat1 + lineOffset, pvs2[1].y * rat1 + lineOffset, round * rat1); + } + ctx.stroke(); + if (this.clip) { + ctx.clip(); + } + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineColor = "black"; + ctx.setLineDash([]); + } + } + /** + * 填充图片 + */ + drawImage() { + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "fill.image"); + if (!this.imgObj || bgImage != this.upFillImage) { + this.initImage(); + } else { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + let fillRect = this.tempFillAreaRect; + ctx.save(); + let imgFillInfo = this.getCachedValue("fill.opacity"); + if (imgFillInfo) { + ctx.globalAlpha = imgFillInfo; + } + let lineOffset = 1 * ratio / 2; + ctx.translate(this.model.cpv.x * rat1, this.model.cpv.y * rat1); + ctx.rotate(this.model.rotate * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-this.model.cpv.x * rat1, -this.model.cpv.y * rat1); + ctx.drawImage(this.imgObj, (this.model.cpv.x - fillRect.width / 2) * rat1 + lineOffset, (this.model.cpv.y - fillRect.height / 2) * rat1 + lineOffset, fillRect.width * rat1, fillRect.height * rat1); + ctx.restore(); + } + } + /** + * 绘制填充 + */ + drawFill(tempShape) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let fillPVS = this.getFillAreaPVS(); + let rat1 = this.ddRender.ratio; + ctx.save(); + let fillType = ((_a3 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _a3.type) ? (_b2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _b2.type : this.getCachedValue("fill.type"); + if (this.isEditoring) { + if (!fillType || fillType == "0") { + fillType = 1; + } + } + if (fillType == 1) { + let fillColor = ((_c2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _c2.color) ? (_d2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _d2.color : this.getCachedValue("fill.color"); + let fillOpacity = ((_e2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _e2.opacity) ? (_f = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _f.opacity : this.getCachedValue("fill.opacity"); + let fillType2 = ((_g = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _g.type) ? (_h = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _h.type : this.getCachedValue("fill.type"); + if (this.isEditoring) { + fillType2 = 0; + fillOpacity = 1; + } + if (!fillType2 && fillColor && (!fillOpacity || fillOpacity > 0)) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + if (fillOpacity != null && !fillOpacity != void 0) { + ctx.globalAlpha = fillOpacity; + } + ctx.beginPath(); + for (let i2 = 0; i2 < fillPVS.length; i2++) { + if (i2 == fillPVS.length - 1) { + ctx.lineTo(fillPVS[i2].x * rat1, fillPVS[i2].y * rat1); + ctx.lineTo(fillPVS[0].x * rat1, fillPVS[0].y * rat1); + } else if (i2 == 0) { + ctx.moveTo(fillPVS[i2].x * rat1, fillPVS[i2].y * rat1); + } else { + ctx.lineTo(fillPVS[i2].x * rat1, fillPVS[i2].y * rat1); + } + } + ctx.closePath(); + ctx.fill(); + } + } else if (fillType == 2) { + this.drawImage(); + } + ctx.restore(); + } + /** + * 绘制文本 + */ + drawText() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + let fillRect = this.tempFillAreaRect; + let ratPos = DDeiUtil$1.getRatioPosition(fillRect, rat1); + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + let editorText = null; + if (this.isEditoring) { + editorText = DDeiUtil$1.getEditorText(); + } + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + this.stageRender.editorShadowControl.tempCursorStart = curSIdx; + this.stageRender.editorShadowControl.tempCursorEnd = curEIdx; + } + let align = this.getCachedValue("textStyle.align"); + let valign = this.getCachedValue("textStyle.valign"); + let scale = this.getCachedValue("textStyle.scale"); + let feed = this.getCachedValue("textStyle.feed"); + let fiFamily = this.getCachedValue("font.family"); + let fiSize = this.getCachedValue("font.size"); + let fiColor = this.getCachedValue("font.color"); + let hollow = this.getCachedValue("textStyle.hollow"); + let bold = this.getCachedValue("textStyle.bold"); + let italic = this.getCachedValue("textStyle.italic"); + let underline = this.getCachedValue("textStyle.underline"); + let deleteline = this.getCachedValue("textStyle.deleteline"); + let topline = this.getCachedValue("textStyle.topline"); + let textBgColor = this.getCachedValue("textStyle.bgcolor"); + ctx.save(); + ctx.translate(this.model.cpv.x * rat1, this.model.cpv.y * rat1); + ctx.rotate(this.model.rotate * DDeiConfig$1.ROTATE_UNIT); + let textContainer = []; + let loop2 = true; + let fontSize = fiSize; + let cText = null; + let sptStyle = null; + if (this.isEditoring) { + sptStyle = this.model.sptStyle; + feed = "1"; + scale = "1"; + cText = this.getCachedValue("text"); + } else { + cText = DDeiUtil$1.getReplacibleValue(this.model, "text", true, true); + sptStyle = this.tempSptStyle ? this.tempSptStyle : this.model.sptStyle; + } + if (cText && trim(cText) != "") { + cText = "" + cText; + let contentWidth = ratPos.width; + let subtractionFontSize = 0; + while (loop2) { + let usedWidth = 0; + let usedHeight = 0; + let textRowContainer = { text: "", widths: [], heights: [] }; + textContainer.push(textRowContainer); + let isOutSize = false; + let maxFontSize = 0; + if (fontSize > ratPos.height) { + if (scale == 1) { + textContainer = []; + let ds = fontSize < 50 ? 0.5 : Math.floor(fontSize / 50); + fontSize -= ds; + continue; + } + } + let baseFont = fontSize + "px " + fiFamily; + if (bold == "1") { + baseFont = "bold " + baseFont; + } + if (italic == "1") { + baseFont = "italic " + baseFont; + } + let rcIndex = 0; + let lastUnSubTypeFontSize2 = 0; + for (let ti = 0; ti < cText.length; ti++, rcIndex++) { + let te = cText[ti]; + let font = null; + let fontHeight = null; + let isEnter = false; + let fontShapeRect = null; + if ((feed == 1 || feed == "1") && te == "\n") { + isEnter = true; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = 0; + textRowContainer.heights[rcIndex] = 0; + textRowContainer.width = Math.max(0, usedWidth); + textRowContainer.height = Math.max(0, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize2 * ratio); + } else { + if (sptStyle[ti]) { + let ftsize = ((_b2 = (_a3 = sptStyle[ti]) == null ? void 0 : _a3.font) == null ? void 0 : _b2.size) ? ((_d2 = (_c2 = sptStyle[ti]) == null ? void 0 : _c2.font) == null ? void 0 : _d2.size) - subtractionFontSize : fontSize; + if ((_e2 = sptStyle[ti].textStyle) == null ? void 0 : _e2.subtype) { + if (!lastUnSubTypeFontSize2) { + lastUnSubTypeFontSize2 = ftsize; + } + ftsize = lastUnSubTypeFontSize2 / 2; + } else if (ftsize < 1) { + ftsize = 2; + } + let ftfamily = ((_g = (_f = sptStyle[ti]) == null ? void 0 : _f.font) == null ? void 0 : _g.family) ? (_i = (_h = sptStyle[ti]) == null ? void 0 : _h.font) == null ? void 0 : _i.family : fiFamily; + font = ftsize + "px " + ftfamily; + if (((_k = (_j = sptStyle[ti]) == null ? void 0 : _j.textStyle) == null ? void 0 : _k.bold) == "1") { + font = "bold " + font; + } + if (((_m = (_l = sptStyle[ti]) == null ? void 0 : _l.textStyle) == null ? void 0 : _m.italic) == "1") { + font = "italic " + font; + } + fontHeight = ftsize; + } + if (!font) { + font = baseFont; + fontHeight = fontSize; + } + if (!((_o = (_n = sptStyle[ti]) == null ? void 0 : _n.textStyle) == null ? void 0 : _o.subtype)) { + lastUnSubTypeFontSize2 = fontHeight; + } + maxFontSize = Math.max(maxFontSize, fontHeight); + let rc1 = DDeiUtil$1.measureText(te, font, ctx, fontHeight); + fontShapeRect = { width: rc1.width * ratio, height: rc1.height * ratio }; + usedWidth += fontShapeRect.width; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontHeight * ratio; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontHeight * ratio, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize2 * ratio); + } + if (feed == 0) { + if (scale == 1 && usedWidth > contentWidth) { + isOutSize = true; + break; + } else if (usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + usedWidth -= fontShapeRect.width; + textRowContainer.width = usedWidth; + break; + } + } else if (feed == 1 || feed == "1") { + if (isEnter) { + usedWidth = 0; + usedHeight += textRowContainer.height; + if (usedHeight + textRowContainer.height > ratPos.height) { + if (scale == 1) { + isOutSize = true; + } + break; + } + rcIndex = -1; + textRowContainer = { text: "", widths: [], heights: [] }; + textRowContainer.width = usedWidth; + textRowContainer.height = 0; + textContainer.push(textRowContainer); + } else if (usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + textRowContainer.width -= fontShapeRect.width; + textRowContainer.widths.splice(rcIndex, 1); + textRowContainer.heights.splice(rcIndex, 1); + usedWidth = fontShapeRect.width; + usedHeight += textRowContainer.height; + if (usedHeight + textRowContainer.height > ratPos.height) { + if (scale == 1) { + isOutSize = true; + } + break; + } + rcIndex = 0; + textRowContainer = { text: te, widths: [], heights: [] }; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontHeight * ratio; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontHeight * ratio, lastUnSubTypeFontSize2 * ratio); + textContainer.push(textRowContainer); + } + } + } + if (!isOutSize) { + loop2 = false; + } else { + textContainer = []; + let ds = maxFontSize < 50 ? 0.5 : Math.floor(maxFontSize / 50); + fontSize -= ds; + subtractionFontSize += ds; + } + } + let containerRect = { width: 0, height: 0 }; + for (let i2 = 0; i2 < textContainer.length; i2++) { + if (i2 == 0) { + containerRect.width += textContainer[i2].width; + } + containerRect.height += textContainer[i2].height; + } + let containerWidth = containerRect.width; + let containerHeight = containerRect.height; + let x2, y2; + if (align == 1) { + x2 = 0; + } else if (align == 2) { + x2 = (ratPos.width - containerWidth) * 0.5; + } else if (align == 3) { + x2 = ratPos.width - containerWidth; + } + x2 = x2 + ratPos.x; + if (valign == 1) { + y2 = 0; + } else if (valign == 2) { + y2 = (ratPos.height - containerHeight) * 0.5; + } else if (valign == 3) { + y2 = ratPos.height - containerHeight; + } + y2 = y2 + ratPos.y; + let cursorX = -Infinity; + let cursorY = -Infinity; + let cursorHeight = 0; + let tempIdx = 0; + let usedY = 0, usedX = 0; + let lastUsedX, lastUsedY, lastWidth, lastHeight; + let lastUnSubTypeFontSize = 0; + if (textContainer.length > 0) { + textContainer[0].textPosCache = []; + } + for (let tci = 0; tci < textContainer.length; tci++) { + let rRect = textContainer[tci]; + let x1, y1; + if (align == 1) { + x1 = x2; + y1 = y2 + usedY; + } else if (align == 2) { + x1 = ratPos.x + (ratPos.width - rRect.width) * 0.5; + y1 = y2 + usedY; + } else if (align == 3) { + x1 = ratPos.x + (ratPos.width - rRect.width); + y1 = y2 + usedY; + } + textContainer[tci].x = x1; + textContainer[tci].y = y1; + usedX = x1; + for (let tj = 0; tj < textContainer[tci].text.length; tj++, tempIdx++) { + let width = textContainer[tci].widths[tj]; + let height = textContainer[tci].heights[tj]; + lastWidth = width; + lastHeight = height; + ctx.save(); + let font = fontSize * ratio + "px " + fiFamily; + if (bold == "1") { + font = "bold " + font; + } + if (italic == "1") { + font = "italic " + font; + } + let tHollow = hollow; + let tUnderline = underline; + let tDeleteline = deleteline; + let tTopline = topline; + let tFontColor = fiColor; + let tBgColor = textBgColor; + let ftsize = fontSize * ratio; + let subScriptOffY = 0; + if (sptStyle[tempIdx]) { + tBgColor = ((_p = sptStyle[tempIdx].textStyle) == null ? void 0 : _p.bgcolor) ? sptStyle[tempIdx].textStyle.bgcolor : textBgColor; + ftsize = ((_q = sptStyle[tempIdx].font) == null ? void 0 : _q.size) ? ((_r = sptStyle[tempIdx].font) == null ? void 0 : _r.size) - subtractionFontSize : fontSize; + ftsize *= ratio; + if ((_s = sptStyle[tempIdx].textStyle) == null ? void 0 : _s.subtype) { + if (!lastUnSubTypeFontSize) { + lastUnSubTypeFontSize = ftsize; + } + ftsize = lastUnSubTypeFontSize / 2; + switch ((_t = sptStyle[tempIdx].textStyle) == null ? void 0 : _t.subtype) { + case 1: + subScriptOffY = -(lastUnSubTypeFontSize - ftsize); + break; + case 2: + subScriptOffY = -(lastUnSubTypeFontSize - ftsize) / 2; + break; + } + } else if (ftsize < 1) { + ftsize = 2 * ratio; + } + let ftfamily = ((_u = sptStyle[tempIdx].font) == null ? void 0 : _u.family) ? (_v = sptStyle[tempIdx].font) == null ? void 0 : _v.family : fiFamily; + font = ftsize + "px " + ftfamily; + if (((_x = (_w = sptStyle[tempIdx]) == null ? void 0 : _w.textStyle) == null ? void 0 : _x.bold) == "1") { + font = "bold " + font; + } + if (((_z = (_y = sptStyle[tempIdx]) == null ? void 0 : _y.textStyle) == null ? void 0 : _z.italic) == "1") { + font = "italic " + font; + } + tHollow = ((_B = (_A = sptStyle[tempIdx]) == null ? void 0 : _A.textStyle) == null ? void 0 : _B.hollow) == "1" ? "1" : tHollow; + tUnderline = ((_D = (_C = sptStyle[tempIdx]) == null ? void 0 : _C.textStyle) == null ? void 0 : _D.underline) == "1" ? "1" : tUnderline; + tDeleteline = ((_F = (_E = sptStyle[tempIdx]) == null ? void 0 : _E.textStyle) == null ? void 0 : _F.deleteline) == "1" ? "1" : tDeleteline; + tTopline = ((_H = (_G = sptStyle[tempIdx]) == null ? void 0 : _G.textStyle) == null ? void 0 : _H.topline) == "1" ? "1" : tTopline; + tFontColor = ((_J = (_I = sptStyle[tempIdx]) == null ? void 0 : _I.font) == null ? void 0 : _J.color) ? sptStyle[tempIdx].font.color : tFontColor; + } + if (!((_L = (_K = sptStyle[tempIdx]) == null ? void 0 : _K.textStyle) == null ? void 0 : _L.subtype)) { + lastUnSubTypeFontSize = ftsize; + } + if (!textContainer[tci].tHollow) { + textContainer[tci].tHollow = []; + textContainer[tci].tUnderline = []; + textContainer[tci].tDeleteline = []; + textContainer[tci].tTopline = []; + textContainer[tci].tFontColor = []; + textContainer[tci].font = []; + textContainer[tci].subScriptOffY = []; + } + textContainer[tci].tHollow[tj] = tHollow; + textContainer[tci].tUnderline[tj] = tUnderline; + textContainer[tci].tDeleteline[tj] = tDeleteline; + textContainer[tci].tTopline[tj] = tTopline; + textContainer[tci].tFontColor[tj] = tFontColor; + textContainer[tci].font[tj] = font; + textContainer[tci].subScriptOffY[tj] = subScriptOffY; + let ofY = rRect.height - height + subScriptOffY; + if (tempIdx >= curSIdx && tempIdx < curEIdx) { + ctx.save(); + ctx.fillStyle = "#017fff"; + ctx.globalAlpha = 0.4; + ctx.fillRect(usedX - 0.5, y1 + ofY, width + 1, height); + ctx.restore(); + } else if (tBgColor) { + ctx.save(); + ctx.fillStyle = DDeiUtil$1.getColor(tBgColor); + ctx.fillRect(usedX - 0.5, y1 + ofY, width + 1, height); + ctx.restore(); + } + if (curSIdx == curEIdx && tempIdx == curEIdx) { + cursorX = usedX; + cursorHeight = tj > 1 ? textContainer[tci].heights[tj - 1] : height; + ofY = rRect.height - cursorHeight + (tj > 1 ? textContainer[tci].subScriptOffY[tj - 1] : subScriptOffY); + cursorY = y1 + ofY; + } + ctx.fillStyle = tFontColor; + ctx.font = font; + lastUsedY = y1 + ofY; + lastUsedX = usedX; + usedX += width; + ctx.restore(); + } + usedX = x1; + for (let tj = 0; tj < textContainer[tci].text.length; tj++) { + let outputText = textContainer[tci].text[tj]; + let width = textContainer[tci].widths[tj]; + let height = textContainer[tci].heights[tj]; + ctx.save(); + let tHollow = textContainer[tci].tHollow[tj]; + let tUnderline = textContainer[tci].tUnderline[tj]; + let tDeleteline = textContainer[tci].tDeleteline[tj]; + let tTopline = textContainer[tci].tTopline[tj]; + let tFontColor = textContainer[tci].tFontColor[tj]; + let font = textContainer[tci].font[tj]; + let subScriptOffY = textContainer[tci].subScriptOffY[tj]; + let ofY = rRect.height - height + subScriptOffY; + ctx.fillStyle = tFontColor; + ctx.font = font; + if (tHollow == "1") { + ctx.strokeStyle = tFontColor; + ctx.strokeText(outputText, usedX, y1 + ofY); + } else { + ctx.fillText(outputText, usedX, y1 + ofY); + } + if (curSIdx != -1 && curEIdx != -1) { + textContainer[0].textPosCache.push({ x: usedX, y: y1 + ofY }); + } + if (tUnderline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY + height); + ctx.lineTo(usedX + width, y1 + ofY + height); + ctx.closePath(); + ctx.stroke(); + } + if (tDeleteline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY + height / 2); + ctx.lineTo(usedX + width, y1 + ofY + height / 2); + ctx.closePath(); + ctx.stroke(); + } + if (tTopline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY); + ctx.lineTo(usedX + width, y1 + ofY); + ctx.closePath(); + ctx.stroke(); + } + usedX += width; + ctx.restore(); + } + usedY += rRect.height; + } + if (cursorX != -Infinity && cursorY != -Infinity && curSIdx == curEIdx) { + ctx.strokeStyle = "black"; + ctx.lineWidth = 1.5; + ctx.beginPath(); + ctx.moveTo(cursorX, cursorY - 2); + ctx.lineTo(cursorX, cursorY + cursorHeight + 2); + ctx.closePath(); + ctx.stroke(); + } else if ((editorText == null ? void 0 : editorText.selectionEnd) == cText.length) { + ctx.strokeStyle = "black"; + ctx.lineWidth = 1.5; + ctx.beginPath(); + ctx.moveTo(lastUsedX + lastWidth, lastUsedY - 2); + ctx.lineTo(lastUsedX + lastWidth, lastUsedY + lastHeight + 2); + ctx.closePath(); + ctx.stroke(); + } + this.textUsedArea = textContainer; + } + ctx.restore(); + } + /** + * 计算除边框外的填充区域,用于填充颜色和字体 + */ + getFillArea() { + let type = this.getBorderInfo(null, 1, "type"); + let color = this.getBorderInfo(null, 1, "color"); + let opacity = this.getBorderInfo(null, 1, "opacity"); + let width = this.getBorderInfo(null, 1, "width"); + if (!(!(type == 0 || type == "0") && color && (!opacity || opacity > 0) && width > 0)) { + width = 0; + } + return { + x: this.model.x + width, + y: this.model.y + width, + width: this.model.width - 2 * width, + height: this.model.height - 2 * width + }; + } + /** + * 计算除边框外的填充区域,用于填充颜色和字体 + */ + getFillAreaPVS() { + let topDisabled = this.getCachedValue("border.top.disabled"); + let topColor = this.getCachedValue("border.top.color"); + let topOpac = this.getCachedValue("border.top.opacity"); + let topWidth = this.getCachedValue("border.top.width"); + let rightDisabled = this.getCachedValue("border.right.disabled"); + let rightColor = this.getCachedValue("border.right.color"); + let rightOpac = this.getCachedValue("border.right.opacity"); + let rightWidth = this.getCachedValue("border.right.width"); + let bottomDisabled = this.getCachedValue("border.bottom.disabled"); + let bottomColor = this.getCachedValue("border.bottom.color"); + let bottomOpac = this.getCachedValue("border.bottom.opacity"); + let bottomWidth = this.getCachedValue("border.bottom.width"); + let leftDisabled = this.getCachedValue("border.left.disabled"); + let leftColor = this.getCachedValue("border.left.color"); + let leftOpac = this.getCachedValue("border.left.opacity"); + let leftWidth = this.getCachedValue("border.left.width"); + if (!(!leftDisabled && leftColor && (!leftOpac || leftOpac > 0) && leftWidth > 0)) { + leftWidth = 0; + } + if (!(!rightDisabled && rightColor && (!rightOpac || rightOpac > 0) && rightWidth > 0)) { + rightWidth = 0; + } + if (!(!topDisabled && topColor && (!topOpac || topOpac > 0) && topWidth > 0)) { + bottomWidth = 0; + } + if (!(!bottomDisabled && bottomColor && (!bottomOpac || bottomOpac > 0) && bottomWidth > 0)) { + bottomWidth = 0; + } + topWidth = topWidth / 2; + bottomWidth = bottomWidth / 2; + leftWidth = leftWidth / 2; + rightWidth = rightWidth / 2; + let fillPVS = cloneDeep(this.model.pvs); + let move1Matrix = new Matrix3( + 1, + 0, + -this.model.cpv.x, + 0, + 1, + -this.model.cpv.y, + 0, + 0, + 1 + ); + fillPVS.forEach((fpv) => { + fpv.applyMatrix3(move1Matrix); + }); + if (this.model.rotate && this.model.rotate != 0) { + let angle2 = (this.model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + fillPVS.forEach((fpv) => { + fpv.applyMatrix3(rotateMatrix); + }); + } + fillPVS[1].x -= rightWidth; + fillPVS[0].y += topWidth; + fillPVS[2].x -= rightWidth; + fillPVS[1].y += topWidth; + fillPVS[2].y -= bottomWidth; + fillPVS[3].y -= bottomWidth; + fillPVS[0].x += leftWidth; + fillPVS[3].x += leftWidth; + this.tempFillAreaRect = { x: fillPVS[0].x, y: fillPVS[0].y, width: fillPVS[1].x - fillPVS[0].x, height: fillPVS[3].y - fillPVS[0].y }; + if (this.model.rotate && this.model.rotate != 0) { + let angle2 = -(this.model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + fillPVS.forEach((fpv) => { + fpv.applyMatrix3(rotateMatrix); + }); + } + let move2Matrix = new Matrix3( + 1, + 0, + this.model.cpv.x, + 0, + 1, + this.model.cpv.y, + 0, + 0, + 1 + ); + fillPVS.forEach((fpv) => { + fpv.applyMatrix3(move2Matrix); + }); + return fillPVS; + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + super.mouseDown(evt); + } + /** + * 绘制图形 + */ + mouseUp(evt) { + super.mouseUp(evt); + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + super.mouseMove(evt); + } + /** + * 鼠标双击 + * @param evt + */ + dblClick(evt) { + } + }; + __publicField2(_DDeiRectangleCanvasRender, "ClsName", "DDeiRectangleCanvasRender"); + let DDeiRectangleCanvasRender = _DDeiRectangleCanvasRender; + const __vite_glob_1_7$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiRectangleCanvasRender, + default: DDeiRectangleCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiCircleCanvasRender = class _DDeiCircleCanvasRender2 extends DDeiRectangleCanvasRender { + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiCircleCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 绘制边框 + * @param tempBorder 临时border信息 + */ + drawBorder(tempBorder) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let ratPos = this.getBorderRatPos(); + let borderType = null; + let borderColor = null; + let borderOpac = null; + let borderWidth = null; + let borderDash = null; + if (tempBorder) { + borderType = tempBorder == null ? void 0 : tempBorder.type; + borderColor = tempBorder == null ? void 0 : tempBorder.color; + borderOpac = tempBorder == null ? void 0 : tempBorder.opacity; + borderWidth = tempBorder == null ? void 0 : tempBorder.width; + borderDash = tempBorder == null ? void 0 : tempBorder.dash; + } else { + borderType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.type", true); + borderColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.color", true); + borderOpac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.opacity", true); + borderWidth = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.width", true); + borderDash = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.dash", true); + } + if ((borderType == 1 || borderType == "1") && borderColor && (!borderOpac || borderOpac > 0) && borderWidth > 0) { + ctx.save(); + this.doRotate(ctx, ratPos); + ctx.beginPath(); + ctx.lineWidth = borderWidth * ratio; + if (borderDash) { + ctx.setLineDash(borderDash); + } + if (borderOpac) { + ctx.globalAlpha = borderOpac; + } + ctx.strokeStyle = DDeiUtil$1.getColor(border.color); + ctx.ellipse(ratPos.x + ratPos.width * 0.5 + 0.5, ratPos.y + ratPos.height * 0.5 + 0.5, ratPos.width * 0.5, ratPos.height * 0.5, 0, 0, Math.PI * 2); + ctx.stroke(); + ctx.restore(); + } + } + /** + * 绘制填充 + */ + drawFill() { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let fillAreaE = this.getFillArea(); + let ratPos = DDeiUtil$1.getRatioPosition(fillAreaE, ratio); + ctx.save(); + this.doRotate(ctx, ratPos); + let fillColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "fill.color", true); + if (fillColor) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + let fillOpac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "fill.opacity", true); + if (fillOpac) { + ctx.globalAlpha = fillOpac; + } + ctx.ellipse(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height * 0.5, ratPos.width * 0.5, ratPos.height * 0.5, 0, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); + } + /** + * 填充图片 + */ + drawImage() { + if (this.imgObj) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let fillAreaE = this.getFillArea(); + let ratPos = DDeiUtil$1.getRatioPosition(fillAreaE, ratio); + ctx.save(); + this.doRotate(ctx, ratPos); + let imgFillInfo = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "image.opacity", true); + if (imgFillInfo) { + ctx.globalAlpha = imgFillInfo; + } + ctx.ellipse(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height * 0.5, ratPos.width * 0.5, ratPos.height * 0.5, 0, 0, Math.PI * 2); + ctx.clip(); + ctx.drawImage(this.imgObj, ratPos.x, ratPos.y, ratPos.width, ratPos.height); + ctx.restore(); + } + } + /** + * 绘制文本 + */ + drawText() { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let fillAreaE = this.getFillArea(); + let ratPos = DDeiUtil$1.getRatioPosition(fillAreaE, ratio); + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + let fiFamily = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "font.family", true); + let fiSize = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "font.size", true); + let fiColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "font.color", true); + let align = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "textStyle.align", true); + let valign = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "textStyle.valign", true); + let scale = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "textStyle.scale", true); + let hollow = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "textStyle.hollow", true); + let feed = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "textStyle.feed", true); + if (!fiFamily) { + return; + } + if (!align) { + align = 1; + } + if (!valign) { + valign = 2; + } + if (!scale) { + scale = 0; + } + if (!hollow) { + hollow = 0; + } + if (!feed) { + feed = 0; + } + ctx.save(); + this.doRotate(ctx, ratPos); + let textContainer = []; + let loop2 = true; + let fontSize = fiSize * ratio; + let cText = this.model.text; + cText = "" + cText; + let contentWidth = ratPos.width; + while (loop2) { + let usedWidth = 0; + let usedHeight = 0; + let textRowContainer = { text: "" }; + textContainer.push(textRowContainer); + let isOutSize = false; + if (fontSize > ratPos.height) { + if (scale == 1) { + textContainer = []; + fontSize = fontSize - 0.5; + continue; + } + } + ctx.font = fontSize + "px " + fiFamily; + ctx.fillStyle = fiColor; + for (let ti = 0; ti < cText.length; ti++) { + let te = cText[ti]; + textRowContainer.text += te; + let fontShapeRect = ctx.measureText(textRowContainer.text); + usedWidth = fontShapeRect.width; + let fontHeight = parseFloat(fontSize); + textRowContainer.width = usedWidth; + textRowContainer.height = fontHeight; + if (feed == 0) { + if (scale == 1 && usedWidth > contentWidth) { + isOutSize = true; + break; + } else if (usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + let fontShapeRect2 = ctx.measureText(textRowContainer.text); + usedWidth = fontShapeRect2.width; + textRowContainer.width = usedWidth; + break; + } + } else if (feed == 1) { + if (usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + let fontShapeRect2 = ctx.measureText(textRowContainer.text); + textRowContainer.width = fontShapeRect2.width; + usedWidth = 0; + usedHeight += fontHeight; + if (usedHeight + fontHeight > ratPos.height) { + if (scale == 1) { + isOutSize = true; + } + break; + } + textRowContainer = { text: te }; + fontShapeRect2 = ctx.measureText(textRowContainer.text); + usedWidth = fontShapeRect2.width; + textRowContainer.width = usedWidth; + textRowContainer.height = fontHeight; + textContainer.push(textRowContainer); + } + } + } + if (!isOutSize) { + loop2 = false; + } else { + textContainer = []; + fontSize = fontSize - 0.5; + } + } + let containerRect = { width: 0, height: 0 }; + for (let i2 = 0; i2 < textContainer.length; i2++) { + if (i2 == 0) { + containerRect.width += textContainer[i2].width; + } + containerRect.height += textContainer[i2].height; + } + let containerWidth = containerRect.width; + let containerHeight = containerRect.height; + let x2, y2; + if (align == 1) { + x2 = 0; + } else if (align == 2) { + x2 = (ratPos.width - containerWidth) * 0.5; + } else if (align == 3) { + x2 = ratPos.width - containerWidth; + } + x2 = x2 + ratPos.x; + if (valign == 1) { + y2 = 0; + } else if (valign == 2) { + y2 = (ratPos.height - containerHeight) * 0.5; + } else if (valign == 3) { + y2 = ratPos.height - containerHeight; + } + y2 = y2 + ratPos.y; + if (feed == 1) { + for (let tci = 0; tci < textContainer.length; tci++) { + let rRect = textContainer[tci]; + if (align == 1) { + if (hollow == 1) { + ctx.strokeText(rRect.text, x2, y2 + rRect.height * tci); + } else { + ctx.fillText(rRect.text, x2, y2 + rRect.height * tci); + } + } else if (align == 2) { + if (hollow == 1) { + ctx.strokeText(rRect.text, ratPos.x + (ratPos.width - rRect.width) * 0.5, y2 + rRect.height * tci); + } else { + ctx.fillText(rRect.text, ratPos.x + (ratPos.width - rRect.width) * 0.5, y2 + rRect.height * tci); + } + } else if (align == 3) { + if (hollow == 1) { + ctx.strokeText(rRect.text, ratPos.x + (ratPos.width - rRect.width), y2 + rRect.height * tci); + } else { + ctx.fillText(rRect.text, ratPos.x + (ratPos.width - rRect.width), y2 + rRect.height * tci); + } + } + } + } else { + if (hollow == 1) { + ctx.strokeText(textContainer[0].text, x2, y2); + } else { + ctx.fillText(textContainer[0].text, x2, y2); + } + } + ctx.restore(); + } + /** + * 私有函数,计算除边框外的填充区域,用于填充颜色 + */ + getFillArea() { + let borderType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.type", true); + let borderColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.color", true); + let borderOpac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.opacity", true); + let borderWidth = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border.width", true); + if (!((borderType == 1 || borderType == "1") && borderColor && (!borderOpac || borderOpac > 0) && borderWidth > 0)) { + borderWidth = 0; + } + let absBounds = this.model.getAbsBounds(); + let fillAreaE = { + x: absBounds.x + borderWidth, + y: absBounds.y + borderWidth, + width: absBounds.width - borderWidth - borderWidth, + height: absBounds.height - borderWidth - borderWidth + }; + return fillAreaE; + } + /** + * 私有函数,计算除边框外的填充区域字体 + */ + getTextArea(fillArea, fInfo) { + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + if (!fillArea) { + fillArea = this.getFillArea(); + fillArea = DDeiUtil$1.getRatioPosition(fillArea, ratio); + } + if (!fInfo) { + fInfo = this.model.font && this.model.font.default ? this.model.font.default : DDeiConfig$1.CIRCLE.FONT.default; + if (this.model.state == DDeiEnumControlState.SELECTED) { + fInfo = this.model.font && this.model.font.selected ? this.model.font.selected : DDeiConfig$1.CIRCLE.FONT.selected; + } + } + fInfo.size * ratio; + fillArea.width * 0.5; + } + }; + __publicField2(_DDeiCircleCanvasRender, "ClsName", "DDeiCircleCanvasRender"); + let DDeiCircleCanvasRender = _DDeiCircleCanvasRender; + const __vite_glob_1_0$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiCircleCanvasRender, + default: DDeiCircleCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiCanvasRender = class _DDeiCanvasRender2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "model"); + __publicField2(this, "canvas", null); + __publicField2(this, "tempCanvas", null); + __publicField2(this, "ratio", 1); + this.model = props.model; + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 初始化 + */ + init() { + this.container = document.getElementById(this.model.containerid); + if (this.container) { + if (this.container.children.length > 0) { + let cvs = this.container.getElementsByTagName("canvas"); + while ((cvs == null ? void 0 : cvs.length) > 0) { + cvs[0].remove(); + } + } + if (this.model.width) { + this.container.style.width = this.model.width + "px"; + } + if (this.model.height) { + this.container.style.height = this.model.height + "px"; + } + this.realCanvas = document.createElement("canvas"); + this.realCanvas.setAttribute("id", this.model.id + "_canvas"); + let ctx = this.realCanvas.getContext("2d"); + let ratio = Math.max(this.model.pixel, DDeiUtil$1.getPixelRatio(ctx)); + this.container.appendChild(this.realCanvas); + let w = this.model.width ? this.model.width : this.container.clientWidth; + let h = this.model.height ? this.model.height : this.container.clientHeight; + this.canvas = this.realCanvas; + this.realCanvas.setAttribute("style", "pointer-events:none;z-index:100;position:absolute;-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / ratio + ");display:block;zoom:" + 1 / ratio); + this.realCanvas.setAttribute("width", w * ratio); + this.realCanvas.setAttribute("height", h * ratio); + this.ratio = ratio * window.remRatio; + this.bindEvent(); + } else { + throw new Error("容器" + this.model.containerid + "不存在"); + } + } + // webglTest() { + // let canvas = document.createElement('canvas'); + // canvas.setAttribute("width", 480) + // canvas.setAttribute("height", 240) + // canvas.setAttribute("style", "border:1px solid red;position:absolute;left:0;top:400px;") + // document.body.appendChild(canvas) + // let gl = canvas.getContext('webgl') + // gl.viewport(0, 0, 480, 240) + // //创建顶点着色器 + // const vertexShader = gl.createShader(gl.VERTEX_SHADER) + // //创建片元着色器 + // const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER) + // //顶点着色器代码 + // const vertexShaderSource = ` + // attribute vec4 a_pos; + // void main() { + // gl_Position = a_pos; + // } + // ` + // //片元着色器代码 + // const fragmentShaderSource = ` + // void main() { + // gl_FragColor = vec4(0.0,0.0,0.0,1.0); + // } + // ` + // //绑定数据源 + // gl.shaderSource(vertexShader, vertexShaderSource) + // gl.shaderSource(fragmentShader, fragmentShaderSource) + // // 编译着色器 + // gl.compileShader(vertexShader) + // gl.compileShader(fragmentShader) + // // 创建着色器程序 + // const program = gl.createProgram() + // gl.attachShader(program, vertexShader) + // gl.attachShader(program, fragmentShader) + // // 链接 并使用着色器 + // gl.linkProgram(program) + // gl.useProgram(program) + // gl.program = program + // // //错误输出日志 + // // const success = gl.getProgramParameter(program, gl.LINK_STATUS) + // // if (success) { + // // gl.useProgram(program) + // // return program + // // } + // // console.error(gl.getProgramInfoLog(program), 'test---') + // // gl.deleteProgram(program) + // //抗锯齿 + // // gl.enable(gl.MULTISAMPLE) + // //创建顶点缓冲对象 + // const buffer = gl.createBuffer() + // //把标识符buffer设置为当前缓冲区,后面的所有的数据都会都会被放入当前缓冲区,直到bindBuffer绑定另一个当前缓冲区 + // gl.bindBuffer(gl.ARRAY_BUFFER, buffer) + // //构造三角形的点 + // let data = new Float32Array([-0.2, 0.5, + // -0.5, -0.3, + // 0, -0.3, + // 0.29, 0.5]) + // gl.bufferData(gl.ARRAY_BUFFER, data, gl?.DYNAMIC_DRAW) + // //从刚才创建的GLSL着色程序中找到这个属性值所在的位置。 + // const aposlocation = gl.getAttribLocation(program, 'a_pos') + // gl.enableVertexAttribArray(aposlocation) + // //从缓冲中读取数据绑定给被激活的aposlocation的位置 + // gl.vertexAttribPointer(aposlocation, 2, gl.FLOAT, false, 2 * 4, 0 * 4) + // //渲染 + // //清空颜色 + // gl.clearColor(1, 1, 1, 1) + // gl.clear(gl.COLOR_BUFFER_BIT) + // // gl.drawArrays(gl?.LINE_LOOP, 0, 4) + // //索引缓冲区,可以控制绘制的顺序 + // let indexArr = new Uint16Array([ + // 0, 1, 2, + // 0, 3, 1, + // ]); + // let indexBuffer = gl?.createBuffer() + // gl?.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer) + // gl?.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW) + // gl?.drawElements(gl.TRIANGLES, indexArr.length, gl.UNSIGNED_SHORT, 0) + // let indexArr1 = new Uint16Array([ + // 1, 2, 3 + // ]); + // gl?.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer) + // gl?.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr1, gl.STATIC_DRAW) + // gl?.drawElements(gl.LINE_LOOP, indexArr1.length, gl.UNSIGNED_SHORT, 0) + // // data = new Float32Array([0.3, 0.5, 0.1, -0.3, 0.5, -0.3]) + // // gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW) + // // gl.drawArrays(gl?.LINE_LOOP, 0, 3) + // // gl.drawArrays(gl?.TRIANGLES, 0, 3) + // } + /** + * 获取当前画布 + */ + getCanvas() { + if (this.tempCanvas) { + return this.tempCanvas; + } + return this.canvas; + } + /** + * 显示 + */ + show() { + document.getElementById(this.model.containerid).style.display = "block"; + } + /** + * 隐藏 + */ + hidden() { + document.getElementById(this.model.containerid).style.display = "none"; + } + /** + * 重新设置大小 + */ + setSize(width = 0, height = 0, deltaX = 0, deltaY = 0) { + if (!width || width == 0) { + width = this.container.clientWidth; + } + width += deltaX; + if (!height || height == 0) { + height = this.container.clientHeight; + } + height += deltaY; + this.realCanvas.setAttribute("width", width * this.ratio / window.remRatio); + this.realCanvas.setAttribute("height", height * this.ratio / window.remRatio); + } + /** + * 绘制图形 + */ + drawShape() { + var _a3, _b2; + if (this.model.stage) { + if (((_a3 = this.model.stage.render) == null ? void 0 : _a3.refresh) || ((_b2 = this.model.stage.render) == null ? void 0 : _b2.editorShadowControl)) { + this.model.stage.render.drawShape(); + this.model.stage.drawing = false; + this.model.stage.render.refresh = false; + } + } else { + throw new Error("当前实例未加载舞台模型,无法渲染图形"); + } + } + // ============================== 事件 =============================== + /** + * 绑定事件 + */ + bindEvent() { + this.interval = setInterval(() => { + if (this.model.render != this) { + this.destroyRender(); + } else if (!this.model.disabled) { + let allowBackActive = DDeiUtil$1.isBackActive(this.model); + if (allowBackActive) { + this.mouseInEdge(); + } + this.model.stage.drawing = true; + this.drawShape(); + } + }, 20); + } + destroyed() { + if (this.interval) { + clearInterval(this.interval); + } + } + /** + * 鼠标在画布边缘 + */ + mouseInEdge() { + var _a3, _b2; + if (this.upInEdge != this.inEdge) { + this.inEdgeTime = 0; + this.upInEdge = this.inEdge; + } + if (this.inEdge) { + this.inEdgeTime += 20; + (_b2 = (_a3 = this.model.stage) == null ? void 0 : _a3.render) == null ? void 0 : _b2.mouseInEdge(this.inEdge, this.inEdgeTime); + } + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_IN_AREA", "MOUSE_IN_AREA", { x: this.inAreaX, y: this.inAreaY, models: this.inAreaControls }, this.model, null); + } + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + this.model.eventCancel = false; + this.model.stage.render.mouseDown(evt); + } + /** + * 绘制图形 + */ + mouseUp(evt) { + this.model.eventCancel = false; + this.model.stage.render.mouseUp(evt); + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + let sx = evt.screenX; + let sy = evt.screenY; + sx /= window.remRatio; + sy /= window.remRatio; + let stage2 = this.model.stage; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + sx -= stage2.wpv.x; + sy -= stage2.wpv.y; + this.model.eventCancel = false; + this.model.stage.render.mouseMove(evt); + } + /** + * 鼠标滚轮或滑动事件 + */ + mouseWheel(evt) { + let wheelDeltaY = evt.wheelDeltaY; + let wheelDeltaYAbs = Math.abs(wheelDeltaY); + if (wheelDeltaYAbs > 0 && wheelDeltaYAbs % 120 == 0) { + if (DDeiUtil$1.getConfigValue("GLOBAL_ALLOW_STAGE_RATIO", this.model)) { + this.mouseScale(evt.wheelDeltaY, evt); + } + } else if (evt.wheelDeltaX || evt.wheelDeltaY) { + let ctrl = DDei.KEY_DOWN_STATE.get("ctrl"); + if (DDeiUtil$1.getConfigValue("GLOBAL_ALLOW_STAGE_RATIO", this.model) && ctrl && evt.wheelDeltaY) { + this.mouseScale(evt.wheelDeltaY, evt); + } else { + let dx = 0; + let dy = 0; + if (Math.abs(evt.wheelDeltaX) > Math.abs(evt.wheelDeltaY)) { + dx = evt.wheelDeltaX; + } else { + dy = evt.wheelDeltaY; + } + this.mouseWPV(dx, dy, evt); + } + } + } + /** + * 通过鼠标放大或缩小 + */ + mouseScale(delta, evt) { + let stage2 = this.model.stage; + if (stage2) { + let ratio = stage2.getStageRatio(); + let newValue = ratio; + let dn = 0.02 * ratio; + if (delta > 0) { + newValue = ratio + dn; + } else { + newValue = ratio - dn; + } + if (newValue < 0.1) { + newValue = 0.1; + } else if (newValue > 10) { + newValue = 10; + } + if (newValue != ratio) { + stage2.setStageRatio(newValue); + if (!this.model.ratioWatch) { + this.model.bus.push( + DDeiEnumBusCommandType.ChangeStageRatio, + { + oldValue: ratio, + newValue + }, + null + ); + this.model.bus.executeAll(); + } + } + } + } + /** + * 通过鼠标平移窗体 + */ + mouseWPV(dx, dy, evt) { + let stage2 = this.model.stage; + let rat1 = this.ratio; + let stageRatio2 = stage2.getStageRatio(); + if (stage2) { + let maxMove = 75 * stageRatio2 * rat1; + dx *= stageRatio2 * rat1; + dy *= stageRatio2 * rat1; + if (dx > maxMove) { + dx = maxMove; + } else if (dx < -maxMove) { + dx = -maxMove; + } + if (dy > maxMove) { + dy = maxMove; + } else if (dy < -maxMove) { + dy = -maxMove; + } + this.model.bus.push(DDeiEnumBusCommandType.ChangeStageWPV, { + dragObj: { dx: 0, dy: 0 }, + x: dx, + y: dy + }); + this.model.bus.executeAll(); + } + } + }; + __publicField2(_DDeiCanvasRender, "ClsName", "DDeiCanvasRender"); + let DDeiCanvasRender = _DDeiCanvasRender; + const __vite_glob_1_1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: DDeiCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiDiamondCanvasRender = class _DDeiDiamondCanvasRender2 extends DDeiRectangleCanvasRender { + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiDiamondCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 创建图形 + */ + drawShape() { + this.drawBorderAndFill(); + this.drawImage(); + this.drawText(); + } + /** + * 填充图片 + */ + drawImage() { + if (this.imgObj) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = parseFloat(this.stage.ratio) ? this.stage.ratio : 1; + if (!stageRatio2 || isNaN(stageRatio2)) { + stageRatio2 = 1; + } + let ratio = this.ddRender.ratio * stageRatio2; + let fillAreaE = this.getFillArea(); + let ratPos = DDeiUtil$1.getRatioPosition(fillAreaE, ratio); + ctx.save(); + this.doRotate(ctx, ratPos); + let imgFillInfo = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "image.opacity", true); + if (imgFillInfo) { + ctx.globalAlpha = imgFillInfo; + } + ctx.beginPath(); + ctx.moveTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + ctx.lineTo(ratPos.x + ratPos.width, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height); + ctx.lineTo(ratPos.x, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + ctx.clip(); + ctx.drawImage(this.imgObj, ratPos.x, ratPos.y, ratPos.width, ratPos.height); + ctx.closePath(); + ctx.restore(); + } + } + /** + * 绘制边框 + * @param tempBorder 临时边框,优先级最高 + */ + drawBorderAndFill(tempBorder) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let ratPos = this.getBorderRatPos(); + ctx.save(); + if (this.model.rotate) { + ctx.translate(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height * 0.5); + ctx.rotate(this.model.rotate * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-ratPos.x - ratPos.width * 0.5, -ratPos.y - ratPos.height * 0.5); + } + for (let i2 = 1; i2 <= 4; i2++) { + let disabled = this.getBorderInfo(tempBorder, i2, "disabled"); + let color = this.getBorderInfo(tempBorder, i2, "color"); + let opacity = this.getBorderInfo(tempBorder, i2, "opacity"); + let width = this.getBorderInfo(tempBorder, i2, "width"); + let dash = this.getBorderInfo(tempBorder, i2, "dash"); + if (!disabled && color && (!opacity || opacity > 0) && width > 0) { + ctx.beginPath(); + ctx.lineWidth = width * ratio; + if (dash) { + ctx.setLineDash(dash); + } + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.strokeStyle = DDeiUtil$1.getColor(color); + if (i2 == 1) { + ctx.moveTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + ctx.lineTo(ratPos.x + ratPos.width, ratPos.y + ratPos.height * 0.5); + } else if (i2 == 2) { + ctx.moveTo(ratPos.x + ratPos.width, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height); + } else if (i2 == 3) { + ctx.moveTo(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height); + ctx.lineTo(ratPos.x, ratPos.y + ratPos.height * 0.5); + } else if (i2 == 4) { + ctx.moveTo(ratPos.x, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + } + ctx.stroke(); + ctx.closePath(); + } + } + let fillColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "fill.color", true); + if (fillColor) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + let fillOpac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "fill.opacity", true); + if (fillOpac) { + ctx.globalAlpha = fillOpac; + } + ctx.beginPath(); + ctx.moveTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + ctx.lineTo(ratPos.x + ratPos.width, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y + ratPos.height); + ctx.lineTo(ratPos.x, ratPos.y + ratPos.height * 0.5); + ctx.lineTo(ratPos.x + ratPos.width * 0.5, ratPos.y); + ctx.closePath(); + ctx.fill(); + } + ctx.restore(); + } + }; + __publicField2(_DDeiDiamondCanvasRender, "ClsName", "DDeiDiamondCanvasRender"); + let DDeiDiamondCanvasRender = _DDeiDiamondCanvasRender; + const __vite_glob_1_2$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiDiamondCanvasRender, + default: DDeiDiamondCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiLayerCanvasRender = class _DDeiLayerCanvasRender2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "model"); + __publicField2(this, "stage"); + __publicField2(this, "ddRender"); + __publicField2(this, "stageRender"); + __publicField2(this, "renderCacheData", /* @__PURE__ */ new Map()); + __publicField2(this, "containerViewer", null); + this.model = props.model; + this.ddRender = null; + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiLayerCanvasRender2(props); + } + // ============================ 方法 =============================== + /** + * 初始化 + */ + init() { + this.ddRender = this.model.stage.ddInstance.render; + this.stage = this.model.stage; + this.stageRender = this.model.stage.render; + this.initContainerViewer(); + } + initContainerViewer() { + var _a3; + if (!this.containerViewer) { + let editorId = DDeiUtil$1.getEditorId((_a3 = this.ddRender) == null ? void 0 : _a3.model); + this.containerViewer = document.getElementById(editorId + "_layer_" + this.model.id); + if (!this.containerViewer) { + let canvasViewerElement = this.ddRender.getCanvas().parentElement; + if (canvasViewerElement) { + let containerElement = document.createElement("div"); + containerElement.setAttribute("class", "ddei-editor-canvasview-contentlayer"); + containerElement.setAttribute("id", editorId + "_layer_" + this.model.id); + canvasViewerElement.insertBefore(containerElement, this.ddRender.realCanvas); + this.containerViewer = containerElement; + } + } + } + } + /** + * 清空shadowControl + */ + clearShadowControls() { + var _a3; + (_a3 = this.model.shadowControls) == null ? void 0 : _a3.forEach((c) => { + if (c.isShadowControl) { + c.destroyed(); + } + }); + this.model.shadowControls = []; + } + /** + * 绘制图形 + */ + drawShape(inRect = true) { + var _a3, _b2, _c2; + this.initContainerViewer(); + if (this.model.display || this.model.tempDisplay) { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, (_a3 = this.stage) == null ? void 0 : _a3.ddInstance, null); + if (rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model] }, (_b2 = this.stage) == null ? void 0 : _b2.ddInstance, null); + if (rsState1 == 0 || rsState1 == 1) { + this.containerViewer.style.display = "block"; + this.containerViewer.style.zIndex = this.tempZIndex; + this.drawChildrenShapes(inRect); + this.drawOpPoints(); + this.drawOpLine(); + this.drawDragInOutPoints(); + this.drawShadowControls(); + this.modelChanged = false; + } + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, (_c2 = this.stage) == null ? void 0 : _c2.ddInstance, null); + } + } else { + this.containerViewer.style.display = "none"; + this.drawChildrenShapes(inRect, true); + } + } + /** + * 绘制背景 + */ + drawBackground(px, py, pw, ph, isBottom) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m; + this.initContainerViewer(); + if (this.containerViewer && (this.model.display || this.model.tempDisplay)) { + let ratio = this.ddRender.ratio; + if (!this.bgCanvas) { + let editorId = DDeiUtil$1.getEditorId((_a3 = this.ddRender) == null ? void 0 : _a3.model); + this.bgCanvas = document.getElementById(editorId + "_layerbg_" + this.model.id); + if (!this.bgCanvas) { + let bgCanvas = document.createElement("canvas"); + bgCanvas.setAttribute("style", "z-index:0;position:absolute;-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / ratio + ");display:block;zoom:" + 1 / ratio); + bgCanvas.setAttribute("id", editorId + "_layerbg_" + this.model.id); + this.containerViewer.appendChild(bgCanvas); + this.bgCanvas = bgCanvas; + } + } + this.bgCanvas.setAttribute("width", this.containerViewer.clientWidth * ratio); + this.bgCanvas.setAttribute("height", this.containerViewer.clientHeight * ratio); + let canvas = this.bgCanvas; + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + ctx.save(); + let ruleWeight = 0; + if (this.stageRender.tempRuleDisplay == 1 || this.stageRender.tempRuleDisplay == "1") { + ruleWeight = 15; + } + ctx.translate(-ruleWeight * rat1, -ruleWeight * rat1); + let bgInit; + if (((_b2 = this.ddRender) == null ? void 0 : _b2.model.background) && typeof ((_c2 = this.ddRender) == null ? void 0 : _c2.model.background) == "object") { + bgInit = (_d2 = this.ddRender) == null ? void 0 : _d2.model.background; + } + let bgInfoType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.type", true, bgInit); + let bgInfoColor; + if ((_e2 = this.model.bg) == null ? void 0 : _e2.color) { + bgInfoColor = this.model.bg.color; + } else if ((_f = this.ddRender) == null ? void 0 : _f.model.background) { + if (typeof ((_g = this.ddRender) == null ? void 0 : _g.model.background) == "string" || typeof ((_h = this.ddRender) == null ? void 0 : _h.model.background) == "number") { + if (((_i = this.ddRender) == null ? void 0 : _i.model.background) == "-1" || ((_j = this.ddRender) == null ? void 0 : _j.model.background) == -1) { + bgInfoType = -1; + } else { + bgInfoColor = (_k = this.ddRender) == null ? void 0 : _k.model.background; + if (!bgInfoType) { + bgInfoType = 1; + } + } + } else { + bgInfoColor = (_l = this.ddRender) == null ? void 0 : _l.model.background.color; + } + } else { + bgInfoColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.color", true); + } + if (!bgInfoColor && isBottom) { + bgInfoColor = DDeiUtil$1.getStyleValue("panel-background", this.ddRender.model); + } + if (bgInfoType == 1) { + if (bgInfoColor) { + let bgInfoOpacity = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.opacity", true, bgInit); + ctx.fillStyle = DDeiUtil$1.getColor(bgInfoColor); + if (bgInfoOpacity || bgInfoOpacity == 0) { + ctx.globalAlpha = bgInfoOpacity; + } + ctx.fillRect(px, py, pw, ph); + } + } else if (bgInfoType == 2) { + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "bg.image"); + if (!bgImage) { + bgImage = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.image", true, bgInit); + } + if (!this.bgImgObj || bgImage != this.upBgImage) { + this.initBgImage(); + } else { + let bgImgMode = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.imageMode", true, bgInit); + let bgInfoOpacity = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.opacity", true, bgInit); + if (bgInfoOpacity || bgInfoOpacity == 0) { + ctx.globalAlpha = bgInfoOpacity; + } + let x2 = px; + let y2 = py; + let w = this.bgImgObj.width; + let h = this.bgImgObj.height; + let cwidth = pw; + let cheight = ph; + let ruleDisplay; + if ((_m = this.stage.ruler) == null ? void 0 : _m.display) { + ruleDisplay = this.stage.ruler.display; + } else if (this.stage.ddInstance.ruler != null && this.stage.ddInstance.ruler != void 0) { + if (typeof this.model.ddInstance.ruler == "boolean") { + ruleDisplay = this.stage.ddInstance.ruler ? 1 : 0; + } else { + ruleDisplay = this.stage.ddInstance.ruler.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "ruler.display", true); + } + if (ruleDisplay == 1) { + cwidth -= 16 * rat1; + cheight -= 16 * rat1; + } + let scrollWeight = rat1 * 15; + if (this.stageRender.hScroll == 1) { + cheight -= scrollWeight; + } + if (this.stageRender.vScroll == 1) { + cwidth -= scrollWeight; + } + if (bgImgMode == 2) { + w = cwidth; + h = cheight; + } else if (bgImgMode == 1) { + let bgImageScale = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.imageScale", true, bgInit); + w = w * bgImageScale; + h = h * bgImageScale; + } + if (bgImgMode != 2) { + let bgImageAlign = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.imageAlign", true, bgInit); + let align = 2; + let valign = 2; + switch (bgImageAlign) { + case 1: + align = 1; + valign = 1; + break; + case 2: + align = 2; + valign = 1; + break; + case 3: + align = 3; + valign = 1; + break; + case 4: + align = 1; + valign = 2; + break; + case 5: + align = 2; + valign = 2; + break; + case 6: + align = 3; + valign = 2; + break; + case 7: + align = 1; + valign = 3; + break; + case 8: + align = 2; + valign = 3; + break; + case 9: + align = 3; + valign = 3; + break; + } + switch (align) { + case 1: + x2 = px; + break; + case 2: + x2 = px + (cwidth - w) / 2; + break; + case 3: + x2 = px + cwidth - w; + break; + } + switch (valign) { + case 1: + y2 = py; + break; + case 2: + y2 = py + (cheight - h) / 2; + break; + case 3: + y2 = py + cheight - h; + break; + } + } + ctx.drawImage(this.bgImgObj, x2, y2, w, h); + } + } + ctx.restore(); + } + } + /** + * 初始化背景图片 + */ + initBgImage() { + var _a3, _b2, _c2; + let that = this; + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "bg.image"); + if (!bgImage) { + let bgInit; + if (((_a3 = this.ddRender) == null ? void 0 : _a3.model.background) && typeof ((_b2 = this.ddRender) == null ? void 0 : _b2.model.background) == "object") { + bgInit = (_c2 = this.ddRender) == null ? void 0 : _c2.model.background; + } + bgImage = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "bg.image", true, bgInit); + } + if (this.model.bgImageBase64 || bgImage) { + let img = new Image(); + img.onload = function() { + if (!that.mark) { + that.mark = {}; + } + that.upBgImage = bgImage; + that.bgImgObj = img; + that.ddRender.model.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + that.ddRender.model.bus.executeAll(); + }; + img.src = this.model.bgImageBase64 ? this.model.bgImageBase64 : bgImage; + } + } + /** + * 绘制影子元素 + */ + drawShadowControls() { + var _a3; + if (((_a3 = this.model.shadowControls) == null ? void 0 : _a3.length) > 0) { + this.model.shadowControls.forEach((item) => { + item.render.enableRefreshShape(); + if (item.modelType == "DDeiLine") { + item.render.drawShape({ color: "#017fff", dash: [], opacity: 0.7, fill: { color: "#017fff", opacity: 0.7 } }, 0, null, 99999); + } else { + item.render.drawShape({ fill: { color: "#017fff", opacity: 0.7 } }, 0, null, 99999); + } + }); + } + } + /** + * 绘制子元素 + */ + drawChildrenShapes(inRect = true, hidden = false) { + var _a3; + if (this.model.models) { + let canvas = this.ddRender.getCanvas(); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let x2 = -this.stage.wpv.x / stageRatio2; + let y2 = -this.stage.wpv.y / stageRatio2; + let x1 = x2 + canvas.width / rat1 / stageRatio2; + let y1 = y2 + canvas.height / rat1 / stageRatio2; + if (!hidden) { + let rect = inRect ? { x: x2, y: y2, x1, y1 } : null; + for (let li = 0; li < this.model.midList.length; li++) { + let key = this.model.midList[li]; + let item = this.model.models.get(key); + (_a3 = item == null ? void 0 : item.render) == null ? void 0 : _a3.drawShape(null, 0, rect, this.tempZIndex + (li + 1)); + } + } else { + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", "VIEW-HIDDEN", { models: Array.from(this.model.models.values()) }, this.ddRender.model, null); + } + } + } + /** + * 绘制操作点 + */ + drawOpPoints() { + var _a3, _b2, _c2, _d2; + if (((_b2 = (_a3 = this.model) == null ? void 0 : _a3.opPoints) == null ? void 0 : _b2.length) > 0) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = (_c2 = this.stage) == null ? void 0 : _c2.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + ctx.save(); + let firstOp2Point, beforeOp2Point; + (_d2 = this.model) == null ? void 0 : _d2.opPoints.forEach((point2) => { + if (!point2 || point2.isSplit) { + beforeOp2Point = null; + firstOp2Point = null; + } else if (point2.mode == 3) { + if (point2.oppoint == 2 || point2.oppoint == 4) { + if (!beforeOp2Point) { + beforeOp2Point = point2; + firstOp2Point = point2; + } else { + let weight = 4; + ctx.fillStyle = "white"; + ctx.strokeStyle = "#017fff"; + ctx.beginPath(); + ctx.ellipse((point2.x + beforeOp2Point.x) / 2 * ratio, (point2.y + beforeOp2Point.y) / 2 * ratio, weight * ratio, weight * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + ctx.closePath(); + beforeOp2Point = point2; + if (point2.op2close == 1) { + ctx.beginPath(); + ctx.ellipse((point2.x + firstOp2Point.x) / 2 * ratio, (point2.y + firstOp2Point.y) / 2 * ratio, weight * ratio, weight * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + } + } else { + let weight = 4; + ctx.fillStyle = "white"; + ctx.strokeStyle = "#017fff"; + ctx.beginPath(); + ctx.ellipse(point2.x * ratio, point2.y * ratio, weight * ratio, weight * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + ctx.closePath(); + } + } else { + let weight = 4; + if (point2.isMiddle) { + weight = 5; + } + ctx.fillStyle = "white"; + ctx.beginPath(); + ctx.ellipse(point2.x * ratio, point2.y * ratio, (weight + 1) * ratio, (weight + 1) * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.closePath(); + if (point2.mode == 1) { + ctx.fillStyle = "red"; + } else { + ctx.fillStyle = "#017fff"; + } + ctx.beginPath(); + ctx.ellipse(point2.x * ratio, point2.y * ratio, weight * ratio, weight * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.closePath(); + } + }); + ctx.restore(); + } + } + enableRefreshShape() { + } + /** + * 绘制操作线 + */ + drawOpLine() { + if (this.model.opLine) { + let opLine = this.model.opLine; + let lineRender = this.model.opLine.render; + lineRender.getCachedValue("color"); + let weight = lineRender.getCachedValue("weight"); + lineRender.enableRefreshShape(); + opLine.render.drawShape({ color: "red", opacity: 0.5, weight: weight * 1.5 }, false, null, this.model.opLine.render.tempZIndex); + opLine.render.drawOpShape(); + } + } + /** + * 绘制移入移出效果图形 + */ + drawDragInOutPoints() { + var _a3, _b2, _c2, _d2, _e2; + if (((_b2 = (_a3 = this.model) == null ? void 0 : _a3.dragInPoints) == null ? void 0 : _b2.length) > 0 || ((_d2 = (_c2 = this.model) == null ? void 0 : _c2.dragOutPoints) == null ? void 0 : _d2.length) > 0) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = (_e2 = this.stage) == null ? void 0 : _e2.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + ctx.save(); + ctx.lineWidth = 2.5 * ratio; + ctx.setLineDash([0, 1 * ratio, 1 * ratio]); + ctx.strokeStyle = DDeiUtil$1.getColor("green"); + let lineOffset = 0; + let pvs2 = this.model.dragInPoints; + for (let i2 = 0; i2 < (pvs2 == null ? void 0 : pvs2.length); i2++) { + let s = i2; + let e = i2 + 1; + if (i2 == pvs2.length - 1) { + e = 0; + } + ctx.beginPath(); + ctx.moveTo(pvs2[s].x * ratio + lineOffset, pvs2[s].y * ratio + lineOffset); + ctx.lineTo(pvs2[e].x * ratio + lineOffset, pvs2[e].y * ratio + lineOffset); + ctx.stroke(); + ctx.closePath(); + } + ctx.strokeStyle = DDeiUtil$1.getColor("red"); + pvs2 = this.model.dragOutPoints; + for (let i2 = 0; i2 < (pvs2 == null ? void 0 : pvs2.length); i2++) { + let s = i2; + let e = i2 + 1; + if (i2 == pvs2.length - 1) { + e = 0; + } + ctx.beginPath(); + ctx.moveTo(pvs2[s].x * ratio + lineOffset, pvs2[s].y * ratio + lineOffset); + ctx.lineTo(pvs2[e].x * ratio + lineOffset, pvs2[e].y * ratio + lineOffset); + ctx.stroke(); + ctx.closePath(); + } + ctx.restore(); + } + this.model.dragInPoints = []; + this.model.dragOutPoints = []; + } + /** + * 获取缓存的渲染数据 + */ + getCachedValue(attrPath) { + let returnValue = null; + if (!this.renderCacheData.has(attrPath)) { + returnValue = DDeiModelArrtibuteValue.getAttrValueByState(this.model, attrPath, true); + this.renderCacheData.set(attrPath, returnValue); + } else { + returnValue = this.renderCacheData.get(attrPath); + } + return returnValue; + } + /** + * 设置渲染缓存数据 + */ + setCachedValue(attrPath, value) { + if (attrPath) { + if (Array.isArray(attrPath)) { + attrPath.forEach((item) => { + this.renderCacheData.set(item, value); + }); + } else { + this.renderCacheData.set(attrPath, value); + } + } + } + clearCachedValue() { + this.renderCacheData.clear(); + this.model.models.forEach((item) => { + var _a3; + (_a3 = item == null ? void 0 : item.render) == null ? void 0 : _a3.clearCachedValue(); + }); + } + /** + * 获取单个点移动后的坐标增量 + * 考虑最小移动像素 + * @param evt 事件 + * @returns 计算的坐标增量 + */ + getMovedPositionDelta(evt) { + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + this.stage.getStageRatio(); + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let movedBounds = { + x: ex - this.stageRender.dragObj.x, + y: ey - this.stageRender.dragObj.y + }; + return movedBounds; + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z; + if (this.stage.ddInstance.disabled) { + return; + } + if (this.stage.ddInstance.state == DDeiEnumState.IN_ACTIVITY) { + return; + } + if (this.stage.ddInstance.eventCancel) { + return; + } + if (!this.model.display && !this.model.tempDisplay || this.model.lock) { + return; + } + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + let stageRatio2 = this.model.getStageRatio(); + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + if (((_a3 = this.stageRender) == null ? void 0 : _a3.operateState) == DDeiEnumOperateState.QUICK_EDITING) { + let canvas = this.ddRender.getCanvas(); + if ((evt.target == canvas || evt.target == canvas.parentElement) && (!this.stageRender.editorShadowControl || !((_b2 = this.stageRender.editorShadowControl) == null ? void 0 : _b2.isInAreaLoose(ex, ey)))) { + (_c2 = DDeiUtil$1.getEditorText()) == null ? void 0 : _c2.enterValue(); + } + } + let isOvPoint = false; + if (((_e2 = (_d2 = this.stage) == null ? void 0 : _d2.selectedModels) == null ? void 0 : _e2.size) == 1) { + let model = Array.from((_f = this.stage) == null ? void 0 : _f.selectedModels.values())[0]; + let ovPoint = model.getOvPointByPos(ex2, ey2); + if (ovPoint) { + let ovsDefine = (_h = (_g = DDeiUtil$1.getControlDefine(model)) == null ? void 0 : _g.define) == null ? void 0 : _h.ovs; + let ovd = ovsDefine[model.ovs.indexOf(ovPoint)]; + if (((_i = ovd == null ? void 0 : ovd.constraint) == null ? void 0 : _i.type) && ovd.constraint.type != 5) { + isOvPoint = true; + this.stageRender.operateState = DDeiEnumOperateState.OV_POINT_CHANGING; + (_l = (_k = (_j = this.stage) == null ? void 0 : _j.ddInstance) == null ? void 0 : _k.bus) == null ? void 0 : _l.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj: { x: ex2, y: ey2, opPoint: ovPoint, model } }, evt); + (_o = (_n = (_m = this.stage) == null ? void 0 : _m.ddInstance) == null ? void 0 : _n.bus) == null ? void 0 : _o.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "pointer" }, evt); + } + } + } + if (isOvPoint) + ; + else if (this.stageRender.selector && this.stageRender.selector.isInAreaLoose(ex2, ey2, true) && (this.stageRender.selector.passIndex >= 1 && this.stageRender.selector.passIndex <= 9 || this.stageRender.selector.passIndex == 13)) { + this.stageRender.selector.render.mouseDown(evt); + } else { + let opPoint = this.model.getOpPointByPos(ex2, ey2); + let isStop = false; + if (opPoint) { + let innerSize = 0; + let outRect = DDeiAbstractShape.getOutRectByPV([opPoint.model]); + if (outRect.height > 20 && outRect.width > 20) { + innerSize = -5; + } + if (opPoint.oppoint == 3 || opPoint.model.getProjPoint({ x: ex2, y: ey2 }, { in: innerSize, out: 15 }, 1, 2)) { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", this.stage.ddInstance); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + null, + null, + modeName, + this.stage.ddInstance + ); + if (accessLink) { + isStop = true; + (_r = (_q = (_p = this.stage) == null ? void 0 : _p.ddInstance) == null ? void 0 : _q.bus) == null ? void 0 : _r.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj: { opPoint } }, evt); + (_u = (_t = (_s = this.stage) == null ? void 0 : _s.ddInstance) == null ? void 0 : _t.bus) == null ? void 0 : _u.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + this.stageRender.operateState = DDeiEnumOperateState.LINE_POINT_CHANGING_CONFIRM; + } + } + } + if (!isStop) { + let operateControls = DDeiAbstractShape.findBottomModelsByArea(this.model, ex2, ey2, true); + if (operateControls != null && operateControls.length > 0) { + let operateControl = operateControls[0]; + this.stageRender.currentOperateShape = operateControl; + this.stageRender.tempSX = ex2; + this.stageRender.tempSY = ey2; + this.stageRender.operateState = DDeiEnumOperateState.CONTROL_CONFIRMING; + operateControl.render.mouseDown(evt); + let pContainerModel = operateControl.pModel; + if (pContainerModel) { + if (!isCtrl) { + let selectedModels = pContainerModel.getSelectedModels(); + if (!selectedModels.has(operateControl.id)) { + (_x = (_w = (_v = this.stage) == null ? void 0 : _v.ddInstance) == null ? void 0 : _w.bus) == null ? void 0 : _x.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, { container: pContainerModel, curLevel: true }, evt); + (_A = (_z = (_y = this.stage) == null ? void 0 : _y.ddInstance) == null ? void 0 : _z.bus) == null ? void 0 : _A.push(DDeiEnumBusCommandType.ResetSelectorState, {}, evt); + } + } + } + } else { + if ((_B = this.stage) == null ? void 0 : _B.brushData) { + this.stage.brushData = null; + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }, evt); + } + (_E = (_D = (_C = this.stage) == null ? void 0 : _C.ddInstance) == null ? void 0 : _D.bus) == null ? void 0 : _E.push(DDeiEnumBusCommandType.ResetSelectorState, { x: ex2, y: ey2 }, evt); + let clearSelect = false; + switch ((_F = this.stage.ddInstance) == null ? void 0 : _F.editMode) { + case 1: { + this.stageRender.operateState = DDeiEnumOperateState.SELECT_WORKING; + clearSelect = !isCtrl; + break; + } + case 2: { + (_I = (_H = (_G = this.stage) == null ? void 0 : _G.ddInstance) == null ? void 0 : _H.bus) == null ? void 0 : _I.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj: { dx: ex, dy: ey } }, evt); + this.stageRender.operateState = DDeiEnumOperateState.GRAB_WORKING; + clearSelect = !isCtrl; + break; + } + case 3: { + (_L = (_K = (_J = this.stage) == null ? void 0 : _J.ddInstance) == null ? void 0 : _K.bus) == null ? void 0 : _L.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj: { dx: ex2, dy: ey2 } }, evt); + this.stageRender.operateState = DDeiEnumOperateState.TEXT_CREATING; + clearSelect = true; + } + case 4: { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", (_M = this.stage) == null ? void 0 : _M.ddInstance); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + null, + null, + modeName, + (_N = this.stage) == null ? void 0 : _N.ddInstance + ); + if (accessLink) { + (_Q = (_P = (_O = this.stage) == null ? void 0 : _O.ddInstance) == null ? void 0 : _P.bus) == null ? void 0 : _Q.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj: { dx: ex2, dy: ey2 } }, evt); + this.stageRender.operateState = DDeiEnumOperateState.LINE_POINT_CHANGING; + clearSelect = true; + } + } + } + if (clearSelect) { + (_T = (_S = (_R = this.stage) == null ? void 0 : _R.ddInstance) == null ? void 0 : _S.bus) == null ? void 0 : _T.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + } + } + } + } + (_W = (_V = (_U = this.stage) == null ? void 0 : _U.ddInstance) == null ? void 0 : _V.bus) == null ? void 0 : _W.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_Z = (_Y = (_X = this.stage) == null ? void 0 : _X.ddInstance) == null ? void 0 : _Y.bus) == null ? void 0 : _Z.executeAll(); + } + /** + * 绘制图形 + */ + mouseUp(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za, __a; + if (this.stage.ddInstance.disabled) { + return; + } + if (this.stage.ddInstance.state == DDeiEnumState.IN_ACTIVITY) { + return; + } + if (this.stage.ddInstance.eventCancel) { + return; + } + if (!this.model.display && !this.model.tempDisplay || this.model.lock) { + return; + } + let isAlt = DDei.KEY_DOWN_STATE.get("alt"); + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + let stageRatio2 = this.stage.getStageRatio(); + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + if (evt.button == 2) { + let operateControls = DDeiAbstractShape.findBottomModelsByArea(this.model, ex2, ey2); + if (operateControls != null && operateControls.length > 0) { + DDeiUtil$1.showContextMenu(operateControls[0], (_a3 = this.ddRender) == null ? void 0 : _a3.model, evt); + } + this.model.opPoints = []; + if ((_b2 = this.model.opLine) == null ? void 0 : _b2.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + this.clearShadowControls(); + } else { + switch (this.stageRender.operateState) { + case DDeiEnumOperateState.LINE_POINT_CHANGING_CONFIRM: { + let operateControls = DDeiAbstractShape.findBottomModelsByArea(this.model, ex2, ey2, true); + if (operateControls != null && operateControls.length > 0) { + let operateControl = operateControls[0]; + this.stageRender.currentOperateShape = operateControl; + } + } + case DDeiEnumOperateState.CONTROL_CONFIRMING: { + this.stageRender.currentOperateShape.render.mouseUp(evt); + if ((_c2 = this.stage) == null ? void 0 : _c2.brushData) { + (_f = (_e2 = (_d2 = this.stage) == null ? void 0 : _d2.ddInstance) == null ? void 0 : _e2.bus) == null ? void 0 : _f.push(DDeiEnumBusCommandType.CopyStyle, { models: [this.stageRender.currentOperateShape], brushData: this.stage.brushData }, evt); + } + this.clearShadowControls(); + break; + } + case DDeiEnumOperateState.SELECT_WORKING: + let pushDatas = []; + let includedModels = this.stageRender.selector.getIncludedModels(); + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_SELECT_BEFORE", DDeiEnumOperateType.SELECT, { models: Array.from(includedModels.values()) }, (_g = this.stage) == null ? void 0 : _g.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + if (!isCtrl) { + (_j = (_i = (_h = this.stage) == null ? void 0 : _h.ddInstance) == null ? void 0 : _i.bus) == null ? void 0 : _j.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + } + this.stageRender.currentOperateContainer = this.model; + includedModels.forEach((model, key) => { + pushDatas.push({ id: model.id, value: DDeiEnumControlState.SELECTED }); + }); + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeSelect, pushDatas, evt); + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + this.stage.ddInstance.bus.executeAll(); + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_SELECT_AFTER", DDeiEnumOperateType.SELECT, { models: Array.from(includedModels.values()) }, (_k = this.stage) == null ? void 0 : _k.ddInstance, evt); + } else { + (_n = (_m = (_l = this.stage) == null ? void 0 : _l.ddInstance) == null ? void 0 : _m.bus) == null ? void 0 : _n.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.stageRender.operateState = DDeiEnumOperateState.NONE; + } + break; + case DDeiEnumOperateState.GRAB_WORKING: + break; + case DDeiEnumOperateState.TEXT_CREATING: + break; + case DDeiEnumOperateState.LINE_POINT_CHANGING: { + let hasChange2 = false; + if (this.model.shadowControls.length > 0) { + let item = this.model.shadowControls[0]; + let id = item.id.substring(item.id, item.id.lastIndexOf("_shadow")); + let model = (_o = this.stage) == null ? void 0 : _o.getModelById(id); + let isStop2 = false; + let rsState2 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.DRAG, this.stageRender.dragObj, (_p = this.stage) == null ? void 0 : _p.ddInstance, null); + if (rsState2 == 0 || rsState2 == 1) { + if (model) { + model.syncVectors(item); + } else { + let opPoint = this.model.getOpPointByPos(ex2, ey2); + let maxLength = 0; + if (!(opPoint == null ? void 0 : opPoint.model)) { + for (let i2 = 0; i2 < item.pvs.length - 1; i2++) { + maxLength += DDeiUtil$1.getPointDistance(item.pvs[i2].x, item.pvs[i2].y, item.pvs[i2 + 1].x, item.pvs[i2 + 1].y); + } + } + if ((opPoint == null ? void 0 : opPoint.model) && (Math.abs(opPoint.x - item.startPoint.x) >= 1 || Math.abs(opPoint.y - item.startPoint.y) >= 1) || maxLength >= 15) { + item.id = id; + item.destroyRender(); + this.model.addModel(item, false); + item.initRender(); + model = item; + delete model.isShadowControl; + } else { + isStop2 = true; + } + } + if (!isStop2) { + let passIndex = this.stageRender.dragObj.passIndex; + if (passIndex == 1) { + let skip = false; + let constraint = (_r = (_q = DDeiUtil$1.getControlDefine(model)) == null ? void 0 : _q.define) == null ? void 0 : _r.constraint; + let opvsIndex = this.stageRender.dragObj.opvsIndex; + let dmpath = ""; + if (opvsIndex == 0) { + if ((constraint == null ? void 0 : constraint.sp) && constraint.sp.link == false) { + skip = true; + } else { + dmpath = "startPoint"; + } + } else { + if ((constraint == null ? void 0 : constraint.ep) && constraint.ep.link == false) { + skip = true; + } else { + dmpath = "endPoint"; + } + } + if (!skip) { + let distLinks = (_s = this.stage) == null ? void 0 : _s.getDistModelLinks(model.id); + distLinks == null ? void 0 : distLinks.forEach((dl) => { + var _a22, _b22; + if (dl.dmpath == dmpath) { + (_a22 = this.stage) == null ? void 0 : _a22.removeLink(dl); + if ((dl == null ? void 0 : dl.sm) && (dl == null ? void 0 : dl.smpath)) { + DDeiUtil$1.deletePropertyByPath(dl.sm, dl.smpath); + dl.sm.transVectors(new Matrix3()); + dl.sm.updateLinkModels(); + (_b22 = dl.sm.render) == null ? void 0 : _b22.enableRefreshShape(); + } + } + }); + let opPoint = this.model.getOpPointByPos(ex2, ey2); + if (opPoint) { + let smodel = opPoint.model; + let id2 = "_" + DDeiUtil$1.getUniqueCode(); + smodel.exPvs[id2] = new Vector3(opPoint.x, opPoint.y, opPoint.z); + smodel.exPvs[id2].rate = opPoint.rate; + smodel.exPvs[id2].sita = opPoint.sita; + smodel.exPvs[id2].index = opPoint.index; + smodel.exPvs[id2].id = id2; + let link2 = new DDeiLink({ + sm: smodel, + dm: model, + smpath: "exPvs." + id2, + dmpath, + stage: this.stage + }); + this.stage.addLink(link2); + model.initPVS(); + } + } + } + let dlinks = (_t = this.stage) == null ? void 0 : _t.getDistModelLinks(model.id); + dlinks == null ? void 0 : dlinks.forEach((dl) => { + if (dl.sm) { + dl.sm.transVectors(new Matrix3()); + dl.sm.updateLinkModels(); + dl.sm.render.enableRefreshShape(); + } + }); + model.initPVS(); + model.updateOVS(); + model.clps = []; + this.stageRender.refreshJumpLine = false; + if (model.pModel != this.model) { + (_u = model.pModel) == null ? void 0 : _u.changeParentsBounds(); + } + hasChange2 = true; + this.stage.refreshLinkCache(); + } + } + } + (_x = (_w = (_v = this.stage) == null ? void 0 : _v.ddInstance) == null ? void 0 : _w.bus) == null ? void 0 : _x.push(DDeiEnumBusCommandType.ClearTemplateVars); + if (hasChange2) { + (_A = (_z = (_y = this.stage) == null ? void 0 : _y.ddInstance) == null ? void 0 : _z.bus) == null ? void 0 : _A.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + (_D = (_C = (_B = this.stage) == null ? void 0 : _B.ddInstance) == null ? void 0 : _C.bus) == null ? void 0 : _D.push(DDeiEnumBusCommandType.NodifyChange); + (_G = (_F = (_E = this.stage) == null ? void 0 : _E.ddInstance) == null ? void 0 : _F.bus) == null ? void 0 : _G.push(DDeiEnumBusCommandType.AddHistroy); + } + (_J = (_I = (_H = this.stage) == null ? void 0 : _H.ddInstance) == null ? void 0 : _I.bus) == null ? void 0 : _J.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "grab" }, evt); + this.clearShadowControls(); + break; + } + case DDeiEnumOperateState.CONTROL_DRAGING: + let isStop = false; + let hasChange = false; + if (isAlt) { + let mouseOnContainers = DDeiAbstractShape.findBottomContainersByArea(this.model, ex2, ey2); + let lastOnContainer = this.model; + let pContainerModel = this.stageRender.currentOperateShape.pModel; + if (mouseOnContainers && mouseOnContainers.length > 0) { + for (let k = mouseOnContainers.length - 1; k >= 0; k--) { + if (mouseOnContainers[k].id != this.stageRender.currentOperateShape.id) { + lastOnContainer = mouseOnContainers[k]; + break; + } + } + } + if (lastOnContainer.id != pContainerModel.id || lastOnContainer.unicode != pContainerModel.unicode) { + if (!lastOnContainer.layoutManager || lastOnContainer.layoutManager.canAppend(ex2, ey2, this.model.shadowControls)) { + let operateModels2 = []; + let selMods = []; + this.model.shadowControls.forEach((item) => { + var _a22; + let id = item.id.substring(item.id, item.id.lastIndexOf("_shadow")); + let model = (_a22 = this.stage) == null ? void 0 : _a22.getModelById(id); + model.originCPV = model.cpv; + model.originPVS = model.pvs; + model.syncVectors(item, true); + operateModels2.push(model); + selMods.push({ id: model == null ? void 0 : model.id, value: DDeiEnumControlState.SELECTED }); + }); + if (pContainerModel.baseModelType == "DDeiTableCell") { + selMods.push({ id: (_K = pContainerModel.pModel) == null ? void 0 : _K.id, value: DDeiEnumControlState.DEFAULT }); + } else { + selMods.push({ id: pContainerModel.id, value: DDeiEnumControlState.DEFAULT }); + } + if ((lastOnContainer == null ? void 0 : lastOnContainer.baseModelType) == "DDeiTableCell") { + selMods.push({ id: (_L = lastOnContainer.pModel) == null ? void 0 : _L.id, value: DDeiEnumControlState.SELECTED }); + } else { + selMods.push({ id: lastOnContainer == null ? void 0 : lastOnContainer.id, value: DDeiEnumControlState.SELECTED }); + } + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.DRAG, { models: operateModels2 }, (_M = this.stage) == null ? void 0 : _M.ddInstance, null); + (_P = (_O = (_N = this.stage) == null ? void 0 : _N.ddInstance) == null ? void 0 : _O.bus) == null ? void 0 : _P.push(DDeiEnumBusCommandType.ModelChangeContainer, { oldContainer: pContainerModel, newContainer: lastOnContainer, models: operateModels2 }, evt); + (_S = (_R = (_Q = this.stage) == null ? void 0 : _Q.ddInstance) == null ? void 0 : _R.bus) == null ? void 0 : _S.push(DDeiEnumBusCommandType.ModelChangeSelect, selMods, evt); + hasChange = true; + } + isStop = true; + } + } + if (!isStop) { + let pContainerModel = this.stageRender.currentOperateShape.pModel; + if (!pContainerModel.layoutManager || pContainerModel.layoutManager.canChangePosition(ex2, ey2, this.model.shadowControls)) { + let operateModels2 = []; + let lines = (_T = this.stage) == null ? void 0 : _T.getModelsByBaseType("DDeiLine"); + let moveOriginModels = []; + let moveOriginModelIds = []; + let moveOriginLines = []; + this.model.shadowControls.forEach((item) => { + var _a22; + let id = item.id.substring(item.id, item.id.lastIndexOf("_shadow")); + let momodel = (_a22 = this.stage) == null ? void 0 : _a22.getModelById(id); + if (momodel) { + if ((momodel == null ? void 0 : momodel.baseModelType) == "DDeiLine") { + moveOriginLines.push(momodel.id); + } + moveOriginModels.push(momodel); + moveOriginModelIds.push(momodel.id); + } + }); + for (let i2 = 0; i2 < this.model.shadowControls.length; i2++) { + let item = this.model.shadowControls[i2]; + let model = moveOriginModels[i2]; + model.syncVectors(item); + hasChange = true; + operateModels2.push(model); + if (model.modelType == "DDeiLine") { + let distLinks = (_U = this.stage) == null ? void 0 : _U.getDistModelLinks(model.id); + let skipStart = false, skipEnd = false; + distLinks == null ? void 0 : distLinks.forEach((dl) => { + var _a22, _b22; + if (!dl.disabled && (!dl.sm || moveOriginModels.indexOf(dl.sm) == -1)) { + (_a22 = this.stage) == null ? void 0 : _a22.removeLink(dl); + if ((dl == null ? void 0 : dl.sm) && (dl == null ? void 0 : dl.smpath)) { + DDeiUtil$1.deletePropertyByPath(dl.sm, dl.smpath); + dl.sm.transVectors(new Matrix3()); + dl.sm.updateLinkModels(); + (_b22 = dl.sm.render) == null ? void 0 : _b22.enableRefreshShape(); + } + } else { + if (dl.dmpath == "startPoint") { + skipStart = true; + } else if (dl.dmpath == "endPoint") { + skipEnd = true; + } + } + }); + if (!skipStart) { + let lineInModelsStart = DDeiAbstractShape.findBottomModelsByArea(this.model, model.startPoint.x, model.startPoint.y, true, true); + if (lineInModelsStart.length > 0) { + for (let li = 0; li < lineInModelsStart.length; li++) { + if (!((_V = model.linkModels) == null ? void 0 : _V.has(lineInModelsStart[li].id)) && moveOriginModelIds.indexOf(lineInModelsStart[li].id) == -1) { + DDeiUtil$1.addLineLink(model, lineInModelsStart[li], model.startPoint, 1); + } + break; + } + } + } + if (!skipEnd) { + let lineInModelsEnd = DDeiAbstractShape.findBottomModelsByArea(this.model, model.endPoint.x, model.endPoint.y, true, true); + if (lineInModelsEnd.length > 0) { + for (let li = 0; li < lineInModelsEnd.length; li++) { + if (!((_W = model.linkModels) == null ? void 0 : _W.has(lineInModelsEnd[li].id)) && moveOriginModelIds.indexOf(lineInModelsEnd[li].id) == -1) { + DDeiUtil$1.addLineLink(model, lineInModelsEnd[li], model.endPoint, 2); + } + break; + } + } + } + } else { + model.updateLinkModels(moveOriginLines); + if (model.depModel) { + let lm = (_X = model.depModel.linkModels) == null ? void 0 : _X.get(model.id); + if (model.depModel.baseModelType == "DDeiLine") { + let point2 = null; + if (lm.type == 1) { + point2 = model.depModel.startPoint; + } else if (lm.type == 2) { + point2 = model.depModel.endPoint; + } else if (lm.type == 3) { + let pi = Math.floor(model.depModel.pvs.length / 2); + if (model.depModel.pvs.length % 3 == 0) { + point2 = model.depModel.pvs[pi]; + } else { + point2 = { + x: (model.depModel.pvs[pi - 1].x + model.depModel.pvs[pi].x) / 2, + y: (model.depModel.pvs[pi - 1].y + model.depModel.pvs[pi].y) / 2 + }; + } + } + lm.dx = model.cpv.x - point2.x; + lm.dy = model.cpv.y - point2.y; + } else { + if (lm.type == 5) { + lm.dx = model.cpv.x - model.depModel.cpv.x; + lm.dy = model.cpv.y - model.depModel.cpv.y; + } else { + let essBounds = model.depModel.essBounds; + let dmEssBounds = lm.dm.essBounds; + let point2; + if (lm.type == 6) { + point2 = { + x: model.depModel.cpv.x, + y: essBounds.y - dmEssBounds.height / 2 + }; + } else if (lm.type == 7) { + point2 = { + y: model.depModel.cpv.y, + x: essBounds.x1 + dmEssBounds.width / 2 + }; + } else if (lm.type == 8) { + point2 = { + x: model.depModel.cpv.x, + y: essBounds.y1 + dmEssBounds.height / 2 + }; + } else if (lm.type == 9) { + point2 = { + y: model.depModel.cpv.y, + x: essBounds.x - dmEssBounds.width / 2 + }; + } + lm.dx = model.cpv.x - point2.x; + lm.dy = model.cpv.y - point2.y; + } + } + } + } + model.refreshLinkModels(); + } + lines == null ? void 0 : lines.forEach((line2) => { + line2.clps = []; + }); + this.stageRender.refreshJumpLine = false; + pContainerModel == null ? void 0 : pContainerModel.changeParentsBounds(); + (_Y = pContainerModel == null ? void 0 : pContainerModel.layoutManager) == null ? void 0 : _Y.updateLayout(ex2, ey2, operateModels2); + operateModels2 == null ? void 0 : operateModels2.forEach((item) => { + var _a22; + (_a22 = item.render) == null ? void 0 : _a22.controlDragEnd(evt); + }); + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.DRAG, { models: operateModels2 }, (_Z = this.stage) == null ? void 0 : _Z.ddInstance, null); + } + } + if (hasChange) { + (_aa = (_$ = (__ = this.stage) == null ? void 0 : __.ddInstance) == null ? void 0 : _$.bus) == null ? void 0 : _aa.push(DDeiEnumBusCommandType.UpdatePaperArea); + (_da = (_ca = (_ba = this.stage) == null ? void 0 : _ba.ddInstance) == null ? void 0 : _ca.bus) == null ? void 0 : _da.push(DDeiEnumBusCommandType.StageChangeSelectModels); + (_ga = (_fa = (_ea = this.stage) == null ? void 0 : _ea.ddInstance) == null ? void 0 : _fa.bus) == null ? void 0 : _ga.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + (_ja = (_ia = (_ha = this.stage) == null ? void 0 : _ha.ddInstance) == null ? void 0 : _ia.bus) == null ? void 0 : _ja.push(DDeiEnumBusCommandType.NodifyChange); + (_ma = (_la = (_ka = this.stage) == null ? void 0 : _ka.ddInstance) == null ? void 0 : _la.bus) == null ? void 0 : _ma.push(DDeiEnumBusCommandType.AddHistroy); + } + this.clearShadowControls(); + break; + case DDeiEnumOperateState.TABLE_INNER_DRAG: + let table2 = this.stageRender.currentOperateShape; + (_na = table2 == null ? void 0 : table2.render) == null ? void 0 : _na.mouseUp(evt); + (_pa = (_oa = this.stage) == null ? void 0 : _oa.ddInstance) == null ? void 0 : _pa.bus.push(DDeiEnumBusCommandType.CopyStyle, { models: [table2], brushData: this.stage.brushData }); + break; + case DDeiEnumOperateState.CONTROL_ROTATE: + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_ROTATE_AFTER", DDeiEnumOperateType.ROTATE, { models: this.stageRender.dragObj.models }, (_qa = this.stage) == null ? void 0 : _qa.ddInstance, evt); + (_ta = (_sa = (_ra = this.stage) == null ? void 0 : _ra.ddInstance) == null ? void 0 : _sa.bus) == null ? void 0 : _ta.push(DDeiEnumBusCommandType.ClearTemplateVars); + (_wa = (_va = (_ua = this.stage) == null ? void 0 : _ua.ddInstance) == null ? void 0 : _va.bus) == null ? void 0 : _wa.push(DDeiEnumBusCommandType.NodifyChange); + (_za = (_ya = (_xa = this.stage) == null ? void 0 : _xa.ddInstance) == null ? void 0 : _ya.bus) == null ? void 0 : _za.push(DDeiEnumBusCommandType.AddHistroy); + break; + case DDeiEnumOperateState.CONTROL_CHANGING_BOUND: + let operateModels = []; + this.model.shadowControls.forEach((item) => { + var _a22; + let id = item.id.substring(item.id, item.id.lastIndexOf("_shadow")); + let model = (_a22 = this.stage) == null ? void 0 : _a22.getModelById(id); + if (model) { + model.syncVectors(item); + if (model.changeChildrenBounds) { + model.changeChildrenBounds(); + } + model.updateLinkModels(); + operateModels.push(model); + } + }); + (_Ca = (_Ba = (_Aa = this.stage) == null ? void 0 : _Aa.ddInstance) == null ? void 0 : _Ba.bus) == null ? void 0 : _Ca.push(DDeiEnumBusCommandType.NodifyChange); + (_Fa = (_Ea = (_Da = this.stage) == null ? void 0 : _Da.ddInstance) == null ? void 0 : _Ea.bus) == null ? void 0 : _Fa.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + this.stageRender.selector.updatePVSByModels(operateModels); + this.clearShadowControls(); + break; + case DDeiEnumOperateState.QUICK_EDITING_TEXT_SELECTING: + delete this.stage.brushData; + if (((_Ga = this.stage.brushDataText) == null ? void 0 : _Ga.length) > 0) { + let shadowControl = this.stage.render.editorShadowControl; + if (shadowControl) { + let editorText = DDeiUtil$1.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + let tempI = 0; + if (curSIdx > -1 && curEIdx > -1 && curSIdx <= curEIdx) { + for (; curSIdx < curEIdx; curSIdx++) { + shadowControl.sptStyle[curSIdx] = cloneDeep(this.stage.brushDataText[tempI]); + tempI++; + if (tempI >= this.stage.brushDataText.length) { + tempI = 0; + } + } + } + } + } + delete this.stage.brushDataText; + } + this.stageRender.operateState = DDeiEnumOperateState.QUICK_EDITING; + (_Ja = (_Ia = (_Ha = this.stage) == null ? void 0 : _Ha.ddInstance) == null ? void 0 : _Ia.bus) == null ? void 0 : _Ja.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + (_Ma = (_La = (_Ka = this.stage) == null ? void 0 : _Ka.ddInstance) == null ? void 0 : _La.bus) == null ? void 0 : _Ma.push(DDeiEnumBusCommandType.RefreshShape); + (_Pa = (_Oa = (_Na = this.stage) == null ? void 0 : _Na.ddInstance) == null ? void 0 : _Oa.bus) == null ? void 0 : _Pa.executeAll(); + return; + case DDeiEnumOperateState.QUICK_EDITING: + let canvas = this.ddRender.getCanvas(); + if ((evt.target == canvas || evt.target == canvas.parentElement) && (!this.stageRender.editorShadowControl || !((_Qa = this.stageRender.editorShadowControl) == null ? void 0 : _Qa.isInAreaLoose(ex, ey)))) { + (_Ra = DDeiUtil$1.getEditorText()) == null ? void 0 : _Ra.enterValue(); + } else if (evt.target != canvas && evt.target != canvas.parentElement) { + return; + } + break; + } + } + (_Ua = (_Ta = (_Sa = this.stage) == null ? void 0 : _Sa.ddInstance) == null ? void 0 : _Ta.bus) == null ? void 0 : _Ua.push(DDeiEnumBusCommandType.ClearTemplateVars, null, evt); + (_Xa = (_Wa = (_Va = this.stage) == null ? void 0 : _Va.ddInstance) == null ? void 0 : _Wa.bus) == null ? void 0 : _Xa.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (__a = (_Za = (_Ya = this.stage) == null ? void 0 : _Ya.ddInstance) == null ? void 0 : _Za.bus) == null ? void 0 : __a.executeAll(); + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea, _Fa, _Ga, _Ha, _Ia, _Ja, _Ka, _La, _Ma, _Na, _Oa, _Pa, _Qa, _Ra, _Sa, _Ta, _Ua, _Va, _Wa, _Xa, _Ya, _Za; + if (this.stage.ddInstance.disabled) { + return; + } + if (this.stage.ddInstance.state == DDeiEnumState.IN_ACTIVITY) { + return; + } + if (this.stage.ddInstance.eventCancel) { + return; + } + if (!this.model.display && !this.model.tempDisplay || this.model.lock) { + return; + } + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + let isAlt = DDei.KEY_DOWN_STATE.get("alt"); + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + let rat1 = (_a3 = this.ddRender) == null ? void 0 : _a3.ratio; + let canvasWidth = this.ddRender.canvas.width / rat1; + let canvasHeight = this.ddRender.canvas.height / rat1; + let edgeWeight = 25; + if (ex < edgeWeight) { + this.ddRender.inEdge = 4; + } else if (ex > canvasWidth - edgeWeight) { + this.ddRender.inEdge = 2; + } else if (ey < edgeWeight) { + this.ddRender.inEdge = 1; + } else if (ey > canvasHeight - edgeWeight) { + this.ddRender.inEdge = 3; + } else { + this.ddRender.inEdge = 0; + } + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let stageRatio2 = this.model.getStageRatio(); + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + this.ddRender.inAreaX = ex2; + this.ddRender.inAreaY = ey2; + switch (this.stageRender.operateState) { + case DDeiEnumOperateState.CONTROL_CONFIRMING: { + if (Math.abs(ex2 - this.stageRender.tempSX) <= 2 && Math.abs(ey2 - this.stageRender.tempSY) <= 2) { + return; + } + this.model.opPoints = []; + if ((_b2 = this.model.opLine) == null ? void 0 : _b2.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + let operateControl = this.stageRender.currentOperateShape; + if (operateControl.pModel != this.model && operateControl.state != DDeiEnumControlState.SELECTED) { + operateControl = operateControl.pModel; + } + let pContainerModel = operateControl.pModel; + let dragObj = { + x: ex, + y: ey, + model: this.stageRender.currentOperateShape + }; + (_e2 = (_d2 = (_c2 = this.stage) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + if (((_f = this.stageRender.currentOperateShape) == null ? void 0 : _f.baseModelType) == "DDeiTable" && !isCtrl) { + this.stageRender.operateState = DDeiEnumOperateState.TABLE_INNER_DRAG; + (_i = (_h = (_g = this.stage) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.bus) == null ? void 0 : _i.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, { ignoreModels: [this.stageRender.currentOperateShape] }, evt); + (_l = (_k = (_j = this.stage) == null ? void 0 : _j.ddInstance) == null ? void 0 : _k.bus) == null ? void 0 : _l.push(DDeiEnumBusCommandType.ModelChangeSelect, [{ id: this.stageRender.currentOperateShape.id, value: DDeiEnumControlState.SELECTED }], evt); + } else { + let selectedModels = pContainerModel.getSelectedModels(); + let sms = Array.from(selectedModels.values()); + if (sms.indexOf(this.stageRender.currentOperateShape) == -1) { + sms.push(this.stageRender.currentOperateShape); + } + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DRAG_BEFORE", DDeiEnumOperateType.DRAG, { models: sms }, this.ddRender.model, evt); + if (rsState == 0 || rsState == 1) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", DDeiEnumOperateType.DRAG, { models: sms }, this.ddRender.model, evt); + this.stageRender.operateState = DDeiEnumOperateState.CONTROL_DRAGING; + sms.forEach((m) => { + let md = DDeiUtil$1.getShadowControl(m); + dragObj[md.id] = { dx: md.cpv.x - ex2, dy: md.cpv.y - ey2 }; + this.model.shadowControls.push(md); + }); + this.stageRender.currentOperateShape = this.model.shadowControls[this.model.shadowControls.length - 1]; + } else { + this.stageRender.operateState = DDeiEnumOperateState.NONE; + } + } + break; + } + case DDeiEnumOperateState.SELECT_WORKING: { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "SELECT_WORKING", null, (_m = this.stage) == null ? void 0 : _m.ddInstance, evt); + (_p = (_o = (_n = this.stage) == null ? void 0 : _n.ddInstance) == null ? void 0 : _o.bus) == null ? void 0 : _p.push(DDeiEnumBusCommandType.UpdateSelectorBounds, { operateState: this.stageRender.operateState }, evt); + (_s = (_r = (_q = this.stage) == null ? void 0 : _q.ddInstance) == null ? void 0 : _r.bus) == null ? void 0 : _s.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + break; + } + case DDeiEnumOperateState.GRAB_WORKING: { + (_v = (_u = (_t = this.stage) == null ? void 0 : _t.ddInstance) == null ? void 0 : _u.bus) == null ? void 0 : _v.push(DDeiEnumBusCommandType.ChangeStageWPV, { x: ex, y: ey, dragObj: this.stageRender.dragObj }, evt); + break; + } + case DDeiEnumOperateState.LINE_POINT_CHANGING_CONFIRM: { + let dx, dy, opPoint; + if (this.stageRender.dragObj.opPoint) { + opPoint = this.stageRender.dragObj.opPoint; + dx = opPoint.x; + dy = opPoint.y; + } else { + dx = this.stageRender.dragObj.dx; + dy = this.stageRender.dragObj.dy; + } + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "CHANGE_WPV", null, (_w = this.stage) == null ? void 0 : _w.ddInstance, evt); + if (Math.abs(ex - dx) >= 10 || Math.abs(ey - dy) >= 10) { + this.stageRender.operateState = DDeiEnumOperateState.LINE_POINT_CHANGING; + } + break; + } + case DDeiEnumOperateState.LINE_POINT_CHANGING: { + if (!this.stageRender.currentOperateShape) { + let lineJson = DDeiUtil$1.getLineInitJSON(this.stage.ddInstance); + let editor = DDeiUtil$1.getEditorInsByDDei(this.stage.ddInstance); + let lineDefine = (_x = editor.controls) == null ? void 0 : _x.get(lineJson.modelCode ? lineJson.modelCode : lineJson.model ? lineJson.model : lineJson.id ? lineJson.id : lineJson.code); + let initJSON = clone(lineDefine); + initJSON.modelCode = initJSON.id; + initJSON.id = "line_" + ++this.stage.idIdx; + if (!lineJson.type) { + initJSON.type = 2; + } else { + initJSON.type = lineJson.type; + } + if (initJSON.img) { + initJSON.fill = { type: 2, image: initJSON.img }; + delete initJSON.img; + } + if (initJSON.define) { + for (let i2 in initJSON == null ? void 0 : initJSON.define) { + initJSON[i2] = initJSON.define[i2]; + } + delete initJSON.define; + } + delete initJSON.ovs; + delete initJSON.attrDefineMap; + delete initJSON.filters; + delete initJSON.icon; + delete initJSON.groups; + delete initJSON.name; + delete initJSON.def; + delete initJSON.code; + delete initJSON.desc; + (_y = initJSON.composes) == null ? void 0 : _y.forEach((comp) => { + if (comp) { + delete comp.attrs; + } + }); + let dx, dy, opPoint; + if (this.stageRender.dragObj.opPoint) { + opPoint = this.stageRender.dragObj.opPoint; + dx = opPoint.x; + dy = opPoint.y; + } else { + dx = this.stageRender.dragObj.dx; + dy = this.stageRender.dragObj.dy; + } + let moveMatrix2 = new Matrix3( + 1, + 0, + dx, + 0, + 1, + dy, + 0, + 0, + 1 + ); + initJSON.cpv = new Vector3(0, 0, 1); + if (initJSON.type == 1) { + initJSON.pvs = [initJSON.cpv, new Vector3(ex2 - dx, ey2 - dy, 1)]; + } else { + initJSON.pvs = [initJSON.cpv, new Vector3((ex2 - dx) / 2, initJSON.cpv.y, 1), new Vector3((ex2 - dx) / 2, ey2 - dy, 1), new Vector3(ex2 - dx, ey2 - dy, 1)]; + } + let ddeiLine = DDeiLine.initByJSON(initJSON, { currentStage: this.stage, currentLayer: this.model, currentContainer: this.model }); + ddeiLine.transVectors(moveMatrix2); + let lineShadow = DDeiUtil$1.getShadowControl(ddeiLine); + this.model.shadowControls.push(lineShadow); + this.stageRender.currentOperateShape = lineShadow; + if (opPoint) { + this.stage.tempStartOPpoint = opPoint; + let smodel = opPoint.model; + let id = "_" + DDeiUtil$1.getUniqueCode(); + smodel.exPvs[id] = new Vector3(opPoint.x, opPoint.y, opPoint.z); + smodel.exPvs[id].rate = opPoint.rate; + smodel.exPvs[id].sita = opPoint.sita; + smodel.exPvs[id].index = opPoint.index; + smodel.exPvs[id].id = id; + let link2 = new DDeiLink({ + sm: smodel, + dm: lineShadow, + smpath: "exPvs." + id, + dmpath: "startPoint", + stage: this.stage + }); + (_z = this.stage) == null ? void 0 : _z.addLink(link2); + smodel.updateLinkModels(); + } + let dragObj = { + x: ex2, + y: ey2, + dragPoint: lineShadow.pvs[lineShadow.pvs.length - 1], + model: lineShadow, + passIndex: 1, + opvsIndex: ddeiLine.pvs.length - 1, + opvs: ddeiLine.pvs, + create: true + }; + (_C = (_B = (_A = this.stage) == null ? void 0 : _A.ddInstance) == null ? void 0 : _B.bus) == null ? void 0 : _C.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + (_F = (_E = (_D = this.stage) == null ? void 0 : _D.ddInstance) == null ? void 0 : _E.bus) == null ? void 0 : _F.push(DDeiEnumBusCommandType.RefreshShape); + } else { + let lineModel = this.stageRender.dragObj.model; + let passIndex = this.stageRender.dragObj.passIndex; + let opvsIndex = this.stageRender.dragObj.opvsIndex; + let opvs = this.stageRender.dragObj.opvs; + if (passIndex == 1 && opvsIndex == 0) { + let endPoint = lineModel.endPoint; + if (Math.abs(endPoint.x - ex2) <= ((_G = this.stage) == null ? void 0 : _G.ddInstance.GLOBAL_ADV_WEIGHT)) { + ex2 = endPoint.x; + } else if (Math.abs(endPoint.y - ey2) <= ((_H = this.stage) == null ? void 0 : _H.ddInstance.GLOBAL_ADV_WEIGHT)) { + ey2 = endPoint.y; + } + } else if (passIndex == 1 && opvsIndex == opvs.length - 1) { + let startPoint = lineModel.startPoint; + if (Math.abs(startPoint.x - ex2) <= ((_I = this.stage) == null ? void 0 : _I.ddInstance.GLOBAL_ADV_WEIGHT)) { + ex2 = startPoint.x; + } else if (Math.abs(startPoint.y - ey2) <= ((_J = this.stage) == null ? void 0 : _J.ddInstance.GLOBAL_ADV_WEIGHT)) { + ey2 = startPoint.y; + } + } + (_M = (_L = (_K = this.stage) == null ? void 0 : _K.ddInstance) == null ? void 0 : _L.bus) == null ? void 0 : _M.push(DDeiEnumBusCommandType.ChangeLinePoint, { ex: ex2, ey: ey2 }); + (_P = (_O = (_N = this.stage) == null ? void 0 : _N.ddInstance) == null ? void 0 : _O.bus) == null ? void 0 : _P.push(DDeiEnumBusCommandType.RefreshShape); + } + this.model.opPoints = []; + if ((_Q = this.model.opLine) == null ? void 0 : _Q.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + delete this.stage.tempCursorOPpoint; + let operateControls = DDeiAbstractShape.findBottomModelsByArea(this.model, ex2, ey2, true, true); + if (operateControls != null && operateControls.length > 0) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "LINE_POINT_CHANGING", { line: this.stageRender.currentOperateShape, model: operateControls[0] }, (_R = this.stage) == null ? void 0 : _R.ddInstance, evt); + operateControls[0].render.changeOpPoints(ex2, ey2, 1); + } else { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "LINE_POINT_CHANGING", { line: this.stageRender.currentOperateShape }, (_S = this.stage) == null ? void 0 : _S.ddInstance, evt); + } + break; + } + case DDeiEnumOperateState.CONTROL_DRAGING: { + if (!this.ddRender.inEdge) { + let pContainerModel = null; + if (this.stageRender.currentOperateShape.id.indexOf("_shadow") != -1) { + let id = this.stageRender.currentOperateShape.id.substring(this.stageRender.currentOperateShape.id, this.stageRender.currentOperateShape.id.lastIndexOf("_shadow")); + let model = (_T = this.stage) == null ? void 0 : _T.getModelById(id); + pContainerModel = model.pModel; + } else { + pContainerModel = this.stageRender.currentOperateShape.pModel; + } + if (pContainerModel) { + let pushData = { x: ex, y: ey, dragObj: this.stageRender.dragObj, models: this.model.shadowControls, changeContainer: isAlt }; + pushData.oldContainer = pContainerModel; + if (isAlt) { + let mouseOnContainers = DDeiAbstractShape.findBottomContainersByArea(this.model, ex2, ey2); + let lastOnContainer = this.model; + if (mouseOnContainers && mouseOnContainers.length > 0) { + for (let k = mouseOnContainers.length - 1; k >= 0; k--) { + if (mouseOnContainers[k].id != this.stageRender.currentOperateShape.id) { + lastOnContainer = mouseOnContainers[k]; + break; + } + } + } + pushData.isAlt = true; + pushData.newContainer = lastOnContainer; + } else { + if (!((_U = this.ddRender) == null ? void 0 : _U.model.EXT_STAGE_WIDTH) || !((_V = this.ddRender) == null ? void 0 : _V.model.EXT_STAGE_HEIGHT)) { + let dragObj = pushData.dragObj; + let outRect = DDeiAbstractShape.getOutRectByPV(this.model.shadowControls); + let nmodel = this.stageRender.currentOperateShape; + let dx = 0; + let dy = 0; + if (dragObj && dragObj[nmodel.id]) { + dx = ((_W = dragObj[nmodel.id]) == null ? void 0 : _W.dx) ? (_X = dragObj[nmodel.id]) == null ? void 0 : _X.dx : 0; + dy = ((_Y = dragObj[nmodel.id]) == null ? void 0 : _Y.dy) ? (_Z = dragObj[nmodel.id]) == null ? void 0 : _Z.dy : 0; + } + if (!((__ = this.ddRender) == null ? void 0 : __.model.EXT_STAGE_WIDTH)) { + let xm = ex - nmodel.cpv.x + dx; + if (outRect.x + xm < 0) { + pushData.x -= outRect.x + xm; + } else if (outRect.x1 + xm > this.stage.width) { + pushData.x -= outRect.x1 + xm - this.stage.width; + } + } + if (!((_$ = this.ddRender) == null ? void 0 : _$.model.EXT_STAGE_HEIGHT)) { + let ym = ey - nmodel.cpv.y + dy; + if (outRect.y + ym < 0) { + pushData.y -= outRect.y + ym; + } else if (outRect.y1 + ym > this.stage.height) { + pushData.y -= outRect.y1 + ym - this.stage.height; + } + } + } + } + (_ca = (_ba = (_aa = this.stage) == null ? void 0 : _aa.ddInstance) == null ? void 0 : _ba.bus) == null ? void 0 : _ca.push(DDeiEnumBusCommandType.SetHelpLine, { models: this.model.shadowControls }, evt); + (_fa = (_ea = (_da = this.stage) == null ? void 0 : _da.ddInstance) == null ? void 0 : _ea.bus) == null ? void 0 : _fa.push(DDeiEnumBusCommandType.ModelChangePosition, pushData, evt); + (_ia = (_ha = (_ga = this.stage) == null ? void 0 : _ga.ddInstance) == null ? void 0 : _ha.bus) == null ? void 0 : _ia.push(DDeiEnumBusCommandType.RefreshShape); + } + } + break; + } + case DDeiEnumOperateState.TABLE_INNER_DRAG: { + this.model.opPoints = []; + if ((_ja = this.model.opLine) == null ? void 0 : _ja.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + let table2 = this.stageRender.currentOperateShape; + table2.render.mouseMove(evt); + (_ma = (_la = (_ka = this.stage) == null ? void 0 : _ka.ddInstance) == null ? void 0 : _la.bus) == null ? void 0 : _ma.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + break; + } + case DDeiEnumOperateState.CONTROL_CHANGING_BOUND: { + let points = []; + switch (this.stageRender.selector.passIndex) { + case 1: + { + points.push({ x: this.stageRender.selector.x + this.stageRender.selector.width / 2, y: this.stageRender.selector.y }); + } + break; + case 2: + { + points.push({ x: this.stageRender.selector.x + this.stageRender.selector.width, y: this.stageRender.selector.y }); + } + break; + case 3: + { + points.push({ x: this.stageRender.selector.x + this.stageRender.selector.width, y: this.stageRender.selector.y + this.stageRender.selector.height / 2 }); + } + break; + case 4: + { + points.push({ x: this.stageRender.selector.x + this.stageRender.selector.width, y: this.stageRender.selector.y + this.stageRender.selector.height }); + } + break; + case 5: + { + points.push({ x: this.stageRender.selector.x + this.stageRender.selector.width / 2, y: this.stageRender.selector.y + this.stageRender.selector.height }); + } + break; + case 6: + { + points.push({ x: this.stageRender.selector.x, y: this.stageRender.selector.y + this.stageRender.selector.height }); + } + break; + case 7: + { + points.push({ x: this.stageRender.selector.x, y: this.stageRender.selector.y + this.stageRender.selector.height / 2 }); + } + break; + case 8: + { + points.push({ x: this.stageRender.selector.x, y: this.stageRender.selector.y }); + } + break; + } + points.forEach((point2) => { + point2.x = point2.x * stageRatio2; + point2.y = point2.y * stageRatio2; + }); + (_pa = (_oa = (_na = this.stage) == null ? void 0 : _na.ddInstance) == null ? void 0 : _oa.bus) == null ? void 0 : _pa.push(DDeiEnumBusCommandType.SetHelpLine, { models: this.model.shadowControls, points }, evt); + (_sa = (_ra = (_qa = this.stage) == null ? void 0 : _qa.ddInstance) == null ? void 0 : _ra.bus) == null ? void 0 : _sa.executeAll(); + let movedBounds = this.stageRender.selector.render.getMovedBounds(ex2, ey2, isCtrl || this.stageRender.selector.eqrat); + if (movedBounds) { + let selector = this.stageRender.selector; + let pushData = { x: ex, y: ey, deltaX: movedBounds.x - selector.x * stageRatio2, deltaY: movedBounds.y - selector.y * stageRatio2, deltaWidth: movedBounds.width - selector.width * stageRatio2, deltaHeight: movedBounds.height - selector.height * stageRatio2, selector, models: this.model.shadowControls }; + this.model.opPoints = []; + if ((_ta = this.model.opLine) == null ? void 0 : _ta.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + Array.from(this.stage.selectedModels.values())[0]; + (_wa = (_va = (_ua = this.stage) == null ? void 0 : _ua.ddInstance) == null ? void 0 : _va.bus) == null ? void 0 : _wa.push(DDeiEnumBusCommandType.ModelChangeBounds, pushData, evt); + (_za = (_ya = (_xa = this.stage) == null ? void 0 : _xa.ddInstance) == null ? void 0 : _ya.bus) == null ? void 0 : _za.push(DDeiEnumBusCommandType.RefreshShape); + } + break; + } + case DDeiEnumOperateState.CONTROL_ROTATE: { + let dragObj = this.stageRender.dragObj; + (_Ca = (_Ba = (_Aa = this.stage) == null ? void 0 : _Aa.ddInstance) == null ? void 0 : _Ba.bus) == null ? void 0 : _Ca.push(DDeiEnumBusCommandType.ModelChangeRotate, { ex: ex2, ey: ey2, container: dragObj.container, models: dragObj.models }, evt); + (_Fa = (_Ea = (_Da = this.stage) == null ? void 0 : _Da.ddInstance) == null ? void 0 : _Ea.bus) == null ? void 0 : _Fa.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + break; + } + case DDeiEnumOperateState.QUICK_EDITING: { + if (this.stageRender.editorShadowControl) { + this.model.opPoints = []; + if ((_Ga = this.model.opLine) == null ? void 0 : _Ga.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + let shadowControl = this.stageRender.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.isInTextArea(ex, ey)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "text" }, evt); + } else { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }, evt); + } + } + break; + } + case DDeiEnumOperateState.QUICK_EDITING_TEXT_SELECTING: { + let shadowControl = this.stageRender.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.isInTextArea(ex2, ey2)) { + let cx = (ex2 - shadowControl.cpv.x) * rat1 * stageRatio2; + let cy = (ey2 - shadowControl.cpv.y) * rat1 * stageRatio2; + let startIndex = 0; + let sx = 0; + let i2 = 0; + let scaleSize = 1; + for (; i2 < shadowControl.render.textUsedArea.length; i2++) { + let rowData = shadowControl.render.textUsedArea[i2]; + let ry = rowData.y / scaleSize; + let rh = rowData.height / scaleSize; + let rx = rowData.x / scaleSize; + let rw = rowData.width / scaleSize; + if (cy >= ry && cy <= ry + rh) { + if (cx >= rx && cx <= rx + rw) { + let endI = startIndex + rowData.text.length; + for (let x2 = startIndex; x2 < endI; x2++) { + let fx = shadowControl.render.textUsedArea[0].textPosCache[x2].x / scaleSize; + let lx = x2 < endI - 1 ? shadowControl.render.textUsedArea[0].textPosCache[x2 + 1].x / scaleSize : rx + rw; + let halfW = (lx - fx) / 2; + if (cx >= fx && cx < lx) { + if (cx > fx + halfW) { + sx = x2 + 1; + } else { + sx = x2; + } + break; + } + } + } + if (!sx) { + if (ex2 < shadowControl.cpv.x) { + sx = startIndex; + } else { + sx = startIndex + rowData.text.length; + } + } + break; + } + startIndex += rowData.text.length; + } + if (!sx) { + if (ex2 < shadowControl.cpv.x) { + sx = 0; + } else { + sx = startIndex + shadowControl.render.textUsedArea[i2 - 1].text.length; + } + } + let editorText = DDeiUtil$1.getEditorText(); + if (this.stageRender.tempTextStart > sx) { + editorText.selectionStart = sx; + editorText.selectionEnd = this.stageRender.tempTextStart; + } else { + editorText.selectionEnd = sx; + } + setTimeout(() => { + editorText.focus(); + }, 10); + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "text" }, evt); + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.stage.ddInstance.bus.executeAll(); + break; + } + break; + } + case DDeiEnumOperateState.OV_POINT_CHANGING: { + (_Ja = (_Ia = (_Ha = this.stage) == null ? void 0 : _Ha.ddInstance) == null ? void 0 : _Ia.bus) == null ? void 0 : _Ja.push(DDeiEnumBusCommandType.OVSChangePosition, { x: ex2, y: ey2 }, evt); + (_Ma = (_La = (_Ka = this.stage) == null ? void 0 : _Ka.ddInstance) == null ? void 0 : _La.bus) == null ? void 0 : _Ma.push(DDeiEnumBusCommandType.RefreshShape); + break; + } + default: { + this.model.opPoints = []; + if ((_Na = this.model.opLine) == null ? void 0 : _Na.render) { + this.model.opLine.render.enableRefreshShape(); + } + delete this.model.opLine; + let inSelector = false; + if (this.stageRender.selector && this.stageRender.selector.isInAreaLoose(ex2, ey2, true)) { + this.stageRender.selector.render.mouseMove(evt); + inSelector = true; + } + let operateControls = DDeiAbstractShape.findBottomModelsByArea(this.model, ex2, ey2, true); + this.ddRender.inAreaControls = operateControls; + if (operateControls != null && operateControls.length > 0) { + let allowBackActive = DDeiUtil$1.isBackActive((_Oa = this.stage) == null ? void 0 : _Oa.ddInstance); + if (allowBackActive) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_MOVE_IN_CONTROL", "MOVE_IN_CONTROL", { models: operateControls }, this.ddRender.model, evt); + } + for (let li = 0; li < operateControls.length; li++) { + let control = operateControls[li]; + control.render.mouseMove(evt); + if (control.baseModelType != "DDeiContainer") { + break; + } + } + } else if (!inSelector || this.stageRender.selector.passIndex == -1) { + if (((_Pa = this.stage.ddInstance) == null ? void 0 : _Pa.editMode) == 1) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }, evt); + } else if (((_Qa = this.stage.ddInstance) == null ? void 0 : _Qa.editMode) == 2) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "grab" }, evt); + } else if (((_Ra = this.stage.ddInstance) == null ? void 0 : _Ra.editMode) == 4) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }, evt); + } + let allowBackActive = DDeiUtil$1.isBackActive((_Sa = this.stage) == null ? void 0 : _Sa.ddInstance); + if (allowBackActive) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_MOVE_IN_LAYER", "MOVE_IN_LAYER", { layer: this.model, ex, ey }, this.ddRender.model, evt); + } + } + if ((_Ta = this.stage) == null ? void 0 : _Ta.brushData) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { image: "cursor-brush" }, evt); + } + (_Wa = (_Va = (_Ua = this.stage) == null ? void 0 : _Ua.ddInstance) == null ? void 0 : _Va.bus) == null ? void 0 : _Wa.push(DDeiEnumBusCommandType.RefreshShape); + break; + } + } + (_Za = (_Ya = (_Xa = this.stage) == null ? void 0 : _Xa.ddInstance) == null ? void 0 : _Ya.bus) == null ? void 0 : _Za.executeAll(); + } + }; + __publicField2(_DDeiLayerCanvasRender, "ClsName", "DDeiLayerCanvasRender"); + let DDeiLayerCanvasRender = _DDeiLayerCanvasRender; + const __vite_glob_1_3$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLayerCanvasRender, + default: DDeiLayerCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiLineCanvasRender = class _DDeiLineCanvasRender2 extends DDeiAbstractShapeRender { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "textUsedArea", []); + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiLineCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 初始化 + */ + init() { + this.ddRender = this.model.stage.ddInstance.render; + this.stage = this.model.stage; + this.stageRender = this.model.stage.render; + if (this.model.layer) { + this.layer = this.model.layer; + this.layerRender = this.model.layer.render; + } + } + createTempShape() { + var _a3; + let rat1 = this.ddRender.ratio; + if (!this.tempCanvas) { + this.tempCanvas = document.createElement("canvas"); + this.tempCanvas.setAttribute("style", "pointer-events:none;position:absolute;-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;scale:" + 1 / rat1); + } + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let tempCanvas = this.tempCanvas; + let pvs2 = this.model.getOperatePVS(true); + let outRect = DDeiAbstractShape.pvsToOutRect(pvs2, stageRatio2); + let weight = 5 * stageRatio2 * rat1; + outRect.x -= weight; + outRect.x1 += weight; + outRect.y -= weight; + outRect.y1 += weight; + outRect.width += 2 * weight; + outRect.height += 2 * weight; + tempCanvas.setAttribute("width", outRect.width * rat1); + tempCanvas.setAttribute("height", outRect.height * rat1); + let tempCtx = tempCanvas.getContext("2d", { willReadFrequently: true }); + tempCanvas.tx = -outRect.x * rat1; + tempCanvas.ty = -outRect.y * rat1; + tempCanvas.outRect = outRect; + tempCtx.translate(tempCanvas.tx, tempCanvas.ty); + } + /** + * 创建图形 + */ + drawShape(tempShape, composeRender = false, inRect = null, zIndex = 0) { + var _a3; + if (!inRect || this.model.isInRect(inRect.x, inRect.y, inRect.x1, inRect.y1)) { + this.tempZIndex = zIndex; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model], tempShape, composeRender }, this.ddRender.model, null); + if (rsState1 == 0 || rsState1 == 1) { + if (!this.viewer) { + let print = false; + if (!DDeiUtil$1.isModelHidden(this.model) && this.refreshShape) { + print = true; + this.createTempShape(); + let rendList = DDeiUtil$1.sortRendList(this.model); + for (let ri = 0; ri < rendList.length; ri++) { + let c = rendList[ri]; + if (c == this.model) { + this.tempZIndex = this.tempZIndex + ri; + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + if (this.inited && this.model.id.indexOf("_shadow") == -1 && (!this.upLineType || this.upLineType != this.model.type)) { + this.upLineType = this.model.type; + this.model.freeze = 0; + this.model.spvs = []; + this.model.refreshLinePoints(); + this.model.updateOVS(); + (_a3 = this.stageRender) == null ? void 0 : _a3.selector.updatePVSByModels(); + } else if (!this.inited) { + this.inited = true; + this.upLineType = this.model.type; + } + this.drawLine(tempShape); + ctx.restore(); + } else { + c.render.drawShape(tempShape, 1, null, this.tempZIndex + ri); + } + } + this.refreshShape = false; + } + this.drawSelfToCanvas(composeRender, print); + } else { + if (!DDeiUtil$1.isModelHidden(this.model) && this.refreshShape) { + DDeiUtil$1.createRenderViewer(this.model, "VIEW", tempShape, composeRender); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } + } + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + } + } else { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", "VIEW-HIDDEN", { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + if (!this.viewer) { + this.removeViewerCanvas(); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } + } + } + drawSelfToCanvas(composeRender, print) { + var _a3; + if (this.viewer) { + if (!DDeiUtil$1.isModelHidden(this.model) && this.refreshShape) { + DDeiUtil$1.createRenderViewer(this.model, "VIEW", null, composeRender); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } else if (this.tempCanvas) { + if (!DDeiUtil$1.isModelHidden(this.model)) { + let outRect = this.tempCanvas.outRect; + let model = this.model; + let stage2 = model.stage; + let ruleWeight = 0; + if (stage2.render.tempRuleDisplay == 1 || stage2.render.tempRuleDisplay == "1") { + ruleWeight = 15; + } + if (!this.tempCanvas.parentElement) { + let viewerEle = this.model.layer.render.containerViewer; + viewerEle.appendChild(this.tempCanvas); + } + this.tempCanvas.style.zIndex = this.tempZIndex; + this.tempCanvas.style.left = (outRect.x + outRect.x1) / 2 + this.model.stage.wpv.x - this.tempCanvas.offsetWidth / 2 - ruleWeight + "px"; + this.tempCanvas.style.top = (outRect.y + outRect.y1) / 2 + this.model.stage.wpv.y - this.tempCanvas.offsetHeight / 2 - ruleWeight + "px"; + if (!print) { + (_a3 = this.model.composes) == null ? void 0 : _a3.forEach((comp) => { + comp.render.drawSelfToCanvas(composeRender + 1); + }); + } + } else { + this.removeViewerCanvas(); + } + } + } + getRenderCanvas(composeRender) { + var _a3; + if (composeRender) { + return this.model.pModel.render.getCanvas(); + } else { + return (_a3 = this.ddRender) == null ? void 0 : _a3.getCanvas(); + } + } + getCanvas() { + return this.tempCanvas; + } + /** + * 绘制线段 + */ + drawLine(tempLine, tempCtx) { + var _a3, _b2, _c2, _d2, _e2; + let canvas = this.getCanvas(); + if (!canvas) { + return; + } + let ctx = tempCtx ? tempCtx : canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = (tempLine == null ? void 0 : tempLine.rat1) ? tempLine.rat1 : this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let color = (tempLine == null ? void 0 : tempLine.color) ? tempLine.color : this.getCachedValue("color"); + if (!color) { + color = DDeiUtil$1.getStyleValue("canvas-control-border", this.ddRender.model); + } + let weight = (tempLine == null ? void 0 : tempLine.weight) ? tempLine.weight : this.getCachedValue("weight"); + let fillWeight = ((_a3 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _a3.weight) ? (_b2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _b2.weight : this.getCachedValue("fill.weight"); + weight = weight + fillWeight; + let fillColor = ((_c2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _c2.color) ? (_d2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _d2.color : this.getCachedValue("fill.color"); + let dash = (tempLine == null ? void 0 : tempLine.dash) ? tempLine.dash : this.getCachedValue("dash"); + let round = (tempLine == null ? void 0 : tempLine.round) ? tempLine.round : this.getCachedValue("round"); + let type = this.getCachedValue("type"); + let opacity = (tempLine == null ? void 0 : tempLine.opacity) ? tempLine.opacity : this.getCachedValue("opacity"); + let pvs2 = this.model.pvs; + let jumpLine = DDeiModelArrtibuteValue.getAttrValueByState(this, "jumpline", true); + if (jumpLine == 0 || !jumpLine) { + if ((_e2 = this.stage.global) == null ? void 0 : _e2.jumpline) { + jumpLine = this.stage.global.jumpline; + } else if (this.stage.ddInstance.jumpline) { + jumpLine = this.stage.ddInstance.jumpline; + } else { + jumpLine = DDeiModelArrtibuteValue.getAttrValueByState(this.stage, "global.jumpline", true); + } + } + if ((pvs2 == null ? void 0 : pvs2.length) >= 2 && color && (!opacity || opacity > 0) && weight > 0) { + let { startDX, startDY, endDX, endDY } = this.getPointShapeSize(); + ctx.save(); + let lineWidth = weight * ratio; + let fillLineWidth = fillWeight * ratio; + ctx.lineWidth = lineWidth; + if (dash) { + ctx.setLineDash(dash); + } + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.strokeStyle = DDeiUtil$1.getColor(color); + let crossWeight = 4; + switch (type) { + case 1: + { + ctx.beginPath(); + ctx.moveTo((pvs2[0].x + startDX) * rat1, (pvs2[0].y + startDY) * rat1); + if (this.model.clps[0] && jumpLine == 1) { + let clps = this.model.clps[0]; + for (let c = 0; c < clps.length; c++) { + let cpi = clps[c].cp; + let r = clps[c].r; + ctx.arc(cpi.x * rat1, cpi.y * rat1, crossWeight * rat1, Math.PI / 180 * (r + 180), Math.PI / 180 * r, true); + } + } + ctx.lineTo((pvs2[pvs2.length - 1].x + endDX) * rat1, (pvs2[pvs2.length - 1].y + endDY) * rat1); + ctx.stroke(); + if (fillLineWidth > 0) { + ctx.lineWidth = fillLineWidth; + ctx.strokeStyle = DDeiUtil$1.getColor(fillColor); + ctx.stroke(); + } + ctx.closePath(); + } + break; + case 2: + { + ctx.beginPath(); + ctx.moveTo((pvs2[0].x + startDX) * rat1, (pvs2[0].y + startDY) * rat1); + for (let i2 = 1; i2 < pvs2.length; i2++) { + if (this.model.clps[i2 - 1] && jumpLine == 1) { + let clps = this.model.clps[i2 - 1]; + for (let c = 0; c < clps.length; c++) { + let cpi = clps[c].cp; + let r = clps[c].r; + ctx.arc(cpi.x * rat1, cpi.y * rat1, crossWeight * rat1, Math.PI / 180 * (r + 180), Math.PI / 180 * r, true); + } + if (i2 == pvs2.length - 1) { + ctx.lineTo((pvs2[i2].x + endDX) * rat1, (pvs2[i2].y + endDY) * rat1); + } else { + ctx.arcTo(pvs2[i2].x * rat1, pvs2[i2].y * rat1, pvs2[i2 + 1].x * rat1, pvs2[i2 + 1].y * rat1, round * rat1); + } + } else { + if (i2 == pvs2.length - 1) { + ctx.lineTo((pvs2[i2].x + endDX) * rat1, (pvs2[i2].y + endDY) * rat1); + } else { + ctx.arcTo(pvs2[i2].x * rat1, pvs2[i2].y * rat1, pvs2[i2 + 1].x * rat1, pvs2[i2 + 1].y * rat1, round * rat1); + } + } + } + ctx.stroke(); + if (fillLineWidth > 0) { + ctx.lineWidth = fillLineWidth; + ctx.strokeStyle = DDeiUtil$1.getColor(fillColor); + ctx.stroke(); + } + ctx.closePath(); + } + break; + case 3: + { + if (pvs2.length >= 4) { + for (let i2 = 4; i2 <= pvs2.length; i2 += 3) { + ctx.beginPath(); + let i0 = i2 - 4; + let i1 = i2 - 3; + let i22 = i2 - 2; + let i3 = i2 - 1; + if (i2 == 4) { + ctx.moveTo((pvs2[i0].x + startDX) * rat1, (pvs2[i0].y + startDY) * rat1); + } else { + ctx.moveTo(pvs2[i0].x * rat1, pvs2[i0].y * rat1); + } + if (i2 == pvs2.length) { + ctx.bezierCurveTo(pvs2[i1].x * rat1, pvs2[i1].y * rat1, pvs2[i22].x * rat1, pvs2[i22].y * rat1, (pvs2[i3].x + endDX) * rat1, (pvs2[i3].y + endDY) * rat1); + } else { + ctx.bezierCurveTo(pvs2[i1].x * rat1, pvs2[i1].y * rat1, pvs2[i22].x * rat1, pvs2[i22].y * rat1, pvs2[i3].x * rat1, pvs2[i3].y * rat1); + } + ctx.stroke(); + if (fillLineWidth > 0) { + ctx.lineWidth = fillLineWidth; + ctx.strokeStyle = DDeiUtil$1.getColor(fillColor); + ctx.stroke(); + } + ctx.closePath(); + } + } else { + ctx.beginPath(); + ctx.moveTo((pvs2[0].x + startDX) * rat1, (pvs2[0].y + startDY) * rat1); + ctx.lineTo((pvs2[0].x + endDX) * rat1, pvs2[0].y * rat1, pvs2[1].x * rat1, (pvs2[1].y + endDY) * rat1); + ctx.stroke(); + if (fillLineWidth > 0) { + ctx.lineWidth = fillLineWidth; + ctx.strokeStyle = DDeiUtil$1.getColor(fillColor); + ctx.stroke(); + } + ctx.closePath(); + } + } + break; + } + this.drawPoint(tempLine, tempCtx); + ctx.restore(); + } + } + /** + * 获取点图形所占用的空间 + * @returns + */ + getPointShapeSize() { + let stageRatio2 = this.model.getStageRatio(); + let pvs2 = this.model.pvs; + let startDX = 0; + let endDX = 0; + let startDY = 0; + let endDY = 0; + let stype = this.getCachedValue("sp.type"); + let etype = this.getCachedValue("ep.type"); + let sweight = this.getCachedValue("sp.weight"); + let eweight = this.getCachedValue("ep.weight"); + let fillWeight = this.getCachedValue("fill.weight"); + let lineWeight = this.getCachedValue("weight"); + lineWeight = lineWeight * stageRatio2; + sweight += fillWeight; + eweight += fillWeight; + if (sweight <= 0) { + sweight = 1; + } + if (eweight <= 0) { + eweight = 1; + } + let startRotate = DDeiUtil$1.getLineAngle(pvs2[1].x, pvs2[1].y, pvs2[0].x, pvs2[0].y); + let endRotate = DDeiUtil$1.getLineAngle(pvs2[pvs2.length - 2].x, pvs2[pvs2.length - 2].y, pvs2[pvs2.length - 1].x, pvs2[pvs2.length - 1].y); + let startAngle = (startRotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let endAngle = (endRotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let startVectorUnit = new Vector3(1, 0, 1); + let endVectorUnit = new Vector3(1, 0, 1); + let startRotateMatrix = new Matrix3( + Math.cos(startAngle), + Math.sin(startAngle), + 0, + -Math.sin(startAngle), + Math.cos(startAngle), + 0, + 0, + 0, + 1 + ); + startVectorUnit.applyMatrix3(startRotateMatrix); + let endRotateMatrix = new Matrix3( + Math.cos(endAngle), + Math.sin(endAngle), + 0, + -Math.sin(endAngle), + Math.cos(endAngle), + 0, + 0, + 0, + 1 + ); + endVectorUnit.applyMatrix3(endRotateMatrix); + let wl = 0; + switch (stype) { + case 1: + break; + case 21: + case 2: + wl = sweight * stageRatio2; + break; + case 31: + case 3: + wl = sweight * stageRatio2; + break; + case 41: + case 4: + wl = 2 * sweight * stageRatio2 + lineWeight; + break; + case 51: + case 5: + wl = sweight * stageRatio2 + lineWeight; + break; + case 61: + case 6: + wl = sweight * stageRatio2 / 2; + break; + } + startDX = -startVectorUnit.x * wl; + startDY = startVectorUnit.y * wl; + wl = 0; + switch (etype) { + case 1: + break; + case 21: + case 2: + wl = eweight * stageRatio2; + break; + case 31: + case 3: + wl = eweight * stageRatio2; + break; + case 41: + case 4: + wl = 2 * eweight * stageRatio2 + lineWeight; + break; + case 51: + case 5: + wl = eweight * stageRatio2 + lineWeight; + break; + case 61: + case 6: + wl = eweight * stageRatio2 / 2; + break; + } + endDX = -endVectorUnit.x * wl; + endDY = endVectorUnit.y * wl; + return { startDX, startDY, endDX, endDY }; + } + /** + * 绘制端点 + */ + drawPoint(tempLine, tempCtx) { + let canvas = this.getCanvas(); + if (!canvas) { + return; + } + let ctx = tempCtx ? tempCtx : canvas.getContext("2d"); + let stype = this.getCachedValue("sp.type"); + let etype = this.getCachedValue("ep.type"); + let sweight = this.getCachedValue("sp.weight"); + let eweight = this.getCachedValue("ep.weight"); + this.drawOnePoint(1, stype, sweight, ctx, tempLine); + this.drawOnePoint(2, etype, eweight, ctx, tempLine); + } + /** + * 绘制单个端点 + * @param type + * @param direct + */ + drawOnePoint(pointType, type, weight, ctx, tempLine) { + var _a3, _b2, _c2, _d2; + if (!type) { + return; + } + let stageRatio2 = this.model.getStageRatio(); + let rat1 = (tempLine == null ? void 0 : tempLine.rat1) ? tempLine.rat1 : this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let color = (tempLine == null ? void 0 : tempLine.color) ? tempLine.color : this.getCachedValue("color"); + let opacity = (tempLine == null ? void 0 : tempLine.opacity) ? tempLine.opacity : this.getCachedValue("opacity"); + ctx.save(); + ctx.setLineDash([]); + let pvs2 = this.model.pvs; + let point2 = null; + let upPoint = null; + let lineWeight = (tempLine == null ? void 0 : tempLine.weight) ? tempLine.weight : this.getCachedValue("weight"); + let fillColor = ((_a3 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _a3.color) ? (_b2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _b2.color : this.getCachedValue("fill.color"); + let fillWeight = ((_c2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _c2.weight) ? (_d2 = tempLine == null ? void 0 : tempLine.fill) == null ? void 0 : _d2.weight : this.getCachedValue("fill.weight"); + weight += fillWeight; + if (weight <= 0) { + weight = 1; + } + let lineWidth = lineWeight * ratio; + ctx.lineWidth = lineWidth; + if (pointType == 1) { + point2 = this.model.startPoint; + upPoint = pvs2[1]; + } else if (pointType == 2) { + point2 = this.model.endPoint; + upPoint = pvs2[pvs2.length - 2]; + } + point2 = new Vector3(point2.x, point2.y, 1); + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.fillStyle = DDeiUtil$1.getColor(color); + ctx.strokeStyle = DDeiUtil$1.getColor(color); + let rotate2 = DDeiUtil$1.getLineAngle(upPoint.x, upPoint.y, point2.x, point2.y); + if (rotate2 != 0) { + ctx.translate(point2.x * rat1, point2.y * rat1); + ctx.rotate(rotate2 * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-point2.x * rat1, -point2.y * rat1); + } + switch (type) { + case 1: { + let wl = weight * stageRatio2; + ctx.beginPath(); + ctx.moveTo((point2.x - wl) * rat1, (point2.y - 0.8 * wl) * rat1); + ctx.lineTo(point2.x * rat1 - lineWidth / 2, point2.y * rat1); + ctx.lineTo((point2.x - wl) * rat1, (point2.y + 0.8 * wl) * rat1); + ctx.stroke(); + ctx.closePath(); + break; + } + case 21: + case 2: { + let wl = weight * stageRatio2; + ctx.beginPath(); + ctx.ellipse((point2.x - wl / 2) * rat1 - lineWidth / 2, point2.y * rat1, wl / 2 * rat1, wl / 2 * rat1, 0, 0, Math.PI * 2); + ctx.closePath(); + ctx.stroke(); + if (fillWeight > 0 || type == 21 || tempLine) { + if (fillWeight > 0) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + } + ctx.fill(); + } + break; + } + case 31: + case 3: { + let wl = weight * stageRatio2; + ctx.beginPath(); + ctx.moveTo((point2.x - wl) * rat1 - lineWidth / 2, (point2.y - wl / 2) * rat1); + ctx.lineTo(point2.x * rat1 - lineWidth / 2, (point2.y - wl / 2) * rat1); + ctx.lineTo(point2.x * rat1 - lineWidth / 2, (point2.y + wl / 2) * rat1); + ctx.lineTo((point2.x - wl) * rat1 - lineWidth / 2, (point2.y + wl / 2) * rat1); + ctx.closePath(); + ctx.stroke(); + if (fillWeight > 0 || type == 31 || tempLine) { + if (fillWeight > 0) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + } + ctx.fill(); + } + break; + } + case 41: + case 4: { + let wl = weight * stageRatio2; + ctx.beginPath(); + ctx.moveTo(point2.x * rat1 - lineWidth, point2.y * rat1); + ctx.lineTo((point2.x - wl) * rat1 - lineWidth, (point2.y - wl / 2) * rat1); + ctx.lineTo((point2.x - 2 * wl) * rat1 - lineWidth, point2.y * rat1); + ctx.lineTo((point2.x - wl) * rat1 - lineWidth, (point2.y + wl / 2) * rat1); + ctx.lineTo(point2.x * rat1 - lineWidth, point2.y * rat1); + ctx.closePath(); + ctx.stroke(); + if (fillWeight > 0 || type == 41 || tempLine) { + if (fillWeight > 0) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + } + ctx.fill(); + } + break; + } + case 51: + case 5: { + let wl = weight * stageRatio2; + ctx.beginPath(); + ctx.moveTo(point2.x * rat1 - lineWidth, point2.y * rat1); + ctx.lineTo((point2.x - wl) * rat1 - lineWidth, (point2.y - wl / 2) * rat1); + ctx.lineTo((point2.x - wl) * rat1 - lineWidth, (point2.y + wl / 2) * rat1); + ctx.lineTo(point2.x * rat1 - lineWidth, point2.y * rat1); + ctx.closePath(); + ctx.stroke(); + if (fillWeight > 0 || type == 51 || tempLine) { + if (fillWeight > 0) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + } + ctx.fill(); + } + break; + } + case 61: + case 6: { + let wl = weight * stageRatio2 / 2; + ctx.beginPath(); + ctx.ellipse((point2.x - wl / 2) * rat1 - lineWidth / 2, point2.y * rat1, wl * rat1, wl * rat1, 0, 0.4 * Math.PI, Math.PI * 1.6); + ctx.stroke(); + if (fillWeight > 0 || type == 61 || tempLine) { + if (fillWeight > 0) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + } + ctx.fill(); + } + break; + } + } + ctx.restore(); + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + if (this.layer) { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", (_a3 = this.ddRender) == null ? void 0 : _a3.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [this.model], + null, + modeName, + (_b2 = this.ddRender) == null ? void 0 : _b2.model + ); + if (accessLink) { + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let stageRatio2 = this.stage.getStageRatio(); + ex = ex / stageRatio2; + ey = ey / stageRatio2; + let tpdata; + let weight = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight; + let halfWeigth = weight * 0.5; + for (let i2 = 0; i2 < this.opvs.length; i2++) { + let pv = this.opvs[i2]; + if (DDeiAbstractShape.isInsidePolygon( + [ + { x: pv.x - halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y + halfWeigth }, + { x: pv.x - halfWeigth, y: pv.y + halfWeigth } + ], + { x: ex, y: ey } + )) { + tpdata = { type: this.opvsType[i2], index: i2 }; + } + } + if (tpdata) { + let dragPoint = this.opvs[tpdata.index]; + let lineShadow = DDeiUtil$1.getShadowControl(this.model); + this.layer.shadowControls.push(lineShadow); + this.stageRender.currentOperateShape = lineShadow; + this.stageRender.currentOperateShape.dragPoint = dragPoint; + let dragObj = { + x: ex, + y: ey, + dragPoint, + model: lineShadow, + opvsIndex: tpdata.index, + passIndex: tpdata.type, + opvs: this.opvs + }; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_LINE_DRAG_BEFORE", DDeiEnumOperateType.DRAG, dragObj, (_c2 = this.stage) == null ? void 0 : _c2.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", DDeiEnumOperateType.LINK, null, (_d2 = this.stage) == null ? void 0 : _d2.ddInstance, evt); + (_g = (_f = (_e2 = this.stage) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.bus) == null ? void 0 : _g.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + (_j = (_i = (_h = this.stage) == null ? void 0 : _h.ddInstance) == null ? void 0 : _i.bus) == null ? void 0 : _j.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "grabbing" }, evt); + this.stageRender.operateState = DDeiEnumOperateState.LINE_POINT_CHANGING; + } + } + } + } + } + /** + * 绘制图形 + */ + mouseUp(evt) { + super.mouseUp(evt); + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + var _a3, _b2, _c2; + if (this.layer) { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", (_a3 = this.ddRender) == null ? void 0 : _a3.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [this.model], + null, + modeName, + (_b2 = this.ddRender) == null ? void 0 : _b2.model + ); + if (accessLink) { + this.layer.opLine = this.model; + let type = this.getCachedValue("type"); + let pvs2 = this.model.pvs; + let { startDX, startDY, endDX, endDY } = this.getPointShapeSize(); + let opvs = []; + let opvsType = []; + opvs.push(pvs2[0]); + opvsType.push(1); + switch (type) { + case 2: { + for (let i2 = 1; i2 < pvs2.length; i2++) { + let x2 = (pvs2[i2].x + pvs2[i2 - 1].x) / 2; + let y2 = (pvs2[i2].y + pvs2[i2 - 1].y) / 2; + opvs.push(new Vector3(x2, y2, 1)); + opvsType.push(3); + if (i2 != pvs2.length - 1) { + opvs.push(pvs2[i2]); + opvsType.push(2); + } + } + break; + } + case 3: { + if (pvs2.length >= 4) { + for (let i2 = 4; i2 <= pvs2.length; i2 += 3) { + let i0 = i2 - 4; + let i1 = i2 - 3; + let i22 = i2 - 2; + let i3 = i2 - 1; + if (i0 != 0) { + opvs.push(new Vector3(pvs2[i0].x, pvs2[i0].y, 1)); + opvsType.push(4); + } + let stratX = pvs2[i0].x; + let stratY = pvs2[i0].y; + let endX = pvs2[i3].x; + let endY = pvs2[i3].y; + if (i0 == 0) { + stratX = pvs2[i0].x + startDX; + stratY = pvs2[i0].y + startDY; + } + if (i2 == pvs2.length) { + endX = pvs2[i3].x + endDX; + endY = pvs2[i3].y + endDY; + } + let btx = stratX * DDeiUtil$1.p331t3 + DDeiUtil$1.p331t2t3 * pvs2[i1].x + DDeiUtil$1.p33t21t3 * pvs2[i22].x + DDeiUtil$1.p33t3 * endX; + let bty = stratY * DDeiUtil$1.p331t3 + DDeiUtil$1.p331t2t3 * pvs2[i1].y + DDeiUtil$1.p33t21t3 * pvs2[i22].y + DDeiUtil$1.p33t3 * endY; + opvs.push(new Vector3(btx, bty, 1)); + opvsType.push(4); + btx = stratX * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].x + DDeiUtil$1.p66t21t3 * pvs2[i22].x + DDeiUtil$1.p66t3 * endX; + bty = stratY * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].y + DDeiUtil$1.p66t21t3 * pvs2[i22].y + DDeiUtil$1.p66t3 * endY; + opvs.push(new Vector3(btx, bty, 1)); + opvsType.push(4); + } + } + break; + } + } + opvs.push(pvs2[pvs2.length - 1]); + opvsType.push(1); + this.opvs = opvs; + this.opvsType = opvsType; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let stageRatio2 = (_c2 = this.stage) == null ? void 0 : _c2.getStageRatio(); + ex = ex / stageRatio2; + ey = ey / stageRatio2; + let tpdata; + let weight = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight; + let halfWeigth = weight * 0.5; + for (let i2 = 0; i2 < this.opvs.length; i2++) { + let pv = this.opvs[i2]; + if (DDeiAbstractShape.isInsidePolygon( + [ + { x: pv.x - halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y - halfWeigth }, + { x: pv.x + halfWeigth, y: pv.y + halfWeigth }, + { x: pv.x - halfWeigth, y: pv.y + halfWeigth } + ], + { x: ex, y: ey } + )) { + tpdata = { type: this.opvsType[i2], index: i2 }; + } + } + if (tpdata) { + let direct = null; + if (tpdata.type == 3) { + let beforeP = this.opvs[tpdata.index - 1]; + let afterP = this.opvs[tpdata.index + 1]; + if (Math.abs(beforeP.x - afterP.x) <= 1) { + direct = 2; + } else { + direct = 1; + } + } + this.stage.ddInstance.bus.insert(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { type: "line", passIndex: tpdata.type, direct, opvsIndex: tpdata.index }, evt, 1); + } else { + this.stage.ddInstance.bus.insert(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { type: "line", passIndex: -1, opvsIndex: -1 }, evt, 1); + } + } + } + } + /** + * 绘制操作图形 + */ + drawOpShape() { + let canvas = this.tempCanvas; + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.stage.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let pvs2 = this.model.pvs; + let type = this.getCachedValue("type"); + let weight = this.getCachedValue("weight"); + let w10 = 1.3 * weight * ratio; + if (w10 > 5 * rat1) { + w10 = 5 * rat1; + } else if (w10 < 2 * rat1) { + w10 = 2 * rat1; + } + let w15 = 1.5 * w10; + let w20 = 2 * w10; + let w30 = 2 * w15; + let lineModel = this.model; + ctx.save(); + switch (type) { + case 1: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + break; + } + case 2: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + ctx.strokeStyle = "#017fff"; + ctx.fillStyle = "white"; + for (let i2 = 1; i2 < pvs2.length; i2++) { + if (i2 != pvs2.length - 1) { + ctx.save(); + let x1 = pvs2[i2].x * rat1; + let y1 = pvs2[i2].y * rat1; + if (lineModel.rotate) { + ctx.translate(x1, y1); + ctx.rotate(lineModel.rotate * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-x1, -y1); + } + ctx.fillRect(x1 - w15, y1 - w15, w30, w30); + ctx.strokeRect(x1 - w15, y1 - w15, w30, w30); + ctx.restore(); + } + ctx.save(); + let x2 = (pvs2[i2].x + pvs2[i2 - 1].x) / 2 * rat1; + let y2 = (pvs2[i2].y + pvs2[i2 - 1].y) / 2 * rat1; + ctx.translate(x2, y2); + ctx.rotate(((lineModel.rotate ? lineModel.rotate : 0) + 45) * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-x2, -y2); + ctx.fillRect(x2 - w10, y2 - w10, w20, w20); + ctx.strokeRect(x2 - w10, y2 - w10, w20, w20); + ctx.restore(); + } + break; + } + case 3: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + if (pvs2.length >= 4) { + ctx.strokeStyle = "#017fff"; + ctx.fillStyle = "white"; + for (let i2 = 1; i2 < this.opvs.length - 1; i2++) { + let pv = this.opvs[i2]; + ctx.beginPath(); + ctx.ellipse(pv.x * rat1, pv.y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + } + } + break; + } + } + ctx.restore(); + } + getOvPointByPos(x2 = 0, y2 = 0) { + var _a3, _b2; + if (x2 && y2 && ((_a3 = this.ovs) == null ? void 0 : _a3.length) > 0) { + for (let i2 = 0; i2 < ((_b2 = this.ovs) == null ? void 0 : _b2.length); i2++) { + let point2 = this.ovs[i2]; + if (Math.abs(x2 - point2.x) <= 8 && Math.abs(y2 - point2.y) <= 8) { + return point2; + } + } + } + return null; + } + /** + * 绘制开始和结束操作点 + */ + drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio) { + ctx.strokeStyle = "red"; + ctx.lineWidth = ratio; + ctx.fillStyle = "white"; + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = "red"; + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w10, w10, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w10, w10, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.stroke(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.stroke(); + } + }; + __publicField2(_DDeiLineCanvasRender, "ClsName", "DDeiLineCanvasRender"); + let DDeiLineCanvasRender = _DDeiLineCanvasRender; + const __vite_glob_1_4$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiLineCanvasRender, + default: DDeiLineCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiPolygonCanvasRender = class _DDeiPolygonCanvasRender2 extends DDeiAbstractShapeRender { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "textUsedArea", []); + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiPolygonCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 初始化 + */ + init() { + this.ddRender = this.model.stage.ddInstance.render; + this.stage = this.model.stage; + this.stageRender = this.model.stage.render; + if (this.model.layer) { + this.layer = this.model.layer; + this.layerRender = this.model.layer.render; + } + } + initImage() { + let that = this; + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "fill.image"); + if ((this.model.imgBase64 || bgImage) && !this.imgObj) { + let img = new Image(); + img.onload = function() { + that.imgObj = img; + that.upFillImage = bgImage; + that.clearCachedValue(); + that.ddRender.model.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + that.ddRender.model.bus.executeAll(); + }; + img.src = this.model.imgBase64 ? this.model.imgBase64 : bgImage; + } + } + createTempShape() { + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + if (!this.tempCanvas) { + this.tempCanvas = document.createElement("canvas"); + this.tempCanvas.setAttribute("style", "pointer-events:none;position:absolute;-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;scale:" + 1 / rat1); + } + let tempCanvas = this.tempCanvas; + let pvs2 = this.model.operatePVS ? this.model.operatePVS : this.model.pvs; + let outRect = DDeiAbstractShape.pvsToOutRect(pvs2, stageRatio2); + let weight = 5; + outRect.x -= weight; + outRect.x1 += weight; + outRect.y -= weight; + outRect.y1 += weight; + outRect.width += 2 * weight; + outRect.height += 2 * weight; + tempCanvas.style.width = outRect.width; + tempCanvas.style.height = outRect.height; + tempCanvas.setAttribute("width", outRect.width * rat1); + tempCanvas.setAttribute("height", outRect.height * rat1); + let tempCtx = tempCanvas.getContext("2d", { willReadFrequently: true }); + tempCanvas.tx = -outRect.x * rat1; + tempCanvas.ty = -outRect.y * rat1; + tempCanvas.outRect = outRect; + tempCtx.translate(tempCanvas.tx, tempCanvas.ty); + } + /** + * 绘制图形 + */ + drawShape(tempShape, composeRender = 0, inRect = null, zIndex = 0) { + if (!inRect || this.model.isInRect(inRect.x, inRect.y, inRect.x1, inRect.y1)) { + this.tempZIndex = zIndex; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + if (composeRender || rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model], tempShape, composeRender }, this.ddRender.model, null); + if (rsState1 == 0 || rsState1 == 1) { + if (!this.viewer) { + const isModelVisible = !DDeiUtil$1.isModelHidden(this.model); + const shouldRefresh = this.refreshShape || this.isEditoring; + if (isModelVisible && shouldRefresh) { + this.createAndPrepareShape(tempShape); + const rendList = this.getCachedRenderList(); + for (let ri = 0; ri < rendList.length; ri++) { + let c = rendList[ri]; + if (c == this.model) { + this.renderSelf(tempShape, composeRender); + } else { + this.renderCompose(c, tempShape, composeRender, ri); + } + } + if (!this.isEditoring) { + this.refreshShape = false; + } + } + this.drawSelfToCanvas(composeRender, isModelVisible && shouldRefresh); + } else { + this.renderWithViewer(tempShape, composeRender); + } + } + if (!composeRender) { + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + } + } + } else { + this.handleHiddenState(); + } + } + // 新增的辅助方法 + createAndPrepareShape(tempShape) { + this.createTempShape(); + this.calScaleType3Size(tempShape); + this.calPVSS(tempShape); + } + getCachedRenderList() { + var _a3; + if (!this._cachedRenderList) { + this._cachedRenderList = []; + if (((_a3 = this.model.composes) == null ? void 0 : _a3.length) > 0) { + this._cachedRenderList = this._cachedRenderList.concat(this.model.composes); + } + this._cachedRenderList.push(this.model); + this._cachedRenderList.sort((a, b) => (a.cIndex || 0) - (b.cIndex || 0)); + } + return this._cachedRenderList; + } + renderSelf(tempShape, composeRender) { + const canvas = this.getCanvas(); + const ctx = canvas.getContext("2d"); + ctx.save(); + this.createClip(tempShape); + this.drawFill(tempShape); + this.drawText(tempShape); + this.drawBorder(tempShape); + ctx.restore(); + } + renderCompose(c, tempShape, composeRender, index) { + if (tempShape && (tempShape == null ? void 0 : tempShape.drawCompose) == false) { + c.render.drawShape(null, composeRender + 1, null, this.tempZIndex + index); + } else { + c.render.drawShape(tempShape, composeRender + 1, null, this.tempZIndex + index); + } + } + renderWithViewer(tempShape, composeRender) { + if (!DDeiUtil$1.isModelHidden(this.model) && (this.refreshShape || this.isEditoring)) { + DDeiUtil$1.createRenderViewer(this.model, "VIEW", tempShape, composeRender); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } + handleHiddenState() { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", "VIEW-HIDDEN", { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + if (!this.viewer) { + this.removeViewerCanvas(); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } + } + /** + * 绘制自身到最外层canvas + */ + drawSelfToCanvas(composeRender, print) { + var _a3; + if (this.viewer) { + if (!DDeiUtil$1.isModelHidden(this.model) && this.refreshShape) { + DDeiUtil$1.createRenderViewer(this.model, "VIEW", null, composeRender); + } else { + DDeiUtil$1.createRenderViewer(this.model, "VIEW-HIDDEN"); + } + } else if (this.tempCanvas) { + let model = this.model; + if (!DDeiUtil$1.isModelHidden(this.model)) { + let stage2 = model.stage; + let ruleWeight = 0; + if (stage2.render.tempRuleDisplay == 1 || stage2.render.tempRuleDisplay == "1") { + ruleWeight = 15; + } + let stageRatio2 = this.model.getStageRatio(); + if (!this.tempCanvas.parentElement) { + let viewerEle = this.model.layer.render.containerViewer; + viewerEle.appendChild(this.tempCanvas); + } + this.tempCanvas.style.zIndex = this.tempZIndex; + this.tempCanvas.style.left = this.model.cpv.x * stageRatio2 + this.model.stage.wpv.x - this.tempCanvas.offsetWidth / 2 - ruleWeight + "px"; + this.tempCanvas.style.top = this.model.cpv.y * stageRatio2 + this.model.stage.wpv.y - this.tempCanvas.offsetHeight / 2 - ruleWeight + "px"; + let transform = ""; + if (this.model.mirrorX) { + transform += " rotateY(180deg)"; + } + if (this.model.mirrorY) { + transform += " rotateX(180deg)"; + } + this.tempCanvas.style.transform = transform; + if (!print) { + (_a3 = this.model.composes) == null ? void 0 : _a3.forEach((comp) => { + comp.render.drawSelfToCanvas(composeRender + 1); + }); + } + } else { + this.removeViewerCanvas(); + } + } + } + getRenderCanvas(composeRender) { + var _a3; + if (composeRender) { + return this.model.pModel.render.getCanvas(); + } else if (this.model.pModel.baseModelType == "DDeiContainer") { + return this.model.pModel.render.getCanvas(); + } else { + return (_a3 = this.ddRender) == null ? void 0 : _a3.getCanvas(); + } + } + getCanvas() { + if (this.tempCanvas) { + return this.tempCanvas; + } else { + return this.getRenderCanvas(); + } + } + /** + * 创建剪切区 + * @param tempShape + */ + createClip(tempShape) { + var _a3, _b2, _c2, _d2, _e2; + let i2 = 0; + let createClip = false; + for (; i2 < this.borderPVSS.length; i2++) { + if (this.borderPVSS[i2][0].clip == 1) { + createClip = true; + break; + } + } + if (createClip) { + let type = ((_a3 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _a3.type) || ((_b2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _b2.type) == 0 ? (_c2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _c2.type : this.getCachedValue("border.type"); + let width = ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.width) ? (_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.width : this.getCachedValue("border.width"); + let pvs2 = this.borderPVSS[i2]; + if ((type == 1 || type == "1") && width > 0) { + let stageRatio2 = this.model.getStageRatio(); + width *= stageRatio2; + let rat1 = this.ddRender.ratio; + if (pvs2.length == 1) { + pvs2 = cloneDeep(pvs2); + pvs2[0].r = pvs2[0].r * (1 + rat1 * width / this.model.width); + } else { + pvs2 = DDeiUtil$1.pointsToZero(pvs2, this.model.cpv, this.model.rotate); + pvs2 = DDeiUtil$1.zeroToPoints(pvs2, this.model.cpv, this.model.rotate, 1 + rat1 * width / this.model.width, 1 + rat1 * width / this.model.height); + } + } + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + this.createPath(pvs2, tempShape); + ctx.clip(); + } + } + /** + * 生成边框的区域向量 + */ + getBorderPVS(pvs2, tempShape) { + var _a3, _b2, _c2, _d2, _e2; + let stageRatio2 = this.model.getStageRatio(); + let round = ((_a3 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _a3.round) ? (_b2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _b2.round : this.getCachedValue("border.round"); + ((_c2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _c2.type) || ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.type) == 0 ? (_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.type : this.getCachedValue("border.type"); + if (!round) { + round = 0; + } + let borderPVS = []; + for (let s = 0; s < pvs2.length; s++) { + borderPVS[s] = clone(pvs2[s]); + } + for (let i2 = 1; i2 < borderPVS.length + 1; i2++) { + let rd = round; + let s = i2; + let e = s + 1; + let upI = s - 1; + if (s == borderPVS.length - 1) { + e = 0; + } else if (s == borderPVS.length) { + s = 0; + e = 1; + upI = borderPVS.length - 1; + } + if (borderPVS[s].rd || borderPVS[s].rd == 0) { + rd = borderPVS[s].rd; + } + if (rd && (borderPVS[s].stroke || borderPVS[s].fill)) { + let usx = borderPVS[upI].x; + let usy = borderPVS[upI].y; + let sx = borderPVS[s].x; + let sy = borderPVS[s].y; + let ex = borderPVS[e].x; + let ey = borderPVS[e].y; + let lineRadius = DDeiUtil$1.getLinesAngle(usx, usy, sx, sy, sx, sy, ex, ey, true) / 2; + let lineBCDistance = DDeiUtil$1.getPointDistance(sx, sy, ex, ey); + let lineABDistance = DDeiUtil$1.getPointDistance(usx, usy, sx, sy); + let tanRadis = Math.tan(lineRadius); + let maxR = Math.abs(tanRadis * lineBCDistance); + rd = Math.min(maxR, rd, lineBCDistance / 2, lineABDistance / 2); + rd *= stageRatio2; + let lineBC1Distance = Math.abs(rd / tanRadis); + let distLength = Math.min(lineBCDistance / 2, lineABDistance / 2, lineBC1Distance); + let bc1pv = DDeiUtil$1.getPathPoint(sx, sy, ex, ey, 1, distLength, -1, lineBCDistance); + borderPVS[s].roundDistLength = distLength; + borderPVS[s].roundVal = rd; + borderPVS[s].roundPV = bc1pv; + } + } + return borderPVS; + } + /** + * 取得边框的绘制区域 + */ + getBorderRatPos() { + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let absBounds = this.model.getAbsBounds(); + return DDeiUtil$1.getRatioPosition(absBounds, ratio); + } + /** + * 对pvs按group进行拆分, + */ + calPVSS(tempShape) { + let pvss = []; + let curPVS = null; + let curGroup = -1; + let len1 = this.model.pvs.length; + for (let i2 = 0; i2 < len1; i2++) { + if (curGroup != this.model.pvs[i2].group) { + curGroup = this.model.pvs[i2].group; + curPVS = []; + pvss.push(curPVS); + } + curPVS == null ? void 0 : curPVS.push(this.model.pvs[i2]); + } + let borderPVSS = []; + pvss.forEach((pvs2) => { + if (pvs2.length > 2) { + let borderPVS = this.getBorderPVS(pvs2, tempShape); + borderPVSS.push(borderPVS); + } else { + borderPVSS.push(pvs2); + } + }); + this.pvss = pvss; + this.borderPVSS = borderPVSS; + } + /** + * 创建路径 + */ + createPath(pvs2, tempShape, drawLine = false) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m; + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let type = ((_a3 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _a3.type) || ((_b2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _b2.type) == 0 ? (_c2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _c2.type : this.getCachedValue("border.type"); + let color = ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.color) ? (_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.color : this.getCachedValue("border.color"); + if (!color) { + color = DDeiUtil$1.getStyleValue("canvas-control-border", this.ddRender.model); + } + let opacity = ((_f = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _f.opacity) ? (_g = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _g.opacity : this.getCachedValue("border.opacity"); + let width = ((_h = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _h.width) ? (_i = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _i.width : this.getCachedValue("border.width"); + let dash = ((_j = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _j.dash) ? (_k = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _k.dash : this.getCachedValue("border.dash"); + let lineWidth = width * ratio; + drawLine = drawLine && ((type == 1 || type == "1") && (!opacity || opacity > 0) && width > 0); + ((_l = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _l.round) ? (_m = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _m.round : this.getCachedValue("border.round"); + if (!pvs2 || (pvs2 == null ? void 0 : pvs2.length) < 1) { + return; + } + let rest = false; + if (drawLine) { + ctx.save(); + ctx.lineWidth = lineWidth; + if (dash) { + ctx.setLineDash(dash); + } + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.strokeStyle = DDeiUtil$1.getColor(color); + if (pvs2[0].strokeClear) { + ctx.globalCompositeOperation = "destination-out"; + } + } + if ((pvs2 == null ? void 0 : pvs2.length) > 2) { + let len = pvs2.length; + if (pvs2[0].begin) { + ctx.beginPath(); + } + if (!pvs2[0].roundPV) { + ctx.moveTo(pvs2[0].x * rat1, pvs2[0].y * rat1); + } else { + ctx.moveTo(pvs2[0].roundPV.x * rat1, pvs2[0].roundPV.y * rat1); + } + for (let i2 = 1; i2 < len; i2++) { + let pv = pvs2[i2]; + let s = i2; + let e = i2 + 1; + if (i2 == len - 1) { + e = 0; + } + let dx = pv.dx ? pv.dx : 0; + let dy = pv.dy ? pv.dy : 0; + if (pv.begin) { + ctx.beginPath(); + } + if (pv.move) { + ctx.moveTo(pv.x * rat1, pv.y * rat1); + } + if (pv.type == 3 || drawLine && !pv.stroke) { + ctx.moveTo(pv.x * rat1, pv.y * rat1); + } else if (pv.type == 2 || pv.type == 4) { + let rotate2 = this.model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let bpv2 = DDeiUtil$1.pointsToZero([this.model.bpv], this.model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + let upPV = pvs2[i2 - 1]; + let wr = upPV.r; + let hr = upPV.r; + if (pv.type == 4) { + wr = pvs2[i2 + 1].r; + hr = pvs2[i2 + 2].r; + i2 = i2 + 2; + } + ctx.ellipse((this.model.cpv.x + dx) * rat1, (this.model.cpv.y + dy) * rat1, wr * rat1 * scaleX2, hr * rat1 * scaleY2, DDeiConfig$1.ROTATE_UNIT * rotate2, upPV.rad, pv.rad, !pv.direct); + } else if (pv.type == 5) { + let i1 = i2 + 1; + let i22 = i2 + 2; + let i3 = i2 + 3; + i2 = i2 + 3; + ctx.bezierCurveTo(pvs2[i1].x * rat1, pvs2[i1].y * rat1, pvs2[i22].x * rat1, pvs2[i22].y * rat1, pvs2[i3].x * rat1, pvs2[i3].y * rat1); + } else { + let sx = pvs2[s].x * rat1; + let sy = pvs2[s].y * rat1; + if (!pvs2[s].roundVal) { + let ex = pvs2[e].x * rat1; + let ey = pvs2[e].y * rat1; + ctx.lineTo(sx, sy, ex, ey); + } else { + let rd = pvs2[s].roundVal; + let ex = pvs2[s].roundPV.x * rat1; + let ey = pvs2[s].roundPV.y * rat1; + ctx.arcTo(sx, sy, ex, ey, rd); + } + } + if (i2 == len - 1 && pvs2[0].roundVal) { + let rd = pvs2[0].roundVal; + let ex = pvs2[0].roundPV.x * rat1; + let ey = pvs2[0].roundPV.y * rat1; + ctx.arcTo(pvs2[0].x * rat1, pvs2[0].y * rat1, ex, ey, rd); + } + if (pv.end) { + ctx.closePath(); + } + if ((drawLine || pv.forceStroke) && pv.stroke) { + if (pv.forceStroke) { + ctx.strokeStyle = DDeiUtil$1.getColor(color); + } + rest = true; + ctx.stroke(); + } + } + } else if (pvs2.length == 1) { + let pv = pvs2[0]; + if (pv.begin) { + ctx.beginPath(); + } + let rotate2 = this.model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let bpv2 = DDeiUtil$1.pointsToZero([this.model.bpv], this.model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + let x2 = pv.cx || pv.cx == 0 ? this.model.cpv.x + pv.cx : this.model.cpv.x; + let y2 = pv.cy || pv.cy == 0 ? this.model.cpv.y + pv.cy : this.model.cpv.y; + ctx.ellipse(x2 * rat1, y2 * rat1, pv.r * rat1 * scaleX2, pv.r * rat1 * scaleY2, DDeiConfig$1.ROTATE_UNIT * rotate2, DDeiConfig$1.ROTATE_UNIT * 0, Math.PI * 2); + if (pv.end) { + ctx.closePath(); + } + if (drawLine && pv.stroke) { + ctx.stroke(); + } + } else if (pvs2.length == 2) { + if (pvs2[0].begin) { + ctx.beginPath(); + } + if (pvs2[1].type == 1) { + ctx.moveTo(pvs2[0].x * rat1, pvs2[0].y * rat1); + ctx.lineTo(pvs2[1].x * rat1, pvs2[1].y * rat1); + } else { + let rotate2 = this.model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let bpv2 = DDeiUtil$1.pointsToZero([this.model.bpv], this.model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + ctx.moveTo(this.model.cpv.x * rat1, this.model.cpv.y * rat1); + ctx.lineTo(pvs2[0].x * rat1, pvs2[0].y * rat1); + ctx.ellipse(this.model.cpv.x * rat1, this.model.cpv.y * rat1, pvs2[0].r * rat1 * scaleX2, pvs2[0].r * rat1 * scaleY2, DDeiConfig$1.ROTATE_UNIT * rotate2, pvs2[0].rad, pvs2[1].rad, !pvs2[1].direct); + ctx.lineTo(pvs2[1].x * rat1, pvs2[1].y * rat1); + } + if (pvs2[1].end) { + ctx.closePath(); + } + if (drawLine && pvs2[1].stroke) { + ctx.stroke(); + } + } + if (drawLine || rest) { + ctx.restore(); + } + } + /** + * 绘制边框 + * @param tempShape 临时图形,优先级最高 + */ + drawBorder(tempShape) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + ((_a3 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _a3.type) || ((_b2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _b2.type) == 0 ? (_c2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _c2.type : this.getCachedValue("border.type"); + ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.opacity) || ((_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.opacity) == 0 ? (_f = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _f.opacity : this.getCachedValue("border.opacity"); + ((_g = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _g.width) || ((_h = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _h.width) == 0 ? (_i = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _i.width : this.getCachedValue("border.width"); + for (let i2 = 0; i2 < ((_j = this.borderPVSS) == null ? void 0 : _j.length); i2++) { + let pvs2 = this.borderPVSS[i2]; + this.createPath(pvs2, tempShape, true); + } + } + /** + * 绘制边框以及Compose的边框 + * @param tempShape 临时图形,优先级最高 + */ + drawBorderAndComposesBorder(tempShape, drawCompose = true) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model], tempShape, composeRender: drawCompose }, this.ddRender.model, null); + if (rsState1 == 0 || rsState1 == 1) { + let rendList = DDeiUtil$1.sortRendList(this.model); + this.createTempShape(); + rendList.forEach((c) => { + if (c == this.model) { + this.drawBorder(tempShape); + } else if (drawCompose) { + c.render.drawBorder(tempShape, true); + c.render.drawSelfToCanvas(1); + } + }); + this.drawSelfToCanvas(0); + } + } + /** + * 填充图片 + */ + drawImage() { + var _a3; + let bgImage = DDeiUtil$1.getReplacibleValue(this.model, "fill.image"); + if (!this.imgObj || bgImage != this.upFillImage) { + this.initImage(); + } else { + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.oldRatio ? this.ddRender.oldRatio : this.ddRender.ratio; + let fillRect = this.model.essBounds; + ctx.save(); + let imgFillInfo = this.getCachedValue("fill.opacity"); + if (imgFillInfo) { + ctx.globalAlpha = imgFillInfo; + } + let lineOffset = 0; + ctx.translate(this.model.cpv.x * rat1, this.model.cpv.y * rat1); + ctx.rotate(this.model.rotate * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-this.model.cpv.x * rat1, -this.model.cpv.y * rat1); + ctx.imageSmoothingQuality = "high"; + let ratio = rat1 * ((_a3 = this.stage) == null ? void 0 : _a3.getStageRatio()); + ctx.drawImage(this.imgObj, 0, 0, this.imgObj.width, this.imgObj.height, (this.model.cpv.x - fillRect.width / 2) * ratio + lineOffset, (this.model.cpv.y - fillRect.height / 2) * ratio + lineOffset, fillRect.width * ratio, fillRect.height * ratio); + ctx.restore(); + } + } + /** + * 绘制填充 + */ + drawFill(tempShape) { + var _a3, _b2, _c2, _d2, _e2; + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + let fillColor = ((_a3 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _a3.color) ? tempShape.fill.color : this.getCachedValue("fill.color"); + if (!fillColor) { + fillColor = DDeiUtil$1.getStyleValue("canvas-control-background", this.ddRender.model); + } + let fillOpacity = ((_b2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _b2.opacity) ? tempShape.fill.opacity : this.getCachedValue("fill.opacity"); + let fillType = ((_c2 = tempShape == null ? void 0 : tempShape.fill) == null ? void 0 : _c2.type) ? tempShape.fill.type : this.getCachedValue("fill.type"); + ctx.save(); + let haveFilled = false; + for (let i2 = 0; i2 < this.borderPVSS.length; i2++) { + if (this.borderPVSS[i2][0].fill == 1) { + let hasOpacity = false; + haveFilled = true; + let pvs2 = this.borderPVSS[i2]; + if (pvs2[0].fillColor) { + if (pvs2[0].fillColor == "none") { + ctx.save(); + hasOpacity = true; + ctx.globalCompositeOperation = "destination-out"; + fillColor = DDeiUtil$1.getColor("black"); + } else if (pvs2[0].fillColor == "border") { + fillColor = ((_d2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _d2.color) ? (_e2 = tempShape == null ? void 0 : tempShape.border) == null ? void 0 : _e2.color : this.getCachedValue("border.color"); + if (!fillColor) { + fillColor = DDeiUtil$1.getStyleValue("canvas-control-border", this.ddRender.model); + } + } else { + fillColor = DDeiUtil$1.getColor(pvs2[0].fillColor); + } + } + this.createPath(pvs2, tempShape); + if (this.isEditoring) { + if (!fillType || fillType == "0") { + fillType = 1; + } + } + if (fillType == 1) { + if (this.isEditoring) { + fillOpacity = 1; + } + if (fillColor && (!fillOpacity || fillOpacity > 0)) { + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + if (fillOpacity != null && !fillOpacity != void 0) { + ctx.globalAlpha = fillOpacity; + } + if (pvs2[0].fillClear) { + ctx.globalCompositeOperation = "destination-out"; + } + ctx.fill(); + } + } else if (fillType == 2) { + this.drawImage(); + } + if (hasOpacity) { + ctx.restore(); + } + } + } + if (!haveFilled && this.isEditoring) { + let pvs2 = this.model.textArea; + this.createPath(pvs2, tempShape); + ctx.globalAlpha = 1; + if (!fillColor) { + fillColor = "white"; + } + ctx.fillStyle = DDeiUtil$1.getColor(fillColor); + ctx.fill(); + } + ctx.restore(); + } + /** + * 绘制文本 + */ + drawText(tempShape) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L; + let align = this.getCachedValue("textStyle.align"); + let valign = this.getCachedValue("textStyle.valign"); + let scale = this.getCachedValue("textStyle.scale"); + let feed = this.getCachedValue("textStyle.feed"); + let hspace = this.getCachedValue("textStyle.hspace"); + let vspace = this.getCachedValue("textStyle.vspace"); + let fiFamily = this.getCachedValue("font.family"); + let fiSize = this.getCachedValue("font.size"); + let fiColor = this.getCachedValue("font.color"); + if (!fiColor) { + fiColor = DDeiUtil$1.getStyleValue("canvas-control-title", this.ddRender.model); + } + let hollow = this.getCachedValue("textStyle.hollow"); + let bold = this.getCachedValue("textStyle.bold"); + let italic = this.getCachedValue("textStyle.italic"); + let underline = this.getCachedValue("textStyle.underline"); + let deleteline = this.getCachedValue("textStyle.deleteline"); + let topline = this.getCachedValue("textStyle.topline"); + let textBgColor = this.getCachedValue("textStyle.bgcolor"); + if (!this.model.textArea || this.model.textArea.length < 4) { + return; + } + let fillRect = this.tempFillRect; + if (!fillRect || fillRect.width == -Infinity || fillRect == -Infinity) { + return; + } + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let ratPos = DDeiUtil$1.getRatioPosition(fillRect, rat1); + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + let editorText = null; + if (this.isEditoring) { + editorText = DDeiUtil$1.getEditorText(); + } + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + this.stageRender.editorShadowControl.tempCursorStart = curSIdx; + this.stageRender.editorShadowControl.tempCursorEnd = curEIdx; + } + if (!hspace) { + hspace = 0; + } + if (!vspace) { + vspace = 0; + } + hspace = hspace * ratio; + vspace = vspace * ratio; + ctx.save(); + ctx.translate(this.model.cpv.x * rat1, this.model.cpv.y * rat1); + ctx.rotate(this.model.rotate * DDeiConfig$1.ROTATE_UNIT); + let textContainer = []; + let loop2 = true; + let fontSize = fiSize; + let cText = null; + let sptStyle = null; + if (this.isEditoring) { + sptStyle = this.model.sptStyle; + cText = this.getCachedValue("text"); + } else { + cText = DDeiUtil$1.getReplacibleValue(this.model, "text", true, true); + sptStyle = this.tempSptStyle ? this.tempSptStyle : (tempShape == null ? void 0 : tempShape.sptStyle) ? tempShape.sptStyle : this.model.sptStyle; + } + if (!cText) { + cText = ""; + } + let contentWidth = ratPos.width; + let subtractionFontSize = 0; + let isOutSize = false; + let dotRect = null; + if (scale == 3) { + textContainer = this.tempTextContainer; + } else { + while (loop2) { + let usedWidth = 0; + let usedHeight = 0; + let textRowContainer = { text: "", widths: [], heights: [], dHeights: [] }; + textContainer.push(textRowContainer); + isOutSize = false; + let maxFontSize = 0; + if (fontSize + vspace > ratPos.height) { + if (scale == 1) { + textContainer = []; + let ds = fontSize < 50 ? 0.5 : Math.floor(fontSize / 50); + fontSize -= ds; + vspace -= ds; + if (vspace < 0) { + vspace = 0; + } + continue; + } + } + let baseFont = fontSize + "px " + fiFamily; + if (bold == "1") { + baseFont = "bold " + baseFont; + } + if (italic == "1") { + baseFont = "italic " + baseFont; + } + let rcIndex = 0; + let lastUnSubTypeFontSize2 = 0; + for (let ti = 0; ti < cText.length; ti++, rcIndex++) { + let te = cText[ti]; + let font = null; + let fontHeight = null; + let isEnter = false; + let fontShapeRect = null; + if ((feed == 1 || feed == "1") && te == "\n") { + isEnter = true; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = 0; + textRowContainer.heights[rcIndex] = 0; + textRowContainer.width = Math.max(0, usedWidth); + textRowContainer.height = Math.max(0, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize2 ? lastUnSubTypeFontSize2 * ratio + vspace : fontSize * ratio + vspace); + } else { + if (sptStyle[ti]) { + let ftsize = ((_b2 = (_a3 = sptStyle[ti]) == null ? void 0 : _a3.font) == null ? void 0 : _b2.size) ? ((_d2 = (_c2 = sptStyle[ti]) == null ? void 0 : _c2.font) == null ? void 0 : _d2.size) - subtractionFontSize : fontSize; + if ((_e2 = sptStyle[ti].textStyle) == null ? void 0 : _e2.subtype) { + if (!lastUnSubTypeFontSize2) { + lastUnSubTypeFontSize2 = ftsize; + } + ftsize = lastUnSubTypeFontSize2 / 2; + } else if (ftsize < 1) { + ftsize = 2; + } + let ftfamily = ((_g = (_f = sptStyle[ti]) == null ? void 0 : _f.font) == null ? void 0 : _g.family) ? (_i = (_h = sptStyle[ti]) == null ? void 0 : _h.font) == null ? void 0 : _i.family : fiFamily; + font = ftsize + "px " + ftfamily; + if (((_k = (_j = sptStyle[ti]) == null ? void 0 : _j.textStyle) == null ? void 0 : _k.bold) == "1") { + font = "bold " + font; + } + if (((_m = (_l = sptStyle[ti]) == null ? void 0 : _l.textStyle) == null ? void 0 : _m.italic) == "1") { + font = "italic " + font; + } + fontHeight = ftsize; + } + if (!font) { + font = baseFont; + fontHeight = fontSize; + } + if (!((_o = (_n = sptStyle[ti]) == null ? void 0 : _n.textStyle) == null ? void 0 : _o.subtype)) { + lastUnSubTypeFontSize2 = fontHeight; + } + maxFontSize = Math.max(maxFontSize, fontHeight); + let rc1 = DDeiUtil$1.measureText(te, font, ctx, fontHeight); + if (!dotRect) { + dotRect = DDeiUtil$1.measureText("...", font, ctx, fontHeight); + } + fontShapeRect = { width: rc1.width * ratio + hspace, height: rc1.height * ratio, dHeight: rc1.dHeight * ratio }; + usedWidth += fontShapeRect.width; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontShapeRect.height + vspace; + textRowContainer.dHeights[rcIndex] = fontShapeRect.dHeight; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontShapeRect.height + vspace, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize2 ? lastUnSubTypeFontSize2 * ratio + vspace : fontSize * ratio + vspace); + } + if (feed == 0) { + if (usedWidth > contentWidth) { + if (scale == 1 || scale == 2) { + isOutSize = true; + break; + } + } + } else if (feed == 1 || feed == "1") { + if (isEnter) { + usedWidth = 0; + usedHeight += textRowContainer.height; + if (usedHeight + textRowContainer.height > ratPos.height) { + if (scale == 1 || scale == 2) { + isOutSize = true; + break; + } + break; + } + rcIndex = -1; + let lastRowHeight = textRowContainer.height; + textRowContainer = { text: "", widths: [], heights: [], dHeights: [] }; + textRowContainer.width = usedWidth; + textRowContainer.height = lastRowHeight; + textContainer.push(textRowContainer); + } else if (usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + textRowContainer.width -= fontShapeRect.width; + textRowContainer.widths.splice(rcIndex, 1); + textRowContainer.heights.splice(rcIndex, 1); + usedWidth = fontShapeRect.width; + usedHeight += textRowContainer.height; + if (usedHeight + textRowContainer.height > ratPos.height) { + if (scale == 1 || scale == 2) { + isOutSize = true; + break; + } + break; + } + rcIndex = 0; + textRowContainer = { text: te, widths: [], heights: [], dHeights: [] }; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontShapeRect.height + vspace; + textRowContainer.dHeights[rcIndex] = fontShapeRect.dHeight; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontShapeRect.height + vspace, lastUnSubTypeFontSize2 * ratio + vspace); + textContainer.push(textRowContainer); + } + } + } + if (!isOutSize) { + loop2 = false; + } else if (scale == 1) { + textContainer = []; + let ds = maxFontSize < 50 ? 0.5 : Math.floor(maxFontSize / 50); + fontSize -= ds; + vspace -= ds; + if (vspace < 0) { + vspace = 0; + } + subtractionFontSize += ds; + } else { + loop2 = false; + } + } + if (isOutSize) { + if (scale == 2) { + if (textContainer.length > 0) { + let lastText = textContainer[textContainer.length - 1].text; + let widths = textContainer[textContainer.length - 1].widths; + let heights = textContainer[textContainer.length - 1].heights; + let dHeights = textContainer[textContainer.length - 1].dHeights; + let dotWidth = dotRect.width / 3; + if (lastText.length > 0) { + textContainer[textContainer.length - 1].width = textContainer[textContainer.length - 1].width - widths[widths.length - 1] + dotRect.width; + lastText = lastText.substring(0, lastText.length - 1); + widths.splice(widths.length - 1, 1, dotWidth, dotWidth, dotWidth); + heights.splice(heights.length - 1, 1, heights[heights.length - 1], heights[heights.length - 1], heights[heights.length - 1]); + dHeights.splice(dHeights.length - 1, 1, dHeights[dHeights.length - 1], dHeights[dHeights.length - 1], dHeights[dHeights.length - 1]); + lastText += "..."; + textContainer[textContainer.length - 1].text = lastText; + } + } + } + } + } + let containerRect = { width: 0, height: 0 }; + for (let i2 = 0; i2 < textContainer.length; i2++) { + if (i2 == 0) { + containerRect.width += textContainer[i2].width; + } + containerRect.height += textContainer[i2].height; + } + let containerWidth = containerRect.width; + let containerHeight = containerRect.height; + let x2, y2; + if (align == 1) { + x2 = 0; + } else if (align == 2) { + x2 = (ratPos.width - containerWidth) * 0.5; + } else if (align == 3) { + x2 = ratPos.width - containerWidth; + } + x2 = x2 + ratPos.x; + if (valign == 1) { + y2 = 0; + } else if (valign == 2) { + y2 = (ratPos.height - containerHeight) * 0.5; + } else if (valign == 3) { + y2 = ratPos.height - containerHeight; + } + y2 = y2 + ratPos.y; + let cursorX = -Infinity; + let cursorY = -Infinity; + let cursorHeight = 0; + let tempIdx = 0; + let usedY = 0, usedX = 0; + let lastUsedX, lastUsedY, lastWidth, lastHeight; + let lastUnSubTypeFontSize = 0; + if (textContainer.length > 0) { + textContainer[0].textPosCache = []; + } + for (let tci = 0; tci < textContainer.length; tci++) { + lastUsedX = 0; + let rRect = textContainer[tci]; + let x1, y1; + if (align == 1) { + x1 = x2; + y1 = y2 + usedY; + } else if (align == 2) { + x1 = ratPos.x + (ratPos.width - rRect.width) * 0.5; + y1 = y2 + usedY; + } else if (align == 3) { + x1 = ratPos.x + (ratPos.width - rRect.width); + y1 = y2 + usedY; + } + textContainer[tci].x = x1; + textContainer[tci].y = y1; + usedX = x1; + for (let tj = 0; tj < textContainer[tci].text.length; tj++, tempIdx++) { + let width = textContainer[tci].widths[tj]; + let height = textContainer[tci].heights[tj]; + lastWidth = width; + lastHeight = height; + ctx.save(); + let font = fontSize * ratio + "px " + fiFamily; + if (bold == "1") { + font = "bold " + font; + } + if (italic == "1") { + font = "italic " + font; + } + let tHollow = hollow; + let tUnderline = underline; + let tDeleteline = deleteline; + let tTopline = topline; + let tFontColor = fiColor; + let tBgColor = textBgColor; + let ftsize = fontSize * ratio; + let subScriptOffY = 0; + if (sptStyle[tempIdx]) { + tBgColor = ((_p = sptStyle[tempIdx].textStyle) == null ? void 0 : _p.bgcolor) ? sptStyle[tempIdx].textStyle.bgcolor : textBgColor; + ftsize = ((_q = sptStyle[tempIdx].font) == null ? void 0 : _q.size) ? ((_r = sptStyle[tempIdx].font) == null ? void 0 : _r.size) - subtractionFontSize : fontSize; + ftsize *= ratio; + if ((_s = sptStyle[tempIdx].textStyle) == null ? void 0 : _s.subtype) { + if (!lastUnSubTypeFontSize) { + lastUnSubTypeFontSize = ftsize; + } + ftsize = lastUnSubTypeFontSize / 2; + switch ((_t = sptStyle[tempIdx].textStyle) == null ? void 0 : _t.subtype) { + case 1: + subScriptOffY = -(lastUnSubTypeFontSize - ftsize); + break; + case 2: + subScriptOffY = -(lastUnSubTypeFontSize - ftsize) / 2; + break; + } + } else if (ftsize < 1) { + ftsize = 2 * ratio; + } + let ftfamily = ((_u = sptStyle[tempIdx].font) == null ? void 0 : _u.family) ? (_v = sptStyle[tempIdx].font) == null ? void 0 : _v.family : fiFamily; + font = ftsize + "px " + ftfamily; + if (((_x = (_w = sptStyle[tempIdx]) == null ? void 0 : _w.textStyle) == null ? void 0 : _x.bold) == "1") { + font = "bold " + font; + } + if (((_z = (_y = sptStyle[tempIdx]) == null ? void 0 : _y.textStyle) == null ? void 0 : _z.italic) == "1") { + font = "italic " + font; + } + tHollow = ((_B = (_A = sptStyle[tempIdx]) == null ? void 0 : _A.textStyle) == null ? void 0 : _B.hollow) == "1" ? "1" : tHollow; + tUnderline = ((_D = (_C = sptStyle[tempIdx]) == null ? void 0 : _C.textStyle) == null ? void 0 : _D.underline) == "1" ? "1" : tUnderline; + tDeleteline = ((_F = (_E = sptStyle[tempIdx]) == null ? void 0 : _E.textStyle) == null ? void 0 : _F.deleteline) == "1" ? "1" : tDeleteline; + tTopline = ((_H = (_G = sptStyle[tempIdx]) == null ? void 0 : _G.textStyle) == null ? void 0 : _H.topline) == "1" ? "1" : tTopline; + tFontColor = ((_J = (_I = sptStyle[tempIdx]) == null ? void 0 : _I.font) == null ? void 0 : _J.color) ? sptStyle[tempIdx].font.color : tFontColor; + } + if (!((_L = (_K = sptStyle[tempIdx]) == null ? void 0 : _K.textStyle) == null ? void 0 : _L.subtype)) { + lastUnSubTypeFontSize = ftsize; + } + if (!textContainer[tci].tHollow) { + textContainer[tci].tHollow = []; + textContainer[tci].tUnderline = []; + textContainer[tci].tDeleteline = []; + textContainer[tci].tTopline = []; + textContainer[tci].tFontColor = []; + textContainer[tci].font = []; + textContainer[tci].subScriptOffY = []; + } + textContainer[tci].tHollow[tj] = tHollow; + textContainer[tci].tUnderline[tj] = tUnderline; + textContainer[tci].tDeleteline[tj] = tDeleteline; + textContainer[tci].tTopline[tj] = tTopline; + textContainer[tci].tFontColor[tj] = tFontColor; + textContainer[tci].font[tj] = font; + textContainer[tci].subScriptOffY[tj] = subScriptOffY; + let ofY = rRect.height - height + subScriptOffY; + if (tempIdx >= curSIdx && tempIdx < curEIdx) { + ctx.save(); + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-text-selection", this.ddRender.model); + ctx.globalAlpha = 1; + ctx.fillRect(usedX - 0.5, y1 + ofY, width + 1, height); + ctx.restore(); + } else if (tBgColor) { + ctx.save(); + ctx.fillStyle = DDeiUtil$1.getColor(tBgColor); + ctx.fillRect(usedX - 0.5, y1 + ofY, width + 1, height); + ctx.restore(); + } + if (curSIdx == curEIdx && tempIdx == curEIdx) { + cursorX = usedX; + cursorHeight = tj > 1 ? textContainer[tci].heights[tj - 1] : height; + ofY = rRect.height - cursorHeight + (tj > 1 ? textContainer[tci].subScriptOffY[tj - 1] : subScriptOffY); + cursorY = y1 + ofY; + } + ctx.fillStyle = tFontColor; + ctx.font = font; + lastUsedY = y1 + ofY; + lastUsedX = usedX; + usedX += width; + ctx.restore(); + } + usedX = x1; + for (let tj = 0; tj < textContainer[tci].text.length; tj++) { + let outputText = textContainer[tci].text[tj]; + let width = textContainer[tci].widths[tj]; + let height = textContainer[tci].heights[tj]; + ctx.save(); + let tHollow = textContainer[tci].tHollow[tj]; + let tUnderline = textContainer[tci].tUnderline[tj]; + let tDeleteline = textContainer[tci].tDeleteline[tj]; + let tTopline = textContainer[tci].tTopline[tj]; + let tFontColor = textContainer[tci].tFontColor[tj]; + let font = textContainer[tci].font[tj]; + let subScriptOffY = textContainer[tci].subScriptOffY[tj]; + let dfh = textContainer[tci].dHeights[tj]; + let ofY = rRect.height - height + subScriptOffY + dfh; + ctx.fillStyle = tFontColor; + ctx.font = font; + if (tHollow == "1") { + ctx.strokeStyle = tFontColor; + ctx.strokeText(outputText, usedX, y1 + ofY); + } else { + ctx.fillText(outputText, usedX, y1 + ofY); + } + if (curSIdx != -1 && curEIdx != -1) { + textContainer[0].textPosCache.push({ x: usedX, y: y1 + ofY }); + } + if (tUnderline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY + height); + ctx.lineTo(usedX + width, y1 + ofY + height); + ctx.closePath(); + ctx.stroke(); + } + if (tDeleteline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY + height / 2); + ctx.lineTo(usedX + width, y1 + ofY + height / 2); + ctx.closePath(); + ctx.stroke(); + } + if (tTopline == "1") { + ctx.beginPath(); + ctx.strokeStyle = tFontColor; + ctx.moveTo(usedX, y1 + ofY); + ctx.lineTo(usedX + width, y1 + ofY); + ctx.closePath(); + ctx.stroke(); + } + usedX += width; + ctx.restore(); + } + usedY += rRect.height; + } + if (this.isEditoring && Date.now() % 1e3 >= 500) { + if (cursorX != -Infinity && cursorY != -Infinity && curSIdx == curEIdx) { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-text-cursor", this.ddRender.model); + ctx.lineWidth = 1.5; + ctx.beginPath(); + ctx.moveTo(cursorX, cursorY - 2); + ctx.lineTo(cursorX, cursorY + cursorHeight + 2); + ctx.closePath(); + ctx.stroke(); + } else if (cText == "") { + let weight = fontSize * ratio + vspace; + if (align == 1) { + x2 = 5; + } else if (align == 2) { + x2 = ratPos.width * 0.5; + } else if (align == 3) { + x2 = ratPos.width - 5; + } + x2 = x2 + ratPos.x; + if (valign == 1) { + y2 = 0; + } else if (valign == 2) { + y2 = (ratPos.height - weight) * 0.5; + } else if (valign == 3) { + y2 = ratPos.height; + } + y2 = y2 + ratPos.y; + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-text-cursor", this.ddRender.model); + ctx.lineWidth = 1.5; + ctx.beginPath(); + ctx.moveTo(x2, y2 - 2); + ctx.lineTo(x2, y2 + weight + 2); + ctx.closePath(); + ctx.stroke(); + } else if ((editorText == null ? void 0 : editorText.selectionEnd) == cText.length) { + if (!lastHeight) { + for (let tci = textContainer.length - 1; tci >= 0; tci--) { + if (textContainer[tci].height) { + lastHeight = textContainer[tci].height; + break; + } + } + } + x2 = lastUsedX + lastWidth; + if (textContainer[textContainer.length - 1].text == "" || textContainer[textContainer.length - 1].text == "\n") { + if (align == 1) { + x2 = 5; + } else if (align == 2) { + x2 = ratPos.width * 0.5; + } else if (align == 3) { + x2 = ratPos.width - 5; + } + x2 = x2 + ratPos.x; + } + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-text-cursor", this.ddRender.model); + ctx.lineWidth = 1.5; + ctx.beginPath(); + ctx.moveTo(x2, lastUsedY - 2); + ctx.lineTo(x2, lastUsedY + lastHeight + 2); + ctx.closePath(); + ctx.stroke(); + } + } + this.textUsedArea = textContainer; + ctx.restore(); + } + /** + * 如果缩放类别为3,则自动计算并将计算的区域缓存到当前对象中,如果不为3则不会进行任何处理 + */ + calScaleType3Size() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + let scale = this.getCachedValue("textStyle.scale"); + let textArea2 = DDeiUtil$1.pointsToZero(this.model.textArea, this.model.cpv, this.model.rotate); + let fillRect = DDeiAbstractShape.pvsToOutRect(textArea2); + if (scale == 3) { + let lockExtWidth = this.getCachedValue("textStyle.lockWidth"); + let paddingWeight = this.getCachedValue("textStyle.paddingWeight"); + if (!paddingWeight) { + paddingWeight = 0; + } + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + let ratPos = DDeiUtil$1.getRatioPosition(fillRect, rat1); + let feed = this.getCachedValue("textStyle.feed"); + let hspace = this.getCachedValue("textStyle.hspace"); + let vspace = this.getCachedValue("textStyle.vspace"); + let fiFamily = this.getCachedValue("font.family"); + let fiSize = this.getCachedValue("font.size"); + let bold = this.getCachedValue("textStyle.bold"); + let italic = this.getCachedValue("textStyle.italic"); + let textContainer = []; + let fontSize = fiSize; + let cText = null; + let sptStyle = null; + if (this.isEditoring) { + sptStyle = this.model.sptStyle; + cText = this.getCachedValue("text"); + } else { + cText = DDeiUtil$1.getReplacibleValue(this.model, "text", true, true); + sptStyle = this.tempSptStyle ? this.tempSptStyle : this.model.sptStyle; + } + if (!cText) { + cText = ""; + } + let contentWidth = ratPos.width; + let usedWidth = 0; + let usedHeight = 0; + let textRowContainer = { text: "", widths: [], heights: [], dHeights: [] }; + textContainer.push(textRowContainer); + let baseFont = fontSize + "px " + fiFamily; + if (bold == "1") { + baseFont = "bold " + baseFont; + } + if (italic == "1") { + baseFont = "italic " + baseFont; + } + let rcIndex = 0; + let lastUnSubTypeFontSize = 0; + for (let ti = 0; ti < cText.length; ti++, rcIndex++) { + let te = cText[ti]; + let font = null; + let fontHeight = null; + let isEnter = false; + let fontShapeRect = null; + if ((feed == 1 || feed == "1") && te == "\n") { + isEnter = true; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = 0; + textRowContainer.heights[rcIndex] = 0; + textRowContainer.width = Math.max(0, usedWidth); + textRowContainer.height = Math.max(0, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize ? lastUnSubTypeFontSize * ratio + vspace : fontSize * ratio + vspace); + } else { + if (sptStyle[ti]) { + let ftsize = ((_b2 = (_a3 = sptStyle[ti]) == null ? void 0 : _a3.font) == null ? void 0 : _b2.size) ? (_d2 = (_c2 = sptStyle[ti]) == null ? void 0 : _c2.font) == null ? void 0 : _d2.size : fontSize; + if ((_e2 = sptStyle[ti].textStyle) == null ? void 0 : _e2.subtype) { + if (!lastUnSubTypeFontSize) { + lastUnSubTypeFontSize = ftsize; + } + ftsize = lastUnSubTypeFontSize / 2; + } else if (ftsize < 1) { + ftsize = 2; + } + let ftfamily = ((_g = (_f = sptStyle[ti]) == null ? void 0 : _f.font) == null ? void 0 : _g.family) ? (_i = (_h = sptStyle[ti]) == null ? void 0 : _h.font) == null ? void 0 : _i.family : fiFamily; + font = ftsize + "px " + ftfamily; + if (((_k = (_j = sptStyle[ti]) == null ? void 0 : _j.textStyle) == null ? void 0 : _k.bold) == "1") { + font = "bold " + font; + } + if (((_m = (_l = sptStyle[ti]) == null ? void 0 : _l.textStyle) == null ? void 0 : _m.italic) == "1") { + font = "italic " + font; + } + fontHeight = ftsize; + } + if (!font) { + font = baseFont; + fontHeight = fontSize; + } + if (!((_o = (_n = sptStyle[ti]) == null ? void 0 : _n.textStyle) == null ? void 0 : _o.subtype)) { + lastUnSubTypeFontSize = fontHeight; + } + let rc1 = DDeiUtil$1.measureText(te, font, ctx, fontHeight); + fontShapeRect = { width: rc1.width * ratio + hspace, height: rc1.height * ratio, dHeight: rc1.dHeight * ratio }; + usedWidth += fontShapeRect.width; + textRowContainer.text += te; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontShapeRect.height + vspace; + textRowContainer.dHeights[rcIndex] = fontShapeRect.dHeight; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontShapeRect.height + vspace, textRowContainer.height ? textRowContainer.height : 0, lastUnSubTypeFontSize ? lastUnSubTypeFontSize * ratio + vspace : fontSize * ratio + vspace); + } + if (feed == 1 || feed == "1") { + if (isEnter) { + usedWidth = 0; + usedHeight += textRowContainer.height; + rcIndex = -1; + let lastRowHeight = textRowContainer.height; + textRowContainer = { text: "", widths: [], heights: [], dHeights: [] }; + textRowContainer.width = usedWidth; + textRowContainer.height = lastRowHeight; + textContainer.push(textRowContainer); + } else if ((lockExtWidth == 1 || lockExtWidth == "1") && usedWidth > contentWidth) { + textRowContainer.text = textRowContainer.text.substring(0, textRowContainer.text.length - 1); + textRowContainer.width -= fontShapeRect.width; + textRowContainer.widths.splice(rcIndex, 1); + textRowContainer.heights.splice(rcIndex, 1); + usedWidth = fontShapeRect.width; + usedHeight += textRowContainer.height; + rcIndex = 0; + textRowContainer = { text: te, widths: [], heights: [], dHeights: [] }; + textRowContainer.widths[rcIndex] = fontShapeRect.width; + textRowContainer.heights[rcIndex] = fontShapeRect.height + vspace; + textRowContainer.dHeights[rcIndex] = fontShapeRect.dHeight; + textRowContainer.width = usedWidth; + textRowContainer.height = Math.max(fontShapeRect.height + vspace, lastUnSubTypeFontSize * ratio + vspace); + textContainer.push(textRowContainer); + } + } + } + let textAreaWidth = 0, textAreaHeight = 0; + for (let ri = 0; ri < textContainer.length; ri++) { + textAreaWidth = Math.max(textAreaWidth, textContainer[ri].width); + textAreaHeight += textContainer[ri].height; + } + let textAreaOutRect = fillRect; + let nowOutRect = { width: textAreaWidth / ratio + paddingWeight * 2, height: textAreaHeight / ratio + paddingWeight * 2 }; + if (nowOutRect.width > 40 && nowOutRect.height > fontSize) { + let scaleX2 = nowOutRect.width / textAreaOutRect.width; + let scaleY2 = nowOutRect.height / textAreaOutRect.height; + if (lockExtWidth == 1 || lockExtWidth == "1") { + scaleX2 = 1; + } + if (scaleX2.toFixed(4) != "1.0000" || scaleY2.toFixed(4) != "1.0000") { + let m12 = new Matrix3(); + let moveMatrix2 = new Matrix3( + 1, + 0, + -this.model.cpv.x, + 0, + 1, + -this.model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + if (this.model.rotate) { + let angle2 = DDeiUtil$1.preciseTimes(this.model.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let scaleMatrix2 = new Matrix3( + scaleX2, + 0, + 0, + 0, + scaleY2, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + if (this.model.rotate) { + let angle2 = DDeiUtil$1.preciseTimes(-this.model.rotate, DDeiConfig$1.ROTATE_UNIT); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + let move1Matrix = new Matrix3( + 1, + 0, + this.model.cpv.x, + 0, + 1, + this.model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + this.model.transVectors(m12); + this.model.updateLinkModels(); + fillRect = DDeiAbstractShape.pvsToOutRect(DDeiUtil$1.pointsToZero(this.model.textArea, this.model.cpv, this.model.rotate)); + } + } + this.tempTextContainer = textContainer; + ctx.restore(); + } + this.tempFillRect = fillRect; + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + super.mouseDown(evt); + } + /** + * 绘制图形 + */ + mouseUp(evt) { + super.mouseUp(evt); + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + super.mouseMove(evt); + } + /** + * 鼠标双击 + * @param evt + */ + dblClick(evt) { + } + }; + __publicField2(_DDeiPolygonCanvasRender, "ClsName", "DDeiPolygonCanvasRender"); + let DDeiPolygonCanvasRender = _DDeiPolygonCanvasRender; + const __vite_glob_1_6$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiPolygonCanvasRender, + default: DDeiPolygonCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiPolygonContainerCanvasRender = class _DDeiPolygonContainerCanvasRender2 extends DDeiPolygonCanvasRender { + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiPolygonContainerCanvasRender2(props); + } + // ============================== 方法 =============================== + enableRefreshShape() { + var _a3; + super.enableRefreshShape(); + (_a3 = this.model.models) == null ? void 0 : _a3.forEach((model) => { + var _a22; + (_a22 = model.render) == null ? void 0 : _a22.enableRefreshShape(); + }); + } + clearCachedValue() { + super.clearCachedValue(); + this.model.models.forEach((item) => { + var _a3; + (_a3 = item == null ? void 0 : item.render) == null ? void 0 : _a3.clearCachedValue(); + }); + } + /** + * 绘制图形 + */ + drawShape(tempShape, composeRender = 0, inRect = null, zIndex = 0) { + var _a3, _b2, _c2, _d2, _e2; + if (!inRect || this.model.isInRect(inRect.x, inRect.y, inRect.x1, inRect.y1)) { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + if (composeRender || rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model], tempShape, composeRender }, this.ddRender.model, null); + if (rsState1 == 0 || rsState1 == 1) { + if (!DDeiUtil$1.isModelHidden(this.model) && (this.refreshShape || this.isEditoring)) { + this.createTempShape(); + let rendList = []; + if (((_a3 = this.model.composes) == null ? void 0 : _a3.length) > 0) { + rendList = rendList.concat(this.model.composes); + } + rendList.push(this.model); + rendList.sort((a, b) => { + if ((a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return a.cIndex - b.cIndex; + } else if ((a.cIndex || a.cIndex == 0) && !(b.cIndex || b.cIndex == 0)) { + return 1; + } else if (!(a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return -1; + } else { + return 0; + } + }); + for (let ri = 0; ri < rendList.length; ri++) { + let c = rendList[ri]; + if (c == this.model) { + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + if (!tempShape && this.stageRender.operateState == DDeiEnumOperateState.QUICK_EDITING || this.stageRender.operateState == DDeiEnumOperateState.QUICK_EDITING_TEXT_SELECTING) { + if (this.isEditoring) + ; + else if ((_b2 = this.stage.render) == null ? void 0 : _b2.editorShadowControl) { + if (this.model.id + "_shadow" == this.stage.render.editorShadowControl.id) { + return; + } + } + } else if (!tempShape && ((_d2 = (_c2 = this.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) == 1 && Array.from((_e2 = this.stage) == null ? void 0 : _e2.selectedModels.values())[0].id == this.model.id) { + tempShape = { border: { type: 1, width: 1, color: "#017fff", dash: [10, 5] }, drawCompose: false }; + } + this.calScaleType3Size(tempShape); + ctx.save(); + this.calPVSS(tempShape); + this.createClip(tempShape); + this.drawFill(tempShape); + this.drawText(tempShape); + this.drawBorder(tempShape); + this.drawChildrenShapes(tempShape); + ctx.restore(); + } else { + if (tempShape && (tempShape == null ? void 0 : tempShape.drawCompose) == false) { + c.render.drawShape(null, composeRender + 1, null, zIndex + ri); + } else { + c.render.drawShape(tempShape, composeRender + 1, null, zIndex + ri); + } + } + } + if (!this.isEditoring) { + this.refreshShape = false; + } + } + this.drawSelfToCanvas(composeRender); + } + if (!composeRender) { + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + } + } + } else { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", "VIEW-HIDDEN", { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + this.removeViewerCanvas(); + } + } + } + /** + * 绘制自身到最外层canvas + */ + drawSelfToCanvas(composeRender) { + var _a3, _b2; + if (this.tempCanvas) { + let model = this.model; + let stage2 = model.stage; + let ruleWeight = 0; + if (stage2.render.tempRuleDisplay == 1 || stage2.render.tempRuleDisplay == "1") { + ruleWeight = 15; + } + let stageRatio2 = this.model.getStageRatio(); + if (!this.tempCanvas.parentElement) { + let viewerEle = this.model.layer.render.containerViewer; + viewerEle.appendChild(this.tempCanvas); + } + this.tempCanvas.style.zIndex = this.tempZIndex; + this.tempCanvas.style.left = this.model.cpv.x * stageRatio2 + this.model.stage.wpv.x - this.tempCanvas.offsetWidth / 2 - ruleWeight + "px"; + this.tempCanvas.style.top = this.model.cpv.y * stageRatio2 + this.model.stage.wpv.y - this.tempCanvas.offsetHeight / 2 - ruleWeight + "px"; + for (let m = 0; m < ((_a3 = this.model.midList) == null ? void 0 : _a3.length); m++) { + let key = this.model.midList[m]; + let item = this.model.models.get(key); + (_b2 = item.render) == null ? void 0 : _b2.drawSelfToCanvas(composeRender); + } + } + } + /** + * 绘制子元素 + */ + drawChildrenShapes(tempShape, inRect = true, hidden = false) { + var _a3, _b2; + if (((_a3 = this.model.models) == null ? void 0 : _a3.size) > 0) { + let canvas = this.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.stage.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + let lineOffset = 0; + let areaPVS = this.model.layoutManager.getAreasPVS(); + let usedMidIds = []; + for (let n = 0; n < areaPVS.length; n++) { + let pvs2 = areaPVS[n]; + for (let m = 0; m < ((_b2 = this.model.midList) == null ? void 0 : _b2.length); m++) { + let key = this.model.midList[m]; + let item = this.model.models.get(key); + usedMidIds.push(item.id); + ctx.save(); + ctx.beginPath(); + for (let i2 = 0; i2 < pvs2.length; i2++) { + if (i2 == pvs2.length - 1) { + ctx.lineTo(pvs2[0].x * ratio + lineOffset, pvs2[0].y * ratio + lineOffset); + } else if (i2 == 0) { + ctx.moveTo(pvs2[i2].x * ratio + lineOffset, pvs2[i2].y * ratio + lineOffset); + ctx.lineTo(pvs2[i2 + 1].x * ratio + lineOffset, pvs2[i2 + 1].y * ratio + lineOffset); + } else { + ctx.lineTo(pvs2[i2 + 1].x * ratio + lineOffset, pvs2[i2 + 1].y * ratio + lineOffset); + } + } + ctx.closePath(); + item.render.tempZIndex = this.tempZIndex + (m + 1); + item.render.drawShape(tempShape); + ctx.restore(); + } + } + } + } + }; + __publicField2(_DDeiPolygonContainerCanvasRender, "ClsName", "DDeiPolygonContainerCanvasRender"); + let DDeiPolygonContainerCanvasRender = _DDeiPolygonContainerCanvasRender; + const __vite_glob_1_5$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiPolygonContainerCanvasRender, + default: DDeiPolygonContainerCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiSelectorCanvasRender = class _DDeiSelectorCanvasRender2 extends DDeiRectangleCanvasRender { + constructor(props) { + super(props); + this.clip = false; + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiSelectorCanvasRender2(props); + } + /** + * 创建图形 + */ + drawShape() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + let models = null; + if (((_b2 = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + models = Array.from(this.stage.selectedModels.values()); + } + if (this.stageRender.operateState == DDeiEnumOperateState.SELECT_WORKING) { + (_e2 = (_d2 = (_c2 = this.stage) == null ? void 0 : _c2.layers[this.stage.layerIndex]) == null ? void 0 : _d2.render) == null ? void 0 : _e2.enableRefreshShape(); + this.drawBorder(); + } else if (this.stageRender.operateState != DDeiEnumOperateState.LINE_POINT_CHANGING) { + if ((models == null ? void 0 : models.length) == 1 && ((_f = models[0]) == null ? void 0 : _f.baseModelType) == "DDeiLine") { + this.drawLine(); + this.drawOperatorShapeLine(); + } else { + if ((models == null ? void 0 : models.length) == 1 && (models[0].mirrorX || models[0].mirrorY)) { + let model = models[0]; + let oldRat1 = this.ddRender.ratio * ((_g = this.stage) == null ? void 0 : _g.getStageRatio()); + ctx.translate(model.cpv.x * oldRat1, model.cpv.y * oldRat1); + if (model.mirrorX) { + ctx.scale(-1, 1); + } + if (model.mirrorY) { + ctx.scale(1, -1); + } + ctx.translate(-model.cpv.x * oldRat1, -model.cpv.y * oldRat1); + } + if (this.stageRender.operateState == DDeiEnumOperateState.QUICK_EDITING || this.stageRender.operateState == DDeiEnumOperateState.QUICK_EDITING_TEXT_SELECTING) + ; + else { + if (((_i = (_h = this.stage) == null ? void 0 : _h.selectedModels) == null ? void 0 : _i.size) > 1) { + this.drawBorder(); + } + this.drawOperatorShape(); + } + } + this.drawOvsPoints(); + } + this.drawIncludedStyle(); + ctx.restore(); + } + /** + * 绘制特殊操作点 + */ + drawOvsPoints() { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.model.state == DDeiEnumControlState.SELECTED && ((_b2 = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) == 1) { + let model = Array.from((_c2 = this.stage) == null ? void 0 : _c2.selectedModels.values())[0]; + let ovs = model.ovs; + if ((ovs == null ? void 0 : ovs.length) > 0) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let ratio = this.ddRender.ratio * this.stage.getStageRatio(); + let weight = 4; + ctx.save(); + ctx.fillStyle = "yellow"; + ctx.strokeStyle = "black"; + let ovsDefine = (_e2 = (_d2 = DDeiUtil$1.getControlDefine(model)) == null ? void 0 : _d2.define) == null ? void 0 : _e2.ovs; + for (let i2 = 0; i2 < ovs.length; i2++) { + let point2 = ovs[i2]; + let pointDefine2 = ovsDefine[i2]; + if (((_f = pointDefine2 == null ? void 0 : pointDefine2.constraint) == null ? void 0 : _f.type) && pointDefine2.constraint.type != 5) { + ctx.beginPath(); + ctx.moveTo((point2.x + weight) * ratio, point2.y * ratio); + ctx.lineTo(point2.x * ratio, (point2.y + weight) * ratio); + ctx.lineTo((point2.x - weight) * ratio, point2.y * ratio); + ctx.lineTo(point2.x * ratio, (point2.y - weight) * ratio); + ctx.closePath(); + ctx.stroke(); + ctx.fill(); + } + } + ctx.restore(); + } + } + } + /** + * 绘制编辑边框 + * @param tempBorder 临时边框,优先级最高 + * @param usePV 是否采用向量输出 + */ + drawEditBorder() { + var _a3, _b2; + if (((_b2 = (_a3 = this.stageRender.editorShadowControl) == null ? void 0 : _a3.textArea) == null ? void 0 : _b2.length) > 3) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + let stageRatio2 = this.model.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + let lineOffset = 0; + let lineWidth = 1.25 * ratio; + ctx.lineWidth = lineWidth; + ctx.beginPath(); + ctx.setLineDash([10, 10]); + ctx.strokeStyle = DDeiUtil$1.getColor("#017fff"); + let pvs2 = this.stageRender.editorShadowControl.textArea; + if ((pvs2 == null ? void 0 : pvs2.length) > 0) { + ctx.moveTo(pvs2[0].x * rat1 + lineOffset, pvs2[0].y * rat1 + lineOffset); + ctx.lineTo(pvs2[1].x * rat1 + lineOffset, pvs2[1].y * rat1 + lineOffset); + ctx.lineTo(pvs2[2].x * rat1 + lineOffset, pvs2[2].y * rat1 + lineOffset); + ctx.lineTo(pvs2[3].x * rat1 + lineOffset, pvs2[3].y * rat1 + lineOffset); + } + ctx.closePath(); + ctx.stroke(); + ctx.restore(); + } + } + /** + * 线模式下绘制线的效果 + */ + drawLine() { + } + /** + * 线模式下绘制线的操作图形 + */ + drawOperatorShapeLine() { + var _a3, _b2, _c2, _d2; + if (this.model.state != DDeiEnumControlState.SELECTED) { + return; + } + if (((_b2 = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + let lineModel = Array.from((_d2 = (_c2 = this.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.values())[0]; + if (lineModel.baseModelType == "DDeiLine") { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", this.ddRender.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [lineModel], + null, + modeName, + this.ddRender.model + ); + if (accessLink) { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.stage.getStageRatio(); + let rat1 = this.ddRender.ratio; + let ratio = rat1 * stageRatio2; + rat1 = ratio; + let pvs2 = lineModel.pvs; + let type = DDeiModelArrtibuteValue.getAttrValueByState(lineModel, "type", true); + let weight = DDeiModelArrtibuteValue.getAttrValueByState(lineModel, "weight", true); + let w10 = 1.3 * weight * ratio; + if (w10 > 5 * rat1) { + w10 = 5 * rat1; + } else if (w10 < 2 * rat1) { + w10 = 2 * rat1; + } + let w15 = 1.5 * w10; + let w20 = 2 * w10; + let w30 = 2 * w15; + ctx.save(); + switch (type) { + case 1: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + break; + } + case 2: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + ctx.strokeStyle = "#017fff"; + ctx.fillStyle = "white"; + for (let i2 = 1; i2 < pvs2.length; i2++) { + if (i2 != pvs2.length - 1) { + ctx.save(); + let x1 = pvs2[i2].x * rat1; + let y1 = pvs2[i2].y * rat1; + if (lineModel.rotate) { + ctx.translate(x1, y1); + ctx.rotate(lineModel.rotate * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-x1, -y1); + } + ctx.fillRect(x1 - w15, y1 - w15, w30, w30); + ctx.strokeRect(x1 - w15, y1 - w15, w30, w30); + ctx.restore(); + } + ctx.save(); + let x2 = (pvs2[i2].x + pvs2[i2 - 1].x) / 2 * rat1; + let y2 = (pvs2[i2].y + pvs2[i2 - 1].y) / 2 * rat1; + ctx.translate(x2, y2); + ctx.rotate(((lineModel.rotate ? lineModel.rotate : 0) + 45) * DDeiConfig$1.ROTATE_UNIT); + ctx.translate(-x2, -y2); + ctx.fillRect(x2 - w10, y2 - w10, w20, w20); + ctx.strokeRect(x2 - w10, y2 - w10, w20, w20); + ctx.restore(); + } + break; + } + case 3: { + this.drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio); + if (pvs2.length >= 4) { + ctx.strokeStyle = "#017fff"; + ctx.fillStyle = "white"; + for (let i2 = 1; i2 < this.model.opvs.length - 1; i2++) { + let pv = this.model.opvs[i2]; + ctx.beginPath(); + ctx.ellipse(pv.x * rat1, pv.y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + } + } + break; + } + } + ctx.restore(); + } + } + } + } + /** + * 绘制开始和结束操作点 + */ + drawSEPoint(pvs2, w10, w20, ctx, rat1, ratio) { + ctx.strokeStyle = "red"; + ctx.lineWidth = ratio; + ctx.fillStyle = "white"; + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.fillStyle = "red"; + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w10, w10, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w10, w10, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.fill(); + ctx.beginPath(); + ctx.ellipse(pvs2[0].x * rat1, pvs2[0].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.stroke(); + ctx.beginPath(); + ctx.ellipse(pvs2[pvs2.length - 1].x * rat1, pvs2[pvs2.length - 1].y * rat1, w20, w20, 0, 0, DDeiUtil$1.PI2); + ctx.closePath(); + ctx.stroke(); + } + /** + * 获取边框上的操作图形 + * @param tempBorder + */ + drawOperatorShape(tempBorder) { + var _a3, _b2; + if (this.model.state != DDeiEnumControlState.SELECTED) { + return; + } + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + ctx.save(); + let width = DDeiConfig$1.SELECTOR.OPERATE_ICON.weight * ratio; + let halfWidth = width * 0.5; + let selectedModels = (_b2 = this.stage) == null ? void 0 : _b2.selectedModels; + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + let firstModel = Array.from(selectedModels == null ? void 0 : selectedModels.values())[0]; + for (let i2 = 1; i2 <= 10; i2++) { + let type = null; + let color = null; + let opacity = null; + let bWidth = null; + if (i2 <= 2 || i2 >= 9) { + type = this.getBorderInfo(tempBorder, 1, "type"); + color = this.getBorderInfo(tempBorder, 1, "color"); + opacity = this.getBorderInfo(tempBorder, 1, "opacity"); + bWidth = this.getBorderInfo(tempBorder, 1, "width"); + } else if (i2 <= 4) { + type = this.getBorderInfo(tempBorder, 2, "type"); + color = this.getBorderInfo(tempBorder, 2, "color"); + opacity = this.getBorderInfo(tempBorder, 2, "opacity"); + bWidth = this.getBorderInfo(tempBorder, 2, "width"); + } else if (i2 <= 6) { + type = this.getBorderInfo(tempBorder, 3, "type"); + color = this.getBorderInfo(tempBorder, 3, "color"); + opacity = this.getBorderInfo(tempBorder, 3, "opacity"); + bWidth = this.getBorderInfo(tempBorder, 3, "width"); + } else if (i2 <= 8) { + type = this.getBorderInfo(tempBorder, 4, "type"); + color = this.getBorderInfo(tempBorder, 4, "color"); + opacity = this.getBorderInfo(tempBorder, 4, "opacity"); + bWidth = this.getBorderInfo(tempBorder, 4, "width"); + } + if (!(type == 0 || type == "0") && color && (!opacity || opacity > 0) && bWidth > 0) { + let lineOffset = 0; + ctx.lineWidth = bWidth * ratio; + ctx.beginPath(); + if (opacity != null && opacity != void 0) { + ctx.globalAlpha = opacity; + } + ctx.strokeStyle = DDeiUtil$1.getColor(color); + let defaultFillColor = DDeiUtil$1.getColor(DDeiConfig$1.SELECTOR.OPERATE_ICON.FILL.default); + ctx.fillStyle = defaultFillColor; + if (this.model.passIndex == i2) { + ctx.fillStyle = DDeiUtil$1.getColor(DDeiConfig$1.SELECTOR.OPERATE_ICON.FILL.pass); + } + let opvs = this.model.opvs; + if ((opvs == null ? void 0 : opvs.length) > 0) { + if (i2 >= 1 && i2 <= 8) { + if (opvs[i2]) { + ctx.ellipse(opvs[i2].x * ratio + lineOffset, opvs[i2].y * ratio + lineOffset, halfWidth, halfWidth, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + } + } else if (i2 == 9) { + if (opvs[9]) { + if (this.model.passIndex == i2) { + ctx.ellipse(opvs[9].x * ratio + lineOffset, opvs[9].y * ratio + lineOffset, halfWidth, halfWidth, 0, 0, Math.PI * 2); + ctx.fill(); + } else { + ctx.arc(opvs[9].x * ratio + lineOffset, opvs[9].y * ratio + lineOffset, halfWidth, 50, Math.PI * 1.6); + ctx.stroke(); + } + } + } else if (i2 == 10 && selectedModels.size == 1 && firstModel.baseModelType == "DDeiTable") { + ctx.fillStyle = DDeiUtil$1.getColor(color); + ctx.ellipse(opvs[10].x * ratio + lineOffset, opvs[10].y * ratio + lineOffset, halfWidth, halfWidth, 0, 0, Math.PI * 2); + ctx.fill(); + } + } + } + } + } + ctx.restore(); + } + /** + * 获取边框信息 + * @param tempBorder + */ + getBorderInfo(tempBorder, direct, path) { + let borderInfo = null; + if (tempBorder) { + try { + let returnJSON = DDeiUtil$1.getDataByPath(tempBorder, path.split(".")); + borderInfo = returnJSON.data; + } catch (e) { + } + } else { + borderInfo = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "border." + path, true); + } + return borderInfo; + } + /** + * 计算除边框外的填充区域,用于填充颜色和字体 + */ + getFillArea() { + let disabled = this.getBorderInfo(null, 1, "disabled"); + let color = this.getBorderInfo(null, 1, "color"); + let opacity = this.getBorderInfo(null, 1, "opacity"); + let width = this.getBorderInfo(null, 1, "width"); + if (!(!disabled && color && (!opacity || opacity > 0) && width > 0)) { + width = 0; + } + let absBounds = this.model.getAbsBounds(); + let fillAreaE = { + x: absBounds.x - width, + y: absBounds.y - width, + width: absBounds.width + 2 * width, + height: absBounds.height + 2 * width + }; + return fillAreaE; + } + /** + * 绘制选中图形特效 + */ + drawIncludedStyle() { + var _a3, _b2; + let includedModels = null; + let selectNumber = 0; + if (this.model.state == DDeiEnumControlState.DEFAULT) { + includedModels = this.model.getIncludedModels(); + } else if (this.model.state == DDeiEnumControlState.SELECTED) { + includedModels = (_a3 = this.stage) == null ? void 0 : _a3.selectedModels; + selectNumber = 1; + } + (_b2 = this.upIncludeModels) == null ? void 0 : _b2.forEach((im) => { + var _a22; + (_a22 = im == null ? void 0 : im.render) == null ? void 0 : _a22.enableRefreshShape(); + }); + if (includedModels && includedModels.size > selectNumber) { + includedModels.forEach((model, key) => { + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + ctx.save(); + model.render.enableRefreshShape(); + if (model.baseModelType == "DDeiLine") { + model.render.drawShape({ color: "red", dash: [] }, 0, null, 99999); + } else { + model.render.drawShape({ type: 1, width: 1, color: "red", border: { type: 1, dash: [], width: 1, color: "red" } }, 0, null, 99999); + } + ctx.restore(); + }); + } + this.upIncludeModels = includedModels; + } + /** + * 鼠标移动事件,经由上层容器分发 + */ + mouseMove(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + ex = ex / stageRatio2; + ey = ey / stageRatio2; + let models = null; + if (((_c2 = (_b2 = this.stage) == null ? void 0 : _b2.selectedModels) == null ? void 0 : _c2.size) > 0) { + models = Array.from(this.stage.selectedModels.values()); + } + let isOvPoint = false; + if ((models == null ? void 0 : models.length) == 1 && ((_d2 = models[0]) == null ? void 0 : _d2.ovs.length) > 0) { + let ovPoint = models[0].getOvPointByPos(ex, ey); + if (ovPoint) { + let ovsDefine = (_f = (_e2 = DDeiUtil$1.getControlDefine(models[0])) == null ? void 0 : _e2.define) == null ? void 0 : _f.ovs; + let ovd = ovsDefine[models[0].ovs.indexOf(ovPoint)]; + if (((_g = ovd == null ? void 0 : ovd.constraint) == null ? void 0 : _g.type) && ovd.constraint.type != 5) { + isOvPoint = true; + (_j = (_i = (_h = this.stage) == null ? void 0 : _h.ddInstance) == null ? void 0 : _i.bus) == null ? void 0 : _j.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "pointer" }, evt); + } + } + } + if (!isOvPoint) { + if ((models == null ? void 0 : models.length) == 1 && ((_k = models[0]) == null ? void 0 : _k.baseModelType) == "DDeiLine") { + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", this.ddRender.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [models[0]], + null, + modeName, + this.ddRender.model + ); + if (accessLink) { + let tpdata = this.model.isOpvOnLine(ex, ey); + if (tpdata) { + let direct = null; + if (tpdata.type == 3) { + let beforeP = this.model.opvs[tpdata.index - 1]; + let afterP = this.model.opvs[tpdata.index + 1]; + if (Math.abs(beforeP.x - afterP.x) <= 1) { + direct = 2; + } else { + direct = 1; + } + } + (_n = (_m = (_l = this.stage) == null ? void 0 : _l.ddInstance) == null ? void 0 : _m.bus) == null ? void 0 : _n.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { type: "line", passIndex: tpdata.type, direct, opvsIndex: tpdata.index }, evt); + } + } else { + (_q = (_p = (_o = this.stage) == null ? void 0 : _o.ddInstance) == null ? void 0 : _p.bus) == null ? void 0 : _q.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { type: "line", passIndex: -1, opvsIndex: -1 }, evt); + } + } else { + if (this.model.isOpvOn(1, ex, ey)) { + (_t = (_s = (_r = this.stage) == null ? void 0 : _r.ddInstance) == null ? void 0 : _s.bus) == null ? void 0 : _t.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 1, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(2, ex, ey)) { + (_w = (_v = (_u = this.stage) == null ? void 0 : _u.ddInstance) == null ? void 0 : _v.bus) == null ? void 0 : _w.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 2, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(3, ex, ey)) { + (_z = (_y = (_x = this.stage) == null ? void 0 : _x.ddInstance) == null ? void 0 : _y.bus) == null ? void 0 : _z.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 3, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(4, ex, ey)) { + (_C = (_B = (_A = this.stage) == null ? void 0 : _A.ddInstance) == null ? void 0 : _B.bus) == null ? void 0 : _C.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 4, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(5, ex, ey)) { + (_F = (_E = (_D = this.stage) == null ? void 0 : _D.ddInstance) == null ? void 0 : _E.bus) == null ? void 0 : _F.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 5, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(6, ex, ey)) { + (_I = (_H = (_G = this.stage) == null ? void 0 : _G.ddInstance) == null ? void 0 : _H.bus) == null ? void 0 : _I.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 6, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(7, ex, ey)) { + (_L = (_K = (_J = this.stage) == null ? void 0 : _J.ddInstance) == null ? void 0 : _K.bus) == null ? void 0 : _L.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 7, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(8, ex, ey)) { + (_O = (_N = (_M = this.stage) == null ? void 0 : _M.ddInstance) == null ? void 0 : _N.bus) == null ? void 0 : _O.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 8, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(9, ex, ey)) { + (_R = (_Q = (_P = this.stage) == null ? void 0 : _P.ddInstance) == null ? void 0 : _Q.bus) == null ? void 0 : _R.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 9, opvsIndex: -1 }, evt); + } else if (this.model.isOpvOn(10, ex, ey)) { + (_U = (_T = (_S = this.stage) == null ? void 0 : _S.ddInstance) == null ? void 0 : _T.bus) == null ? void 0 : _U.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 13, opvsIndex: -1 }, evt); + } else { + let models2 = (_W = this.stage) == null ? void 0 : _W.layers[(_V = this.stage) == null ? void 0 : _V.layerIndex].findModelsByArea(ex, ey); + if (models2 && models2.length > 0) { + (_Z = (_Y = (_X = this.stage) == null ? void 0 : _X.ddInstance) == null ? void 0 : _Y.bus) == null ? void 0 : _Z.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 10, opvsIndex: -1 }, evt); + } else { + (_aa = (_$ = (__ = this.stage) == null ? void 0 : __.ddInstance) == null ? void 0 : _$.bus) == null ? void 0 : _aa.push(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: -1, opvsIndex: -1 }, evt); + } + } + } + } + (_da = (_ca = (_ba = this.stage) == null ? void 0 : _ba.ddInstance) == null ? void 0 : _ca.bus) == null ? void 0 : _da.push(DDeiEnumBusCommandType.RefreshShape); + } + /** + * 鼠标按下事件,经由上层容器分发 + */ + mouseDown(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= this.stage.wpv.x; + ey -= this.stage.wpv.y; + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + ex = ex / stageRatio2; + ey = ey / stageRatio2; + if (this.model.passType == "line") { + let lineModel = null; + if (((_c2 = (_b2 = this.stage) == null ? void 0 : _b2.selectedModels) == null ? void 0 : _c2.size) > 0) { + let layer2 = this.stage.layers[(_d2 = this.stage) == null ? void 0 : _d2.layerIndex]; + lineModel = Array.from(this.stage.selectedModels.values())[0]; + let modeName = DDeiUtil$1.getConfigValue("MODE_NAME", this.ddRender.model); + let accessLink = DDeiUtil$1.isAccess( + DDeiEnumOperateType.LINK, + [lineModel], + null, + modeName, + this.ddRender.model + ); + if (accessLink) { + let dragPoint = this.model.opvs[this.model.opvsIndex]; + let lineShadow = DDeiUtil$1.getShadowControl(lineModel); + layer2.shadowControls.push(lineShadow); + this.stageRender.currentOperateShape = lineShadow; + this.stageRender.currentOperateShape.dragPoint = dragPoint; + let dragObj = { + x: ex, + y: ey, + dragPoint, + model: lineShadow, + opvsIndex: this.model.opvsIndex, + passIndex: this.model.passIndex, + opvs: this.model.opvs + }; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_LINE_DRAG_BEFORE", DDeiEnumOperateType.DRAG, dragObj, (_e2 = this.stage) == null ? void 0 : _e2.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", DDeiEnumOperateType.LINK, null, (_f = this.stage) == null ? void 0 : _f.ddInstance, evt); + (_i = (_h = (_g = this.stage) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.bus) == null ? void 0 : _i.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + (_l = (_k = (_j = this.stage) == null ? void 0 : _j.ddInstance) == null ? void 0 : _k.bus) == null ? void 0 : _l.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "grabbing" }, evt); + this.stageRender.operateState = DDeiEnumOperateState.LINE_POINT_CHANGING; + } + } + } + } else { + if (this.model.passIndex >= 1 && this.model.passIndex <= 8) { + let dragObj = { + x: ex, + y: ey, + originData: { + x: this.model.x, + y: this.model.y, + width: this.model.width, + height: this.model.height + } + }; + let pContainerModel = this.stage.render.currentOperateContainer; + if (!pContainerModel) { + pContainerModel = this.stage.layers[this.stage.layerIndex]; + } + let selectedModels = pContainerModel.getSelectedModels(); + let layer2 = this.stage.layers[this.stage.layerIndex]; + selectedModels.forEach((m) => { + let md = DDeiUtil$1.getShadowControl(m); + layer2.shadowControls.push(md); + }); + (_o = (_n = (_m = this.stage) == null ? void 0 : _m.ddInstance) == null ? void 0 : _n.bus) == null ? void 0 : _o.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + this.stageRender.operateState = DDeiEnumOperateState.CONTROL_CHANGING_BOUND; + } else if (this.model.passIndex == 9) { + let pContainerModel = this.stageRender.currentOperateContainer; + if (!pContainerModel) { + pContainerModel = this.layer; + } + let selectedModels = pContainerModel.getSelectedModels(); + if (selectedModels) { + if (selectedModels.set) { + selectedModels = Array.from(selectedModels.values()); + } + let stop = false; + for (let i2 = 0; i2 < selectedModels.length; i2++) { + let parentContainer = selectedModels[i2].pModel; + if (parentContainer == null ? void 0 : parentContainer.layoutManager) { + if (!parentContainer.layoutManager.canChangeRotate()) { + stop = true; + break; + } + } + } + if (!stop) { + let dragObj = { + x: ex, + y: ey, + cx: this.model.cpv.x, + cy: this.model.cpv.y, + models: selectedModels, + container: pContainerModel + }; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_ROTATE_BEFORE", DDeiEnumOperateType.ROTATE, { models: dragObj.models }, this.stage.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + (_r = (_q = (_p = this.stage) == null ? void 0 : _p.ddInstance) == null ? void 0 : _q.bus) == null ? void 0 : _r.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + this.stageRender.operateState = DDeiEnumOperateState.CONTROL_ROTATE; + } + } + } + } else if (this.model.passIndex == 13) { + let selectedModels = (_s = this.stage) == null ? void 0 : _s.selectedModels; + this.stageRender.operateState = DDeiEnumOperateState.CONTROL_DRAGING; + let layer2 = Array.from(selectedModels == null ? void 0 : selectedModels.values())[0].layer; + layer2.opPoints = []; + if ((_t = layer2.opLine) == null ? void 0 : _t.render) { + layer2.opLine.render.enableRefreshShape(); + } + delete layer2.opLine; + let centerPointVector = this.model.cpv; + let dragObj = { + x: ex, + y: ey, + dx: centerPointVector.x - ex, + //鼠标在控件中心坐标的增量位置 + dy: centerPointVector.y - ey + }; + selectedModels.forEach((m) => { + let md = DDeiUtil$1.getShadowControl(m); + layer2.shadowControls.push(md); + if (!this.stageRender.currentOperateShape) { + this.stageRender.currentOperateShape = md; + } + }); + (_w = (_v = (_u = this.stage) == null ? void 0 : _u.ddInstance) == null ? void 0 : _v.bus) == null ? void 0 : _w.push(DDeiEnumBusCommandType.ModelChangeSelect, [{ id: this.stageRender.currentOperateShape.id, value: DDeiEnumControlState.SELECTED }], evt); + (_z = (_y = (_x = this.stage) == null ? void 0 : _x.ddInstance) == null ? void 0 : _y.bus) == null ? void 0 : _z.push(DDeiEnumBusCommandType.UpdateDragObj, { dragObj }, evt); + } + if (this.model.passIndex != -1) + ; + } + } + /** + * 计算移动后的坐标 + * @param x + * @param y + * @param er 是否等比 + */ + getMovedBounds(x2, y2, er = false) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + let stageRatio2 = (_a3 = this.stage) == null ? void 0 : _a3.getStageRatio(); + let returnBounds = { x: this.model.x * stageRatio2, y: this.model.y * stageRatio2, width: this.model.width * stageRatio2, height: this.model.height * stageRatio2 }; + let centerPointVector = this.model.cpv; + if (this.model.rotate) { + let tempPV = new Vector3(x2, y2, 1); + let move1Matrix = new Matrix3( + 1, + 0, + -centerPointVector.x, + 0, + 1, + -centerPointVector.y, + 0, + 0, + 1 + ); + let angle2 = (this.model.rotate * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + centerPointVector.x, + 0, + 1, + centerPointVector.y, + 0, + 0, + 1 + ); + let m12 = new Matrix3().premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + tempPV.applyMatrix3(m12); + x2 = tempPV.x; + y2 = tempPV.y; + } + let wbh = returnBounds.width / returnBounds.height; + let stage2 = this.model.stage; + let hAds = ((_b2 = stage2.render.helpLines) == null ? void 0 : _b2.hAds) || ((_c2 = stage2.render.helpLines) == null ? void 0 : _c2.hAds) == 0 ? (_d2 = stage2.render.helpLines) == null ? void 0 : _d2.hAds : Infinity; + let vAds = ((_e2 = stage2.render.helpLines) == null ? void 0 : _e2.vAds) || ((_f = stage2.render.helpLines) == null ? void 0 : _f.vAds) == 0 ? (_g = stage2.render.helpLines) == null ? void 0 : _g.vAds : Infinity; + let hAdsValue = Infinity; + let vAdsValue = Infinity; + if (hAds != Infinity) { + if (stage2.render.isHAds && Math.abs(stage2.render.hAdsY - y2) > stage2.ddInstance.GLOBAL_ADV_WEIGHT) { + stage2.render.isHAds = false; + stage2.render.hAdsY = Infinity; + } else if (stage2.render.isHAds) { + hAdsValue = 0; + } else { + stage2.render.isHAds = true; + hAdsValue = -hAds; + stage2.render.hAdsY = y2; + } + } + if (vAds != Infinity) { + if (stage2.render.isVAds && Math.abs(stage2.render.vAdsX - x2) > stage2.ddInstance.GLOBAL_ADV_WEIGHT) { + stage2.render.isVAds = false; + stage2.render.vAdsX = Infinity; + } else if (stage2.render.isVAds) { + vAdsValue = 0; + } else { + stage2.render.isVAds = true; + vAdsValue = -vAds; + stage2.render.vAdsX = x2; + } + } + switch (this.model.passIndex) { + case 1: { + let dy = y2 - (centerPointVector.y - returnBounds.height / 2); + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + returnBounds.y = returnBounds.y + dy; + returnBounds.height = returnBounds.height - dy; + if (er) { + returnBounds.x = returnBounds.x + dy * wbh / 2; + returnBounds.width = returnBounds.width - dy * wbh; + } + break; + } + case 2: { + let dy = y2 - (centerPointVector.y - returnBounds.height / 2); + let dx = x2 - centerPointVector.x - returnBounds.width / 2; + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.y = returnBounds.y + dy; + returnBounds.height = returnBounds.height - dy; + returnBounds.width = returnBounds.width + dx; + if (er) { + returnBounds.x = returnBounds.x + dy * wbh / 2; + returnBounds.width = returnBounds.width - dy * wbh; + returnBounds.y = returnBounds.y - dx / wbh / 2; + returnBounds.height = returnBounds.height + dx / wbh; + } + break; + } + case 3: { + let dx = x2 - centerPointVector.x - returnBounds.width / 2; + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.width = returnBounds.width + dx; + if (er) { + returnBounds.y = returnBounds.y - dx / wbh / 2; + returnBounds.height = returnBounds.height + dx / wbh; + } + break; + } + case 4: { + let dx = x2 - centerPointVector.x - returnBounds.width / 2; + let dy = y2 - centerPointVector.y - returnBounds.height / 2; + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.width = returnBounds.width + dx; + returnBounds.height = returnBounds.height + dy; + if (er) { + returnBounds.y = returnBounds.y - dx / wbh / 2; + returnBounds.height = returnBounds.height + dx / wbh; + returnBounds.x = returnBounds.x - dy * wbh / 2; + returnBounds.width = returnBounds.width + dy * wbh; + } + break; + } + case 5: { + let dy = y2 - centerPointVector.y - returnBounds.height / 2; + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + returnBounds.height = returnBounds.height + dy; + if (er) { + returnBounds.x = returnBounds.x - dy * wbh / 2; + returnBounds.width = returnBounds.width + dy * wbh; + } + break; + } + case 6: { + let dy = y2 - centerPointVector.y - returnBounds.height / 2; + let dx = -(centerPointVector.x - x2 - returnBounds.width / 2); + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.x = returnBounds.x + dx; + returnBounds.width = returnBounds.width - dx; + returnBounds.height = returnBounds.height + dy; + if (er) { + returnBounds.x = returnBounds.x - dy * wbh / 2; + returnBounds.width = returnBounds.width + dy * wbh; + returnBounds.y = returnBounds.y + dx / wbh / 2; + returnBounds.height = returnBounds.height - dx / wbh; + } + break; + } + case 7: { + let dx = -(centerPointVector.x - x2 - returnBounds.width / 2); + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.x = returnBounds.x + dx; + returnBounds.width = returnBounds.width - dx; + if (er) { + returnBounds.y = returnBounds.y + dx / wbh / 2; + returnBounds.height = returnBounds.height - dx / wbh; + } + break; + } + case 8: { + let dy = y2 - (centerPointVector.y - returnBounds.height / 2); + let dx = -(centerPointVector.x - x2 - returnBounds.width / 2); + if (hAdsValue != Infinity) { + dy = hAdsValue; + } + if (vAdsValue != Infinity) { + dx = vAdsValue; + } + returnBounds.x = returnBounds.x + dx; + returnBounds.width = returnBounds.width - dx; + returnBounds.y = returnBounds.y + dy; + returnBounds.height = returnBounds.height - dy; + if (er) { + returnBounds.y = returnBounds.y + dx / wbh / 2; + returnBounds.height = returnBounds.height - dx / wbh; + returnBounds.x = returnBounds.x + dy * wbh / 2; + returnBounds.width = returnBounds.width - dy * wbh; + } + break; + } + } + return returnBounds; + } + }; + __publicField2(_DDeiSelectorCanvasRender, "ClsName", "DDeiSelectorCanvasRender"); + let DDeiSelectorCanvasRender = _DDeiSelectorCanvasRender; + const __vite_glob_1_8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiSelectorCanvasRender, + default: DDeiSelectorCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiStageCanvasRender = class _DDeiStageCanvasRender2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "model"); + __publicField2(this, "ddRender"); + __publicField2(this, "currentOperateShape", null); + __publicField2(this, "operateState", DDeiEnumOperateState.NONE); + __publicField2(this, "selector"); + __publicField2(this, "editorShadowControl", null); + __publicField2(this, "refresh", true); + __publicField2(this, "hScroll", null); + __publicField2(this, "vScroll", null); + __publicField2(this, "renderCacheData", /* @__PURE__ */ new Map()); + this.model = props.model; + this.ddRender = null; + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiStageCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 初始化 + */ + init() { + this.ddRender = this.model.ddInstance.render; + this.initSelector(); + } + /** + * 创建图形 + */ + drawShape() { + var _a3, _b2, _c2, _d2; + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + if (rsState == 0 || rsState == 1) { + let rsState1 = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + let canvas = this.ddRender.getCanvas(); + let rat1 = this.ddRender.ratio; + if (rsState1 == 0 || rsState1 == 1) { + this.clearStage(); + if (this.model.disabled || !this.model.width || !this.model.height) { + return; + } + let ruleDisplay; + let ruleInit; + if (((_a3 = this.model.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.model.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.model.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = this.model.ruler.display; + } else if (this.model.ddInstance.ruler != null && this.model.ddInstance.ruler != void 0) { + if (typeof this.model.ddInstance.ruler == "boolean") { + ruleDisplay = this.model.ddInstance.ruler ? 1 : 0; + } else { + ruleInit = this.model.ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "ruler.display", true); + } + this.tempRuleDisplay = ruleDisplay; + this.drawPaper(); + this.calScroll(); + let ctx = canvas.getContext("2d"); + ctx.save(); + ctx.translate(this.model.wpv.x * rat1, this.model.wpv.y * rat1); + let topDisplayIndex = -1; + let initI = this.model.layers.length - 1; + for (let i2 = initI; i2 >= 0; i2--) { + if (this.model.layers[i2].tempDisplay) { + topDisplayIndex = i2; + } else if (this.model.layers[i2].display == 1) { + this.model.layers[i2].render.tempZIndex = initI - i2 + 1; + this.model.layers[i2].render.drawShape(); + } else if (this.model.layers[i2].display == 0) { + this.model.layers[i2].render.drawShape(); + } + } + if (topDisplayIndex != -1) { + this.model.layers[topDisplayIndex].render.tempZIndex = initI + 2; + this.model.layers[topDisplayIndex].render.drawShape(); + } + this.drawGrid(topDisplayIndex == -1 ? 0 : topDisplayIndex); + this.drawEditorShadowControl(); + if (this.selector) { + this.selector.render.drawShape(); + } + ctx.restore(); + this.drawMark(); + this.drawRuler(); + this.drawHelpLines(); + this.drawScroll(); + this.helpLines = null; + } + DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_VIEW_AFTER", DDeiEnumOperateType.VIEW, { models: [this.model] }, this.ddRender.model, null); + let viewerEles = (_d2 = canvas.parentElement) == null ? void 0 : _d2.getElementsByClassName("ddei-editor-canvasview-contentlayer"); + if (viewerEles) { + let ruleWeight = 0; + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + ruleWeight = 15; + } + let hScrollWeight = 0, vScrollWeight = 0; + if (this.vScroll) { + vScrollWeight = 15; + } + if (this.hScroll) { + hScrollWeight = 15; + } + for (let ei = 0; ei < viewerEles.length; ei++) { + let viewerEle = viewerEles[ei]; + viewerEle.style.marginLeft = ruleWeight + "px"; + viewerEle.style.marginTop = ruleWeight + "px"; + viewerEle.style.width = canvas.offsetWidth / rat1 - ruleWeight - vScrollWeight + "px"; + viewerEle.style.height = canvas.offsetHeight / rat1 - ruleWeight - hScrollWeight + "px"; + } + delete this.tempRuleDisplay; + } + } + } + /** + * 显示辅助对齐线以及文本 + */ + drawHelpLines() { + var _a3, _b2, _c2; + if (this.helpLines) { + let ruleInit; + if (((_a3 = this.model.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.model.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.model.ruler) == null ? void 0 : _c2.display) == false) + ; + else if (this.model.ddInstance.ruler != null && this.model.ddInstance.ruler != void 0) { + if (typeof this.model.ddInstance.ruler == "boolean") + ; + else { + ruleInit = this.model.ddInstance.ruler; + } + } else + ; + let hpoint = this.helpLines.hpoint; + let vpoint = this.helpLines.vpoint; + let rect = this.helpLines.rect; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let ratio = rat1 * stageRatio2; + ctx.save(); + ctx.translate((this.model.wpv.x + 1) * rat1, (this.model.wpv.y + 1) * rat1); + if (rect) { + ctx.save(); + ctx.textAlign = "left"; + ctx.textBaseline = "top"; + let fontSize = 12; + let font = "bold " + fontSize * rat1 + "px Microsoft YaHei"; + ctx.font = font; + let xText = 0; + let yText = 0; + if (this.operateState == DDeiEnumOperateState.CONTROL_DRAGING || this.operateState == DDeiEnumOperateState.CONTROL_CREATING) { + xText = rect.x.toFixed(0); + yText = rect.y.toFixed(0); + } else if (this.operateState == DDeiEnumOperateState.CONTROL_CHANGING_BOUND) { + xText = rect.width.toFixed(0); + yText = rect.height.toFixed(0); + } else if (this.operateState == DDeiEnumOperateState.CONTROL_ROTATE) { + xText = rect.rotate.toFixed(0); + } + if ((this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") && this.operateState != DDeiEnumOperateState.CONTROL_ROTATE) { + let stageRatio22 = this.model.getStageRatio(); + let xDPI = this.ddRender.model.dpi.x; + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "ruler.unit", true, ruleInit); + let rulerConfig = DDeiConfig$1.RULER[unit]; + let unitWeight = DDeiUtil$1.unitToPix(rulerConfig.size, unit, xDPI) * rat1; + let marginWeight = unitWeight * stageRatio22; + if (this.operateState == DDeiEnumOperateState.CONTROL_DRAGING || this.operateState == DDeiEnumOperateState.CONTROL_CREATING) { + let startBaseX = this.model.spv.x * rat1; + let startBaseY = this.model.spv.y * rat1; + xText = (rect.x * rat1 - startBaseX) / marginWeight * rulerConfig.size; + yText = (rect.y * rat1 - startBaseY) / marginWeight * rulerConfig.size; + } else if (this.operateState == DDeiEnumOperateState.CONTROL_CHANGING_BOUND) { + xText = rect.width * rat1 / marginWeight * rulerConfig.size; + yText = rect.height * rat1 / marginWeight * rulerConfig.size; + } + if (xText) { + if (("" + xText).indexOf(".") != -1) { + xText = xText.toFixed(1); + } + xText += rulerConfig.title; + } + if (yText) { + if (("" + yText).indexOf(".") != -1) { + yText = yText.toFixed(1); + } + yText += rulerConfig.title; + } + } + let text2 = ""; + if (xText || yText) { + if (this.operateState == DDeiEnumOperateState.CONTROL_DRAGING || this.operateState == DDeiEnumOperateState.CONTROL_CREATING) { + text2 = xText + " , " + yText; + } else if (this.operateState == DDeiEnumOperateState.CONTROL_CHANGING_BOUND) { + text2 = xText + " x " + yText; + } else if (this.operateState == DDeiEnumOperateState.CONTROL_ROTATE) { + text2 = xText + "°"; + } + } + let textRect = DDeiUtil$1.measureText(text2, font, ctx, fontSize * rat1); + let width = textRect.width / rat1 + 10; + let height = fontSize + 4; + let x2, y2; + if (this.operateState == DDeiEnumOperateState.CONTROL_DRAGING || this.operateState == DDeiEnumOperateState.CONTROL_CREATING) { + x2 = (rect.x * stageRatio2 - width / 2) * rat1; + y2 = (rect.y * stageRatio2 - height - 5) * rat1; + } else if (this.operateState == DDeiEnumOperateState.CONTROL_CHANGING_BOUND) { + x2 = (rect.x * stageRatio2 + (rect.width - width) / 2) * rat1; + y2 = (rect.y * stageRatio2 + rect.height + height / 2) * rat1; + } else if (this.operateState == DDeiEnumOperateState.CONTROL_ROTATE) { + x2 = rect.x * ratio; + y2 = rect.y * ratio; + } + width *= rat1; + height *= rat1; + DDeiUtil$1.drawRectRound(ctx, x2, y2, width, height, 5, false, "", true, "#1F72FF"); + ctx.fillStyle = "white"; + ctx.fillText(text2, x2 + (width - textRect.width) / 2, y2 + (height - fontSize * rat1) / 2); + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + ctx.strokeStyle = "red"; + let weight = 16 * rat1; + ctx.lineWidth = 1.5 * rat1; + ctx.globalAlpha = 0.5; + let x1 = (rect.x * stageRatio2 + this.model.wpv.x) * rat1; + let y1 = (rect.y * stageRatio2 + this.model.wpv.y) * rat1; + ctx.translate(-this.model.wpv.x * rat1, -this.model.wpv.y * rat1); + ctx.beginPath(); + ctx.moveTo(x1, 0); + ctx.lineTo(x1, weight); + ctx.closePath(); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(0, y1); + ctx.lineTo(weight, y1); + ctx.closePath(); + ctx.stroke(); + } + ctx.restore(); + } + if (this.ddRender.model.GLOBAL_HELP_LINE_ENABLE) { + let lineOffset = 0; + ctx.lineWidth = 1 * ratio; + ctx.setLineDash([0, 1 * ratio, 1 * ratio]); + ctx.strokeStyle = DDeiUtil$1.getStyleValue("dot", this.ddRender.model); + if (hpoint) { + for (let y2 in hpoint) { + ctx.beginPath(); + ctx.moveTo(hpoint[y2].sx * ratio - 100, y2 * ratio + lineOffset); + ctx.lineTo(hpoint[y2].ex * ratio + 100, y2 * ratio + lineOffset); + ctx.stroke(); + } + } + if (vpoint) { + for (let x2 in vpoint) { + ctx.beginPath(); + ctx.moveTo(x2 * ratio + lineOffset, vpoint[x2].sy * ratio - 100); + ctx.lineTo(x2 * ratio + lineOffset, vpoint[x2].ey * ratio + 100); + ctx.stroke(); + } + } + } + ctx.beginPath(); + ctx.restore(); + } + } + /** + * 绘制编辑时的影子元素 + */ + drawEditorShadowControl() { + if (this.editorShadowControl) { + let item = this.editorShadowControl; + item.render.drawShape(null, 0, null, 99999); + } + } + /** + * 清空画布 + */ + clearStage() { + let canvas = this.ddRender.getCanvas(); + canvas.width = canvas.width; + } + /** + * 绘制纸张 + */ + drawPaper() { + var _a3, _b2, _c2, _d2, _e2, _f; + let paperType; + if ((_a3 = this.model.paper) == null ? void 0 : _a3.type) { + paperType = this.model.paper.type; + } else if ((_b2 = this.ddRender) == null ? void 0 : _b2.model.paper) { + if (typeof ((_c2 = this.ddRender) == null ? void 0 : _c2.model.paper) == "string") { + paperType = (_d2 = this.ddRender) == null ? void 0 : _d2.model.paper; + } else { + paperType = (_e2 = this.ddRender) == null ? void 0 : _e2.model.paper.type; + } + } else { + paperType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "paper.type", true); + } + let paperConfig = DDeiConfig$1.PAPER[paperType]; + if (paperConfig) { + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let ratio = rat1 * stageRatio2; + let wpv = this.model.wpv; + let wpvX = -wpv.x * rat1; + let wpvY = -wpv.y * rat1; + let offsetWidth = 1 * ratio / 2; + let paperSize = DDeiUtil$1.getPaperSize(this.model, paperType); + let paperWidth = paperSize.width; + let paperHeight = paperSize.height; + let startPaperX = this.model.spv.x * ratio + 1; + let startPaperY = this.model.spv.y * ratio + 1; + let posX = startPaperX - wpvX + offsetWidth; + let posY = startPaperY - wpvY + offsetWidth; + this.paperStartX = posX; + this.paperStartY = posY; + let maxOutRect = DDeiAbstractShape.getOutRectByPV(this.model.getLayerModels()); + maxOutRect.x = maxOutRect.x * ratio; + maxOutRect.x1 = maxOutRect.x1 * ratio; + maxOutRect.y = maxOutRect.y * ratio; + maxOutRect.y1 = maxOutRect.y1 * ratio; + let leftExtNum = 0, rightExtNum = 0, topExtNum = 0, bottomExtNum = 0; + if (maxOutRect.width > 0 && maxOutRect.height > 0) { + if (maxOutRect.x < startPaperX) { + leftExtNum = parseInt((startPaperX - maxOutRect.x) / paperWidth); + if (Math.abs((startPaperX - maxOutRect.x) % paperWidth) > 1) { + leftExtNum++; + } + } + if (maxOutRect.x1 > startPaperX + paperWidth) { + rightExtNum = parseInt((maxOutRect.x1 - startPaperX - paperWidth) / paperWidth); + if (Math.abs((maxOutRect.x1 - startPaperX - paperWidth) % paperWidth) > 1) { + rightExtNum++; + } + } + if (maxOutRect.y < startPaperY) { + topExtNum = parseInt((startPaperY - maxOutRect.y) / paperHeight); + if (Math.abs((startPaperY - maxOutRect.y) % paperHeight) > 1) { + topExtNum++; + } + } + if (maxOutRect.y1 > startPaperY + paperHeight) { + bottomExtNum = parseInt((maxOutRect.y1 - startPaperY - paperHeight) / paperHeight); + if (Math.abs((maxOutRect.y1 - startPaperY - paperHeight) % paperHeight) > 1) { + bottomExtNum++; + } + } + } + let paperOutRect = { + x: posX + -leftExtNum * paperWidth, + y: posY + -topExtNum * paperHeight, + w: (rightExtNum + leftExtNum + 1) * paperWidth, + h: (bottomExtNum + topExtNum + 1) * paperHeight + }; + this.paperOutRect = paperOutRect; + let topDisplayIndex = -1; + let isBottom = true; + for (let l = this.model.layers.length - 1; l >= 0; l--) { + if (this.model.layers[l].tempDisplay) { + topDisplayIndex = l; + } else if (this.model.layers[l].display == 1) { + this.model.layers[l].render.drawBackground(paperOutRect.x, paperOutRect.y, paperOutRect.w, paperOutRect.h, isBottom); + isBottom = false; + } + } + if (topDisplayIndex != -1) { + this.model.layers[topDisplayIndex].render.drawBackground(paperOutRect.x, paperOutRect.y, paperOutRect.w, paperOutRect.h, isBottom); + isBottom = false; + } + let canvas = (_f = this.model.layers[topDisplayIndex == -1 ? 0 : topDisplayIndex].render) == null ? void 0 : _f.bgCanvas; + if (canvas) { + let ctx = canvas.getContext("2d"); + ctx.save(); + let ruleWeight = 0; + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + ruleWeight = 15; + } + ctx.translate(-ruleWeight * rat1, -ruleWeight * rat1); + ctx.lineWidth = 1; + ctx.fillStyle = "white"; + ctx.strokeStyle = "grey"; + ctx.setLineDash([5, 5]); + for (let i2 = -leftExtNum + 1; i2 <= rightExtNum; i2++) { + ctx.beginPath(); + ctx.moveTo(posX + i2 * paperWidth, paperOutRect.y); + ctx.lineTo(posX + i2 * paperWidth, paperOutRect.y + paperOutRect.h); + ctx.stroke(); + } + for (let i2 = -topExtNum + 1; i2 <= bottomExtNum; i2++) { + ctx.beginPath(); + ctx.moveTo(paperOutRect.x, posY + i2 * paperHeight); + ctx.lineTo(paperOutRect.x + paperOutRect.w, posY + i2 * paperHeight); + ctx.stroke(); + } + ctx.setLineDash([]); + let lineWidth = 1; + ctx.lineWidth = lineWidth; + ctx.strokeStyle = "black"; + ctx.strokeRect(posX + -leftExtNum * paperWidth - lineWidth, posY + -topExtNum * paperHeight - lineWidth, (rightExtNum + leftExtNum + 1) * paperWidth + 2 * lineWidth, (bottomExtNum + topExtNum + 1) * paperHeight + 2 * lineWidth); + ctx.restore(); + } + } else { + let canvas = this.ddRender.getCanvas(); + let topDisplayIndex = -1; + for (let l = this.model.layers.length - 1; l >= 0; l--) { + if (this.model.layers[l].tempDisplay) { + topDisplayIndex = l; + } else if (this.model.layers[l].display == 1) { + this.model.layers[l].render.drawBackground(0, 0, canvas.width, canvas.height); + } + } + if (topDisplayIndex != -1) { + this.model.layers[topDisplayIndex].render.drawBackground(0, 0, canvas.width, canvas.height); + } + } + } + drawTest() { + let linePathData = this.linePathData; + if (linePathData) { + let corssPoints = linePathData.corssPoints; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let ratio = rat1 * stageRatio2; + ctx.save(); + ctx.font = "bold " + 12 * ratio + "px Microsoft YaHei"; + corssPoints.forEach((point2) => { + let weight = 3; + ctx.fillStyle = "grey"; + ctx.strokeStyle = "green"; + ctx.beginPath(); + ctx.ellipse(point2.x * rat1, point2.y * rat1, weight * ratio, weight * ratio, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + ctx.closePath(); + }); + let extLines = linePathData.extLines; + ctx.lineWidth = 1; + extLines.forEach((extLine) => { + ctx.strokeStyle = "red"; + ctx.globalAlpha = 0.1; + ctx.beginPath(); + ctx.moveTo(extLine[0].x * rat1, extLine[0].y * rat1); + if (extLine[0].color) { + ctx.strokeStyle = extLine[0].color; + ctx.globalAlpha = 0.3; + } + if (extLine[0].x == extLine[1].x) { + if (extLine[0].y >= extLine[1].y) { + ctx.lineTo(extLine[1].x * rat1, (extLine[1].y - 1e3) * rat1); + } else { + ctx.lineTo(extLine[1].x * rat1, (extLine[1].y + 1e3) * rat1); + } + } else if (extLine[0].y == extLine[1].y) { + if (extLine[0].x >= extLine[1].x) { + ctx.lineTo((extLine[1].x - 1e3) * rat1, extLine[1].y * rat1); + } else { + ctx.lineTo((extLine[1].x + 1e3) * rat1, extLine[1].y * rat1); + } + } + ctx.stroke(); + ctx.closePath(); + }); + ctx.restore(); + } + } + /** + * 标尺 + */ + drawRuler() { + var _a3, _b2, _c2, _d2, _e2; + let ruleInit; + if (((_a3 = this.model.ruler) == null ? void 0 : _a3.display) || ((_b2 = this.model.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = this.model.ruler) == null ? void 0 : _c2.display) == false) + ; + else if (this.model.ddInstance.ruler != null && this.model.ddInstance.ruler != void 0) { + if (typeof this.model.ddInstance.ruler == "boolean") + ; + else { + ruleInit = this.model.ddInstance.ruler; + } + } else + ; + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + let canvas = (_d2 = this.ddRender) == null ? void 0 : _d2.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let xDPI = this.ddRender.model.dpi.x; + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "ruler.unit", true, ruleInit); + let rulerConfig = DDeiConfig$1.RULER[unit]; + let unitWeight = DDeiUtil$1.unitToPix(rulerConfig.size, unit, xDPI) * rat1; + let marginWeight = unitWeight * stageRatio2; + let timesNums = [0.25, 0.5, 1, 2, 4, 8]; + let curTimes = 0.25; + for (let i2 = 1; i2 < timesNums.length; i2++) { + if (stageRatio2 >= timesNums[i2]) { + curTimes = timesNums[i2]; + } + } + let standWeight = curTimes * unitWeight; + let passPercent = Math.round((marginWeight - standWeight) / standWeight * 100); + let splitNumber = rulerConfig.parts[0]; + if (passPercent > 0) { + let p = Math.round(1 / rulerConfig.parts.length * 100); + for (let i2 = 1; i2 < rulerConfig.parts.length; i2++) { + if (passPercent >= i2 * p) { + splitNumber = rulerConfig.parts[i2]; + } + } + } + let splitedWeight = marginWeight / splitNumber; + let weight = 16 * rat1; + ctx.save(); + let fontSize = 9.5; + if (stageRatio2 <= 0.5) { + fontSize -= 1; + } else if (stageRatio2 <= 0.25) { + fontSize -= 3; + } + fontSize *= rat1; + ctx.font = fontSize + "px Microsoft YaHei"; + ctx.lineWidth = 1; + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-rule-background", this.ddRender.model); + let cwidth = canvas.width; + let cheight = canvas.height; + let paperSize = DDeiUtil$1.getPaperSize(this.model); + let paperWidth = paperSize.width; + let paperHeight = paperSize.height; + if (!this.model.spv) { + let sx = this.model.width / 2 - paperWidth / 2 / rat1 / stageRatio2; + let sy = this.model.height / 2 - paperHeight / 2 / rat1 / stageRatio2; + this.model.spv = new Vector3(sx, sy, 1); + } + let startBaseX = this.model.spv.x * rat1 * stageRatio2; + let startBaseY = this.model.spv.y * rat1 * stageRatio2; + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + ctx.beginPath(); + ctx.fillRect(0, 0, cwidth, weight); + ctx.moveTo(cwidth, 0); + ctx.lineTo(cwidth, weight); + ctx.lineTo(0, weight); + ctx.stroke(); + ctx.beginPath(); + ctx.fillRect(0, 0, weight, cheight); + ctx.moveTo(0, cheight); + ctx.lineTo(weight, cheight); + ctx.lineTo(weight, 0); + ctx.stroke(); + } + let textOffset = 1 * rat1; + ctx.fillStyle = "rgb(200,200,200)"; + let wpvX = -this.model.wpv.x * rat1; + let wpvY = -this.model.wpv.y * rat1; + let x2 = 0; + let curX = startBaseX - wpvX; + while (curX <= cwidth) { + if (curX > weight) { + ctx.beginPath(); + ctx.moveTo(curX, 0); + let nMod = x2 % splitNumber; + if (nMod != 0) { + ctx.moveTo(curX, 15); + } + if (nMod != 0) { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } else { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } + ctx.lineTo(curX, weight); + ctx.stroke(); + } + curX += splitedWeight; + x2++; + } + x2 = 0; + curX = startBaseX - wpvX; + while (curX >= 0) { + if (curX > weight) { + ctx.beginPath(); + ctx.moveTo(curX, 0); + let nMod = x2 % splitNumber; + if (nMod != 0) { + ctx.moveTo(curX, 15); + } + if (nMod != 0) { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } else { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } + ctx.lineTo(curX, weight); + ctx.stroke(); + } + curX -= splitedWeight; + x2--; + } + let curY = startBaseY - wpvY; + let y2 = 0; + while (curY <= cheight) { + if (curY > weight) { + ctx.beginPath(); + ctx.moveTo(0, curY); + let lineToNumber = 0; + let nMod = y2 % splitNumber; + if (nMod != 0) { + ctx.moveTo(15, curY); + } + lineToNumber = weight; + if (nMod != 0) { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } else { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-rule-border", this.ddRender.model); + } + ctx.lineTo(lineToNumber, curY); + ctx.stroke(); + } + curY += splitedWeight; + y2++; + } + curY = startBaseY - wpvY; + y2 = 0; + while (curY >= 0) { + if (curY > weight) { + ctx.beginPath(); + ctx.moveTo(0, curY); + let lineToNumber = 0; + let nMod = y2 % splitNumber; + if (nMod != 0) { + ctx.moveTo(15, curY); + } + lineToNumber = weight; + if (nMod != 0) { + ctx.strokeStyle = "rgb(230,230,230)"; + } else { + ctx.strokeStyle = "rgb(220,220,220)"; + } + ctx.lineTo(lineToNumber, curY); + ctx.stroke(); + } + curY -= splitedWeight; + y2--; + } + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-control-title", this.ddRender.model); + curX = startBaseX - wpvX; + x2 = 0; + let textTime = 1; + if (stageRatio2 > 0.25 && stageRatio2 <= 0.5) { + textTime = 2; + } else if (stageRatio2 > 0 && stageRatio2 <= 0.25) { + textTime = 4; + } + while (curX <= cwidth) { + if (x2 % textTime == 0) { + let posText = x2 * rulerConfig.size + ""; + if (posText.indexOf(".") != -1) { + posText = parseFloat(posText).toFixed(2); + } + ctx.fillText(posText, curX + textOffset, fontSize); + } + x2++; + curX += marginWeight; + } + curX = startBaseX - wpvX; + x2 = 0; + while (curX >= 0) { + if (x2 % textTime == 0) { + let posText = x2 * rulerConfig.size + ""; + if (posText.indexOf(".") != -1) { + posText = parseFloat(posText).toFixed(2); + } + ctx.fillText(posText, curX + textOffset, fontSize); + } + x2--; + curX -= marginWeight; + } + ctx.save(); + ctx.scale(-1, 1); + ctx.rotate(90 * DDeiConfig$1.ROTATE_UNIT); + ctx.scale(-1, 1); + curY = startBaseY - wpvY; + y2 = 0; + let oneSize = DDeiUtil$1.measureTextSize((_e2 = this.ddRender) == null ? void 0 : _e2.model, "0", "Microsoft YaHei", fontSize).width; + while (curY <= cheight) { + if (y2 % textTime == 0) { + let posText = y2 * rulerConfig.size + ""; + if (posText.indexOf(".") != -1) { + posText = parseFloat(posText).toFixed(2); + } + ctx.fillText(posText, -curY - textOffset - oneSize * posText.length, fontSize); + } + y2++; + curY += marginWeight; + } + curY = startBaseY - wpvY; + y2 = 0; + while (curY >= 0) { + if (y2 % textTime == 0) { + let posText = y2 * rulerConfig.size + ""; + if (posText.indexOf(".") != -1) { + posText = parseFloat(posText).toFixed(2); + } + ctx.fillText(posText, -curY - textOffset - oneSize * posText.length, fontSize); + } + y2--; + curY -= marginWeight; + } + ctx.restore(); + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-rule-background", this.ddRender.model); + ctx.fillRect(0, 0, weight, weight); + ctx.moveTo(0, weight); + ctx.lineTo(weight, weight); + ctx.stroke(); + ctx.moveTo(weight, 0); + ctx.lineTo(weight, weight); + ctx.stroke(); + let selectedModels = this.model.selectedModels; + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + let rect = DDeiAbstractShape.getOutRectByPV(Array.from(selectedModels == null ? void 0 : selectedModels.values())); + ctx.strokeStyle = "#1F72FF"; + let weight2 = 16 * rat1; + ctx.lineWidth = 1.5 * rat1; + ctx.globalAlpha = 0.7; + let x1 = (rect.x * stageRatio2 + this.model.wpv.x) * rat1; + let y1 = (rect.y * stageRatio2 + this.model.wpv.y) * rat1; + ctx.beginPath(); + ctx.moveTo(x1, 0); + ctx.lineTo(x1, weight2); + ctx.closePath(); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(0, y1); + ctx.lineTo(weight2, y1); + ctx.closePath(); + ctx.stroke(); + } + ctx.restore(); + } + } + /** + * 绘制网格 + */ + drawGrid(layerIndex) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k; + if (layerIndex == -1 || !this.model.layers[layerIndex].render.bgCanvas) { + return; + } + let paperType; + if ((_a3 = this.model.paper) == null ? void 0 : _a3.type) { + paperType = this.model.paper.type; + } else if ((_b2 = this.ddRender) == null ? void 0 : _b2.model.paper) { + if (typeof ((_c2 = this.ddRender) == null ? void 0 : _c2.model.paper) == "string") { + paperType = (_d2 = this.ddRender) == null ? void 0 : _d2.model.paper; + } else { + paperType = (_e2 = this.ddRender) == null ? void 0 : _e2.model.paper.type; + } + } else { + paperType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "paper.type", true); + } + let paperConfig = DDeiConfig$1.PAPER[paperType]; + if (paperConfig) { + let gridDisplay; + if (((_f = this.model.grid) == null ? void 0 : _f.display) || ((_g = this.model.grid) == null ? void 0 : _g.display) == 0) { + gridDisplay = (_h = this.model.grid) == null ? void 0 : _h.display; + } else if (((_i = this.ddRender) == null ? void 0 : _i.model.grid) || ((_j = this.ddRender) == null ? void 0 : _j.model.grid) == 0) { + gridDisplay = (_k = this.ddRender) == null ? void 0 : _k.model.grid; + } else { + gridDisplay = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "grid.display", true); + } + if (gridDisplay == 1 || gridDisplay == "1" || gridDisplay == 2 || gridDisplay == "2") { + let canvas = this.model.layers[layerIndex].render.bgCanvas; + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let xDPI = this.ddRender.model.dpi.x; + let ruleInit; + if (this.model.ddInstance.ruler) { + if (typeof this.model.ddInstance.ruler == "object") { + ruleInit = this.model.ddInstance.ruler; + } + } + let unit = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "ruler.unit", true, ruleInit); + let rulerConfig = DDeiConfig$1.RULER[unit]; + let unitWeight = DDeiUtil$1.unitToPix(rulerConfig.size, unit, xDPI) * rat1; + let marginWeight = unitWeight * stageRatio2; + let timesNums = [0.25, 0.5, 1, 2, 4, 8]; + let curTimes = 0.25; + for (let i2 = 1; i2 < timesNums.length; i2++) { + if (stageRatio2 >= timesNums[i2]) { + curTimes = timesNums[i2]; + } + } + let standWeight = curTimes * unitWeight; + let passPercent = Math.round((marginWeight - standWeight) / standWeight * 100); + let splitNumber = rulerConfig.parts[0]; + if (passPercent > 0) { + let p = Math.round(1 / rulerConfig.parts.length * 100); + for (let i2 = 1; i2 < rulerConfig.parts.length; i2++) { + if (passPercent >= i2 * p) { + splitNumber = rulerConfig.parts[i2]; + } + } + } + let paperOutRect = this.paperOutRect; + let splitedWeight = marginWeight / splitNumber; + ctx.save(); + let ruleWeight = 0; + if (this.tempRuleDisplay == 1 || this.tempRuleDisplay == "1") { + ruleWeight = 15; + } + ctx.translate(-ruleWeight * rat1, -ruleWeight * rat1); + let fontSize = 11 * rat1; + ctx.font = fontSize + "px Microsoft YaHei"; + ctx.lineWidth = 1; + ctx.strokeStyle = "rgb(190,190,190)"; + ctx.fillStyle = "white"; + let ex = paperOutRect.x + paperOutRect.w; + let ey = paperOutRect.y + paperOutRect.h; + if (gridDisplay == 2 || gridDisplay == "2") { + ctx.strokeStyle = DDeiUtil$1.getColorObj(DDeiUtil$1.getStyleValue("canvas-grid-dot", this.ddRender.model)); + ctx.lineWidth = 2 * stageRatio2; + ctx.setLineDash([2 * stageRatio2, splitedWeight - stageRatio2]); + for (let sx = this.paperStartX; sx <= ex; sx = sx + splitedWeight) { + ctx.beginPath(); + ctx.moveTo(sx, paperOutRect.y); + ctx.lineTo(sx, ey); + ctx.stroke(); + } + for (let sx = this.paperStartX; sx >= paperOutRect.x; sx = sx - splitedWeight) { + ctx.beginPath(); + ctx.moveTo(sx, paperOutRect.y); + ctx.lineTo(sx, ey); + ctx.stroke(); + } + } else if (gridDisplay == 1 || gridDisplay == "1") { + let strokeColor = DDeiUtil$1.getColorObj(DDeiUtil$1.getStyleValue("canvas-grid-line", this.ddRender.model)); + let strokeLighten = strokeColor == null ? void 0 : strokeColor.lighten(0.05); + for (let sx = this.paperStartX, n = 0; sx <= ex; sx = sx + splitedWeight, n++) { + let nMod = n % splitNumber; + if (nMod != 0) { + ctx.strokeStyle = strokeLighten == null ? void 0 : strokeLighten.toColor(); + } else { + ctx.strokeStyle = strokeColor == null ? void 0 : strokeColor.toColor(); + } + ctx.beginPath(); + ctx.moveTo(sx, paperOutRect.y); + ctx.lineTo(sx, ey); + ctx.stroke(); + } + for (let sx = this.paperStartX, n = 0; sx >= paperOutRect.x; sx = sx - splitedWeight, n++) { + let nMod = n % splitNumber; + if (nMod != 0) { + ctx.strokeStyle = strokeLighten == null ? void 0 : strokeLighten.toColor(); + } else { + ctx.strokeStyle = strokeColor == null ? void 0 : strokeColor.toColor(); + } + ctx.beginPath(); + ctx.moveTo(sx, paperOutRect.y); + ctx.lineTo(sx, ey); + ctx.stroke(); + } + for (let sy = this.paperStartY, n = 0; sy <= ey; sy = sy + splitedWeight, n++) { + let nMod = n % splitNumber; + if (nMod != 0) { + ctx.strokeStyle = strokeLighten == null ? void 0 : strokeLighten.toColor(); + } else { + ctx.strokeStyle = strokeColor == null ? void 0 : strokeColor.toColor(); + } + ctx.beginPath(); + ctx.moveTo(paperOutRect.x, sy); + ctx.lineTo(ex, sy); + ctx.stroke(); + } + for (let sy = this.paperStartY, n = 0; sy >= paperOutRect.y; sy = sy - splitedWeight, n++) { + let nMod = n % splitNumber; + if (nMod != 0) { + ctx.strokeStyle = strokeLighten == null ? void 0 : strokeLighten.toColor(); + } else { + ctx.strokeStyle = strokeColor == null ? void 0 : strokeColor.toColor(); + } + ctx.beginPath(); + ctx.moveTo(paperOutRect.x, sy); + ctx.lineTo(ex, sy); + ctx.stroke(); + } + } + ctx.restore(); + } + } + } + /** + * 绘制水印 + */ + drawMark() { + var _a3, _b2, _c2; + let ddInstance = (_a3 = this.ddRender) == null ? void 0 : _a3.model; + let markInit; + if (ddInstance.mark) { + if (typeof ddInstance.mark == "object") { + markInit = ddInstance.mark; + } else { + markInit = { data: ddInstance == null ? void 0 : ddInstance.mark, type: 1 }; + } + } + let markType = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.type", true, markInit); + if (markType == 1 || markType == "1") { + let text2 = DDeiUtil$1.getReplacibleValue(this.model, "mark.data", false, false, markInit); + if (text2) { + if (!this.markCanvas) { + this.markCanvas = document.createElement("canvas"); + } + let markCanvas = this.markCanvas; + let canvas = (_b2 = this.ddRender) == null ? void 0 : _b2.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let ratio = rat1 * stageRatio2; + ctx.save(); + let fiFamily = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.font.family", true, markInit); + let fiSize = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.font.size", true, markInit); + let fiColor = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.font.color", true, markInit); + if (!fiColor) { + fiColor = DDeiUtil$1.getStyleValue("canvas-mark-title", this.ddRender.model); + } + let fontSize = fiSize * ratio; + let textSize = DDeiUtil$1.measureTextSize(this.model.ddInstance, text2, fiFamily, fontSize); + let weight = Math.max(textSize.width, textSize.height); + let direct = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.direct", true, markInit); + let ps = [ + new Vector3(-weight * 0.5, -weight * 0.5, 1), + new Vector3(weight * 0.5, -weight * 0.5, 1), + new Vector3(weight * 0.5, weight * 0.5, 1), + new Vector3(-weight * 0.5, weight * 0.5, 1) + ]; + if (direct == 1) { + let rotateMatrix = new Matrix3( + Math.cos(45 * DDeiConfig$1.ROTATE_UNIT), + Math.sin(45 * DDeiConfig$1.ROTATE_UNIT), + 0, + -Math.sin(45 * DDeiConfig$1.ROTATE_UNIT), + Math.cos(45 * DDeiConfig$1.ROTATE_UNIT), + 0, + 0, + 0, + 1 + ); + ps.forEach((p) => { + p.applyMatrix3(rotateMatrix); + }); + let outRect = DDeiAbstractShape.pvsToOutRect(ps); + markCanvas.setAttribute("width", outRect.width); + markCanvas.setAttribute("height", outRect.height); + } else if (direct == 2) { + let rotateMatrix = new Matrix3( + Math.cos(-45 * DDeiConfig$1.ROTATE_UNIT), + Math.sin(-45 * DDeiConfig$1.ROTATE_UNIT), + 0, + -Math.sin(-45 * DDeiConfig$1.ROTATE_UNIT), + Math.cos(-45 * DDeiConfig$1.ROTATE_UNIT), + 0, + 0, + 0, + 1 + ); + ps.forEach((p) => { + p.applyMatrix3(rotateMatrix); + }); + let outRect = DDeiAbstractShape.pvsToOutRect(ps); + markCanvas.setAttribute("width", outRect.width); + markCanvas.setAttribute("height", outRect.height); + } else { + markCanvas.setAttribute("width", weight); + markCanvas.setAttribute("height", weight); + } + let markCtx = markCanvas.getContext("2d"); + markCtx.save(); + markCtx.font = fontSize + "px " + fiFamily; + markCtx.fillStyle = fiColor; + let opac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.opacity", true, markInit); + if (opac) { + markCtx.globalAlpha = opac; + } + if (direct == 1) { + markCtx.translate(markCanvas.width * 0.5, markCanvas.height * 0.5); + markCtx.rotate(45 * DDeiConfig$1.ROTATE_UNIT); + markCtx.translate(-markCanvas.width * 0.5, -markCanvas.height * 0.5); + } else if (direct == 2) { + markCtx.translate(markCanvas.width * 0.5, markCanvas.height * 0.5); + markCtx.rotate(-45 * DDeiConfig$1.ROTATE_UNIT); + markCtx.translate(-markCanvas.width * 0.5, -markCanvas.height * 0.5); + } + markCtx.clearRect(0, 0, markCanvas.width, markCanvas.height); + markCtx == null ? void 0 : markCtx.fillText(text2, 0, (markCanvas.height - textSize.height) / 2); + let marginWidth = textSize.width + 50 * ratio; + let marginHeight = textSize.height + 100 * ratio; + this.paperOutRect; + let cwidth = this.model.width * rat1; + let cheight = this.model.height * rat1; + let startBaseX = this.model.spv.x * ratio; + let wpvX = -this.model.wpv.x * rat1; + let startBaseY = this.model.spv.y * ratio; + let wpvY = -this.model.wpv.y * rat1; + for (let x2 = startBaseX - wpvX; x2 <= cwidth; x2 += marginWidth) { + for (let y2 = startBaseY - wpvY; y2 <= cheight; y2 += marginHeight) { + ctx.drawImage(markCanvas, x2, y2); + } + for (let y2 = startBaseY - wpvY - marginHeight; y2 >= 0; y2 -= marginHeight) { + ctx.drawImage(markCanvas, x2, y2); + } + } + for (let x2 = startBaseX - wpvX - marginWidth; x2 >= 0; x2 -= marginWidth) { + for (let y2 = startBaseY - wpvY; y2 <= cheight; y2 += marginHeight) { + ctx.drawImage(markCanvas, x2, y2); + } + for (let y2 = startBaseY - wpvY - marginHeight; y2 >= 0; y2 -= marginHeight) { + ctx.drawImage(markCanvas, x2, y2); + } + } + ctx.restore(); + markCtx.restore(); + } + } else if (markType == 2 || markType == "2") { + let imgData = DDeiUtil$1.getReplacibleValue(this.model, "mark.data", false, false, markInit); + if (!((_c2 = this.mark) == null ? void 0 : _c2.imgObj) || this.mark.upMarkImg != imgData) { + this.initMarkImage(); + } else { + if (!this.markCanvas) { + this.markCanvas = document.createElement("canvas"); + } + let markCanvas = this.markCanvas; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + let stageRatio2 = this.model.getStageRatio(); + let ratio = rat1 * stageRatio2; + ctx.save(); + let weight = Math.max(this.mark.imgObj.width, this.mark.imgObj.height); + markCanvas.setAttribute("width", weight); + markCanvas.setAttribute("height", weight); + let markCtx = markCanvas.getContext("2d"); + markCtx.save(); + let opac = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.opacity", true, markInit); + if (opac) { + markCtx.globalAlpha = opac; + } + let direct = DDeiModelArrtibuteValue.getAttrValueByState(this.model, "mark.direct", true, markInit); + if (direct == 1) { + markCtx.translate(markCanvas.width * 0.5, markCanvas.height * 0.5); + markCtx.rotate(45 * DDeiConfig$1.ROTATE_UNIT); + markCtx.translate(-markCanvas.width * 0.5, -markCanvas.height * 0.5); + } else if (direct == 2) { + markCtx.translate(markCanvas.width * 0.5, markCanvas.height * 0.5); + markCtx.rotate(-45 * DDeiConfig$1.ROTATE_UNIT); + markCtx.translate(-markCanvas.width * 0.5, -markCanvas.height * 0.5); + } + markCtx.clearRect(0, 0, markCanvas.width, markCanvas.height); + markCtx.drawImage(this.mark.imgObj, weight - this.mark.imgObj.width, (weight - this.mark.imgObj.height) / 2); + let marginWidth = markCanvas.width + 50 * ratio; + let marginHeight = markCanvas.height + 50 * ratio; + let cwidth = canvas.width + marginWidth; + let cheight = canvas.height + marginHeight; + let x2 = -marginWidth; + let xdr = this.model.wpv.x * rat1 % marginWidth; + let ydr = this.model.wpv.y * rat1 % marginHeight; + for (; x2 <= cwidth; x2 += marginWidth) { + let y2 = -marginHeight; + for (; y2 <= cheight; y2 += marginHeight) { + ctx.drawImage(markCanvas, x2 + xdr, y2 + ydr); + } + } + ctx.restore(); + markCtx.restore(); + } + } + } + /** + * 绘制滚动条 + */ + drawScroll() { + var _a3, _b2; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let rat1 = this.ddRender.ratio; + ctx.save(); + let scrollWeight = rat1 * 15; + let cwidth = canvas.width - scrollWeight; + let cheight = canvas.height - scrollWeight; + if (this.hScroll) { + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-scroll-background", this.ddRender.model); + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-scroll-border", this.ddRender.model); + ctx.fillRect(0, cheight, this.hScroll.width * rat1, scrollWeight); + ctx.strokeRect(0, cheight, this.hScroll.width * rat1, scrollWeight); + ctx.fillStyle = "rgb(210,210,210)"; + if (this.operateState == DDeiEnumOperateState.STAGE_SCROLL_WORKING && ((_a3 = this.dragObj) == null ? void 0 : _a3.scroll) == 1) { + ctx.fillStyle = "rgb(200,200,200)"; + } + ctx.fillRect(this.hScroll.x * rat1, cheight, this.hScroll.contentWidth * rat1, scrollWeight); + } + if (this.vScroll) { + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-scroll-background", this.ddRender.model); + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-scroll-border", this.ddRender.model); + ctx.fillRect(cwidth, 0, scrollWeight, this.vScroll.height * rat1); + ctx.strokeRect(cwidth, 0, scrollWeight, this.vScroll.height * rat1); + ctx.fillStyle = "rgb(210,210,210)"; + if (this.operateState == DDeiEnumOperateState.STAGE_SCROLL_WORKING && ((_b2 = this.dragObj) == null ? void 0 : _b2.scroll) == 2) { + ctx.fillStyle = "rgb(200,200,200)"; + } + ctx.fillRect(cwidth, this.vScroll.y * rat1, scrollWeight, this.vScroll.contentHeight * rat1); + } + if (this.vScroll || this.hScroll) { + ctx.strokeStyle = DDeiUtil$1.getStyleValue("canvas-scroll-border", this.ddRender.model); + ctx.fillStyle = DDeiUtil$1.getStyleValue("canvas-scroll-background", this.ddRender.model); + ctx.fillRect(cwidth, cheight, scrollWeight, scrollWeight); + ctx.strokeRect(cwidth, cheight, scrollWeight, scrollWeight); + } + } + enableRefreshShape() { + } + /** + * 计算滚动条信息 + */ + calScroll() { + let canvas = this.ddRender.getCanvas(); + let rat1 = this.ddRender.ratio; + let canvasHeight = canvas.height / rat1; + let canvasWidth = canvas.width / rat1; + let curX = -this.model.wpv.x; + let curY = -this.model.wpv.y; + let scrollWeight = 15; + let maxWidth = this.model.width; + let maxHeight = this.model.height; + if (maxHeight > canvasHeight) { + let height = canvasHeight - scrollWeight; + this.vScroll = { height, contentHeight: height * height / maxHeight, y: height * curY / maxHeight, bn: curY / maxHeight }; + } else { + this.vScroll = null; + this.model.wpv.y = 0; + } + if (maxWidth > canvasWidth) { + let width = canvasWidth - scrollWeight; + this.hScroll = { width, contentWidth: width * width / maxWidth, x: width * curX / maxWidth, bn: curX / maxWidth }; + } else { + this.hScroll = null; + this.model.wpv.x = 0; + } + } + /** + * 获取缓存的渲染数据 + */ + getCachedValue(attrPath) { + let returnValue = null; + if (!this.renderCacheData.has(attrPath)) { + returnValue = DDeiModelArrtibuteValue.getAttrValueByState(this.model, attrPath, true); + this.renderCacheData.set(attrPath, returnValue); + } else { + returnValue = this.renderCacheData.get(attrPath); + } + return returnValue; + } + /** + * 设置渲染缓存数据 + */ + setCachedValue(attrPath, value) { + if (attrPath) { + if (Array.isArray(attrPath)) { + attrPath.forEach((item) => { + this.renderCacheData.set(item, value); + }); + } else { + this.renderCacheData.set(attrPath, value); + } + } + } + clearCachedValue() { + this.renderCacheData.clear(); + this.model.layers.forEach((layer2) => { + var _a3; + (_a3 = layer2 == null ? void 0 : layer2.render) == null ? void 0 : _a3.clearCachedValue(); + }); + } + /** + * 初始化选择器 + */ + initSelector() { + if (!this.selector) { + this.selector = DDeiSelector.initByJSON({ + id: this.model.id + "_inner_selector", + border: DDeiConfig$1.SELECTOR.BORDER, + fill: { default: {}, selected: {} } + }); + this.selector.stage = this.model; + DDeiConfig$1.bindRender(this.selector); + this.selector.initRender(); + } + this.selector.resetState(); + } + /** + * 初始化水印图片 + */ + initMarkImage() { + var _a3, _b2; + let that = this; + let markInit; + if (this.model.ddInstance.mark) { + if (typeof this.model.ddInstance.mark == "object") { + markInit = this.model.ddInstance.mark; + } else { + markInit = { data: this.model.ddInstance.mark, type: 1 }; + } + } + let imgData = DDeiUtil$1.getReplacibleValue(this.model, "mark.data", false, false, markInit); + if (((_a3 = this.model.mark) == null ? void 0 : _a3.imgBase64) || imgData) { + let img = new Image(); + img.onload = function() { + var _a22; + if (!that.mark) { + that.mark = {}; + } + let imgData2 = DDeiUtil$1.getReplacibleValue(that.model, "mark.data", false, false, markInit); + that.mark.upMarkImg = ((_a22 = that.model.mark) == null ? void 0 : _a22.imgBase64) ? that.model.mark.imgBase64 : imgData2; + that.mark.imgObj = img; + that.model.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + that.model.ddInstance.bus.executeAll(); + }; + img.src = ((_b2 = this.model.mark) == null ? void 0 : _b2.imgBase64) ? this.model.mark.imgBase64 : imgData; + } + } + /** + * 重置选择器状态 + * @param evt 事件 + */ + resetSelectorState(evt) { + this.selector.resetState(evt.offsetX - this.model.wpv.x, evt.offsetY - this.model.wpv.y); + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(evt) { + if (this.model.disabled) { + return; + } + if (!this.model.ddInstance.eventCancel) { + let canvas = this.ddRender.getCanvas(); + let rat1 = this.ddRender.ratio; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + let scrollWeight = 15; + let cwidth = canvas.width / rat1 - scrollWeight; + let cheight = canvas.height / rat1 - scrollWeight; + if (this.vScroll && ex > cwidth && ey >= this.vScroll.y && ey <= this.vScroll.y + this.vScroll.contentHeight) { + this.dragObj = { + dy: ey - this.vScroll.y, + scroll: 2 + }; + this.operateState = DDeiEnumOperateState.STAGE_SCROLL_WORKING; + } else if (this.hScroll && ey > cheight && ex >= this.hScroll.x && ex <= this.hScroll.x + this.hScroll.contentWidth) { + this.dragObj = { + dx: ex - this.hScroll.x, + scroll: 1 + }; + this.operateState = DDeiEnumOperateState.STAGE_SCROLL_WORKING; + } else { + this.model.layers[this.model.layerIndex].render.mouseDown(evt); + } + } + } + mouseUp(evt) { + if (this.model.ddInstance.disabled) { + return; + } + if (!this.model.ddInstance.eventCancel) { + if (this.operateState == DDeiEnumOperateState.STAGE_SCROLL_WORKING) { + this.dragObj = null; + this.operateState = DDeiEnumOperateState.NONE; + } else { + this.model.layers[this.model.layerIndex].render.mouseUp(evt); + } + } + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + if (this.model.ddInstance.disabled) { + return; + } + if (!this.model.ddInstance.eventCancel) { + if (this.operateState == DDeiEnumOperateState.STAGE_SCROLL_WORKING) { + let canvasPos = DDeiUtil$1.getDomAbsPosition((_b2 = (_a3 = this.ddRender) == null ? void 0 : _a3.canvas) == null ? void 0 : _b2.parentElement); + let ex = evt.pageX - canvasPos.left; + let ey = evt.pageY - canvasPos.top; + if (((_c2 = this.dragObj) == null ? void 0 : _c2.scroll) == 1) { + let width = this.hScroll.width; + let posRat = (ex / window.remRatio - this.dragObj.dx) / width; + this.model.wpv.x = -this.model.width * posRat; + let hScrollWidth = ((_d2 = this.hScroll) == null ? void 0 : _d2.width) ? (_e2 = this.hScroll) == null ? void 0 : _e2.width : 0; + if (this.model.wpv.x > 0) { + this.model.wpv.x = 0; + } else if (this.model.wpv.x < -this.model.width + hScrollWidth) { + this.model.wpv.x = -this.model.width + hScrollWidth; + } + } else if (((_f = this.dragObj) == null ? void 0 : _f.scroll) == 2) { + let height = this.vScroll.height; + let posRat = (ey / window.remRatio - this.dragObj.dy) / height; + this.model.wpv.y = -this.model.height * posRat; + let vScrollHeight = ((_g = this.vScroll) == null ? void 0 : _g.height) ? (_h = this.vScroll) == null ? void 0 : _h.height : 0; + if (this.model.wpv.y > 0) { + this.model.wpv.y = 0; + } else if (this.model.wpv.y < -this.model.height + vScrollHeight) { + this.model.wpv.y = -this.model.height + vScrollHeight; + } + } + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "SCROLL_WORKING", null, this.model.ddInstance, evt); + (_j = (_i = this.model.ddInstance) == null ? void 0 : _i.bus) == null ? void 0 : _j.push(DDeiEnumBusCommandType.RefreshShape); + (_l = (_k = this.model.ddInstance) == null ? void 0 : _k.bus) == null ? void 0 : _l.executeAll(); + } else { + this.model.layers[this.model.layerIndex].render.mouseMove(evt); + } + } + } + /** + * 鼠标悬停 + * @param inEdge 悬停方位 + * @param inEdgeTime 悬停时间 + */ + mouseInEdge(inEdge, inEdgeTime) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + switch (this.operateState) { + case DDeiEnumOperateState.CONTROL_CREATING: + case DDeiEnumOperateState.CONTROL_DRAGING: + { + if (inEdge && inEdgeTime > 400) { + let pContainerModel = null; + if (this.currentOperateShape.id.indexOf("_shadow") != -1) { + let id = this.currentOperateShape.id.substring(this.currentOperateShape.id, this.currentOperateShape.id.lastIndexOf("_shadow")); + let model = this.model.getModelById(id); + pContainerModel = model.pModel; + } else { + pContainerModel = this.currentOperateShape.pModel; + } + if (pContainerModel) { + let dx = 0, dy = 0; + let deltaSize = 10 * this.model.getStageRatio(); + switch (inEdge) { + case 1: + dy = -deltaSize; + break; + case 2: + dx = deltaSize; + break; + case 3: + dy = deltaSize; + break; + case 4: + dx = -deltaSize; + break; + } + if (dx || dy) { + let shadowControls = this.model.layers[this.model.layerIndex].shadowControls; + if (!((shadowControls == null ? void 0 : shadowControls.length) > 0)) { + shadowControls = [this.currentOperateShape]; + } + let pushData = { dx, dy, dragObj: this.dragObj, models: shadowControls }; + (_c2 = (_b2 = (_a3 = this.model) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.bus) == null ? void 0 : _c2.push(DDeiEnumBusCommandType.ModelEdgePosition, pushData); + (_f = (_e2 = (_d2 = this.model) == null ? void 0 : _d2.ddInstance) == null ? void 0 : _e2.bus) == null ? void 0 : _f.push(DDeiEnumBusCommandType.RefreshShape); + (_i = (_h = (_g = this.model) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.bus) == null ? void 0 : _i.executeAll(); + } + } + } + } + break; + } + } + }; + __publicField2(_DDeiStageCanvasRender, "ClsName", "DDeiStageCanvasRender"); + let DDeiStageCanvasRender = _DDeiStageCanvasRender; + const __vite_glob_1_10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiStageCanvasRender, + default: DDeiStageCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTableCellCanvasRender = class _DDeiTableCellCanvasRender2 extends DDeiPolygonContainerCanvasRender { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + } + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiTableCellCanvasRender2(props); + } + // ============================== 方法 =============================== + getHTML() { + let cell = this.model; + if (cell.isMergedCell() && !cell.isMergeCell()) { + return ""; + } + let fiFamily = this.getCachedValue("font.family"); + let fiSize = this.getCachedValue("font.size"); + let fiColor = this.getCachedValue("font.color"); + let align = this.getCachedValue("textStyle.align"); + let valign = this.getCachedValue("textStyle.valign"); + let bold = this.getCachedValue("textStyle.bold"); + let italic = this.getCachedValue("textStyle.italic"); + let underline = this.getCachedValue("textStyle.underline"); + let deleteline = this.getCachedValue("textStyle.deleteline"); + let feed = this.getCachedValue("textStyle.feed"); + let topDisabled = this.getCachedValue("border.top.disabled"); + let topColor = this.getCachedValue("border.top.color"); + let topOpac = this.getCachedValue("border.top.opacity"); + let topWidth = this.getCachedValue("border.top.width"); + let rightDisabled = this.getCachedValue("border.right.disabled"); + let rightColor = this.getCachedValue("border.right.color"); + let rightOpac = this.getCachedValue("border.right.opacity"); + let rightWidth = this.getCachedValue("border.right.width"); + let bottomDisabled = this.getCachedValue("border.bottom.disabled"); + let bottomColor = this.getCachedValue("border.bottom.color"); + let bottomOpac = this.getCachedValue("border.bottom.opacity"); + let bottomWidth = this.getCachedValue("border.bottom.width"); + let leftDisabled = this.getCachedValue("border.left.disabled"); + let leftColor = this.getCachedValue("border.left.color"); + let leftOpac = this.getCachedValue("border.left.opacity"); + let leftWidth = this.getCachedValue("border.left.width"); + let fillColor = this.getCachedValue("fill.color"); + let fillOpacity = this.getCachedValue("fill.opacity"); + let fillDisabled = this.getCachedValue("fill.disabled"); + let topDash = this.getCachedValue("border.top.dash"); + let bottomDash = this.getCachedValue("border.bottom.dash"); + let leftDash = this.getCachedValue("border.left.dash"); + let rightDash = this.getCachedValue("border.right.dash"); + let html = ""; + html += ' 0) && topWidth > 0) { + let dash = "solid"; + if (topDash && topDash.length > 0) { + dash = "dashed"; + } + html += "border-top: " + topWidth + "px " + dash + " " + topColor + ";"; + } + if (!bottomDisabled && bottomColor && (!bottomOpac || bottomOpac > 0) && bottomWidth > 0) { + let dash = "solid"; + if (bottomDash && bottomDash.length > 0) { + dash = "dashed"; + } + html += "border-bottom: " + bottomWidth + "px " + dash + " " + bottomColor + ";"; + } + if (!leftDisabled && leftColor && (!leftOpac || leftOpac > 0) && leftWidth > 0) { + let dash = "solid"; + if (leftDash && leftDash.length > 0) { + dash = "dashed"; + } + html += "border-left: " + leftWidth + "px " + dash + " " + leftColor + ";"; + } + if (!rightDisabled && rightColor && (!rightOpac || rightOpac > 0) && rightWidth > 0) { + let dash = "solid"; + if (rightDash && rightDash.length > 0) { + dash = "dashed"; + } + html += "border-right: " + rightWidth + "px " + dash + " " + rightColor + ";"; + } + if (!fillDisabled && fillColor && (!fillOpacity || fillOpacity > 0)) { + html += "background-color: " + fillColor + ";"; + } + html += "width: " + cell.width + "px;"; + html += "height: " + cell.height + "px;"; + html += '"'; + if (cell.isMergeCell()) { + html += ' rowspan="' + cell.mergeRowNum + '"'; + html += ' colspan="' + cell.mergeColNum + '"'; + } + html += ' width="' + cell.width + '"'; + html += ' height="' + cell.height + '"'; + html += ">"; + if (cell.text) { + html += cell.text; + } + html += ""; + return html; + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(e) { + if (!this.stage.ddInstance.eventCancel) + ; + } + mouseUp(e) { + if (!this.stage.ddInstance.eventCancel) + ; + } + /** + * 鼠标移动 + */ + mouseMove(evt) { + if (!this.stage.ddInstance.eventCancel) + ; + } + }; + __publicField2(_DDeiTableCellCanvasRender, "ClsName", "DDeiTableCellCanvasRender"); + let DDeiTableCellCanvasRender = _DDeiTableCellCanvasRender; + const __vite_glob_1_11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTableCellCanvasRender, + default: DDeiTableCellCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTableCanvasRender = class _DDeiTableCanvasRender2 extends DDeiRectangleCanvasRender { + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiTableCanvasRender2(props); + } + // ============================== 方法 =============================== + /** + * 获取html + */ + getHTML() { + let selectedCells = this.model.getSelectedCells(); + if ((selectedCells == null ? void 0 : selectedCells.length) > 0) { + let html = ""; + html += " { + item.render.drawShape(); + }); + } + // ============================== 事件 =============================== + /** + * 鼠标按下事件 + */ + mouseDown(e) { + if (!this.stage.ddInstance.eventCancel) { + let table2 = this.model; + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + let isShift = DDei.KEY_DOWN_STATE.get("shift"); + let currentCell = table2.tempDragCell; + if (e.button == 2) { + table2.curRow = currentCell.row; + table2.curCol = currentCell.col; + table2.dragChanging = false; + table2.specilDrag = false; + table2.tempDragCell = null; + table2.tempDragType = null; + table2.tempUpCel = null; + table2.dragCell = null; + table2.dragType = null; + } else if (table2.tempDragType) { + table2.dragType = table2.tempDragType; + table2.dragChanging = true; + table2.dragCell = table2.tempDragCell; + if (table2.dragType == "table-select-col") { + table2.clearSelectionCells(); + for (let col = 0; col < table2.cols.length; col++) { + let colObj = table2.cols[col]; + if (colObj[0].isBorderOn(1, e.offsetX, e.offsetY, 1, 5)) { + colObj.forEach((item) => { + item.selectCell(); + }); + break; + } + } + } else if (table2.dragType == "table-select-row") { + table2.clearSelectionCells(); + for (let row = 0; row < table2.rows.length; row++) { + let rowObj = table2.rows[row]; + if (rowObj[0].isBorderOn(4, e.offsetX, e.offsetY, 1, 5)) { + rowObj.forEach((item) => { + item.selectCell(); + }); + break; + } + } + } else if (table2.dragType == "cell") { + if (isShift) { + if (table2.curRow != -1 && table2.curCol != -1) { + let minMax = table2.getMinMaxRowAndCol([currentCell, table2.rows[table2.curRow][table2.curCol]]); + for (let x2 = minMax.minRow; x2 <= minMax.maxRow; x2++) { + for (let y2 = minMax.minCol; y2 <= minMax.maxCol; y2++) { + table2.rows[x2][y2].selectCell(); + } + } + table2.curRow = currentCell.row; + table2.curCol = currentCell.col; + } else { + currentCell.selectOrCancelCell(); + } + } else { + if (!isCtrl) { + table2.clearSelectionCells(); + currentCell.selectCell(); + } else { + currentCell.selectOrCancelCell(); + } + currentCell.render.mouseDown(e); + } + } + if (!isCtrl) { + if (table2.dragType == "row-top") { + if (table2.dragCell.row > 0) { + table2.dragCell = table2.rows[table2.dragCell.row - 1][table2.dragCell.col]; + table2.dragType = "row"; + } + } else if (table2.dragType == "row-bottom") { + if (table2.dragCell.isMergeCell()) { + table2.dragCell = table2.rows[table2.dragCell.row + table2.dragCell.mergeRowNum - 1][table2.dragCell.col]; + } + if (table2.dragCell.row < table2.rows.length - 1) { + table2.dragType = "row"; + } + } else if (table2.dragType == "col-left") { + if (table2.dragCell.col > 0) { + table2.dragCell = table2.rows[table2.dragCell.row][table2.dragCell.col - 1]; + table2.dragType = "col"; + } + } else if (table2.dragType == "col-right") { + if (table2.dragCell.isMergeCell()) { + table2.dragCell = table2.rows[table2.dragCell.row][table2.dragCell.col + table2.dragCell.mergeColNum - 1]; + } + if (table2.dragCell.col < table2.cols.length - 1) { + table2.dragType = "col"; + } + } + } + } else { + table2.dragChanging = false; + table2.dragCell = null; + table2.dragType = null; + } + } + } + controlDragEnd(e) { + if (!this.stage.ddInstance.eventCancel) { + let table2 = this.model; + table2.dragChanging = false; + table2.specilDrag = false; + table2.tempDragCell = null; + table2.tempDragType = null; + table2.tempUpCel = null; + table2.dragCell = null; + table2.dragType = null; + } + } + /** + * 绘制图形 + */ + mouseUp(e) { + var _a3, _b2; + if (!this.stage.ddInstance.eventCancel) { + let table2 = this.model; + if (table2.dragChanging) { + if (table2.dragType == "cell") { + (_b2 = (_a3 = table2.dragCell) == null ? void 0 : _a3.render) == null ? void 0 : _b2.mouseUp(e); + } + table2.dragChanging = false; + table2.specilDrag = false; + table2.tempUpCel = null; + table2.dragCell = null; + table2.dragType = null; + } + } + } + /** + * 鼠标移动 + */ + mouseMove(e) { + if (!this.stage.ddInstance.eventCancel) { + super.mouseMove(e); + let table2 = this.model; + if (table2.dragChanging) { + table2.setState(DDeiEnumControlState.SELECTED); + if (table2.dragType == "col") { + table2.dragCol(e.offsetX, e.offsetY); + } else if (table2.dragType == "row") { + table2.dragRow(e.offsetX, e.offsetY); + } else if (table2.dragType == "cell") { + table2.dragAndSelectedCell(e.offsetX, e.offsetY); + } else if (table2.dragType == "table-size-right") { + table2.changeTableSizeToRight(e.offsetX, e.offsetY); + } else if (table2.dragType == "table-size-left") { + table2.changeTableSizeToLeft(e.offsetX, e.offsetY); + } else if (table2.dragType == "table-size-bottom") { + table2.changeTableSizeToBottom(e.offsetX, e.offsetY); + } else if (table2.dragType == "table-size-top") { + table2.changeTableSizeToTop(e.offsetX, e.offsetY); + } + } else { + if (table2.isBorderOn(1, e.offsetX, e.offsetY, 6, 10) || table2.isBorderOn(1, e.offsetX, e.offsetY, -3, 0)) { + table2.tempDragType = "table-size-top"; + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ns-resize" }, e); + } else if (table2.isBorderOn(1, e.offsetX, e.offsetY, 1, 5)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "s-resize" }, e); + table2.tempDragType = "table-select-col"; + } else if (table2.isBorderOn(2, e.offsetX, e.offsetY, -5, 10)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ew-resize" }, e); + table2.tempDragType = "table-size-right"; + } else if (table2.isBorderOn(3, e.offsetX, e.offsetY, -5, 10)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ns-resize" }, e); + table2.tempDragType = "table-size-bottom"; + } else if (table2.isBorderOn(4, e.offsetX, e.offsetY, 6, 10) || table2.isBorderOn(4, e.offsetX, e.offsetY, -3, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ew-resize" }, e); + table2.tempDragType = "table-size-left"; + } else if (table2.isBorderOn(4, e.offsetX, e.offsetY, 1, 5)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "e-resize" }, e); + table2.tempDragType = "table-select-row"; + } else { + for (let i2 = 0; i2 < table2.rows.length; i2++) { + let rowObj = table2.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let cellObj = rowObj[j2]; + let isDrag = false; + if (cellObj.width <= 0 || cellObj.height <= 0) { + continue; + } + if (cellObj.isBorderOn(1, e.offsetX, e.offsetY, -3, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ns-resize" }, e); + table2.tempDragType = "row-top"; + isDrag = true; + } else if (cellObj.isBorderOn(2, e.offsetX, e.offsetY, -3, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ew-resize" }, e); + table2.tempDragType = "col-right"; + isDrag = true; + } else if (cellObj.isBorderOn(3, e.offsetX, e.offsetY, -3, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ns-resize" }, e); + table2.tempDragType = "row-bottom"; + isDrag = true; + } else if (cellObj.isBorderOn(4, e.offsetX, e.offsetY, -3, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "ew-resize" }, e); + table2.tempDragType = "col-left"; + isDrag = true; + } else if (cellObj.isInAreaLoose(e.offsetX, e.offsetY, 0)) { + this.stage.ddInstance.bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "all-scroll" }, e); + table2.tempDragType = "cell"; + isDrag = true; + } + if (isDrag) { + table2.tempDragCell = cellObj; + cellObj.render.mouseMove(e); + return; + } + } + } + } + } + } + } + }; + __publicField2(_DDeiTableCanvasRender, "ClsName", "DDeiTableCanvasRender"); + let DDeiTableCanvasRender = _DDeiTableCanvasRender; + const __vite_glob_1_12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTableCanvasRender, + default: DDeiTableCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiTableSelectorCanvasRender = class _DDeiTableSelectorCanvasRender2 extends DDeiSelectorCanvasRender { + // ============================== 静态方法 ============================ + // 通过一个JSON反向序列化成对象,模型数据与JSON完全一样 + static newInstance(props) { + return new _DDeiTableSelectorCanvasRender2(props); + } + /** + * 创建图形 + */ + drawShape() { + this.drawBorder(); + this.fillSelectedCell(); + } + /** + * 填充选中单元格 + */ + fillSelectedCell() { + let table2 = this.model.table; + let canvas = this.ddRender.getCanvas(); + let ctx = canvas.getContext("2d"); + let stageRatio2 = this.model.getStageRatio(); + let ratio = this.ddRender.ratio * stageRatio2; + ctx.save(); + ctx.fillStyle = DDeiUtil$1.getColor("rgb(210,210,210)"); + ctx.globalAlpha = 0.5; + let rect = this.model.getBounds(); + ({ x: rect.x, y: rect.y, width: rect.width, height: rect.height }); + let ratPos = DDeiUtil$1.getRatioPosition(rect, ratio); + this.doRotate(ctx, ratPos); + let rect1 = null; + if (table2.curRow != -1 && table2.curCol != -1) { + let curCell = table2.rows[table2.curRow][table2.curCol]; + if (curCell) { + let cellBounds = curCell.getAbsBounds(); + if (rect.y - cellBounds.y == 0 && rect.x - cellBounds.x == 0) { + rect1 = { + x: rect.x, + y: rect.y + cellBounds.height - this.model.border.width, + width: rect.width, + height: rect.height - cellBounds.height + this.model.border.width + }; + rect = { + x: rect.x + cellBounds.width, + y: rect.y, + width: rect.width - cellBounds.width, + height: cellBounds.height + }; + } else if (rect.y - cellBounds.y == 0 && rect.x + rect.width - cellBounds.x - cellBounds.width == 0) { + rect1 = { + x: rect.x, + y: rect.y + cellBounds.height - this.model.border.width, + width: rect.width, + height: rect.height - cellBounds.height + this.model.border.width + }; + rect = { + x: rect.x, + y: rect.y, + width: rect.width - cellBounds.width, + height: cellBounds.height + }; + } else if (rect.y + rect.height - cellBounds.y - cellBounds.height == 0 && rect.x - cellBounds.x == 0) { + rect1 = { + x: rect.x + cellBounds.width, + y: cellBounds.y - this.model.border.width, + width: rect.width - cellBounds.width, + height: cellBounds.height + this.model.border.width + }; + rect = { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height - cellBounds.height + }; + } else if (rect.y + rect.height - cellBounds.y - cellBounds.height == 0 && rect.x + rect.width - cellBounds.x - cellBounds.width == 0) { + rect1 = { + x: rect.x, + y: cellBounds.y - this.model.border.width, + width: rect.width - cellBounds.width, + height: cellBounds.height + this.model.border.width + }; + rect = { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height - cellBounds.height + }; + } + } + } + rect.x += this.model.border.width; + rect.y += this.model.border.width; + rect.width -= this.model.border.width; + rect.height -= this.model.border.width; + ratPos = DDeiUtil$1.getRatioPosition(rect, ratio); + ctx.fillRect(ratPos.x, ratPos.y, ratPos.width, ratPos.height); + if ((rect1 == null ? void 0 : rect1.width) > 0 && (rect1 == null ? void 0 : rect1.height) > 0) { + rect1.x += this.model.border.width; + rect1.y += this.model.border.width; + rect1.width -= this.model.border.width; + rect1.height -= this.model.border.width; + ratPos = DDeiUtil$1.getRatioPosition(rect1, ratio); + ctx.fillRect(ratPos.x, ratPos.y, ratPos.width, ratPos.height); + } + ctx.restore(); + } + // /** + // * 绘制边框 + // * @param tempBorder 临时边框,优先级最高 + // */ + // drawBorder(tempBorder: object | null): void { + // //获得 2d 上下文对象 + // let canvas = this.ddRender.getCanvas(); + // let ctx = canvas.getContext('2d'); + // //获取全局缩放比例 + // let stageRatio = this.model.getStageRatio() + // let ratio = this.ddRender.ratio * stageRatio; + // //转换为缩放后的坐标 + // let ratPos = this.getBorderRatPos(); + // //1,2,3,4 上,右,下,左 + // for (let i = 1; i <= 4; i++) { + // //如果被选中,使用选中的边框,否则使用缺省边框 + // let disabled = this.getBorderInfo(tempBorder, i, "disabled"); + // let color = this.getBorderInfo(tempBorder, i, "color"); + // let opacity = this.getBorderInfo(tempBorder, i, "opacity"); + // let width = this.getBorderInfo(tempBorder, i, "width"); + // let dash = this.getBorderInfo(tempBorder, i, "dash"); + // //绘制四个方向的边框 + // //如果边框未被disabled,则绘制边框 + // if (!disabled && color && (!opacity || opacity > 0) && width > 0) { + // //保存状态 + // ctx.save(); + // //设置旋转 + // this.doRotate(ctx, ratPos); + // //偏移量,因为线是中线对齐,实际坐标应该加上偏移量 + // let lineOffset = width * ratio / 2; + // ctx.lineWidth = width * ratio; + // ctx.beginPath(); + // //线段、虚线样式 + // if (dash) { + // ctx.setLineDash(dash); + // } + // //透明度 + // if (opacity != null && opacity != undefined) { + // ctx.globalAlpha = opacity + // } + // //颜色 + // ctx.strokeStyle = DDeiUtil.getColor(color); + // if (i == 1) { + // ctx.moveTo(ratPos.x + lineOffset, ratPos.y + lineOffset); + // ctx.lineTo(ratPos.x + ratPos.width + lineOffset, ratPos.y + lineOffset); + // } else if (i == 2) { + // ctx.moveTo(ratPos.x + ratPos.width + lineOffset, ratPos.y + lineOffset); + // ctx.lineTo(ratPos.x + ratPos.width + lineOffset, ratPos.y + ratPos.height + lineOffset); + // } else if (i == 3) { + // ctx.moveTo(ratPos.x + lineOffset, ratPos.y + ratPos.height + lineOffset); + // ctx.lineTo(ratPos.x + ratPos.width + lineOffset, ratPos.y + ratPos.height + lineOffset); + // } else if (i == 4) { + // ctx.moveTo(ratPos.x + lineOffset, ratPos.y + lineOffset); + // ctx.lineTo(ratPos.x + lineOffset, ratPos.y + ratPos.height + lineOffset); + // } + // ctx.stroke(); + // //恢复状态 + // ctx.restore(); + // } + // } + // } + }; + __publicField2(_DDeiTableSelectorCanvasRender, "ClsName", "DDeiTableSelectorCanvasRender"); + let DDeiTableSelectorCanvasRender = _DDeiTableSelectorCanvasRender; + const __vite_glob_1_13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiTableSelectorCanvasRender, + default: DDeiTableSelectorCanvasRender + }, Symbol.toStringTag, { value: "Module" })); + class DDeiPluginBase { + constructor(options) { + __publicField2(this, "name", ""); + __publicField2(this, "type", "plugin"); + __publicField2(this, "options"); + __publicField2(this, "defaultOptions"); + __publicField2(this, "plugins", []); + __publicField2(this, "order", 1); + __publicField2(this, "initConfig", null); + this.options = options; + } + installed(editor) { + } + getOptions() { + var _a3; + let options = {}; + if (this.type == "package") { + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let pluginOptions; + let pluginName; + let pluginType; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + pluginOptions = plugin.defaultIns.getOptions(); + pluginName = plugin.defaultIns.getName(); + pluginType = plugin.defaultIns.type; + } else if (plugin instanceof DDeiPluginBase) { + pluginOptions = plugin.getOptions(); + pluginName = plugin.getName(); + pluginType = plugin.type; + } + if (pluginOptions) { + if (pluginType == "package") { + for (let i2 in pluginOptions) { + options[i2] = pluginOptions[i2]; + } + } else { + options[pluginName] = pluginOptions; + } + } + }); + } else if (this.type == "plugin") { + if (this.options) { + options = this.options; + } else if (this.defaultOptions) { + options = this.defaultOptions; + } + if (options && options.config instanceof Function) { + options = options.config(cloneDeep(this.defaultOptions)); + } + } + return options; + } + init() { + } + /** + * 修改自身的方法,通过传入一个回调函数,让插件使用者可以更灵活的修改插件属性 + * @param fn + * @returns + */ + modify(fn) { + let cloneThis = cloneDeep(this); + fn(cloneThis); + return cloneThis; + } + getInitConfig() { + return this.initConfig; + } + getName() { + return this.name; + } + getType() { + return this.type; + } + static isSubclass(a, b) { + return a.prototype && (Object.getPrototypeOf(a.prototype) === b.prototype || a.prototype instanceof b); + } + } + class DDeiKeyAction extends DDeiPluginBase { + // ============================ 构造函数 ============================ + constructor(props) { + super(props); + __publicField2(this, "name"); + __publicField2(this, "desc"); + this.name = props == null ? void 0 : props.name; + this.desc = props == null ? void 0 : props.desc; + } + // ============================ 静态方法 ============================ + /** + * 更新按键状态 + */ + static updateKeyState(evt) { + let editor = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor == null ? void 0 : editor.ddInstance; + if (ddInstance == null ? void 0 : ddInstance.disabled) { + DDei.KEY_DOWN_STATE.clear(); + return; + } + let ctrl = evt.ctrlKey || evt.metaKey; + let shift = evt.shiftKey; + let alt = evt.altKey; + if (ctrl == true) { + DDei.KEY_DOWN_STATE.set("ctrl", true); + } else { + DDei.KEY_DOWN_STATE.set("ctrl", false); + } + if (shift == true) { + DDei.KEY_DOWN_STATE.set("shift", true); + } else { + DDei.KEY_DOWN_STATE.set("shift", false); + } + if (alt == true) { + DDei.KEY_DOWN_STATE.set("alt", true); + } else { + DDei.KEY_DOWN_STATE.set("alt", false); + } + if (evt.keyCode != 93 && evt.keyCode != 18 && evt.keyCode != 16 && evt.keyCode != 17) { + DDei.KEY_DOWN_STATE.set("" + evt.keyCode, true); + } + } + /** + * 根据快捷键配置以及当前操作的上下文环境 + * 路由到合理的键行为实例上 + */ + static route(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + let editor = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor == null ? void 0 : editor.ddInstance; + if (ddInstance == null ? void 0 : ddInstance.disabled) { + return false; + } + let ctrl = evt.ctrlKey || evt.metaKey; + let shift = evt.shiftKey; + let alt = evt.altKey; + DDeiKeyAction.updateKeyState(evt); + let onlySelectModel = null; + let selectedModels = (_a3 = editor.ddInstance.stage) == null ? void 0 : _a3.selectedModels; + if ((selectedModels == null ? void 0 : selectedModels.size) == 1) { + onlySelectModel = Array.from(selectedModels.values())[0]; + } + let m1Str = editor.state + "_"; + m1Str += ((_d2 = (_c2 = (_b2 = editor.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.render) == null ? void 0 : _d2.operateState) + "_"; + if (ctrl == true) { + m1Str += "ctrl_"; + } + if (shift == true) { + m1Str += "shift_"; + } + if (alt == true) { + m1Str += "alt_"; + } + if (evt.keyCode != 93 && evt.keyCode != 18 && evt.keyCode != 16 && evt.keyCode != 17) { + m1Str += evt.keyCode; + } + let matched = false; + for (let it = 0; it < ((_e2 = editor.hotKeyMapping) == null ? void 0 : _e2.length); it++) { + let item = editor.hotKeyMapping[it]; + let matchStr = null; + if (item.editorState) { + matchStr = item.editorState + "_"; + } else { + matchStr = editor.state + "_"; + } + if (item.operateState) { + matchStr += item.operateState + "_"; + } else { + matchStr += ((_h = (_g = (_f = editor.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.render) == null ? void 0 : _h.operateState) + "_"; + } + if (item.ctrl == 1) { + matchStr += "ctrl_"; + } else if (item.ctrl == 2 && ctrl == true) { + matchStr += "ctrl_"; + } + if (item.shift == 1) { + matchStr += "shift_"; + } else if (item.shift == 2 && shift == true) { + matchStr += "shift_"; + } + if (item.alt == 1) { + matchStr += "alt_"; + } else if (item.alt == 2 && alt == true) { + matchStr += "alt_"; + } + if (item.keys) { + matchStr += item.keys; + } + if (m1Str == matchStr) { + if (!item.modelType || item.modelType && item.modelType == (onlySelectModel == null ? void 0 : onlySelectModel.baseModelType)) { + if (item.times && item.times > 1 && item.interval && item.interval > 0) { + if (!DDeiConfig$1.KEY_DOWN_TIMES.has(m1Str)) { + DDeiConfig$1.KEY_DOWN_TIMES.set(m1Str, 1); + DDeiConfig$1.KEY_DOWN_INTERVAL.set(m1Str, Date.now()); + } else { + let startTime = DDeiConfig$1.KEY_DOWN_INTERVAL.get(m1Str); + let nowTime = Date.now(); + let times = DDeiConfig$1.KEY_DOWN_TIMES.get(m1Str); + if (nowTime - startTime <= item.interval && times + 1 >= item.times) { + item.action.action(evt, ddInstance, editor, item); + DDeiConfig$1.KEY_DOWN_TIMES.delete(m1Str); + DDeiConfig$1.KEY_DOWN_INTERVAL.delete(m1Str); + break; + } else { + DDeiConfig$1.KEY_DOWN_TIMES.set(m1Str, 1); + DDeiConfig$1.KEY_DOWN_INTERVAL.set(m1Str, nowTime); + } + } + } else { + let state = item.action.action(evt, ddInstance, editor, item); + if (state == void 0 || state === true) { + matched = true; + if (item.break == true || item.break == 1) { + break; + } + } + } + } + } + } + return matched; + } + // ============================ 方法 =============================== + /** + * 键行为 + * @param evt 事件 + */ + action(evt, ddInstance) { + } + } + var DDeiEditorState = /* @__PURE__ */ ((DDeiEditorState2) => { + DDeiEditorState2["DESIGNING"] = "designing"; + DDeiEditorState2["PROPERTY_EDITING"] = "property_editing"; + DDeiEditorState2["QUICK_EDITING"] = "quick_editing"; + DDeiEditorState2["CONTROL_CREATING"] = "control_creating"; + DDeiEditorState2["TOOLBOX_ACTIVE"] = "toolbox_active"; + DDeiEditorState2["FRAME_CHANGING"] = "frame_changing"; + DDeiEditorState2["TOP_MENU_OPERATING"] = "top_menu_operating"; + DDeiEditorState2["BOTTOM_MENU_OPERATING"] = "bottom_menu_operating"; + return DDeiEditorState2; + })(DDeiEditorState || {}); + var DDeiActiveType = /* @__PURE__ */ ((DDeiActiveType2) => { + DDeiActiveType2[DDeiActiveType2["ACTIVE"] = 1] = "ACTIVE"; + DDeiActiveType2[DDeiActiveType2["NONE"] = 0] = "NONE"; + return DDeiActiveType2; + })(DDeiActiveType || {}); + var DDeiFileState = /* @__PURE__ */ ((DDeiFileState2) => { + DDeiFileState2[DDeiFileState2["NEW"] = 1] = "NEW"; + DDeiFileState2[DDeiFileState2["MODIFY"] = 2] = "MODIFY"; + DDeiFileState2[DDeiFileState2["DELETE"] = 3] = "DELETE"; + DDeiFileState2[DDeiFileState2["NONE"] = 0] = "NONE"; + DDeiFileState2[DDeiFileState2["SAVING"] = 4] = "SAVING"; + DDeiFileState2[DDeiFileState2["PUBLISHING"] = 5] = "PUBLISHING"; + return DDeiFileState2; + })(DDeiFileState || {}); + class DDeiSheet { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "name"); + __publicField2(this, "desc"); + __publicField2(this, "stage"); + __publicField2(this, "active"); + __publicField2(this, "modelType", "DDeiSheet"); + __publicField2(this, "unicode", DDeiUtil$1.getUniqueCode()); + this.name = props.name; + this.desc = props.desc; + this.stage = props.stage; + this.active = props.active ? props.active : DDeiActiveType.NONE; + } + // ============================ 静态变量 ============================ + static loadFromJSON(json, tempData = {}) { + let sheet = new DDeiSheet(json); + let stage2 = DDeiStage.loadFromJSON(sheet.stage, tempData); + sheet.stage = stage2; + return sheet; + } + // ============================ 方法 ============================ + /** + * 计算当前sheet的模型总数量 + */ + calModelNumber() { + var _a3; + return (_a3 = this.stage) == null ? void 0 : _a3.calModelNumber(); + } + /** + * 将模型转换为JSON + */ + toJSON() { + let json = new Object(); + for (let i2 in this) { + if (this[i2] || this[i2] == 0) { + if (Array.isArray(this[i2])) { + let array = []; + this[i2].forEach((element) => { + if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + }); + json[i2] = array; + } else if (this[i2].set && this[i2].has) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + json[i2] = map; + } else if (this[i2].toJSON) { + json[i2] = this[i2].toJSON(); + } else { + json[i2] = this[i2]; + } + } + } + return json; + } + } + class DDeiFile { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "name"); + __publicField2(this, "desc", ""); + __publicField2(this, "extData"); + __publicField2(this, "busiData"); + __publicField2(this, "state"); + __publicField2(this, "active"); + __publicField2(this, "publish", "0"); + __publicField2(this, "lastUpdateTime", (/* @__PURE__ */ new Date()).getTime()); + __publicField2(this, "path"); + __publicField2(this, "sheets"); + __publicField2(this, "currentSheetIndex"); + __publicField2(this, "modelType", "DDeiFile"); + __publicField2(this, "histroy", []); + __publicField2(this, "modelNumber", 0); + __publicField2(this, "histroyIdx", -1); + __publicField2(this, "unicode", DDeiUtil$1.getUniqueCode()); + this.id = props.id; + this.name = props.name; + this.path = props.path; + this.sheets = props.sheets ? props.sheets : []; + this.currentSheetIndex = props.currentSheetIndex || props.currentSheetIndex == 0 ? props.currentSheetIndex : -1; + this.state = props.state ? props.state : DDeiFileState.NONE; + this.active = props.active ? props.active : DDeiActiveType.NONE; + this.lastUpdateTime = props.lastUpdateTime ? props.lastUpdateTime : (/* @__PURE__ */ new Date()).getTime(); + this.publish = props.publish ? props.publish : "0"; + this.desc = props.desc ? props.desc : ""; + this.extData = props.extData ? props.extData : {}; + this.busiData = props.busiData; + this.closeLocalFile = debounce(this.closeLocalFile, 1e3); + } + // ============================ 静态变量 ============================ + static loadFromJSON(json, tempData = {}) { + var _a3, _b2, _c2, _d2; + let model = new DDeiFile(json); + let sheets = []; + let dpi; + if (DDei.INSTANCE_POOL.size > 0) { + dpi = (_a3 = Array.from(DDei.INSTANCE_POOL.values())[0].dpi) == null ? void 0 : _a3.x; + } + if (!dpi) { + dpi = DDeiUtil$1.getDPI().x; + } + for (let i2 = 0; i2 < model.sheets.length; i2++) { + if (!model.sheets[i2].stage.ddInstance && !model.sheets[i2].stage.dpi) { + model.sheets[i2].stage.dpi = dpi; + } + let unit = model.sheets[i2].stage.unit; + if (dpi && unit && unit != "px") { + (_d2 = (_c2 = (_b2 = model.sheets[i2]) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.layers) == null ? void 0 : _d2.forEach((layer2) => { + var _a22; + DDeiUtil$1.convertChildrenJsonUnit(layer2, (_a22 = model.sheets[i2]) == null ? void 0 : _a22.stage, unit); + }); + } + sheets[i2] = DDeiSheet.loadFromJSON(model.sheets[i2], tempData); + } + model.sheets = sheets; + model.calModelNumber(); + return model; + } + // ============================ 方法 ============================ + /** + * 计算当前文件的模型总数量 + */ + calModelNumber() { + let num = 0; + this.sheets.forEach((sheet) => { + num += sheet.calModelNumber(); + }); + this.modelNumber = num; + return num; + } + /** + * 切换sheet + * @param index 下标 + */ + changeSheet(index) { + if (index < 0) { + index = 0; + } + for (let i2 = 0; i2 < this.sheets.length; i2++) { + let sheet = this.sheets[i2]; + if (i2 != index) { + sheet.active = DDeiActiveType.NONE; + } else { + sheet.active = DDeiActiveType.ACTIVE; + this.currentSheetIndex = index; + } + } + } + /** + * 初始化日志,记录初始化状态 + */ + initHistroy() { + if (this.histroy.length == 0 && this.histroyIdx == -1) { + this.histroy.push({ time: (/* @__PURE__ */ new Date()).getTime(), data: JSON.stringify(this.toJSON()) }); + this.histroyIdx = 0; + } + } + /** + * 记录日志 + * @param layerIndex 图层下标 + */ + addHistroy(data) { + if (this.histroyIdx == -1) { + this.histroy = this.histroy.slice(0, 1); + this.histroyIdx = 0; + } else { + this.histroy = this.histroy.slice(0, this.histroyIdx + 1); + } + this.histroy.push({ time: (/* @__PURE__ */ new Date()).getTime(), data }); + this.histroyIdx = this.histroy.length - 1; + } + /** + * 返回上一个历史数据,并将下标-1 + * @param layerIndex 图层下标 + */ + revokeHistroyData() { + if (this.histroyIdx != -1) { + this.histroyIdx--; + if (this.histroyIdx == -1) { + this.histroyIdx = 0; + return this.histroy[0]; + } else { + return this.histroy[this.histroyIdx]; + } + } + } + /** + * 撤销上一次撤销并将下标+1 + * @param layerIndex 图层下标 + */ + reRevokeHistroyData() { + if (this.histroyIdx < this.histroy.length - 1) { + this.histroyIdx++; + return this.histroy[this.histroyIdx]; + } + } + /** + * 写入本地文件 + */ + async writeLocalFile(data) { + if (!this.writeLocalQueue) { + this.writeLocalQueue = []; + } + if (this.localWriteLock == 1) { + this.writeLocalQueue.push(data); + } else { + if (!this.localFileWriter) { + this.localFileWriter = await this.localFileHandler.createWritable(); + } + await this.localFileWriter.write(data); + this.closeLocalFile(); + } + } + async closeLocalFile() { + if (this.localFileWriter) { + this.localWriteLock = 1; + await this.localFileWriter.close(); + delete this.localFileWriter; + this.localWriteLock = 0; + if (this.writeLocalQueue.length > 0) { + this.writeLocalFile(this.writeLocalQueue[this.writeLocalQueue.length - 1]); + this.writeLocalQueue = []; + } + } + } + /** + * 将模型转换为JSON + */ + toJSON() { + let json = new Object(); + for (let i2 in this) { + if (i2 == "active" || i2 == "histroy" || i2 == "histroyIdx" || i2 == "busiData") { + continue; + } + if (this[i2] || this[i2] == 0) { + if (Array.isArray(this[i2])) { + let array = []; + this[i2].forEach((element) => { + if (element == null ? void 0 : element.toJSON) { + array.push(element.toJSON()); + } else { + array.push(element); + } + }); + json[i2] = array; + } else if (this[i2].set && this[i2].has) { + let map = {}; + this[i2].forEach((element, key) => { + if (element == null ? void 0 : element.toJSON) { + map[key] = element.toJSON(); + } else { + map[key] = element; + } + }); + json[i2] = map; + } else if (this[i2].toJSON) { + json[i2] = this[i2].toJSON(); + } else { + json[i2] = this[i2]; + } + } + } + json.ddeiVersion = 1243; + return json; + } + /** + * 根据属性搜索控件 + * @param keywords 关键字/正则表达式 + * @param attr 搜索的属性 + * @param isReg 是否正则表达式 + * @param matchCase 区分大小写 + * @param matchAll 全字匹配 + */ + searchModels(keywords, attr, isReg = false, matchCase = false, matchAll = false) { + let resultArray = new Array(); + if (keywords && attr) { + for (let i2 = 0; i2 < this.sheets.length; i2++) { + let rs = this.sheets[i2].stage.searchModels(keywords, attr, isReg, matchCase, matchAll); + rs == null ? void 0 : rs.forEach((r) => { + r.sheetIndex = i2; + resultArray.push(r); + }); + } + } + return resultArray; + } + } + const config = { + HISTROY_LEVEL: "file", + //允许多图层编辑 + GLOBAL_ALLOW_OPEN_MULT_LAYERS: true, + //允许全局缩放 + GLOBAL_ALLOW_STAGE_RATIO: true, + //模式标识,模式标识对应以ac_开头的访问权限配置 + MODE_NAME: "DESIGN", + /** + * 全局权限配置,按照配置自动读取规则 + * 配置规则:ac_模式_操作_功能项 + * 模式标识:可以自定义,模式只是用来区分权限分组,可以全局设置或由组件参数传入 + * 操作:create(创建控件)、edit(编辑控件)、view(查看控件)、drag(拖拽控件)、link(建立连线)、del(删除控件)、select(选中控件) + * 功能项:ModelType < ModelCode < Code < Id + */ + AC_DESIGN_CREATE: true, + AC_DESIGN_EDIT: true, + AC_DESIGN_ROTATE: true, + AC_DESIGN_SCALE: true, + AC_DESIGN_COMPOSE: true, + AC_DESIGN_VIEW: true, + AC_DESIGN_DRAG: true, + AC_DESIGN_LINK: true, + AC_DESIGN_DEL: true, + AC_DESIGN_SELECT: true + }; + const isSupportFontFamily = function(f) { + if (typeof f != "string") { + return false; + } + let h = "Arial"; + if (f.toLowerCase() == h.toLowerCase()) { + return true; + } + let e = "a"; + let d = 100; + let a = 100, i2 = 100; + let c = document.createElement("canvas"); + let b = c.getContext("2d", { willReadFrequently: true }); + c.width = a; + c.height = i2; + b.textAlign = "center"; + b.fillStyle = "black"; + b.textBaseline = "middle"; + let g = function(j2) { + b.clearRect(0, 0, a, i2); + b.font = d + "px " + j2 + ", " + h; + b.fillText(e, a / 2, i2 / 2); + let k = b.getImageData(0, 0, a, i2).data; + return [].slice.call(k).filter(function(l) { + return l != 0; + }); + }; + return g(h).join("") !== g(f).join(""); + }; + const isSupportFontFamilySync = function(f) { + return new Promise((resolve, rejected) => { + resolve(isSupportFontFamily(f)); + }); + }; + const fontTypes = { + windows: [ + { ch: "Arial", en: "Arial" }, + { ch: "Helvetica", en: "Helvetica" }, + { ch: "Arial Black", en: "Arial Black" }, + { ch: "Calibri", en: "Calibri" }, + { ch: "Constantia", en: "Constantia" }, + { ch: "Frutiger", en: "Frutiger" }, + { ch: "Futura", en: "Futura" }, + { ch: "Corbel", en: "Corbel" }, + { ch: "Roboto", en: "Roboto" }, + { ch: "Montserrat", en: "Montserrat" }, + { ch: "Bebas Neue", en: "Bebas Neue" }, + { ch: "Monument Extended", en: "Monument Extended" }, + { ch: "D-DIN", en: "D-DIN" }, + { + ch: "宋体", + en: "SimSun" + }, + { + ch: "黑体", + en: "SimHei" + }, + { + ch: "微软雅黑", + en: "Microsoft Yahei" + }, + { + ch: "微软正黑体", + en: "Microsoft JhengHei" + }, + { + ch: "楷体", + en: "KaiTi" + }, + { + ch: "新宋体", + en: "NSimSun" + }, + { + ch: "仿宋", + en: "FangSong" + } + ], + "OS X": [{ + ch: "苹方", + en: "PingFang SC" + }, { + ch: "华文黑体", + en: "STHeiti" + }, { + ch: "华文楷体", + en: "STKaiti" + }, { + ch: "华文中宋", + en: "STZhongsong" + }, { + ch: "华文琥珀", + en: "STHupo" + }, { + ch: "华文新魏", + en: "STXinwei" + }, { + ch: "华文隶书", + en: "STLiti" + }, { + ch: "华文行楷", + en: "STXingkai" + }, { + ch: "冬青黑体简", + en: "Hiragino Sans GB" + }, { + ch: "兰亭黑-简", + en: "Lantinghei SC" + }, { + ch: "翩翩体-简", + en: "Hanzipen SC" + }, { + ch: "手札体-简", + en: "Hannotate SC" + }, { + ch: "宋体-简", + en: "Songti SC" + }, { + ch: "娃娃体-简", + en: "Wawati SC" + }, { + ch: "魏碑-简", + en: "Weibei SC" + }, { + ch: "行楷-简", + en: "Xingkai SC" + }, { + ch: "雅痞-简", + en: "Yapi SC" + }, { + ch: "圆体-简", + en: "Yuanti SC" + }], + "office": [{ + ch: "幼圆", + en: "YouYuan" + }, { + ch: "隶书", + en: "LiSu" + }, { + ch: "华文细黑", + en: "STXihei" + }, { + ch: "华文宋体", + en: "STSong" + }, { + ch: "华文仿宋", + en: "STFangsong" + }, { + ch: "华文中宋", + en: "STZhongsong" + }, { + ch: "华文彩云", + en: "STCaiyun" + }, { + ch: "华文琥珀", + en: "STHupo" + }, { + ch: "华文新魏", + en: "STXinwei" + }, { + ch: "华文隶书", + en: "STLiti" + }, { + ch: "华文行楷", + en: "STXingkai" + }, { + ch: "方正舒体", + en: "FZShuTi" + }, { + ch: "方正姚体", + en: "FZYaoti" + }], + "open": [{ + ch: "思源黑体", + en: "Source Han Sans CN" + }, { + ch: "思源宋体", + en: "Source Han Serif SC" + }, { + ch: "文泉驿微米黑", + en: "WenQuanYi Micro Hei" + }], + "hanyi": [{ + ch: "汉仪旗黑", + en: "HYQihei 40S" + }, { + ch: "汉仪旗黑", + en: "HYQihei 50S" + }, { + ch: "汉仪旗黑", + en: "HYQihei 60S" + }, { + ch: "汉仪大宋简", + en: "HYDaSongJ" + }, { + ch: "汉仪楷体", + en: "HYKaiti" + }, { + ch: "汉仪家书简", + en: "HYJiaShuJ" + }, { + ch: "汉仪PP体简", + en: "HYPPTiJ" + }, { + ch: "汉仪乐喵体简", + en: "HYLeMiaoTi" + }, { + ch: "汉仪小麦体", + en: "HYXiaoMaiTiJ" + }, { + ch: "汉仪程行体", + en: "HYChengXingJ" + }, { + ch: "汉仪黑荔枝", + en: "HYHeiLiZhiTiJ" + }, { + ch: "汉仪雅酷黑W", + en: "HYYaKuHeiW" + }, { + ch: "汉仪大黑简", + en: "HYDaHeiJ" + }, { + ch: "汉仪尚魏手书W", + en: "HYShangWeiShouShuW" + }], + "fangzheng": [{ + "ch": "方正粗雅宋简体", + "en": "FZYaSongS-B-GB" + }, { + "ch": "方正报宋简体", + "en": "FZBaoSong-Z04S" + }, { + "ch": "方正粗圆简体", + "en": "FZCuYuan-M03S" + }, { + "ch": "方正大标宋简体", + "en": "FZDaBiaoSong-B06S" + }, { + "ch": "方正大黑简体", + "en": "FZDaHei-B02S" + }, { + "ch": "方正仿宋简体", + "en": "FZFangSong-Z02S" + }, { + "ch": "方正黑体简体", + "en": "FZHei-B01S" + }, { + "ch": "方正琥珀简体", + "en": "FZHuPo-M04S" + }, { + "ch": "方正楷体简体", + "en": "FZKai-Z03S" + }, { + "ch": "方正隶变简体", + "en": "FZLiBian-S02S" + }, { + "ch": "方正隶书简体", + "en": "FZLiShu-S01S" + }, { + "ch": "方正美黑简体", + "en": "FZMeiHei-M07S" + }, { + "ch": "方正书宋简体", + "en": "FZShuSong-Z01S" + }, { + "ch": "方正舒体简体", + "en": "FZShuTi-S05S" + }, { + "ch": "方正水柱简体", + "en": "FZShuiZhu-M08S" + }, { + "ch": "方正宋黑简体", + "en": "FZSongHei-B07S" + }, { + "ch": "方正宋三简体", + "en": "FZSong" + }, { + "ch": "方正魏碑简体", + "en": "FZWeiBei-S03S" + }, { + "ch": "方正细等线简体", + "en": "FZXiDengXian-Z06S" + }, { + "ch": "方正细黑一简体", + "en": "FZXiHei I-Z08S" + }, { + "ch": "方正细圆简体", + "en": "FZXiYuan-M01S" + }, { + "ch": "方正小标宋简体", + "en": "FZXiaoBiaoSong-B05S" + }, { + "ch": "方正行楷简体", + "en": "FZXingKai-S04S" + }, { + "ch": "方正姚体简体", + "en": "FZYaoTi-M06S" + }, { + "ch": "方正中等线简体", + "en": "FZZhongDengXian-Z07S" + }, { + "ch": "方正准圆简体", + "en": "FZZhunYuan-M02S" + }, { + "ch": "方正综艺简体", + "en": "FZZongYi-M05S" + }, { + "ch": "方正彩云简体", + "en": "FZCaiYun-M09S" + }, { + "ch": "方正隶二简体", + "en": "FZLiShu II-S06S" + }, { + "ch": "方正康体简体", + "en": "FZKangTi-S07S" + }, { + "ch": "方正超粗黑简体", + "en": "FZChaoCuHei-M10S" + }, { + "ch": "方正新报宋简体", + "en": "FZNew BaoSong-Z12S" + }, { + "ch": "方正新舒体简体", + "en": "FZNew ShuTi-S08S" + }, { + "ch": "方正黄草简体", + "en": "FZHuangCao-S09S" + }, { + "ch": "方正少儿简体", + "en": "FZShaoEr-M11S" + }, { + "ch": "方正稚艺简体", + "en": "FZZhiYi-M12S" + }, { + "ch": "方正细珊瑚简体", + "en": "FZXiShanHu-M13S" + }, { + "ch": "方正粗宋简体", + "en": "FZCuSong-B09S" + }, { + "ch": "方正平和简体", + "en": "FZPingHe-S11S" + }, { + "ch": "方正华隶简体", + "en": "FZHuaLi-M14S" + }, { + "ch": "方正瘦金书简体", + "en": "FZShouJinShu-S10S" + }, { + "ch": "方正细倩简体", + "en": "FZXiQian-M15S" + }, { + "ch": "方正中倩简体", + "en": "FZZhongQian-M16S" + }, { + "ch": "方正粗倩简体", + "en": "FZCuQian-M17S" + }, { + "ch": "方正胖娃简体", + "en": "FZPangWa-M18S" + }, { + "ch": "方正宋一简体", + "en": "FZSongYi-Z13S" + }, { + "ch": "方正剪纸简体", + "en": "FZJianZhi-M23S" + }, { + "ch": "方正流行体简体", + "en": "FZLiuXingTi-M26S" + }, { + "ch": "方正祥隶简体", + "en": "FZXiangLi-S17S" + }, { + "ch": "方正粗活意简体", + "en": "FZCuHuoYi-M25S" + }, { + "ch": "方正胖头鱼简体", + "en": "FZPangTouYu-M24S" + }, { + "ch": "方正卡通简体", + "en": "FZKaTong-M19S" + }, { + "ch": "方正艺黑简体", + "en": "FZYiHei-M20S" + }, { + "ch": "方正水黑简体", + "en": "FZShuiHei-M21S" + }, { + "ch": "方正古隶简体", + "en": "FZGuLi-S12S" + }, { + "ch": "方正幼线简体", + "en": "FZYouXian-Z09S" + }, { + "ch": "方正启体简体", + "en": "FZQiTi-S14S" + }, { + "ch": "方正小篆体", + "en": "FZXiaoZhuanTi-S13T" + }, { + "ch": "方正硬笔楷书简体", + "en": "FZYingBiKaiShu-S15S" + }, { + "ch": "方正毡笔黑简体", + "en": "FZZhanBiHei-M22S" + }, { + "ch": "方正硬笔行书简体", + "en": "FZYingBiXingShu-S16S" + }] + }; + const rootFontFamily = (document.documentElement.currentStyle ? document.documentElement.currentStyle : window.getComputedStyle(document.documentElement)).fontFamily; + const FONTS = []; + const loadFonts = function() { + let fontData = null; + let fontJSON = localStorage.getItem("DDEI-CACHE-FONT"); + if (fontJSON) { + fontData = JSON.parse(fontJSON); + fontData.forEach((fd) => { + FONTS.push(fd); + }); + } + if (FONTS.length == 0) { + for (let key in fontTypes) { + let fontType = fontTypes[key]; + fontType.forEach((font) => { + let fontEn = font.en, fontCh = font.ch; + isSupportFontFamilySync(fontEn).then((support) => { + if (support) { + if (fontEn.toLowerCase() === rootFontFamily.toLowerCase() || ('"' + fontEn + '"').toLowerCase() === rootFontFamily.toLowerCase() || fontCh.toLowerCase() === rootFontFamily.toLowerCase() || ('"' + fontCh + '"').toLowerCase() === rootFontFamily.toLowerCase()) { + font.isSystemDefault = true; + } + FONTS.push(font); + localStorage.setItem("DDEI-CACHE-FONT", JSON.stringify(FONTS)); + } + }); + }); + } + } + }; + setTimeout(() => { + loadFonts(); + }, 500); + class DDeiFuncData { + constructor(name, sort, func) { + __publicField2(this, "name", ""); + __publicField2(this, "sort", null); + __publicField2(this, "func", null); + if (name) { + this.name = name; + } + if (sort) { + this.sort = sort; + } + if (func) { + this.func = func; + } + } + } + var DDeiEditorEnumBusCommandType = /* @__PURE__ */ ((DDeiEditorEnumBusCommandType2) => { + DDeiEditorEnumBusCommandType2["ClearTemplateUI"] = "clear-template-ui"; + DDeiEditorEnumBusCommandType2["RefreshEditorParts"] = "refresh-editor-parts"; + DDeiEditorEnumBusCommandType2["FileDirty"] = "file-dirty"; + DDeiEditorEnumBusCommandType2["SaveFile"] = "save-file"; + DDeiEditorEnumBusCommandType2["LoadFile"] = "load-file"; + DDeiEditorEnumBusCommandType2["AddFileHistroy"] = "add-file-histroy"; + DDeiEditorEnumBusCommandType2["ChangeEditMode"] = "editor-change-edit-mode"; + return DDeiEditorEnumBusCommandType2; + })(DDeiEditorEnumBusCommandType || {}); + const _DDeiEditor = class _DDeiEditor2 { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "theme", null); + __publicField2(this, "GLOBAL_LOCAL_CACHE_THEME", true); + __publicField2(this, "GLOBAL_KEYBOARD_ALIGN_ENABLE", true); + __publicField2(this, "GLOBAL_ALLOW_OPEN_MULT_LAYERS", true); + __publicField2(this, "EVENT_LOAD_FILE", null); + __publicField2(this, "EVENT_SAVE_FILE", null); + __publicField2(this, "EVENT_PUBLISH_FILE", null); + __publicField2(this, "EVENT_CONTROL_SELECT_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_SELECT_AFTER", null); + __publicField2(this, "EVENT_STAGE_CHANGE_WPV", null); + __publicField2(this, "EVENT_STAGE_CHANGE_RATIO", null); + __publicField2(this, "GLOBAL_ALLOW_BACK_ACTIVE", false); + __publicField2(this, "id"); + __publicField2(this, "containerid"); + __publicField2(this, "files"); + __publicField2(this, "currentFileIndex"); + __publicField2(this, "state"); + __publicField2(this, "modelType", "DDeiEditor"); + __publicField2(this, "ddInstance", null); + __publicField2(this, "leftWidth", 0); + __publicField2(this, "topHeight", 0); + __publicField2(this, "rightWidth", 0); + __publicField2(this, "bottomHeight", 0); + __publicField2(this, "middleWidth", 0); + __publicField2(this, "middleHeight", 0); + __publicField2(this, "bus", null); + __publicField2(this, "setCurrentMenu", null); + __publicField2(this, "editMode", 1); + __publicField2(this, "components", vue.markRaw({})); + __publicField2(this, "propeditors", vue.markRaw({})); + __publicField2(this, "panels", vue.markRaw({})); + __publicField2(this, "langs", vue.markRaw({})); + __publicField2(this, "lang", null); + __publicField2(this, "layouts", vue.markRaw({})); + __publicField2(this, "dialogs", vue.markRaw({})); + __publicField2(this, "hotkeys", vue.markRaw({})); + __publicField2(this, "hotKeyMapping", vue.markRaw([])); + __publicField2(this, "menus", vue.markRaw({})); + __publicField2(this, "fonts", FONTS); + __publicField2(this, "viewerMap", vue.markRaw(/* @__PURE__ */ new Map())); + __publicField2(this, "menuMapping", vue.markRaw({})); + __publicField2(this, "controls", vue.markRaw(/* @__PURE__ */ new Map())); + __publicField2(this, "groups", vue.markRaw([])); + __publicField2(this, "controlModelClasses", vue.markRaw({})); + __publicField2(this, "controlViewClasses", vue.markRaw({})); + __publicField2(this, "themes", vue.markRaw([])); + __publicField2(this, "currentTheme", ""); + __publicField2(this, "currentLayout", "ddei-core-layout-standard"); + __publicField2(this, "converters", vue.markRaw({})); + __publicField2(this, "lifecyclies", vue.markRaw([])); + __publicField2(this, "funcIndex", /* @__PURE__ */ new Map()); + this.id = props.id; + this.containerid = props.containerid; + this.files = props.files ? props.files : []; + this.currentFileIndex = props.currentFileIndex ? props.currentFileIndex : -1; + this.state = DDeiEditorState.DESIGNING; + if (props.currentLayout) { + this.currentLayout = props.currentLayout; + } + } + // ============================ 静态方法 ============================ + /** + * 给予container构建一个DDei实例 + * 每一个DDei至少包含1个文件 + * @param {id} id 文件id + * @param {containerid} containerid 容器id + * @param {active} active 是否设置为活动实例,缺省是 + */ + static newInstance(id, containerid, active = true, options = {}) { + var _a3, _b2, _c2, _d2; + if (id && containerid) { + if (!_DDeiEditor2.INSTANCE_POOL.get(id)) { + let editorInitOptions = clone(options); + editorInitOptions.id = id; + editorInitOptions.containerid = containerid; + (_a3 = editorInitOptions.extensions) == null ? void 0 : _a3.sort((a, b) => { + return a.order - b.order; + }); + for (let i2 = 0; i2 < ((_b2 = editorInitOptions.extensions) == null ? void 0 : _b2.length); i2++) { + if (editorInitOptions.extensions[i2].getInitConfig) { + let initConfigData = editorInitOptions.extensions[i2].getInitConfig(); + if (initConfigData) { + _DDeiEditor2.changeInitConfigData(editorInitOptions, initConfigData); + } + } + } + let editorInstance2 = new _DDeiEditor2(editorInitOptions); + if (!DDeiUtil$1.getAttrValueByConfig) { + DDeiUtil$1.getAttrValueByConfig = DDeiEditorUtil$1.getAttrValueByConfig; + } + if (!DDeiUtil$1.getControlDefine) { + DDeiUtil$1.getControlDefine = DDeiEditorUtil$1.getControlDefine; + } + if (!DDeiUtil$1.getMenuConfig) { + DDeiUtil$1.getMenuConfig = DDeiEditorUtil$1.getMenuConfig; + } + if (!DDeiUtil$1.getMenuControlId) { + DDeiUtil$1.getMenuControlId = DDeiEditorUtil$1.getMenuControlId; + } + if (!DDeiUtil$1.showContextMenu) { + DDeiUtil$1.showContextMenu = DDeiEditorUtil$1.showContextMenu; + } + if (!DDeiUtil$1.getSubControlJSON) { + DDeiUtil$1.getSubControlJSON = DDeiEditorUtil$1.getSubControlJSON; + } + if (!DDeiUtil$1.getLineInitJSON) { + DDeiUtil$1.getLineInitJSON = DDeiEditorUtil$1.getLineInitJSON; + } + if (!DDeiUtil$1.getModelInitJSON) { + DDeiUtil$1.getModelInitJSON = DDeiEditorUtil$1.getModelInitJSON; + } + if (!DDeiUtil$1.getBusiData) { + DDeiUtil$1.getBusiData = DDeiEditorUtil$1.getBusiData; + } + if (!DDeiUtil$1.getEditorText) { + DDeiUtil$1.getEditorText = DDeiEditorUtil$1.getEditorText; + } + if (!DDeiUtil$1.getStyleValue) { + DDeiUtil$1.getStyleValue = DDeiEditorUtil$1.getStyleValue; + } + if (!DDeiUtil$1.getEditorId) { + DDeiUtil$1.getEditorId = DDeiEditorUtil$1.getEditorId; + } + if (!DDeiUtil$1.invokeCallbackFunc) { + DDeiUtil$1.invokeCallbackFunc = DDeiEditorUtil$1.invokeCallbackFunc; + } + if (!DDeiUtil$1.notifyChange) { + DDeiUtil$1.notifyChange = DDeiEditorUtil$1.notifyChange; + } + if (!DDeiUtil$1.isBackActive) { + DDeiUtil$1.isBackActive = DDeiEditorUtil$1.isBackActive; + } + if (!DDeiUtil$1.getEditorInsByDDei) { + DDeiUtil$1.getEditorInsByDDei = DDeiEditorUtil$1.getEditorInsByDDei; + } + if (!DDeiUtil$1.createControl) { + DDeiUtil$1.createControl = DDeiEditorUtil$1.createControl; + } + _DDeiEditor2.INSTANCE_POOL.set(id, editorInstance2); + if (active) { + _DDeiEditor2.ACTIVE_INSTANCE = editorInstance2; + } + let ddInstance = DDei.newInstance( + editorInstance2.id, + editorInstance2.id + "_canvas", + null, + editorInstance2 + ); + ddInstance.bus.invoker = editorInstance2; + editorInstance2.bus = ddInstance.bus; + ddInstance.controlModelClasses = editorInstance2.controlModelClasses; + ddInstance.controlViewClasses = editorInstance2.controlViewClasses; + let control_ctx2 = /* @__PURE__ */ Object.assign({ + "../../framework/js/models/circle.ts": __vite_glob_0_0$2$1, + "../../framework/js/models/diamond.ts": __vite_glob_0_1$2$1, + "../../framework/js/models/layer.ts": __vite_glob_0_2$2, + "../../framework/js/models/line.ts": __vite_glob_0_3$3, + "../../framework/js/models/link.ts": __vite_glob_0_4$2, + "../../framework/js/models/modellink.ts": __vite_glob_0_5$2, + "../../framework/js/models/polygon-container.ts": __vite_glob_0_6$2, + "../../framework/js/models/polygon.ts": __vite_glob_0_7$1$1, + "../../framework/js/models/rectangle.ts": __vite_glob_0_8$1$1, + "../../framework/js/models/selector.ts": __vite_glob_0_9$1$1, + "../../framework/js/models/shape.ts": __vite_glob_0_10$1$1, + "../../framework/js/models/stage.ts": __vite_glob_0_11$1$1, + "../../framework/js/models/table-cell.ts": __vite_glob_0_12$1$1, + "../../framework/js/models/table-selector.ts": __vite_glob_0_13$1$1, + "../../framework/js/models/table.ts": __vite_glob_0_14$1$1 + }); + for (let path in control_ctx2) { + let cls = control_ctx2[path].default; + if (cls == null ? void 0 : cls.ClsName) { + editorInstance2.controlModelClasses[cls.ClsName] = cls; + } + } + let view_ctx = /* @__PURE__ */ Object.assign({ + "../../framework/js/views/canvas/circle-render.ts": __vite_glob_1_0$2, + "../../framework/js/views/canvas/ddei-render.ts": __vite_glob_1_1$2, + "../../framework/js/views/canvas/diamond-render.ts": __vite_glob_1_2$2, + "../../framework/js/views/canvas/layer-render.ts": __vite_glob_1_3$1, + "../../framework/js/views/canvas/line-render.ts": __vite_glob_1_4$1, + "../../framework/js/views/canvas/polygon-container-render.ts": __vite_glob_1_5$1, + "../../framework/js/views/canvas/polygon-render.ts": __vite_glob_1_6$1, + "../../framework/js/views/canvas/rectangle-render.ts": __vite_glob_1_7$1, + "../../framework/js/views/canvas/selector-render.ts": __vite_glob_1_8, + "../../framework/js/views/canvas/shape-render-base.ts": __vite_glob_1_9, + "../../framework/js/views/canvas/stage-render.ts": __vite_glob_1_10, + "../../framework/js/views/canvas/table-cell-render.ts": __vite_glob_1_11, + "../../framework/js/views/canvas/table-render.ts": __vite_glob_1_12, + "../../framework/js/views/canvas/table-selector-render.ts": __vite_glob_1_13 + }); + for (let path in view_ctx) { + let cls = view_ctx[path].default; + if (cls == null ? void 0 : cls.ClsName) { + editorInstance2.controlViewClasses[cls.ClsName] = cls; + } + } + if (options) { + editorInstance2.options = editorInitOptions; + (_c2 = options.extensions) == null ? void 0 : _c2.forEach((item) => editorInstance2.registerExtension(item)); + for (let i2 in editorInstance2.hotkeys) { + let hotkey = editorInstance2.hotkeys[i2]; + let options2 = hotkey.getOptions(); + if (options2 == null ? void 0 : options2.keys) { + let keys2 = cloneDeep(options2 == null ? void 0 : options2.keys); + keys2.forEach((key) => { + key.action = hotkey; + }); + editorInstance2.hotKeyMapping = editorInstance2.hotKeyMapping.concat(keys2); + } + } + editorInstance2.hotKeyMapping.sort((a, b) => { + if (a.times && b.times) { + return 0; + } else if (a.times && !b.times) { + return -1; + } else if (!a.times && b.times) { + return 1; + } else if (!a.times && !b.times) { + return 0; + } + }); + for (let i2 in editorInstance2.menus) { + let menu = editorInstance2.menus[i2]; + let options2 = menu.getOptions(); + menu.label = options2.label ? options2.label : ""; + menu.icon = options2.icon ? options2.icon : ""; + menu.disabled = options2.disabled ? options2.disabled : false; + (_d2 = options2 == null ? void 0 : options2.models) == null ? void 0 : _d2.forEach((model) => { + if (!editorInstance2.menuMapping[model]) { + editorInstance2.menuMapping[model] = []; + } + let menus2 = editorInstance2.menuMapping[model]; + let finded = false; + for (let j2 = 0; j2 < menus2.length; j2++) { + if (menu.name == menus2[j2].name) { + finded = true; + break; + } + } + if (!finded) { + menus2.push(menu); + } + }); + } + editorInstance2.lifecyclies.forEach((lifeCycle) => { + for (let i2 in lifeCycle) { + if (lifeCycle[i2] && lifeCycle[i2] instanceof DDeiFuncData) { + if (!editorInstance2.funcIndex.has(i2)) { + editorInstance2.funcIndex.set(i2, []); + } + let funcArray = editorInstance2.funcIndex.get(i2); + funcArray == null ? void 0 : funcArray.push(lifeCycle[i2]); + } + } + }); + editorInstance2.funcIndex.forEach((funcArr) => { + funcArr.sort((a, b) => { + if (a.sort && b.sort) { + return a.sort - b.sort; + } else if (a.sort && !b.sort) { + return 1; + } else if (!a.sort && b.sort) { + return -1; + } else if (!a.sort && !b.sort) { + return 0; + } + }); + }); + } + return editorInstance2; + } else { + return _DDeiEditor2.INSTANCE_POOL.get(id); + } + } + return null; + } + /** + * 修改初始化数据,有append,rewrite,remove三种 + * @param editor + * @param config + * @param initConfigData + */ + static changeInitConfigData(config2, initConfigData) { + var _a3, _b2; + if (initConfigData.remove) { + (_a3 = initConfigData.remove.extensions) == null ? void 0 : _a3.forEach((ext) => { + var _a22; + let findedNi = -1; + for (let ni = 0; ni < ((_a22 = config2.extensions) == null ? void 0 : _a22.length); ni++) { + let existsExt = config2.extensions[ni]; + if (existsExt == ext || existsExt.name == ext.name || existsExt && ext && existsExt.name == ext || ext && existsExt && existsExt == ext.name) { + findedNi = ni; + break; + } + } + if (findedNi != -1) { + config2.extensions.splice(findedNi, 1); + } + }); + } + if (initConfigData.append) { + if (!config2.extensions) { + config2.extensions = []; + } + (_b2 = initConfigData.append.extensions) == null ? void 0 : _b2.forEach((ext) => { + var _a22; + let finded = false; + for (let ni = 0; ni < ((_a22 = config2.extensions) == null ? void 0 : _a22.length); ni++) { + let existsExt = config2.extensions[ni]; + if (existsExt == ext || existsExt.name == ext.name || existsExt && ext && existsExt.name == ext || ext && existsExt && existsExt == ext.name) { + finded = true; + break; + } + } + if (!finded) { + config2.extensions.push(ext); + } + }); + } + if (initConfigData.rewrite) { + for (let k in initConfigData.rewrite) { + if (k != "config") { + config2[k] = initConfigData.rewrite[k]; + } + } + if (initConfigData.rewrite.config) { + for (let k in initConfigData.rewrite.config) { + if (!config2.config) { + config2.config = {}; + } + config2.config[k] = initConfigData.rewrite.config[k]; + } + } + } + } + /** + * 将语言包添加进当前editor + * @param langs 语言包 + */ + registerLangs(langs) { + if (langs) { + for (let n in langs) { + if (!this.langs[n]) { + this.langs[n] = langs[n]; + } else { + this.langs[n] = defaultsDeep$1({}, langs[n], this.langs[n]); + } + } + } + } + setI18nLang(language) { + if (!language) { + language = navigator.language || navigator.userLanguage; + } + if (!language) { + language = "zh_CN"; + } else { + language = language.replace("-", "_"); + } + if (!this.langs[language]) { + this.lang = "zh_CN"; + } else { + this.lang = language; + } + } + i18n(path) { + let lang = this.langs[this.lang]; + let value = DDeiUtil$1.getDataByPathList(lang, path); + if (value) { + return value; + } else { + return path; + } + } + /** + * 注册外部插件 + */ + registerExtension(plugin) { + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + plugin = plugin.defaultIns; + } + if (plugin.getLangs) { + let langs = plugin.getLangs(this); + this.registerLangs(langs); + } + if (plugin.getComponents) { + let components = plugin.getComponents(this); + components == null ? void 0 : components.forEach((component) => { + this.panels[component.name] = component; + }); + } + if (plugin.getDialogs) { + let dialogs = plugin.getDialogs(this); + dialogs == null ? void 0 : dialogs.forEach((dialog) => { + this.dialogs[dialog.name] = cloneDeep(dialog); + }); + } + if (plugin.getPanels) { + let panels = plugin.getPanels(this); + panels == null ? void 0 : panels.forEach((panel) => { + this.panels[panel.name] = panel; + }); + } + if (plugin.getLayouts) { + let layouts = plugin.getLayouts(this); + layouts == null ? void 0 : layouts.forEach((layout) => { + this.layouts[layout.name] = layout; + }); + } + if (plugin.getPropEditors) { + let propEditors = plugin.getPropEditors(this); + propEditors == null ? void 0 : propEditors.forEach((propEditor) => { + this.propeditors[propEditor.name] = propEditor; + }); + } + if (plugin.getHotKeys) { + let hotKeys = plugin.getHotKeys(this); + hotKeys == null ? void 0 : hotKeys.forEach((hotkey) => { + this.hotkeys[hotkey.name] = hotkey; + }); + } + if (plugin.getFonts) { + let fonts = plugin.getFonts(this); + fonts == null ? void 0 : fonts.forEach((font) => { + this.fonts.push(font); + let fontObj = new FontFace(font.ch, "url(" + font.font + ")"); + fontObj.load().then((f) => { + document.fonts.add(f); + }); + }); + } + if (plugin.getThemes) { + let themes = plugin.getThemes(this); + themes == null ? void 0 : themes.forEach((theme) => { + var _a3; + let finded = false; + for (let i2 = 0; i2 < ((_a3 = this.themes) == null ? void 0 : _a3.length); i2++) { + if (this.themes[i2].name == theme.name) { + finded = true; + this.themes[i2] = theme; + break; + } + } + if (!finded) { + this.themes.push(theme); + } + }); + } + if (plugin.getMenus) { + let menus2 = plugin.getMenus(this); + menus2 == null ? void 0 : menus2.forEach((menu) => { + this.menus[menu.name] = menu; + }); + } + if (plugin.getControls) { + let controls2 = plugin.getControls(this); + controls2 == null ? void 0 : controls2.forEach((control) => { + this.controls.set(control.id, control); + }); + } + if (plugin.getGroups) { + let groups = plugin.getGroups(this); + groups == null ? void 0 : groups.forEach((group2) => { + let finded = false; + for (let i2 = 0; i2 < this.groups.length; i2++) { + if (this.groups[i2].id == group2.id) { + this.groups[i2] = group2; + finded = true; + break; + } + } + if (!finded) { + this.groups.push(group2); + } + }); + } + if (plugin.getModels) { + let models = plugin.getModels(this); + models == null ? void 0 : models.forEach((model) => { + this.controlModelClasses[model.ClsName] = model; + }); + } + if (plugin.getViews) { + let views = plugin.getViews(this); + views == null ? void 0 : views.forEach((view) => { + this.controlViewClasses[view.ClsName] = view; + }); + } + if (plugin.getConverters) { + let converters = plugin.getConverters(this); + converters == null ? void 0 : converters.forEach((converter) => { + this.converters[converter.name] = converter; + }); + } + if (plugin.getLifeCyclies) { + let lifeCyclies = plugin.getLifeCyclies(this); + lifeCyclies == null ? void 0 : lifeCyclies.forEach((lifeCycle) => { + this.lifecyclies.push(lifeCycle); + }); + } + if (plugin.installed) { + plugin.installed(this); + } + let options = null; + if (plugin.getOptions) { + options = plugin.getOptions(); + } + if (options) { + let pluginType = plugin.getType(); + if (pluginType == "plugin") { + let pluginName = plugin.getName(); + if (pluginName) { + this.options[pluginName] = options; + } + } else if (pluginType == "package") { + this.options = Object.assign({}, this.options, options); + } + } + } + /** + * 应用外部配置文件 + * @param custConfig + */ + applyConfig(custConfig) { + if (config) { + for (let i2 in config) { + this[i2] = config[i2]; + } + if (this.ddInstance) { + this.ddInstance.applyConfig(config); + } + } + if (custConfig) { + for (let i2 in custConfig) { + this[i2] = custConfig[i2]; + } + if (this.ddInstance) { + this.ddInstance.applyConfig(custConfig); + } + } + } + // ============================ 方法 ============================ + /** + * 修改当前编辑模式 + * @param mode 编辑模式 + */ + changeEditMode(mode) { + if (this.editMode != mode) { + this.editMode = mode; + } + } + /** + * 加载文件到设计器中 + * @param fileJson 文件json + * @param append 是否添加 + */ + loadData(fileJson, append = false) { + var _a3; + if (fileJson) { + if (typeof fileJson == "string") { + fileJson = JSON.parse(fileJson); + } + let json = fileJson; + let file; + if (json == null ? void 0 : json.content) { + file = DDeiFile.loadFromJSON(json.content, { + currentDdInstance: this.ddInstance + }); + file.id = json.id; + file.publish = json.publish; + file.name = json.name; + file.path = json.path; + file.desc = json.desc; + file.version = json.version; + file.extData = json.extData; + file.busiData = json.busiData; + } else { + file = DDeiFile.loadFromJSON(json, { + currentDdInstance: this.ddInstance + }); + } + file.state = DDeiFileState.NONE; + if (append) { + this.addFile(file); + this.files.forEach((f) => { + f.active = DDeiActiveType.NONE; + }); + this.currentFileIndex = this.files.indexOf(file); + } else { + this.files[this.currentFileIndex] = file; + } + if (file && ((_a3 = file.sheets) == null ? void 0 : _a3.length) > 0) { + file.active = DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + file.changeSheet(file.currentSheetIndex); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = this.ddInstance; + file.initHistroy(); + this.ddInstance.stage = stage2; + stage2.initRender(); + } + this.notifyChange(); + } + } + /** + * 添加文件到列表中,默认添加到最后面 + */ + addFile(file, index = null) { + if (index || index == 0) { + this.files.splice(index, 0, file); + } else { + this.files.push(file); + } + } + /** + * 移除文件 + */ + removeFile(file, index) { + if (file) { + if (this.files.indexOf(file) != -1) { + this.files.splice(this.files.indexOf(file), 1); + } + } else if (index || index == 0) { + this.files.splice(index, 1); + } + } + /** + * 交换文件的位置 + */ + exchangeFile(indexA, indexB) { + let fileA = this.files[indexA]; + let fileB = this.files[indexB]; + this.files[indexA] = fileB; + this.files[indexB] = fileA; + } + // ============================ 事件 ============================ + /** + * 绑定事件 + */ + bindEvent() { + window.removeEventListener("blur", this.blur); + document.removeEventListener("keydown", this.keyDown); + document.removeEventListener("keyup", this.keyUp); + document.addEventListener("keydown", this.keyDown); + document.addEventListener("keyup", this.keyUp); + window.addEventListener("blur", this.blur); + } + /** + * 改变编辑器状态 + * @param state 新状态 + */ + changeState(state) { + if (this.state != state) { + this.state = state; + } + } + /** + * 键盘按下 + */ + keyDown(evt) { + var _a3; + let isActive = false; + if (((_a3 = document.activeElement) == null ? void 0 : _a3.tagName) == "BODY") { + isActive = true; + } else { + isActive = DDeiEditorUtil$1.isEditorSubElement(document.activeElement, _DDeiEditor2.ACTIVE_INSTANCE); + } + if (isActive && DDeiKeyAction.route(evt)) { + evt.preventDefault(); + } + } + /** + * 键盘弹起 + */ + keyUp(evt) { + var _a3; + let isActive = false; + if (((_a3 = document.activeElement) == null ? void 0 : _a3.tagName) == "BODY") { + isActive = true; + } else { + isActive = DDeiEditorUtil$1.isEditorSubElement(document.activeElement, this); + } + if (isActive) { + DDeiKeyAction.updateKeyState(evt); + } + } + /** + * 失去焦点 + */ + blur() { + var _a3; + DDei.KEY_DOWN_STATE.clear(); + if ((_a3 = this.ddInstance) == null ? void 0 : _a3.render) { + this.ddInstance.render.inEdge = 0; + } + } + /** + * 获取属性编辑器 + */ + getPropEditor(controlType) { + if (controlType && this.propeditors && this.propeditors["pv-" + controlType]) { + return this.propeditors["pv-" + controlType]; + } + } + /** + * 获取布局 + */ + getLayout() { + return this.layouts[this.currentLayout]; + } + /** + * 获取布局选项 + */ + getLayoutOptions() { + return this.options[this.currentLayout]; + } + /** + * 返回所有弹出框以及选项 + */ + getDialogs() { + let returnArray = []; + for (let i2 in this.dialogs) { + let dialog = this.dialogs[i2]; + if (dialog) { + let dialogOption = this.options[i2]; + let options = null; + if (typeof dialogOption == "string") { + options = this.options[dialogOption]; + } else if (dialogOption == null ? void 0 : dialogOption.getName) { + options = dialogOption.getOptions(); + } else { + options = dialogOption; + } + returnArray.push({ dialog, options }); + } + } + return returnArray; + } + /** + * 获取options中的各个部分的配置 + */ + getPartPanels(options, part) { + let partOption = null; + if (options && options[part]) { + if (options[part]) { + partOption = options[part]; + } + } + if (partOption && this.panels) { + let returnArray = []; + partOption.forEach((poption) => { + if (typeof poption == "string") { + if (this.panels[poption]) { + let comp = this.panels[poption]; + let opts = this.options[poption]; + returnArray.push({ comp, options: opts }); + } + } else if (poption instanceof DDeiPluginBase) { + let name = poption.getName(); + if (this.panels[name]) { + let comp = this.panels[name]; + let opts = poption.getOptions(); + returnArray.push({ comp, options: opts }); + } + } else if (DDeiPluginBase.isSubclass(poption, DDeiPluginBase)) { + let name = poption.defaultIns.getName(); + if (this.panels[name]) { + let comp = this.panels[name]; + let opts = poption.defaultIns.getOptions(); + returnArray.push({ comp, options: opts }); + } + } + }); + return returnArray; + } + } + /** + * 获取开启的转换器 + * fileData 文件内容 + */ + getEnabledConverters(fileData, sort = 1) { + let returnArray = []; + for (let i2 in this.converters) { + let converter = this.converters[i2]; + if (converter.isEnable(fileData)) { + returnArray.push(converter); + } + } + if (sort == 1) { + returnArray.sort((c1, c2) => { + if (c1.sort && c2.sort) { + return (c1 == null ? void 0 : c1.sort) - (c2 == null ? void 0 : c2.sort); + } else if (c1.sort && !c2.sort) { + return 1; + } else if (!c1.sort && c2.sort) { + return -1; + } else { + return 0; + } + }); + } else { + returnArray.sort((c1, c2) => { + if (c1.sort && c2.sort) { + return (c2 == null ? void 0 : c2.sort) - (c1 == null ? void 0 : c1.sort); + } else if (c1.sort && !c2.sort) { + return -1; + } else if (!c1.sort && c2.sort) { + return 1; + } else { + return 0; + } + }); + } + return returnArray; + } + /** + * 设置当前主题 + * @param themeName 主题名称 + */ + changeTheme(themeName) { + var _a3; + if (!themeName) { + if (this.GLOBAL_LOCAL_CACHE_THEME) { + themeName = localStorage.getItem("ddei-theme-" + this.id); + } + } + let finded = false; + let defaultJSON = null; + for (let i2 = 0; i2 < ((_a3 = this.themes) == null ? void 0 : _a3.length); i2++) { + if (this.theme && this.themes[i2].name == this.theme) { + defaultJSON = this.themes[i2]; + } else if (this.themes[i2].default == true) { + defaultJSON = this.themes[i2]; + } + if (this.themes[i2].name == themeName) { + finded = true; + this.currentTheme = themeName; + let themeConfig = this.themes[i2]; + this.changeStyle(this.currentTheme, themeConfig); + break; + } + } + if (!finded) { + this.currentTheme = defaultJSON.name; + let themeConfig = defaultJSON; + this.changeStyle(this.currentTheme, themeConfig); + } + } + changeStyle(name, obj) { + var _a3, _b2, _c2, _d2, _e2; + let container2 = document.getElementById(this.containerid); + container2 == null ? void 0 : container2.setAttribute("theme", name); + let removeProperties = []; + for (let i2 = 0; i2 < container2.style.length; i2++) { + if (container2.style[i2] && container2.style[i2].startsWith("--")) { + removeProperties.push(container2.style[i2]); + } + } + removeProperties.forEach((prop) => { + container2.style.removeProperty(prop); + }); + for (let key in obj) { + if (obj[key]) { + container2.style.setProperty(`--${key}`, obj[key]); + } + } + if ((_b2 = (_a3 = this.ddInstance) == null ? void 0 : _a3.stage) == null ? void 0 : _b2.render) { + (_e2 = (_d2 = (_c2 = this.ddInstance) == null ? void 0 : _c2.stage) == null ? void 0 : _d2.render) == null ? void 0 : _e2.clearCachedValue(); + this.ddInstance.stage.render.refresh = true; + } + if (this.GLOBAL_LOCAL_CACHE_THEME) { + let curInsTheme = localStorage.getItem("ddei-theme-" + this.id); + if (!curInsTheme || curInsTheme != name) { + localStorage.setItem("ddei-theme-" + this.id, name); + } + } + } + /** + * 向当前画布添加控件,缺省坐标为当前画布的中心 + * @param controls 要添加的控件 + * @param applyRatio 应用缩放 + * @param notify 通知刷新 + */ + addControls(controls2, applyRatio = true, notify = true, beforeInvoke = false) { + if ((controls2 == null ? void 0 : controls2.length) > 0) { + let stage2 = this.ddInstance.stage; + let layer2 = stage2 == null ? void 0 : stage2.layers[stage2 == null ? void 0 : stage2.layerIndex]; + let shapes = []; + if (layer2) { + controls2.forEach((control) => { + var _a3, _b2; + let controlDefine = this.controls.get(control.model); + if (controlDefine) { + let controlModel = DDeiEditorUtil$1.createControl(controlDefine, this); + let valid = false; + if (!beforeInvoke) { + valid = true; + } else { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", "CREATE", { models: controlModel }, this.ddInstance); + if (rsState == 0 || rsState == 1) { + valid = true; + } + } + if (valid && (controlModel == null ? void 0 : controlModel.length) > 0) { + let cc = controlModel[0]; + for (let i2 in control) { + if (i2 != "spv" && i2 != "hpv" && i2 != "cpv" && i2 != "x" && i2 != "y" && i2 != "width" && i2 != "height" && (control[i2] || control[i2] == 0 || control[i2] == false)) { + cc[i2] = control[i2]; + } + } + let stageRatio1 = stage2.getStageRatio(); + let stageRatio2 = !applyRatio ? 1 / stageRatio1 : 1; + let m12 = new Matrix3(); + if (control.width || control.height) { + let width = (control.width ? control.width : 0) * stageRatio2; + let height = (control.height ? control.height : 0) * stageRatio2; + let scaleMatrix2 = new Matrix3( + width / cc.essBounds.width, + 0, + 0, + 0, + height / cc.essBounds.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + } + let centerMoveX = (-stage2.wpv.x + this.ddInstance.render.canvas.width / this.ddInstance.render.ratio / 2) / stageRatio1; + let centerMoveY = (-stage2.wpv.y + this.ddInstance.render.canvas.height / this.ddInstance.render.ratio / 2) / stageRatio1; + let moveMatrix2 = new Matrix3( + 1, + 0, + centerMoveX, + 0, + 1, + centerMoveY, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + if (control.offsetX || control.offsetY) { + let move1Matrix = new Matrix3( + 1, + 0, + control.offsetX ? control.offsetX * stageRatio2 : 0, + 0, + 1, + control.offsetY ? control.offsetY * stageRatio2 : 0, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + } else if ((control.x || control.x == 0) && (control.y || control.y == 0)) { + let move1Matrix = new Matrix3( + 1, + 0, + -centerMoveX + control.x * stageRatio2, + 0, + 1, + -centerMoveY + control.y * stageRatio2, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + } + cc.transVectors(m12); + if ((_b2 = (_a3 = controlDefine == null ? void 0 : controlDefine.define) == null ? void 0 : _a3.sample) == null ? void 0 : _b2.depProps) { + let depProps = controlDefine.define.sample.depProps; + for (let type in depProps) { + let property = depProps[type]; + let modelPropValue = cc[property]; + if (modelPropValue) { + DDeiUtil$1.createDepLinkModel(cc, modelPropValue, type); + } + } + } + cc.updateLinkModels(); + cc.refreshLinkModels(); + layer2.addModel(cc, false); + cc.initRender(); + shapes.push(cc); + } + } + }); + if (notify) { + this.notifyChange(); + } + } + return shapes; + } + } + /** + * 向特定图层添加控件,缺省坐标为当前画布的中心 + * @param controls 要添加的控件 + * @param layerIndex 图层下标 + * @param applyRatio 应用缩放 + * @param notify 通知刷新 + */ + addControlsToLayer(controls2, layerIndex = -1, applyRatio = true, notify = true, beforeInvoke = false) { + var _a3; + let stage2 = this.ddInstance.stage; + if (layerIndex > -1 && layerIndex < ((_a3 = stage2 == null ? void 0 : stage2.layers) == null ? void 0 : _a3.length)) { + let layer2 = stage2 == null ? void 0 : stage2.layers[layerIndex]; + let shapes = []; + if (layer2) { + controls2.forEach((control) => { + var _a22, _b2; + let controlDefine = this.controls.get(control.model); + if (controlDefine) { + let controlModel = DDeiEditorUtil$1.createControl(controlDefine, this); + let valid = false; + if (!beforeInvoke) { + valid = true; + } else { + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", "CREATE", { models: controlModel }, this.ddInstance); + if (rsState == 0 || rsState == 1) { + valid = true; + } + } + if (valid && (controlModel == null ? void 0 : controlModel.length) > 0) { + let cc = controlModel[0]; + for (let i2 in control) { + if (i2 != "spv" && i2 != "hpv" && i2 != "cpv" && i2 != "x" && i2 != "y" && i2 != "width" && i2 != "height" && (control[i2] || control[i2] == 0 || control[i2] == false)) { + cc[i2] = control[i2]; + } + } + let stageRatio1 = stage2.getStageRatio(); + let stageRatio2 = !applyRatio ? 1 / stageRatio1 : 1; + let m12 = new Matrix3(); + if (control.width || control.height) { + let width = (control.width ? control.width : 0) * stageRatio2; + let height = (control.height ? control.height : 0) * stageRatio2; + let scaleMatrix2 = new Matrix3( + width / cc.essBounds.width, + 0, + 0, + 0, + height / cc.essBounds.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + } + let centerMoveX = (-stage2.wpv.x + this.ddInstance.render.canvas.width / this.ddInstance.render.ratio / 2) / stageRatio1; + let centerMoveY = (-stage2.wpv.y + this.ddInstance.render.canvas.height / this.ddInstance.render.ratio / 2) / stageRatio1; + let moveMatrix2 = new Matrix3( + 1, + 0, + centerMoveX, + 0, + 1, + centerMoveY, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + if (control.offsetX || control.offsetY) { + let move1Matrix = new Matrix3( + 1, + 0, + control.offsetX ? control.offsetX * stageRatio2 : 0, + 0, + 1, + control.offsetY ? control.offsetY * stageRatio2 : 0, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + } else if ((control.x || control.x == 0) && (control.y || control.y == 0)) { + let move1Matrix = new Matrix3( + 1, + 0, + -centerMoveX + control.x * stageRatio2, + 0, + 1, + -centerMoveY + control.y * stageRatio2, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + } + cc.transVectors(m12); + if ((_b2 = (_a22 = controlDefine == null ? void 0 : controlDefine.define) == null ? void 0 : _a22.sample) == null ? void 0 : _b2.depProps) { + let depProps = controlDefine.define.sample.depProps; + for (let type in depProps) { + let property = depProps[type]; + let modelPropValue = cc[property]; + if (modelPropValue) { + DDeiUtil$1.createDepLinkModel(cc, modelPropValue, type); + } + } + } + cc.updateLinkModels(); + cc.refreshLinkModels(); + layer2.addModel(cc, false); + cc.initRender(); + shapes.push(cc); + } + } + }); + if (notify) { + this.notifyChange(); + } + } + return shapes; + } + return null; + } + /** + * 向当前画布添加连线 + * @param controls 要添加的控件 + * @param applyRatio 应用缩放 + * @param notify 通知刷新 + */ + addLines(controls2, calPoints = true, applyRatio = true, notify = true) { + let stage2 = this.ddInstance.stage; + let layer2 = stage2 == null ? void 0 : stage2.layers[stage2 == null ? void 0 : stage2.layerIndex]; + let shapes = []; + if (layer2) { + let stageRatio1 = stage2.getStageRatio(); + let stageRatio2 = !applyRatio ? 1 / stageRatio1 : 1; + let moveX = (-stage2.wpv.x + this.ddInstance.render.canvas.width / this.ddInstance.render.ratio / 2) / stageRatio1; + let moveY = (-stage2.wpv.y + this.ddInstance.render.canvas.height / this.ddInstance.render.ratio / 2) / stageRatio1; + controls2.forEach((control) => { + var _a3, _b2, _c2, _d2, _e2, _f; + if (control.startPoint && control.endPoint) { + let lineJson = DDeiUtil$1.getLineInitJSON(this.ddInstance, control.smodel, control.emodel); + let lineDefine = (_a3 = this.controls) == null ? void 0 : _a3.get((control == null ? void 0 : control.model) ? control.model : lineJson.modelCode ? lineJson.modelCode : lineJson.model ? lineJson.model : lineJson.id ? lineJson.id : lineJson.code); + let initJSON = clone(lineDefine); + initJSON.modelCode = initJSON.id; + initJSON.id = "line_" + ++stage2.idIdx; + if (!lineJson.type) { + initJSON.type = 2; + } else { + initJSON.type = lineJson.type; + } + if (initJSON.img) { + initJSON.fill = { type: 2, image: initJSON.img }; + delete initJSON.img; + } + if (initJSON.define) { + for (let i2 in initJSON == null ? void 0 : initJSON.define) { + initJSON[i2] = initJSON.define[i2]; + } + delete initJSON.define; + } + delete initJSON.attrDefineMap; + delete initJSON.filters; + delete initJSON.icon; + delete initJSON.groups; + delete initJSON.name; + delete initJSON.def; + delete initJSON.code; + delete initJSON.desc; + delete initJSON.attrs; + (_b2 = initJSON.composes) == null ? void 0 : _b2.forEach((comp) => { + if (comp) { + delete comp.attrs; + } + }); + let sx, sy, ex, ey; + if (control.startPoint.offsetX || control.startPoint.offsetX == 0) { + sx = moveX + control.startPoint.offsetX * stageRatio2; + } else if (control.startPoint.x || control.startPoint.x == 0) { + sx = control.startPoint.x * stageRatio2; + } + if (control.startPoint.offsetY || control.startPoint.offsetY == 0) { + sy = moveY + control.startPoint.offsetY * stageRatio2; + } else if (control.startPoint.y || control.startPoint.y == 0) { + sy = control.startPoint.y * stageRatio2; + } + if (control.endPoint.offsetX || control.endPoint.offsetX == 0) { + ex = moveX + control.endPoint.offsetX * stageRatio2; + } else if (control.endPoint.x || control.endPoint.x == 0) { + ex = control.endPoint.x * stageRatio2; + } + if (control.endPoint.offsetY || control.endPoint.offsetY == 0) { + ey = moveY + control.endPoint.offsetY * stageRatio2; + } else if (control.endPoint.y || control.endPoint.y == 0) { + ey = control.endPoint.y * stageRatio2; + } + if (!calPoints && ((_c2 = control.pvs) == null ? void 0 : _c2.length) >= 2) { + initJSON.pvs = []; + control.pvs.forEach((pv) => { + let pvx, pvy; + if (pv.offsetX || pv.offsetX == 0) { + pvx = moveX + pv.offsetX * stageRatio2; + } else if (pv.x || pv.x == 0) { + pvx = pv.x * stageRatio2; + } + if (pv.offsetY || pv.offsetY == 0) { + pvy = moveY + pv.offsetY * stageRatio2; + } else if (pv.y || pv.y == 0) { + pvy = pv.y * stageRatio2; + } + initJSON.pvs.push(new Vector3(pvx - sx, pvy - sy, 1)); + }); + } else { + initJSON.pvs = [new Vector3(0, 0, 1), new Vector3(ex - sx, ey - sx, 1)]; + } + (_d2 = control.spvs) == null ? void 0 : _d2.forEach((spv) => { + spv.x = (spv.x - sx) * stageRatio2; + spv.y = (spv.y - sy) * stageRatio2; + }); + initJSON.cpv = initJSON.pvs[0]; + let moveMatrix2 = new Matrix3( + 1, + 0, + sx, + 0, + 1, + sy, + 0, + 0, + 1 + ); + let cc = DDeiLine.initByJSON(initJSON, { currentStage: stage2, currentLayer: layer2, currentContainer: layer2 }); + for (let i2 in control) { + if (i2 != "startPoint" && i2 != "endPoint" && i2 != "pvs" && i2 != "spv" && i2 != "hpv" && i2 != "cpv" && i2 != "x" && i2 != "y" && i2 != "width" && i2 != "height" && (control[i2] || control[i2] == 0 || control[i2] == false)) { + cc[i2] = control[i2]; + } + } + cc.transVectors(moveMatrix2); + let smodel, emodel; + if (control.smodel) { + smodel = this.getControlById(control.smodel.id); + let id = "_" + DDeiUtil$1.getUniqueCode(); + smodel.exPvs[id] = new Vector3(sx, sy, 1); + smodel.exPvs[id].rate = control.smodel.rate; + smodel.exPvs[id].sita = control.smodel.sita; + smodel.exPvs[id].index = control.smodel.index; + smodel.exPvs[id].id = id; + let link2 = new DDeiLink({ + sm: smodel, + dm: cc, + smpath: "exPvs." + id, + dmpath: "startPoint", + stage: stage2 + }); + stage2.addLink(link2); + smodel.transVectors(new Matrix3()); + } + if (control.emodel) { + emodel = this.getControlById(control.emodel.id); + let id = "_" + DDeiUtil$1.getUniqueCode(); + emodel.exPvs[id] = new Vector3(ex, ey, 1); + emodel.exPvs[id].rate = control.emodel.rate; + emodel.exPvs[id].sita = control.emodel.sita; + emodel.exPvs[id].index = control.emodel.index; + emodel.exPvs[id].id = id; + let link2 = new DDeiLink({ + sm: emodel, + dm: cc, + smpath: "exPvs." + id, + dmpath: "endPoint", + stage: stage2 + }); + stage2.addLink(link2); + emodel.transVectors(new Matrix3()); + } + if (!control.isShadowControl) { + cc.refreshLinkModels(); + layer2.addModel(cc, false); + cc.initRender(); + } else { + layer2.shadowControls.push(cc); + cc.initRender(); + } + if (calPoints) { + smodel == null ? void 0 : smodel.updateLinkModels(); + emodel == null ? void 0 : emodel.updateLinkModels(); + } + (_e2 = smodel == null ? void 0 : smodel.render) == null ? void 0 : _e2.enableRefreshShape(); + (_f = emodel == null ? void 0 : emodel.render) == null ? void 0 : _f.enableRefreshShape(); + shapes.push(cc); + } + }); + if (notify) { + this.notifyChange(); + } + } + return shapes; + } + notifyChange() { + this.bus.push(DDeiEnumBusCommandType.UpdatePaperArea); + this.bus.push(DDeiEnumBusCommandType.NodifyChange); + this.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.changeState(DDeiEditorState.DESIGNING); + this.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts); + this.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + this.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.bus.executeAll(); + } + /** + * 移除当前画布控件 + */ + removeControls(ids, notify = true) { + var _a3; + (_a3 = this.ddInstance.stage) == null ? void 0 : _a3.removeModelById(ids); + if (notify) { + this.notifyChange(); + } + } + /** + * 清除当前画布所有控件 + */ + clearModels(destroy = false, notify = true) { + var _a3; + (_a3 = this.ddInstance.stage) == null ? void 0 : _a3.clearModels(destroy); + if (notify) { + this.notifyChange(); + } + } + /** + * 根据ID获取控件 + */ + getControlById(id) { + var _a3; + return (_a3 = this.ddInstance.stage) == null ? void 0 : _a3.getModelById(id, true); + } + /** + * 设置是否可以编辑 + */ + setEditable(editable) { + if (!editable) { + this.ddInstance["AC_DESIGN_CREATE"] = false; + this.ddInstance["AC_DESIGN_EDIT"] = false; + this.ddInstance["AC_DESIGN_DRAG"] = false; + this.ddInstance["AC_DESIGN_LINK"] = false; + this.ddInstance["AC_DESIGN_DEL"] = false; + this.ddInstance["AC_DESIGN_ROTATE"] = false; + this.ddInstance["AC_DESIGN_SCALE"] = false; + this.ddInstance["AC_DESIGN_COMPOSE"] = false; + } else { + this.ddInstance["AC_DESIGN_CREATE"] = true; + this.ddInstance["AC_DESIGN_EDIT"] = true; + this.ddInstance["AC_DESIGN_DRAG"] = true; + this.ddInstance["AC_DESIGN_SELECT"] = true; + this.ddInstance["AC_DESIGN_LINK"] = true; + this.ddInstance["AC_DESIGN_DEL"] = true; + this.ddInstance["AC_DESIGN_ROTATE"] = true; + this.ddInstance["AC_DESIGN_SCALE"] = true; + this.ddInstance["AC_DESIGN_COMPOSE"] = true; + } + } + setAccessInfo(config2) { + if (config2) { + for (let i2 in config2) { + if (config2[i2] == true || config2[i2] == false) { + this.ddInstance["AC_" + this.MODE_NAME + "_" + i2] = config2[i2]; + } + } + } + } + /** + * 将模型转换为JSON + */ + toJSON() { + let jsonArray = new Array(); + this.files.forEach((file) => { + jsonArray.push(file.toJSON()); + }); + return jsonArray; + } + /** + * 根据属性搜索控件 + * @param keywords 关键字/正则表达式 + * @param attr 搜索的属性 + * @param isReg 是否正则表达式 + * @param area 搜索范围,1本页/2本文档/3所有打开文件 + * @param matchCase 区分大小写 + * @param matchAll 全字匹配 + */ + searchModels(keywords, attr, isReg = false, area = 1, matchCase = false, matchAll = false) { + let resultArray = new Array(); + if (keywords && attr) { + switch (area) { + case 1: { + for (let i2 = 0; i2 < this.files.length; i2++) { + for (let j2 = 0; j2 < this.files[i2].sheets.length; j2++) { + if (this.files[i2].sheets[j2].stage == this.ddInstance.stage) { + let rs = this.ddInstance.stage.searchModels(keywords, attr, isReg, matchCase, matchAll); + rs == null ? void 0 : rs.forEach((r) => { + r.fileIndex = i2; + r.sheetIndex = j2; + resultArray.push(r); + }); + return resultArray; + } + } + } + } + case 2: { + let rs = this.files[this.currentFileIndex].searchModels(keywords, attr, isReg, matchCase, matchAll); + rs == null ? void 0 : rs.forEach((r) => { + r.fileIndex = this.currentFileIndex; + resultArray.push(r); + }); + } + case 3: + { + for (let i2 = 0; i2 < this.files.length; i2++) { + let rs = this.files[i2].searchModels(keywords, attr, isReg, matchCase, matchAll); + rs == null ? void 0 : rs.forEach((r) => { + r.fileIndex = i2; + resultArray.push(r); + }); + } + } + break; + } + } + return resultArray; + } + /** + * 将舞台可视区域的中心点移动到控件的外接矩形中心 + * @param modelIds + */ + centerModels(stage2, ...modelIds) { + if (!stage2) { + stage2 = this.ddInstance.stage; + } + if ((modelIds == null ? void 0 : modelIds.length) > 0) { + let models = new Array(); + for (let i2 = 0; i2 < modelIds.length; i2++) { + if (modelIds[i2]) { + let model = stage2.getModelById(modelIds[i2], true); + if (model) { + models.push(model); + } + } + } + if (models.length > 0) { + let stageRatio2 = stage2.getStageRatio(); + let outRect = DDeiAbstractShape.getOutRectByPV(models, stageRatio2); + stage2.wpv.x = -(outRect.x + outRect.width / 2) + stage2.ddInstance.render.canvas.width / stage2.ddInstance.render.ratio / 2; + stage2.wpv.y = -(outRect.y + outRect.height / 2) + stage2.ddInstance.render.canvas.height / stage2.ddInstance.render.ratio / 2; + } + } + } + /** + * 切换文件 + * @param file + */ + changeFile(fileIndex, sheetIndex = -1) { + let ddInstance = this == null ? void 0 : this.ddInstance; + let file = null; + if (fileIndex || fileIndex == 0) { + file = this.files[fileIndex]; + } + if (file) { + this.files.forEach((item) => { + item.active = DDeiActiveType.NONE; + }); + file.active = DDeiActiveType.ACTIVE; + this.currentFileIndex = fileIndex; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + if (sheetIndex >= 0) { + file.changeSheet(sheetIndex); + } + ddInstance.stage.destroyRender(); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + stage2.initRender(); + } + } + } + /** + * 替换模型数据 + * @param models 被替换的模型 + * @param attr 属性 + * @param sIdx 开始下标 + * @param eIdx 结束下标 + * @param data 数据 + */ + replaceModelsData(models, attr, sIdx = -1, eIdx = -1, data = "", notify = true) { + if ((models == null ? void 0 : models.length) > 0 && attr && sIdx != -1 && eIdx != -1 && eIdx >= sIdx) { + models.forEach((model) => { + let oldValue = model[attr]; + if (oldValue && typeof oldValue == "string") { + let sStr = oldValue.substring(0, sIdx); + let eStr = oldValue.substring(eIdx, oldValue.length); + let newValue = sStr + data + eStr; + model[attr] = newValue; + } + }); + } + if (notify) { + this.notifyChange(); + } + } + /** + * 返回画布图片 + * @models 选中控件模型,如果不传入则返回整个画布 + */ + toImageDataUrl(models = null) { + return this.ddInstance.stage.toImageDataUrl(models); + } + }; + __publicField2(_DDeiEditor, "INSTANCE_POOL", /* @__PURE__ */ new Map()); + __publicField2(_DDeiEditor, "HISTROY_LEVEL", "file"); + __publicField2(_DDeiEditor, "ACTIVE_INSTANCE", null); + let DDeiEditor = _DDeiEditor; + const DDeiEditor$1 = DDeiEditor; + const _DDeiEditorUtil = class _DDeiEditorUtil2 { + /** + * 读取最近工具栏 + */ + static readRecentlyToolGroups() { + let groups = localStorage.getItem("ddei-recently-tool-groups"); + if (groups) { + try { + _DDeiEditorUtil2.recentlyToolGroups = JSON.parse(groups); + } catch (e) { + } + } + } + /** + * 写入最近工具栏 + */ + static whiteRecentlyToolGroups(groups) { + _DDeiEditorUtil2.recentlyToolGroups = []; + groups.forEach((group2) => { + if (group2.display) { + _DDeiEditorUtil2.recentlyToolGroups.push({ id: group2.id, expand: group2.expand }); + } + }); + localStorage.setItem("ddei-recently-tool-groups", JSON.stringify(_DDeiEditorUtil2.recentlyToolGroups)); + } + /** + * 获取线的初始化JSON定义 + */ + static getLineInitJSON(ddInstance, smodel, emodel) { + if (!_DDeiEditorUtil2.lineInitJSON) { + _DDeiEditorUtil2.lineInitJSON = { + modelCode: "100401" + }; + } + return _DDeiEditorUtil2.lineInitJSON; + } + /** + * 获取控件的初始化JSON定义 + */ + static getModelInitJSON(ddInstance, beginModel, models) { + return models; + } + /** + * 获取业务数据 + */ + static getBusiData(ddInstance) { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + if (editor) { + let file = editor.files[editor.currentFileIndex]; + return file == null ? void 0 : file.busiData; + } + } + /** + * 获取快捷编辑文本框 + */ + static getEditorText() { + let editor = DDeiEditor$1.ACTIVE_INSTANCE; + if (editor) { + if (!editor.quickEditorInput) { + let inputId = editor.id + "_quickeditor"; + let inputEle = document.getElementById(inputId); + if (!inputEle) { + inputEle = document.createElement("textarea"); + inputEle.setAttribute("id", inputId); + inputEle.setAttribute("style", "width:100px;filter: opacity(0);user-select: none;pointer-events: none;border:none;resize:none;padding:0;z-index:9999;position:fixed;left:0;top:0;display:none;outline:none;"); + let editorEle = document.getElementById(editor.id); + editorEle.appendChild(inputEle); + editor.quickEditorInput = inputEle; + inputEle.enterValue = function() { + var _a3, _b2, _c2; + let editor2 = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor2 == null ? void 0 : editor2.ddInstance; + delete ddInstance.stage.brushDataText; + if (editor2.quickEditorModel) { + editor2.quickEditorModel.sptStyle = ddInstance.stage.render.editorShadowControl.sptStyle; + if ((_a3 = ddInstance.stage.render.editorShadowControl) == null ? void 0 : _a3.isShadowControl) { + ddInstance.stage.render.editorShadowControl.destroyed(); + } + ddInstance.stage.render.editorShadowControl = null; + if ((_b2 = editor2.quickEditorModel) == null ? void 0 : _b2.depModel) { + let depModel = editor2.quickEditorModel.depModel; + setTimeout(() => { + var _a22; + depModel.refreshLinkModels(); + editor2.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor2.bus.push(DDeiEnumBusCommandType.AddHistroy); + (_a22 = editor2.bus) == null ? void 0 : _a22.executeAll(); + }, 50); + editor2.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { models: [editor2.quickEditorModel], paths: ["text"], value: inputEle.value }, null, true); + editor2.bus.push(DDeiEnumBusCommandType.NodifyChange); + editor2.bus.push(DDeiEnumBusCommandType.RefreshShape); + } else { + editor2.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { models: [editor2.quickEditorModel], paths: ["text"], value: inputEle.value }, null, true); + editor2.bus.push(DDeiEnumBusCommandType.NodifyChange); + editor2.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor2.bus.push(DDeiEnumBusCommandType.AddHistroy); + } + } + inputEle.value = ""; + editor2.changeState(DDeiEditorState.DESIGNING); + editor2.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + editor2.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + editor2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["topmenu"] }); + editor2.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + (_c2 = editor2.bus) == null ? void 0 : _c2.executeAll(); + }; + inputEle.onkeyup = function(evt) { + let editor2 = DDeiEditor$1.ACTIVE_INSTANCE; + editor2.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + editor2.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor2.bus.executeAll(); + }; + inputEle.addEventListener("compositionend", function() { + let editor2 = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor2 == null ? void 0 : editor2.ddInstance; + if (ddInstance.stage.render.editorShadowControl) { + _DDeiEditorUtil2.quickEditorToControl(); + } + }); + inputEle.addEventListener("input", () => { + let editor2 = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor2 == null ? void 0 : editor2.ddInstance; + if (ddInstance.stage.render.editorShadowControl) { + _DDeiEditorUtil2.quickEditorToControl(); + } + }); + } + } + return editor.quickEditorInput; + } + } + /** + * 获取样式属性值 + * @param name 属性名称 + * @param ddInstance ddei实例 + */ + static getStyleValue(name, ddInstance) { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + let element = document.getElementById(editor.containerid); + let styles2 = getComputedStyle(element); + let cssVariable = styles2.getPropertyValue("--" + name); + return cssVariable; + } + static getEditorId(ddInstance) { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + return editor.id; + } + static getEditorInsByDDei(ddInstance) { + let editor; + if (ddInstance) { + DDeiEditor$1.INSTANCE_POOL.forEach((editorIns) => { + var _a3; + if (editorIns.ddInstance == ddInstance || ((_a3 = editorIns.ddInstance) == null ? void 0 : _a3.id) == (ddInstance == null ? void 0 : ddInstance.id)) { + editor = editorIns; + } + }); + } + if (!editor) { + editor = DDeiEditor$1.ACTIVE_INSTANCE; + } + return editor; + } + static notifyChange(ddInstance) { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + editor == null ? void 0 : editor.notifyChange(); + } + /** + * 判断element是否为editor的子控件 + * @param element dom元素 + * @param editor 编辑器 + */ + static isEditorSubElement(element, editor) { + if (!editor || !element) { + return false; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return false; + } + if (element == editor.htmlElement) { + return true; + } else { + return _DDeiEditorUtil2.isEditorSubElement(element.parentElement, editor); + } + } + //钩子函数,判断当前实例是否可以在后台激活,允许后台激活的实例,在当前实例为非ACTIVE_INSTANCE时,依然能够执行部分后台操作 + static isBackActive(ddInstance) { + if (!ddInstance) { + return false; + } else { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + if (!editor) { + return false; + } else { + return DDeiEditor$1.ACTIVE_INSTANCE && editor.id == DDeiEditor$1.ACTIVE_INSTANCE.id || editor.GLOBAL_ALLOW_BACK_ACTIVE; + } + } + } + /** + * 设置编辑器值到控件 + */ + static quickEditorToControl(inputEle) { + let editorInput = _DDeiEditorUtil2.getEditorText(); + if (!inputEle) { + inputEle = editorInput; + } + if (inputEle != editorInput) { + editorInput.value = inputEle.value; + editorInput.selectionStart = inputEle.selectionStart; + editorInput.selectionEnd = inputEle.selectionEnd; + } + let editor = DDeiEditor$1.ACTIVE_INSTANCE; + let ddInstance = editor == null ? void 0 : editor.ddInstance; + let oldStr = ddInstance.stage.render.editorShadowControl.text; + let newStr = inputEle.value; + let curstrIdx = Math.min(ddInstance.stage.render.editorShadowControl.tempCursorStart, inputEle.selectionStart); + let beforeStr = oldStr.substring(0, curstrIdx); + let beforeSPT = {}; + for (let i2 = 0; i2 < curstrIdx; i2++) { + if (ddInstance.stage.render.editorShadowControl.sptStyle[i2]) { + beforeSPT[i2] = ddInstance.stage.render.editorShadowControl.sptStyle[i2]; + } + } + let sptIndex = curstrIdx; + let afterStr = oldStr.substring(ddInstance.stage.render.editorShadowControl.tempCursorEnd); + let afterSPT = {}; + for (let i2 = ddInstance.stage.render.editorShadowControl.tempCursorEnd; i2 < oldStr.length; i2++) { + if (ddInstance.stage.render.editorShadowControl.sptStyle[i2]) { + afterSPT[i2] = ddInstance.stage.render.editorShadowControl.sptStyle[i2]; + } + } + let bIndex = newStr.indexOf(beforeStr) + beforeStr.length; + let appendStr = null; + if (afterStr) { + appendStr = newStr.substring(bIndex, newStr.lastIndexOf(afterStr)); + } else { + appendStr = newStr.substring(bIndex); + } + let oriStyle = bIndex == 0 ? afterSPT[bIndex] : beforeSPT[bIndex - 1]; + if (oriStyle && appendStr) { + let cloneSPTStr = JSON.stringify(oriStyle); + for (let i2 = 0; i2 < appendStr.length; i2++, sptIndex++) { + beforeSPT[sptIndex] = JSON.parse(cloneSPTStr); + } + } + let appendStrLen = newStr.length - oldStr.length; + for (let i2 in afterSPT) { + beforeSPT[parseInt(i2) + appendStrLen] = afterSPT[i2]; + } + ddInstance.stage.render.editorShadowControl.sptStyle = beforeSPT; + ddInstance.stage.render.editorShadowControl.tempCursorStart = inputEle.selectionStart; + ddInstance.stage.render.editorShadowControl.tempCursorEnd = inputEle.selectionEnd; + ddInstance.stage.render.editorShadowControl.text = inputEle.value; + ddInstance.stage.render.editorShadowControl.render.setCachedValue("text", inputEle.value); + editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + } + /** + * 获取子元素定义的json信息 + */ + static getSubControlJSON(modelCode, ddInstance) { + var _a3, _b2, _c2; + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + let controlDefine = (_a3 = editor.controls) == null ? void 0 : _a3.get(modelCode); + if (controlDefine.subcontrol) { + let subControlDefine = (_b2 = editor.controls) == null ? void 0 : _b2.get(controlDefine.subcontrol); + let configAtrs = _DDeiEditorUtil2.getAttrValueByConfig(subControlDefine, [ + "layout" + ]); + if (subControlDefine) { + let subControlJSON = { + modelCode: subControlDefine.id, + layout: (_c2 = configAtrs.get("layout")) == null ? void 0 : _c2.data + }; + return subControlJSON; + } + } + } + /** + * 获取菜单控件ID + * @returns 控件ID + */ + static getMenuControlId(editor) { + return editor.id + "_menu_dialog"; + } + /** + * 显示菜单 + */ + static showContextMenu(control, ddInstance, evt) { + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + let menuJSON = DDeiUtil$1.getMenuConfig(control, editor); + if ((menuJSON == null ? void 0 : menuJSON.length) > 0 && (editor == null ? void 0 : editor.setCurrentMenu)) { + let stage2 = ddInstance.stage; + if (stage2) { + stage2.render.currentMenuShape = control; + editor.setCurrentMenu(menuJSON); + let menuDialogId = DDeiUtil$1.getMenuControlId(editor); + let menuEle = document.getElementById(menuDialogId); + let elePos = DDeiUtil$1.getDomAbsPosition(evt.currentTarget, editor); + if (menuEle) { + if (elePos.left + 200 > document.body.clientWidth) { + menuEle.style.left = document.body.clientWidth - 200 + "px"; + } else { + menuEle.style.left = elePos.left + "px"; + } + if (elePos.top + menuJSON.length * 40 > document.body.clientHeight) { + menuEle.style.top = document.body.clientHeight - menuJSON.length * 40 + "px"; + } else { + menuEle.style.top = elePos.top + "px"; + } + setTimeout(() => { + menuEle.style.display = "block"; + }, 10); + } + } + } + } + /** + * 获取菜单配置 + */ + static getMenuConfig(model, editor) { + if (editor == null ? void 0 : editor.menuMapping) { + let menus2 = editor == null ? void 0 : editor.menuMapping[model == null ? void 0 : model.modelType]; + if ((menus2 == null ? void 0 : menus2.length) > 0) { + return menus2; + } + } + } + /** + * 从配置定义中获取属性值,优先从code中获取,其次从mapping获取 + * @param configModel 配置模型,如果包含了attrDefineMap等数据,则直接获取数据,如果只包含id则通过id取原始数据 + * @param paths 属性路径,支持传入多个 + * @return 由构成的属性的实际路径和配置中对应的值组成的Map + */ + static getAttrValueByConfig(configModel, paths, editor) { + var _a3, _b2; + if (!editor) { + if (configModel.modelType == "DDeiStage") { + editor = _DDeiEditorUtil2.getEditorInsByDDei(configModel.ddInstance); + } else { + editor = _DDeiEditorUtil2.getEditorInsByDDei((_a3 = configModel.stage) == null ? void 0 : _a3.ddInstance); + } + } + let returnDatas = /* @__PURE__ */ new Map(); + if (configModel && paths) { + let searchPaths = null; + if (typeof paths == "string") { + searchPaths = paths.split(","); + } else { + searchPaths = paths; + } + let searchMap = null; + if (configModel.attrDefineMap && configModel.attrDefineMap.size > 0) { + searchMap = configModel.attrDefineMap; + } else if (configModel.id || configModel.modelCode) { + let id = configModel.modelCode ? configModel.modelCode : configModel.id; + if (id.indexOf("_shadow") != -1) { + id = id.substring(id, id.lastIndexOf("_shadow")); + } + let control = (_b2 = editor.controls) == null ? void 0 : _b2.get(id); + if (control) { + searchMap = control.attrDefineMap; + } + } + if (searchMap) { + let noCodeMatchPaths = []; + searchPaths.forEach((searchPath) => { + if (searchMap.has(searchPath)) { + let attrDefine = searchMap.get(searchPath); + if (!attrDefine.mapping || attrDefine.mapping.length == 0) { + returnDatas.set(searchPath, { "overwrite": attrDefine.overwrite ? attrDefine.overwrite : false, "data": attrDefine.getParser().getDefaultValue() }); + } else { + noCodeMatchPaths.push(searchPath); + } + } else { + noCodeMatchPaths.push(searchPath); + } + }); + let hasMappingAttrs = Array.from(searchMap.values()); + for (let i2 = 0; i2 < noCodeMatchPaths.length; i2++) { + let searchPath = noCodeMatchPaths[i2]; + for (let j2 = 0; j2 < hasMappingAttrs.length; j2++) { + let attrDefine = hasMappingAttrs[j2]; + if (attrDefine.mapping && attrDefine.mapping.indexOf(searchPath) != -1) { + returnDatas.set(searchPath, { "overwrite": attrDefine.overwrite ? attrDefine.overwrite : false, "data": attrDefine.getParser().getDefaultValue() }); + break; + } + } + } + } + } + return returnDatas; + } + /** + * 返回控件原始定义 + * @param modelCode model或id + */ + static getControlDefine(configModel) { + var _a3, _b2; + let editor = _DDeiEditorUtil2.getEditorInsByDDei((_a3 = configModel.stage) == null ? void 0 : _a3.ddInstance); + let id = configModel.modelCode ? configModel.modelCode : configModel.id; + return (_b2 = editor.controls) == null ? void 0 : _b2.get(id); + } + /** + * 获取数据源数据 + */ + static getDataSource(editor, attrDefine, searchText = null) { + if (attrDefine.dataSource) { + let dsDefine = attrDefine.dataSource; + let dataSource = null; + if (Array.isArray(dsDefine)) { + dataSource = dsDefine; + } else { + let type = dsDefine.type; + if (!type || type == "static") { + dataSource = dsDefine.data; + } else if (type == "config") { + dataSource = []; + let configData = dsDefine.data; + let data = editor[configData]; + if (!data) { + data = DDeiConfig$1[configData]; + } + if (data) { + let textKey = dsDefine.text; + let valueKey = dsDefine.value; + let boldKey = dsDefine.bold; + let descKey = dsDefine.desc; + let underlineKey = dsDefine.underline; + let disabledKey = dsDefine.disabled; + let deletedKey = dsDefine.deleted; + let searchTextKey = dsDefine.searchText; + let fontFamilyKey = dsDefine.fontFamily; + data.forEach((item) => { + let text2 = item[textKey]; + let value = item[valueKey]; + let bold = item[boldKey]; + let desc = item[descKey]; + let underline = item[underlineKey]; + let disabled = item[disabledKey]; + let deleted = item[deletedKey]; + let searchText2 = item[searchTextKey]; + let fontFamily = item[fontFamilyKey]; + let rowData = { + "text": text2, + "searchText": searchText2, + "value": value, + "bold": bold, + "desc": desc, + "underline": underline, + "disabled": disabled, + "deleted": deleted, + "fontFamily": fontFamily + }; + dataSource.push(rowData); + }); + dsDefine.type = "static"; + dsDefine.data = dataSource; + } + } + } + let returnDatas = []; + if (dataSource) { + dataSource.forEach((item) => { + item.text = editor.i18n(item.text); + }); + dataSource.forEach((item) => { + if (item.img) { + if (_DDeiEditorUtil2.ICONS && _DDeiEditorUtil2.ICONS[item.img]) { + item.img = _DDeiEditorUtil2.ICONS[item.img].default; + } + } + if (searchText) { + if (item.text.indexOf(searchText) != -1 || item.value.indexOf(searchText) != -1 || item.searchText && item.searchText.indexOf(searchText) != -1) { + returnDatas.push(item); + } + } else { + returnDatas.push(item); + } + }); + } + return returnDatas; + } + return []; + } + /** + * 获取配置属性值 + * @param key key + */ + static getConfigValue(key, editor) { + if (editor && (editor[key] || editor[key] == false || editor[key] == 0)) { + return editor[key]; + } else { + return DDeiEditor$1[key]; + } + } + /** + * 打开弹出框 + * @param id 弹出框ID + * @param data 数据以及回调函数等选项 + * @param pos 位置信息 + * @param el 事件的元素 + */ + static showDialog(editor, id, data, pos, el, isPop = false, keepState = false) { + var _a3, _b2; + if (!isPop && !editor.tempDialogData) { + editor.tempDialogData = {}; + } else if (isPop && !editor.tempPopData) { + editor.tempPopData = {}; + } + if (data.group) { + let loopData; + if (isPop) { + loopData = editor.tempPopData; + } else { + loopData = editor.tempDialogData; + } + for (let oid in loopData) { + if (oid != id) { + let otherDialogData = loopData[oid]; + if (otherDialogData && otherDialogData.group == data.group) { + _DDeiEditorUtil2.closeDialog(editor, oid); + } + } + } + } + if (data) { + data.keepState = keepState; + } + if (isPop) { + editor.tempPopData[id] = data; + } else { + editor.tempDialogData[id] = data; + if (!keepState) { + editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } + } + (_b2 = (_a3 = editor == null ? void 0 : editor.dialogs[id]) == null ? void 0 : _a3.viewer) == null ? void 0 : _b2.forceRefreshView(); + setTimeout(() => { + if (!(pos == null ? void 0 : pos.hiddenMask)) { + let backEle = document.getElementById(editor.id + "_dialog_background_div"); + if (data.background) { + backEle.style.background = data.background; + backEle.style.display = "block"; + if (data.opacity) { + backEle.style.opacity = data.opacity; + } + } + if (data.event == -1) { + backEle.style.pointerEvents = "auto"; + } else { + backEle.style.pointerEvents = ""; + } + } + let dialog = document.getElementById(editor.id + "_" + id); + if (dialog) { + dialog.style.display = "block"; + let msgEle = dialog.getElementsByClassName("msg")[0]; + if (msgEle) { + msgEle.innerHTML = ""; + if (data.msg) { + msgEle.innerHTML = data.msg; + } + } + if (pos == null ? void 0 : pos.type) { + let left, top; + switch (pos.type) { + case 99: + { + left = pos.left; + top = pos.top; + } + break; + case 2: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top - (dialog == null ? void 0 : dialog.clientHeight) + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 3: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left - (dialog.clientWidth / 2 - el.clientWidth / 2) + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top - (dialog == null ? void 0 : dialog.clientHeight) + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 4: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top + el.clientHeight + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 5: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left - (dialog.clientWidth / 2 - el.clientWidth / 2) + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top + el.clientHeight + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 6: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - dialog.clientWidth - scrollData.left; + top = absPos.top + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 7: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - dialog.clientWidth - scrollData.left; + top = absPos.top - (dialog.clientHeight - el.clientHeight) / 2 + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 8: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) + el.clientWidth - scrollData.left; + top = absPos.top + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 9: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) + el.clientWidth - scrollData.left; + top = absPos.top - (dialog.clientHeight - el.clientHeight) / 2 + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + } + if (!pos || pos.ignoreOutSide != 1) { + if (left + (dialog == null ? void 0 : dialog.clientWidth) > document.body.scrollWidth) { + left = document.body.scrollWidth - (dialog == null ? void 0 : dialog.clientWidth) - 10; + } + if (top + (dialog == null ? void 0 : dialog.clientHeight) > document.body.scrollHeight) { + top = document.body.scrollHeight - (dialog == null ? void 0 : dialog.clientHeight) - 10; + } + } + dialog.style.left = left + "px"; + dialog.style.top = top + "px"; + } + } + }, 50); + } + /** + * 初始化弹出框,但不显示 + * @param id 弹出框ID + * @param data 数据以及回调函数等选项 + * @param el 事件的元素 + */ + static initDialog(editor, id, data, isPop = false, keepState = false) { + var _a3, _b2; + if (!isPop && !editor.tempDialogData) { + editor.tempDialogData = {}; + } else if (isPop && !editor.tempPopData) { + editor.tempPopData = {}; + } + if (data.group) { + let loopData; + if (isPop) { + loopData = editor.tempPopData; + } else { + loopData = editor.tempDialogData; + } + for (let oid in loopData) { + if (oid != id) { + let otherDialogData = loopData[oid]; + if (otherDialogData && otherDialogData.group == data.group) { + _DDeiEditorUtil2.closeDialog(editor, oid); + } + } + } + } + if (data) { + data.keepState = keepState; + } + if (isPop) { + editor.tempPopData[id] = data; + } else { + editor.tempDialogData[id] = data; + if (!keepState) { + editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } + } + (_b2 = (_a3 = editor == null ? void 0 : editor.dialogs[id]) == null ? void 0 : _a3.viewer) == null ? void 0 : _b2.forceRefreshView(); + } + /** + * 显示弹出框 + * @param id 弹出框ID + * @param pos 位置信息 + * @param el 事件的元素 + */ + static displayDialog(editor, id, data, pos, el) { + if (!(pos == null ? void 0 : pos.hiddenMask)) { + let backEle = document.getElementById(editor.id + "_dialog_background_div"); + if (data.background) { + backEle.style.background = data.background; + backEle.style.display = "block"; + if (data.opacity) { + backEle.style.opacity = data.opacity; + } + } + if (data.event == -1) { + backEle.style.pointerEvents = "auto"; + } else { + backEle.style.pointerEvents = ""; + } + } + let dialog = document.getElementById(editor.id + "_" + id); + if (dialog) { + dialog.style.display = "block"; + if (pos == null ? void 0 : pos.type) { + let left, top; + switch (pos.type) { + case 99: + { + left = pos.left; + top = pos.top; + } + break; + case 2: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top - (dialog == null ? void 0 : dialog.clientHeight) + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 3: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left - (dialog.clientWidth / 2 - el.clientWidth / 2) + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top - (dialog == null ? void 0 : dialog.clientHeight) + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 4: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top + el.clientHeight + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 5: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left - (dialog.clientWidth / 2 - el.clientWidth / 2) + (pos.dx ? pos.dx : 0) - scrollData.left; + top = absPos.top + el.clientHeight + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 6: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - dialog.clientWidth - scrollData.left; + top = absPos.top + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 7: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) - dialog.clientWidth - scrollData.left; + top = absPos.top - (dialog.clientHeight - el.clientHeight) / 2 + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 8: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) + el.clientWidth - scrollData.left; + top = absPos.top + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + case 9: + { + let absPos = DDeiUtil$1.getDomAbsPosition(el, editor); + let scrollData = DDeiUtil$1.getDomScroll(el, editor); + left = absPos.left + (pos.dx ? pos.dx : 0) + el.clientWidth - scrollData.left; + top = absPos.top - (dialog.clientHeight - el.clientHeight) / 2 + (pos.dy ? pos.dy : 0) - scrollData.top; + } + break; + } + if (!pos || pos.ignoreOutSide != 1) { + if (left + (dialog == null ? void 0 : dialog.clientWidth) > document.body.scrollWidth) { + left = document.body.scrollWidth - (dialog == null ? void 0 : dialog.clientWidth) - 10; + } + if (top + (dialog == null ? void 0 : dialog.clientHeight) > document.body.scrollHeight) { + top = document.body.scrollHeight - (dialog == null ? void 0 : dialog.clientHeight) - 10; + } + } + dialog.style.left = left + "px"; + dialog.style.top = top + "px"; + } + } + } + /** + * 隐藏弹出框 + * @param id 弹出框ID + */ + static hiddenDialog(editor, id) { + let backEle = document.getElementById(editor.id + "_dialog_background_div"); + if (backEle) { + backEle.style.display = "none"; + } + let dialogEle = document.getElementById(editor.id + "_" + id); + if (dialogEle) { + dialogEle.style.display = "none"; + } + } + /** + * 关闭弹出框 + * @param id + */ + static closeDialog(editor, id, isPop = false) { + let dialog = document.getElementById(editor.id + "_" + id); + if (dialog) { + dialog.style.display = "none"; + } + let dialogData; + if (!isPop && editor.tempDialogData) { + dialogData = editor.tempDialogData[id]; + editor.tempDialogData[id] = null; + } else if (isPop && editor.tempPopData) { + dialogData = editor.tempPopData[id]; + editor.tempPopData[id] = null; + } + let backEle = document.getElementById(editor.id + "_dialog_background_div"); + if (backEle) { + backEle.style.background = "none"; + backEle.style.display = "none"; + } + if (!dialogData || !dialogData.keepState) { + editor.changeState(DDeiEditorState.DESIGNING); + } + } + static closeDialogs(editor, groups, isPop = false) { + if (isPop) { + for (let oid in editor.tempPopData) { + let otherDialogData = editor.tempPopData[oid]; + if (otherDialogData && (groups && groups.indexOf(otherDialogData.group) != -1 || !groups || groups.length == 0)) { + _DDeiEditorUtil2.closeDialog(editor, oid, isPop); + } + } + } else { + for (let oid in editor.tempDialogData) { + let otherDialogData = editor.tempDialogData[oid]; + if (otherDialogData && (groups && groups.indexOf(otherDialogData.group) != -1 || !groups || groups.length == 0)) { + _DDeiEditorUtil2.closeDialog(editor, oid, isPop); + } + } + } + } + /** + * 打开或关闭弹出框 + * @param id + * @param data + * @param pos + * @param el + */ + static showOrCloseDialog(editor, id, data, pos, el, isPop = false, keepState = false) { + if (!isPop && editor.tempDialogData && editor.tempDialogData[id]) { + _DDeiEditorUtil2.closeDialog(editor, id, isPop); + } else if (isPop && editor.tempPopData && editor.tempPopData[id]) { + _DDeiEditorUtil2.closeDialog(editor, id, isPop); + } else { + _DDeiEditorUtil2.showDialog(editor, id, data, pos, el, isPop, keepState); + } + } + /** + * 获取控件的小图标 + */ + static getControlIcons(editor) { + return new Promise((resolve, reject) => { + if (editor.icons && JSON.stringify(editor.icons) != "{}") { + resolve(editor.icons); + } else { + if (editor.ddInstance) { + let promiseArr = []; + let ddInstance = editor.ddInstance; + editor.icons = {}; + editor == null ? void 0 : editor.controls.forEach((controlDefine) => { + let cacheData = localStorage.getItem("ICON-CACHE-" + controlDefine.id); + if (cacheData) { + editor.icons[controlDefine.id] = cacheData; + return; + } else { + promiseArr.push(new Promise((resolve2, reject2) => { + var _a3; + let models = null; + try { + models = _DDeiEditorUtil2.createControl(controlDefine, editor); + let iconPos = (_a3 = controlDefine == null ? void 0 : controlDefine.define) == null ? void 0 : _a3.iconPos; + let outRect = DDeiAbstractShape.getOutRectByPV(models); + outRect.width += (iconPos == null ? void 0 : iconPos.dw) ? iconPos.dw : 0; + outRect.height += (iconPos == null ? void 0 : iconPos.dh) ? iconPos.dh : 0; + let baseWidth = 50; + let baseHeight = 50; + if (outRect.width > 0 && outRect.height > 0) { + if (outRect.width > outRect.height) { + baseWidth *= outRect.width / outRect.height; + } else { + baseHeight *= outRect.height / outRect.width; + } + let scaleMatrix2 = new Matrix3( + baseWidth / outRect.width, + 0, + 0, + 0, + baseHeight / outRect.height, + 0, + 0, + 0, + 1 + ); + models.forEach((model) => { + model.transVectors(scaleMatrix2); + }); + outRect = DDeiAbstractShape.getOutRectByPV(models); + } + if (!outRect.height) { + outRect.height = baseHeight; + } + if (!outRect.width) { + outRect.width = baseWidth; + } + outRect.width += (iconPos == null ? void 0 : iconPos.dw) ? iconPos.dw : 0; + outRect.height += (iconPos == null ? void 0 : iconPos.dh) ? iconPos.dh : 0; + models.forEach((model) => { + model.initRender(); + model.render.drawShape({ weight: 3, border: { width: 1.5 } }); + }); + let canvas = document.createElement("canvas"); + _DDeiEditorUtil2.drawModelsToCanvas(models, outRect, canvas); + let dataURL = canvas.toDataURL("image/png"); + localStorage.setItem("ICON-CACHE-" + controlDefine.id, dataURL); + editor.icons[controlDefine.id] = dataURL; + } catch (e) { + if (editor.debug) { + console.error(e); + } + } + models == null ? void 0 : models.forEach((md) => { + md == null ? void 0 : md.destroyed(); + }); + resolve2(); + })); + } + }); + Promise.all(promiseArr).then((all) => { + ddInstance.render.tempCanvas = null; + resolve(editor.icons); + }); + } + } + }); + } + /** + * 将多个元素绘制到canvas上 + */ + static drawModelsToCanvas(models, outRect, canvas, level = 0) { + var _a3; + if ((models == null ? void 0 : models.length) > 0) { + let stage2 = models[0].stage; + let rat1 = (_a3 = stage2.ddInstance) == null ? void 0 : _a3.render.ratio; + canvas.setAttribute("style", "-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;zoom:" + 1 / rat1); + let ctx = canvas.getContext("2d", { willReadFrequently: true }); + let width = (outRect.width + 4) * rat1; + let height = (outRect.height + 4) * rat1; + if (level == 0) { + canvas.setAttribute("width", width); + canvas.setAttribute("height", height); + canvas.style.width = width + "px"; + canvas.style.height = height + "px"; + } + models.forEach((model) => { + var _a22; + let rendList = []; + if (((_a22 = model.composes) == null ? void 0 : _a22.length) > 0) { + rendList = rendList.concat(model.composes); + } + rendList.push(model); + rendList.sort((a, b) => { + if ((a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return a.cIndex - b.cIndex; + } else if ((a.cIndex || a.cIndex == 0) && !(b.cIndex || b.cIndex == 0)) { + return 1; + } else if (!(a.cIndex || a.cIndex == 0) && (b.cIndex || b.cIndex == 0)) { + return -1; + } else { + return 0; + } + }); + rendList == null ? void 0 : rendList.forEach((mc) => { + if (mc == model) { + if (mc.render.tempCanvas) { + if (mc.baseModelType != "DDeiLine") { + ctx.drawImage(mc.render.tempCanvas, 0, 0, mc.render.tempCanvas.width, mc.render.tempCanvas.height, ((mc.essBounds ? mc.essBounds.x : mc.cpv.x) - outRect.x) * rat1, ((mc.essBounds ? mc.essBounds.y : mc.cpv.y) - outRect.y - 2) * rat1, mc.essBounds.width * rat1, mc.essBounds.height * rat1); + } else { + ctx.drawImage(mc.render.tempCanvas, 0, 0, mc.render.tempCanvas.width, mc.render.tempCanvas.height, (mc.cpv.x - outRect.x) * rat1, (mc.cpv.y - outRect.y) * rat1, outRect.width * rat1, outRect.height * rat1); + } + } + if (model.baseModelType == "DDeiContainer") { + _DDeiEditorUtil2.drawModelsToCanvas(Array.from(model.models.values()), outRect, canvas, level + 1); + } + } else { + _DDeiEditorUtil2.drawModelsToCanvas([mc], outRect, canvas, level + 1); + } + }); + }); + } + } + /** + * 清空控件小图标 + */ + static clearControlIcons(editor) { + editor.icons = {}; + editor == null ? void 0 : editor.controls.forEach((controlDefine) => { + localStorage.removeItem("ICON-CACHE-" + controlDefine.id); + }); + } + /** + * 创建控件 + */ + static createControl(control, editor) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + let ddInstance = editor.ddInstance; + ddInstance.render.inEdge = 0; + let stage2 = ddInstance.stage; + let layer2 = stage2.layers[stage2.layerIndex]; + let models = []; + let cc = control; + let searchPaths = [ + "width", + "height", + "text", + "subcontrol", + "layout" + ]; + let configAtrs = _DDeiEditorUtil2.getAttrValueByConfig( + cc, + searchPaths + ); + stage2.idIdx++; + let dataJson = { + id: cc.code + "_" + stage2.idIdx, + modelCode: cc.id + }; + searchPaths.forEach((key) => { + if (configAtrs.get(key)) { + dataJson[key] = configAtrs.get(key).data; + } + if (cc[key] != void 0 && cc[key] != null) { + dataJson[key] = cc[key]; + } + }); + if (cc.img) { + dataJson.fill = { type: 2, image: cc.img }; + } + for (let i2 in cc == null ? void 0 : cc.define) { + dataJson[i2] = cloneDeep(cc.define[i2]); + } + for (let i2 in dataJson) { + let value = dataJson[i2]; + if (typeof value == "string") { + dataJson[i2] = editor.i18n(value); + } + } + (_a3 = dataJson.composes) == null ? void 0 : _a3.forEach((compose) => { + for (let i2 in compose) { + let value = compose[i2]; + if (typeof value == "string") { + compose[i2] = editor.i18n(value); + } + } + }); + delete dataJson.ovs; + let model = editor.controlModelClasses[cc.type].initByJSON( + dataJson, + { currentStage: stage2, currentLayer: layer2, currentDdInstance: ddInstance } + ); + models.push(model); + (_b2 = control.others) == null ? void 0 : _b2.forEach((oc) => { + for (let i2 in oc) { + let value = oc[i2]; + if (typeof value == "string") { + oc[i2] = editor.i18n(value); + } + } + let otherModels = _DDeiEditorUtil2.createControl(oc, editor); + if ((otherModels == null ? void 0 : otherModels.length) > 0) { + models = models.concat(otherModels); + } + }); + if (((_c2 = control == null ? void 0 : control.define) == null ? void 0 : _c2.create) == false) { + models.splice(0, 1); + } + if ((_d2 = control == null ? void 0 : control.define) == null ? void 0 : _d2.iLinkModels) { + for (let ilk in (_e2 = control == null ? void 0 : control.define) == null ? void 0 : _e2.iLinkModels) { + let linkData = (_f = control == null ? void 0 : control.define) == null ? void 0 : _f.iLinkModels[ilk]; + let cIndex = parseInt(ilk); + if (cIndex != -1) { + cIndex++; + let linkControl = models[cIndex]; + let lineLink = new DDeiModelLink({ + depModel: cc, + type: linkData.type, + dm: linkControl, + dx: linkData.dx, + dy: linkData.dy + }); + linkControl.depModel = cc; + models[0].linkModels.set(linkControl.id, lineLink); + } + } + } + if ((_g = control == null ? void 0 : control.define) == null ? void 0 : _g.initMerges) { + let mergeControls = [models[0]]; + for (let m in (_h = control == null ? void 0 : control.define) == null ? void 0 : _h.initMerges) { + let mIndex = (_i = control == null ? void 0 : control.define) == null ? void 0 : _i.initMerges[m]; + if (mIndex != -1) { + mIndex++; + let mControl = models[mIndex]; + if (mergeControls.indexOf(mControl) == -1) { + mergeControls.push(mControl); + } + } + } + if (mergeControls.length > 1) { + ddInstance.stage.layers[ddInstance.stage.layerIndex]; + (_j = ddInstance.stage) == null ? void 0 : _j.getStageRatio(); + let outRect = DDeiAbstractShape.getOutRectByPV(mergeControls); + let controlDefine = DDeiUtil$1.getControlDefine({ modelCode: "100202" }); + let container2 = DDeiUtil$1.createControl(controlDefine, DDeiUtil$1.getEditorInsByDDei(ddInstance))[0]; + container2.layout = "compose"; + container2.layoutManager = DDeiLayoutManagerFactory.getLayoutInstance("compose"); + container2.layoutManager.container = container2; + container2.fill = { type: 0 }; + container2.border = { type: 0 }; + let m12 = new Matrix3(); + let scaleMatrix2 = new Matrix3( + outRect.width / container2.essBounds.width, + 0, + 0, + 0, + outRect.height / container2.essBounds.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + let moveMatrix2 = new Matrix3( + 1, + 0, + outRect.x + outRect.width / 2, + 0, + 1, + outRect.y + outRect.height / 2, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + container2.transVectors(m12); + mergeControls.forEach((mc) => { + if (mc) { + container2.addModel(mc, false); + mc.pModel = container2; + } + }); + container2 == null ? void 0 : container2.changeParentsBounds(); + ddInstance.stage.idIdx++; + models.splice(0, mergeControls.length, container2); + } + } + return models; + } + /** + * 执行调用回调函数 + * @param ddInstance ddeis实例 + * @param editor 设计器对象实例 + */ + static invokeCallbackFunc(name, operate, data, ddInstance, evt) { + let result = 0; + let editor = _DDeiEditorUtil2.getEditorInsByDDei(ddInstance); + let selectAfter = DDeiUtil$1.getConfigValue(name, ddInstance); + let funcArr = editor.funcIndex.get(name); + let callResult = new DDeiFuncCallResult(); + if (selectAfter) { + let cr = selectAfter(operate, data, ddInstance, evt); + callResult = cr ? cr : callResult; + } + if ((callResult == null ? void 0 : callResult.state) > 0) { + result = 1; + } else if ((callResult == null ? void 0 : callResult.state) < 0) { + result = -1; + } + if (callResult.state == 0 || callResult.state == 1 || callResult.state == -1) { + if ((funcArr == null ? void 0 : funcArr.length) > 0) { + for (let fa = 0; fa < funcArr.length; fa++) { + let func = funcArr[fa]["func"]; + if (func) { + callResult = func(operate, data, ddInstance, evt); + if (callResult) { + if (callResult.state > 0) { + result = 1; + } else if (callResult.state < 0) { + result = -1; + } + if (!(callResult.state == 0 || callResult.state == 1 || callResult.state == -1)) { + break; + } + } + } + } + } + } + return result; + } + }; + __publicField2(_DDeiEditorUtil, "recentlyToolGroups", null); + __publicField2(_DDeiEditorUtil, "ICONS", null); + let DDeiEditorUtil = _DDeiEditorUtil; + const DDeiEditorUtil$1 = DDeiEditorUtil; + class DDeiBusCommandChangeCursor extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + if ((data == null ? void 0 : data.passIndex) || (data == null ? void 0 : data.cursor) || (data == null ? void 0 : data.image)) { + if (data.image) { + document.body.style.cursor = "url(" + DDeiEditorUtil$1.ICONS[data.image] + "),auto"; + } + if (data.cursor) { + document.body.style.cursor = data.cursor; + } else if (data.passIndex) { + if (bus.ddInstance.state != DDeiEnumState.IN_ACTIVITY) { + let type = data == null ? void 0 : data.type; + switch (type) { + case "line": + { + switch (data.passIndex) { + case 1: + document.body.style.cursor = "grab"; + break; + case 2: + document.body.style.cursor = "grab"; + break; + case 3: + document.body.style.cursor = (data == null ? void 0 : data.direct) == 1 ? "ns-resize" : "ew-resize"; + break; + case 4: + document.body.style.cursor = "grab"; + break; + default: + document.body.style.cursor = "all-scroll"; + break; + } + } + break; + default: { + switch (data.passIndex) { + case 1: + document.body.style.cursor = "ns-resize"; + break; + case 2: + document.body.style.cursor = "nesw-resize"; + break; + case 3: + document.body.style.cursor = "ew-resize"; + break; + case 4: + document.body.style.cursor = "nwse-resize"; + break; + case 5: + document.body.style.cursor = "ns-resize"; + break; + case 6: + document.body.style.cursor = "nesw-resize"; + break; + case 7: + document.body.style.cursor = "ew-resize"; + break; + case 8: + document.body.style.cursor = "nwse-resize"; + break; + case 9: + document.body.style.cursor = "alias"; + break; + case 10: + document.body.style.cursor = "all-scroll"; + break; + case 11: + document.body.style.cursor = "alias"; + break; + case 13: + document.body.style.cursor = "all-scroll"; + break; + default: + document.body.style.cursor = "default"; + break; + } + } + } + } + } + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandChangeCursor({ code: DDeiEnumBusCommandType.ChangeCursor, name: "", desc: "" }); + } + } + const __vite_glob_0_3$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeCursor, + default: DDeiBusCommandChangeCursor + }, Symbol.toStringTag, { value: "Module" })); + class DDeiCommandChangeEditMode extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let ddInstance = bus.ddInstance; + if (ddInstance && (data == null ? void 0 : data.mode)) { + ddInstance.changeEditMode(data.mode); + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiCommandChangeEditMode({ code: DDeiEnumBusCommandType.ChangeEditMode, name: "", desc: "" }); + } + } + const __vite_glob_0_4$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiCommandChangeEditMode, + default: DDeiCommandChangeEditMode + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandChangeLayout extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + if (stage2 && ((_a3 = data == null ? void 0 : data.mids) == null ? void 0 : _a3.length) > 0) { + let mids = data.mids; + let value = data.value; + let attrDefine = data.attrDefine; + if (attrDefine.modelCode == "DDeiTableCell") { + let modelId = mids[0]; + let table2 = stage2 == null ? void 0 : stage2.getModelById(modelId); + if (table2) { + let cells = table2.getSelectedCells(); + for (let i2 = 0; i2 < cells.length; i2++) { + let cell = cells[i2]; + let oldLayout = cell.layout; + if (value != oldLayout) { + let newLayoutManager = DDeiLayoutManagerFactory.getLayoutInstance(value); + newLayoutManager.container = cell; + let canConvert = newLayoutManager.canConvertLayout(oldLayout); + if (!canConvert) { + return false; + } + } + } + } + } else { + for (let i2 = 0; i2 < mids.length; i2++) { + let modelId = mids[i2]; + if (modelId) { + let model = stage2 == null ? void 0 : stage2.getModelById(modelId); + if (model) { + let oldLayout = model.layout; + if (value != oldLayout) { + let newLayoutManager = DDeiLayoutManagerFactory.getLayoutInstance(value); + newLayoutManager.container = model; + let canConvert = newLayoutManager.canConvertLayout(oldLayout); + if (!canConvert) { + return false; + } + } + } + } + } + } + return true; + } + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + let stage2 = bus.ddInstance.stage; + if (stage2 && ((_a3 = data == null ? void 0 : data.mids) == null ? void 0 : _a3.length) > 0 && ((_b2 = data == null ? void 0 : data.paths) == null ? void 0 : _b2.length) > 0) { + let mids = data.mids; + let value = data.value; + let attrDefine = data.attrDefine; + if (attrDefine.modelCode == "DDeiTableCell") { + let modelId = mids[0]; + let table2 = stage2 == null ? void 0 : stage2.getModelById(modelId); + if (table2) { + let cells = table2.getSelectedCells(); + for (let i2 = 0; i2 < cells.length; i2++) { + let cell = cells[i2]; + let oldLayout = cell.layout; + cell.layout = value; + (_c2 = cell.render) == null ? void 0 : _c2.setCachedValue("layout", value); + cell.layoutManager = DDeiLayoutManagerFactory.getLayoutInstance(value); + cell.layoutManager.container = cell; + cell.layoutManager.convertLayout(oldLayout); + cell.layoutManager.changeSubModelBounds(); + } + bus.insert(DDeiEnumBusCommandType.NodifyChange, null, evt, 0); + bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt, 1); + } + } else { + mids.forEach((modelId) => { + var _a22; + if (modelId) { + let model = stage2 == null ? void 0 : stage2.getModelById(modelId); + if (model) { + let oldLayout = model.layout; + model.layout = value; + (_a22 = model.render) == null ? void 0 : _a22.setCachedValue("layout", value); + model.layoutManager = DDeiLayoutManagerFactory.getLayoutInstance(value); + model.layoutManager.container = model; + model.layoutManager.convertLayout(oldLayout); + model.layoutManager.changeSubModelBounds(); + } + } + }); + bus.insert(DDeiEnumBusCommandType.NodifyChange, null, evt, 0); + bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt, 1); + } + return true; + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandChangeLayout({ code: DDeiEnumBusCommandType.ChangeLayout, name: "", desc: "" }); + } + } + const __vite_glob_0_5$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeLayout, + default: DDeiBusCommandChangeLayout + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandChangeLinePoint extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + let stageRender = stage2 == null ? void 0 : stage2.render; + let ex = (data == null ? void 0 : data.ex) ? data.ex : 0; + let ey = (data == null ? void 0 : data.ey) ? data.ey : 0; + if ((stageRender == null ? void 0 : stageRender.dragObj) && ((_a3 = stageRender.dragObj) == null ? void 0 : _a3.model) && (ex || ey)) { + let lineModel = stageRender.dragObj.model; + let passIndex = stageRender.dragObj.passIndex; + let opvsIndex = stageRender.dragObj.opvsIndex; + let opvs = stageRender.dragObj.opvs; + let pvs2 = lineModel.pvs; + let create = stageRender.dragObj.create; + switch (lineModel.type) { + case 1: + { + if (passIndex == 1 && opvsIndex == 0) { + lineModel.setLineType1PointPosition(0, ex, ey); + } else if (passIndex == 1 && opvsIndex == opvs.length - 1) { + lineModel.setLineType1PointPosition(1, ex, ey); + } + } + break; + case 2: + { + if (passIndex == 1 && opvsIndex == 0) { + if (pvs2.length > 2) { + let otherP = pvs2[1]; + if (Math.abs(pvs2[0].x - otherP.x) <= 1) { + otherP.x = ex; + } else { + otherP.y = ey; + } + } + pvs2[0].x = ex; + pvs2[0].y = ey; + } else if (passIndex == 1 && opvsIndex == opvs.length - 1) { + if (create) { + pvs2[pvs2.length - 1].x = ex; + pvs2[pvs2.length - 1].y = ey; + } else { + if (pvs2.length > 2) { + let otherP = pvs2[pvs2.length - 2]; + if (Math.abs(pvs2[pvs2.length - 1].x - otherP.x) <= 1) { + otherP.x = ex; + } else { + otherP.y = ey; + } + } + pvs2[pvs2.length - 1].x = ex; + pvs2[pvs2.length - 1].y = ey; + } + } else if (passIndex == 2) { + let cIndex = parseInt(opvsIndex / 2); + let cp = pvs2[cIndex]; + let bp = pvs2[cIndex - 1]; + let ap = pvs2[cIndex + 1]; + let startPoint = lineModel.startPoint; + if (Math.abs(cp.x - bp.x) <= 1) { + bp.x = ex; + bp.x = ex; + lineModel.spvs[cIndex] = { x: ex - startPoint.x, y: 0 }; + } else { + bp.y = ey; + bp.y = ey; + lineModel.spvs[cIndex] = { x: 0, y: ey - startPoint.y }; + } + if (Math.abs(cp.x - ap.x) <= 1) { + ap.x = ex; + ap.x = ex; + lineModel.spvs[cIndex + 1] = { x: ex - startPoint.x, y: 0 }; + } else { + ap.y = ey; + ap.y = ey; + lineModel.spvs[cIndex + 1] = { x: 0, y: ey - startPoint.y }; + } + cp.x = ex; + cp.y = ey; + } else if (passIndex == 3) { + let startPoint = lineModel.startPoint; + let sIndex = parseInt(opvsIndex / 2); + let sp = pvs2[sIndex]; + let ep = pvs2[sIndex + 1]; + if (sp && ep) { + if (Math.abs(sp.x - ep.x) <= 1) { + sp.x = ex; + ep.x = ex; + lineModel.spvs[sIndex + 1] = { x: ex - startPoint.x, y: 0 }; + } else { + sp.y = ey; + ep.y = ey; + lineModel.spvs[sIndex + 1] = { x: 0, y: ey - startPoint.y }; + } + } + } + } + break; + case 3: + { + if (passIndex == 1) { + if (opvsIndex == 0) { + pvs2[0].x = ex; + pvs2[0].y = ey; + } else { + pvs2[pvs2.length - 1].x = ex; + pvs2[pvs2.length - 1].y = ey; + } + lineModel.freeze = 0; + } else if (passIndex == 4) { + let lineIndex = parseInt(opvsIndex / 3); + let oitype = opvsIndex % 2; + let i0 = lineIndex * 3; + let i1 = i0 + 1; + let i2 = i0 + 2; + let i3 = i0 + 3; + if (opvs.length > 4) { + if (opvsIndex % 3 == 0) { + oitype = 2; + } else { + oitype = opvsIndex % 3 % 2; + } + } + if (oitype == 1) { + pvs2[i1].x = -(pvs2[i0].x * DDeiUtil$1.p331t3 + DDeiUtil$1.p33t21t3 * pvs2[i2].x + DDeiUtil$1.p33t3 * pvs2[i3].x - ex) / DDeiUtil$1.p331t2t3; + pvs2[i1].y = -(pvs2[i0].y * DDeiUtil$1.p331t3 + DDeiUtil$1.p33t21t3 * pvs2[i2].y + DDeiUtil$1.p33t3 * pvs2[i3].y - ey) / DDeiUtil$1.p331t2t3; + lineModel.spvs[i1] = true; + } else if (oitype == 2) { + let dx = ex - pvs2[opvsIndex].x; + let dy = ey - pvs2[opvsIndex].y; + pvs2[opvsIndex].x = ex; + pvs2[opvsIndex].y = ey; + pvs2[opvsIndex - 1].x += dx; + pvs2[opvsIndex - 1].y += dy; + pvs2[opvsIndex + 1].x += dx; + pvs2[opvsIndex + 1].y += dy; + } else { + pvs2[i2].x = -(pvs2[i0].x * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].x + DDeiUtil$1.p66t3 * pvs2[i3].x - ex) / DDeiUtil$1.p66t21t3; + pvs2[i2].y = -(pvs2[i0].y * DDeiUtil$1.p661t3 + DDeiUtil$1.p661t2t3 * pvs2[i1].y + DDeiUtil$1.p66t3 * pvs2[i3].y - ey) / DDeiUtil$1.p66t21t3; + lineModel.spvs[i2] = true; + } + lineModel.freeze = 1; + } + } + break; + } + lineModel.calPoints(); + return true; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + var _a3, _b2; + (_b2 = (_a3 = bus.ddInstance) == null ? void 0 : _a3.bus) == null ? void 0 : _b2.insert(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandChangeLinePoint({ code: DDeiEnumBusCommandType.ChangeLinePoint, name: "", desc: "" }); + } + } + const __vite_glob_0_6$1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeLinePoint, + default: DDeiBusCommandChangeLinePoint + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandChangeSelectorPassIndex extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2 && stage2.render.selector && (data == null ? void 0 : data.passIndex)) { + stage2.render.selector.setPassIndex(data == null ? void 0 : data.type, data == null ? void 0 : data.passIndex, data == null ? void 0 : data.opvsIndex); + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeCursor, { type: data == null ? void 0 : data.type, passIndex: data == null ? void 0 : data.passIndex, direct: data == null ? void 0 : data.direct }, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandChangeSelectorPassIndex({ code: DDeiEnumBusCommandType.ChangeSelectorPassIndex, name: "", desc: "" }); + } + } + const __vite_glob_0_7$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeSelectorPassIndex, + default: DDeiBusCommandChangeSelectorPassIndex + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiBusCommandChangeStageRatio = class _DDeiBusCommandChangeStageRatio2 extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + if (DDeiUtil$1.getConfigValue("GLOBAL_ALLOW_STAGE_RATIO", bus.ddInstance)) { + let stage2 = bus.ddInstance.stage; + if (stage2 && data.oldValue && data.newValue && data.oldValue != data.newValue) { + let scaleSize = data.newValue / data.oldValue; + (/* @__PURE__ */ new Date()).getTime(); + stage2.layers.forEach((layer2) => { + var _a22; + layer2.opPoints = []; + delete layer2.opLine; + (_a22 = layer2.shadowControls) == null ? void 0 : _a22.forEach((c) => { + c.destroyed(); + }); + layer2.shadowControls = []; + layer2.midList.forEach((mid) => { + var _a32, _b2, _c2; + let model = layer2.models.get(mid); + if (model.baseModelType == "DDeiLine") { + model.updateLooseCanvas(); + } + (_b2 = (_a32 = model.getTopContainer()) == null ? void 0 : _a32.render) == null ? void 0 : _b2.enableRefreshShape(); + (_c2 = model.render) == null ? void 0 : _c2.enableRefreshShape(); + }); + (/* @__PURE__ */ new Date()).getTime(); + }); + let oldWidth = stage2.width; + let oldHeight = stage2.height; + stage2.width = stage2.width * scaleSize; + stage2.height = stage2.height * scaleSize; + let dw = stage2.width - oldWidth; + let dh = stage2.height - oldHeight; + let wpvX = -stage2.wpv.x; + let wpvY = -stage2.wpv.y; + let ex = null, ey = null; + if (((_a3 = window.event) == null ? void 0 : _a3.type) == "wheel") { + let evt2 = window.event; + ex = evt2.offsetX; + ey = evt2.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + } + let ox = dw / 2; + let oy = dh / 2; + if (ex && ey) { + ox = dw * ex / oldWidth; + oy = dh * ey / oldHeight; + } + let w = stage2.ddInstance.render.canvas.width / stage2.ddInstance.render.ratio; + let h = stage2.ddInstance.render.canvas.height / stage2.ddInstance.render.ratio; + if (w < stage2.width) { + stage2.wpv.x = -wpvX - ox; + } else { + stage2.wpv.x = 0; + } + if (h < stage2.height) { + stage2.wpv.y = -wpvY - oy; + } else { + stage2.wpv.y = 0; + } + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "CHANGE_RATIO", null, stage2.ddInstance, evt); + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_STAGE_CHANGE_RATIO", "CHANGE_RATIO", data, stage2.ddInstance, evt); + return true; + } + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.insert(DDeiEnumBusCommandType.UpdateSelectorBounds, null, evt, 0); + bus.insert(DDeiEnumBusCommandType.RefreshShape, null, evt, 1); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new _DDeiBusCommandChangeStageRatio2({ code: DDeiEnumBusCommandType.ChangeStageRatio, name: "", desc: "" }); + } + }; + _DDeiBusCommandChangeStageRatio.calLineCross = debounce(DDeiLine.calLineCross, 30); + let DDeiBusCommandChangeStageRatio = _DDeiBusCommandChangeStageRatio; + const __vite_glob_0_8$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeStageRatio, + default: DDeiBusCommandChangeStageRatio + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandChangeStageWPV extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2, _d2; + let stage2 = bus.ddInstance.stage; + if (stage2) { + let rat1 = stage2.ddInstance.render.ratio; + let stageRatio2 = stage2.getStageRatio(); + let ratio = rat1 * stageRatio2; + let hScrollWidth = ((_a3 = stage2.render.hScroll) == null ? void 0 : _a3.width) ? (_b2 = stage2.render.hScroll) == null ? void 0 : _b2.width : 0; + let vScrollHeight = ((_c2 = stage2.render.vScroll) == null ? void 0 : _c2.height) ? (_d2 = stage2.render.vScroll) == null ? void 0 : _d2.height : 0; + let oldWPV = clone(stage2.wpv); + let x2 = data.x; + let y2 = data.y; + let dragObj = data.dragObj; + if (hScrollWidth) { + stage2.wpv.x += (x2 - dragObj.dx) / ratio; + } + if (vScrollHeight) { + stage2.wpv.y += (y2 - dragObj.dy) / ratio; + } + if (stage2.wpv.x > 0) { + stage2.wpv.x = 0; + } else if (stage2.wpv.x < -stage2.width + hScrollWidth) { + stage2.wpv.x = -stage2.width + hScrollWidth; + } + if (stage2.wpv.y > 0) { + stage2.wpv.y = 0; + } else if (stage2.wpv.y < -stage2.height + vScrollHeight) { + stage2.wpv.y = -stage2.height + vScrollHeight; + } + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "CHANGE_WPV", null, stage2.ddInstance, evt); + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_STAGE_CHANGE_WPV", "CHANGE_WPV", { oldWPV, wpv: stage2.wpv }, stage2.ddInstance, evt); + return true; + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "grabbing" }); + bus.push(DDeiEnumBusCommandType.RefreshShape); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandChangeStageWPV({ code: DDeiEnumBusCommandType.ChangeStageWPV, name: "", desc: "" }); + } + } + const __vite_glob_0_9$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandChangeStageWPV, + default: DDeiBusCommandChangeStageWPV + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandClearTemplateVars extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + stage2.render.currentOperateShape = null; + stage2.render.operateState = DDeiEnumOperateState.NONE; + stage2.render.dragObj = null; + stage2.render.isHAds = false; + stage2.render.isVAds = false; + stage2.render.vAdsX = Infinity; + stage2.render.hAdsY = Infinity; + stage2.render.tempSX = null; + stage2.render.tempSY = null; + stage2.ddInstance.render.inEdge = 0; + stage2.render.selector.setPassIndex("", -1, -1); + delete stage2.tempStartOPpoint; + delete stage2.tempCursorOPpoint; + delete stage2.render.linePathData; + delete stage2.ddInstance.render.inAreaControls; + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandClearTemplateVars({ code: DDeiEnumBusCommandType.ClearTemplateVars, name: "", desc: "" }); + } + } + const __vite_glob_0_10$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandClearTemplateVars, + default: DDeiBusCommandClearTemplateVars + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandCreateDepLinkModel extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let ddInstance = bus.ddInstance; + let stage2 = ddInstance.stage; + let text2 = data.text; + let model = data.model ? data.model : stage2.selectedModels.size == 1 ? Array.from(stage2.selectedModels.values())[0] : null; + DDeiUtil$1.createDepLinkModel(model, text2); + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandCreateDepLinkModel({ code: DDeiEnumBusCommandType.CreateDepLinkModel, name: "", desc: "" }); + } + } + const __vite_glob_0_11$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandCreateDepLinkModel, + default: DDeiBusCommandCreateDepLinkModel + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelAlign extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + if (stage2 && ((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0 && (data == null ? void 0 : data.value)) { + let models = data.models; + let filtedModels = []; + models.forEach((m) => { + if (m.baseModelType != "DDeiLine") { + filtedModels.push(m); + } + }); + if ((filtedModels == null ? void 0 : filtedModels.length) > 1) { + let baseModel = filtedModels[0]; + let baseOutRect = DDeiAbstractShape.getOutRectByPV([baseModel]); + let hasChange = false; + for (let i2 = 1; i2 < filtedModels.length; i2++) { + let model = filtedModels[i2]; + let moveMatrix2 = null; + let outRect = DDeiAbstractShape.getOutRectByPV([model]); + if (data.value == "left") { + moveMatrix2 = new Matrix3( + 1, + 0, + baseOutRect.x - outRect.x, + 0, + 1, + 0, + 0, + 0, + 1 + ); + } else if (data.value == "center") { + moveMatrix2 = new Matrix3( + 1, + 0, + baseOutRect.x + baseOutRect.width / 2 - outRect.x - outRect.width / 2, + 0, + 1, + 0, + 0, + 0, + 1 + ); + } else if (data.value == "right") { + moveMatrix2 = new Matrix3( + 1, + 0, + baseOutRect.x + baseOutRect.width - outRect.x - outRect.width, + 0, + 1, + 0, + 0, + 0, + 1 + ); + } else if (data.value == "top") { + moveMatrix2 = new Matrix3( + 1, + 0, + 0, + 0, + 1, + baseOutRect.y - outRect.y, + 0, + 0, + 1 + ); + } else if (data.value == "middle") { + moveMatrix2 = new Matrix3( + 1, + 0, + 0, + 0, + 1, + baseOutRect.y + baseOutRect.height / 2 - outRect.y - outRect.height / 2, + 0, + 0, + 1 + ); + } else if (data.value == "bottom") { + moveMatrix2 = new Matrix3( + 1, + 0, + 0, + 0, + 1, + baseOutRect.y + baseOutRect.height - outRect.y - outRect.height, + 0, + 0, + 1 + ); + } + if (moveMatrix2) { + model.transVectors(moveMatrix2); + model.updateLinkModels(); + hasChange = true; + } + } + if (hasChange) { + bus.push(DDeiEnumBusCommandType.NodifyChange); + bus.insert(DDeiEnumBusCommandType.AddHistroy); + } + bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + bus.push(DDeiEnumBusCommandType.RefreshShape); + return true; + } + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelAlign({ code: DDeiEnumBusCommandType.ModelAlign, name: "", desc: "" }); + } + } + const __vite_glob_0_12$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelAlign, + default: DDeiBusCommandModelAlign + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelAutoPos extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + if (stage2 && ((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0 && (data == null ? void 0 : data.value)) { + let models = data.models; + let filtedModels = []; + models.forEach((m) => { + if (m.baseModelType != "DDeiLine") { + filtedModels.push(m); + } + }); + if ((filtedModels == null ? void 0 : filtedModels.length) > 1) { + let weight = 0; + let hasChange = false; + let startValue = -Infinity; + let ourRects = []; + for (let i2 = 0; i2 < filtedModels.length; i2++) { + let model = filtedModels[i2]; + let outRect = DDeiAbstractShape.getOutRectByPV([model]); + outRect.model = model; + ourRects.push(outRect); + } + if (data.value == 1) { + ourRects.sort((m12, m2) => { + return m12.model.x - m2.model.x; + }); + } else if (data.value == 2) { + ourRects.sort((m12, m2) => { + return m12.model.y - m2.model.y; + }); + } + let sumWeight = 0; + for (let i2 = 0; i2 < ourRects.length - 1; i2++) { + let m12 = ourRects[i2]; + let m2 = ourRects[i2 + 1]; + if (data.value == 1) { + sumWeight += m2.x - (m12.x + m12.width); + } else if (data.value == 2) { + sumWeight += m2.y - (m12.y + m12.height); + } + } + weight = sumWeight / (ourRects.length - 1); + for (let i2 = 1; i2 < ourRects.length; i2++) { + let outRect = ourRects[i2]; + let model = outRect.model; + if (data.value == 1) { + if (startValue == -Infinity) { + startValue = ourRects[0].x1; + } + startValue += weight; + if (outRect.x != startValue) { + let dx = startValue - outRect.x; + let moveMatrix2 = new Matrix3( + 1, + 0, + dx, + 0, + 1, + 0, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2); + model.updateLinkModels(); + hasChange = true; + } + startValue += outRect.width; + } else if (data.value == 2) { + if (startValue == -Infinity) { + startValue = ourRects[0].y1; + } + startValue += weight; + if (outRect.y != startValue) { + let dy = startValue - outRect.y; + let moveMatrix2 = new Matrix3( + 1, + 0, + 0, + 0, + 1, + dy, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2); + model.updateLinkModels(); + hasChange = true; + } + startValue += outRect.height; + } + } + if (hasChange) { + bus.push(DDeiEnumBusCommandType.NodifyChange); + bus.insert(DDeiEnumBusCommandType.AddHistroy); + } + bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + bus.push(DDeiEnumBusCommandType.RefreshShape); + return true; + } + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelAutoPos({ code: DDeiEnumBusCommandType.ModelAutoPos, name: "", desc: "" }); + } + } + const __vite_glob_0_13$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelAutoPos, + default: DDeiBusCommandModelAutoPos + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelCancelMerge extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let ddInstance = bus.ddInstance; + if (ddInstance && ddInstance.stage) { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + let selectedModels = layer2.getSelectedModels(); + if (selectedModels.size > 0) { + let models = Array.from(selectedModels.values()); + let insertIndex = 0; + models.forEach((item) => { + if (item.baseModelType == "DDeiContainer") { + if (item.models && item.models.size > 0) { + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeContainer, { oldContainer: layer2, models: [item], skpiValid: true }, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeSelect, { models: [item], value: DDeiEnumControlState.DEFAULT }, evt, insertIndex); + insertIndex++; + let models2 = Array.from(item.models.values()); + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: layer2, oldContainer: item, models: models2, skpiValid: true }, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeSelect, { models: models2, value: DDeiEnumControlState.SELECTED }, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.StageChangeSelectModels, null, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelRemove, { models: [item], destroy: true }, evt, insertIndex); + insertIndex++; + } + } + }); + ddInstance.bus.insert(DDeiEnumBusCommandType.ClearTemplateVars, null, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt, insertIndex); + ddInstance.bus.insert(DDeiEnumBusCommandType.NodifyChange, null, evt, insertIndex); + insertIndex++; + ddInstance.bus.insert(DDeiEnumBusCommandType.RefreshShape, null, evt, insertIndex); + return true; + } + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelCancelMerge({ code: DDeiEnumBusCommandType.ModelCancelMerge, name: "", desc: "" }); + } + } + const __vite_glob_0_14$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelCancelMerge, + default: DDeiBusCommandModelCancelMerge + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangeBounds extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + if (((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "CHANGE_BOUNDS", data, bus.ddInstance, evt); + DDeiAbstractShape.changeModelBoundByRect(data.models, data.selector, data); + return true; + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.UpdateSelectorBounds, { models: (_a3 = stage2 == null ? void 0 : stage2.layers[stage2 == null ? void 0 : stage2.layerIndex]) == null ? void 0 : _a3.shadowControls }, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangeBounds({ code: DDeiEnumBusCommandType.ModelChangeBounds, name: "", desc: "" }); + } + } + const __vite_glob_0_15$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangeBounds, + default: DDeiBusCommandModelChangeBounds + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangeContainer extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + if (data == null ? void 0 : data.models) { + let oldContainer = data.oldContainer; + let newContainer = data.newContainer; + if (newContainer) { + let models = data.models; + let operateModels = []; + models.forEach((item, key) => { + if (item.id.lastIndexOf("_shadow") != -1) { + let id = item.id.substring(item.id, item.id.lastIndexOf("_shadow")); + item = bus.ddInstance.stage.getModelById(id); + } + operateModels.push(item); + }); + if (operateModels.length > 0) { + if (!oldContainer && operateModels[0].pModel) { + oldContainer = operateModels[0].pModel; + } + if (oldContainer) { + let sortOperateModels = []; + let appendTailModels = []; + operateModels.forEach((md) => { + let index = oldContainer == null ? void 0 : oldContainer.midList.indexOf(md.id); + if (index != -1) { + sortOperateModels[index] = md; + } else { + appendTailModels.push(md); + } + }); + appendTailModels.forEach((m) => { + sortOperateModels.push(m); + }); + operateModels = sortOperateModels; + } + if (newContainer.baseModelType == "DDeiLayer" && !newContainer.layoutManager) { + let freeLayoutManager = DDeiLayoutManagerFactory.getLayoutInstance("free"); + freeLayoutManager.container = newContainer; + newContainer.layoutManager = freeLayoutManager; + } + if (data.skipValid || ((_a3 = newContainer.layoutManager) == null ? void 0 : _a3.canAppend(evt == null ? void 0 : evt.offsetX, evt == null ? void 0 : evt.offsetY, operateModels))) { + let successAppend = (_b2 = newContainer.layoutManager) == null ? void 0 : _b2.append(evt == null ? void 0 : evt.offsetX, evt == null ? void 0 : evt.offsetY, operateModels); + if (successAppend) { + if (oldContainer) { + oldContainer.changeParentsBounds(); + } + newContainer == null ? void 0 : newContainer.changeParentsBounds(); + (_c2 = newContainer == null ? void 0 : newContainer.layoutManager) == null ? void 0 : _c2.updateLayout(evt == null ? void 0 : evt.offsetX, evt == null ? void 0 : evt.offsetY, operateModels); + } + } + } + } + return true; + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.UpdateSelectorBounds, null, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangeContainer({ code: DDeiEnumBusCommandType.ModelChangeContainer, name: "", desc: "" }); + } + } + const __vite_glob_0_16$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangeContainer, + default: DDeiBusCommandModelChangeContainer + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangePosition extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + var _a3; + if (((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + let models = data.models; + for (let i2 = 0; i2 < models.length; i2++) { + let parentContainer = data == null ? void 0 : data.models[i2].pModel; + if (parentContainer == null ? void 0 : parentContainer.layoutManager) { + if (!parentContainer.layoutManager.canChangePosition(data.x, data.y, models, data.isAlt)) { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeCursor, { cursor: "not-allowed" }, evt); + return false; + } + } + } + } + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + if (((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + let x2 = data.x ? data.x : 0; + let y2 = data.y ? data.y : 0; + let dragObj = data.dragObj; + let changeContainer = data.changeContainer ? data.changeContainer : false; + let newContainer = data.newContainer; + let oldContainer = data.oldContainer; + let sample = data.sample; + let models = data.models; + let stage2 = bus.ddInstance.stage; + let stageRatio2 = stage2 == null ? void 0 : stage2.getStageRatio(); + let fModel = null; + if (models[0].id.lastIndexOf("_shadow") != -1) { + fModel = stage2 == null ? void 0 : stage2.getModelById(models[0].id.substring(models[0].id, models[0].id.lastIndexOf("_shadow"))); + } else { + fModel = models[0]; + } + let hAds = ((_b2 = fModel.stage.render.helpLines) == null ? void 0 : _b2.hAds) || ((_c2 = fModel.stage.render.helpLines) == null ? void 0 : _c2.hAds) == 0 ? (_d2 = fModel.stage.render.helpLines) == null ? void 0 : _d2.hAds : Infinity; + let vAds = ((_e2 = fModel.stage.render.helpLines) == null ? void 0 : _e2.vAds) || ((_f = fModel.stage.render.helpLines) == null ? void 0 : _f.vAds) == 0 ? (_g = fModel.stage.render.helpLines) == null ? void 0 : _g.vAds : Infinity; + let hAdsValue = Infinity; + let vAdsValue = Infinity; + if (hAds != Infinity) { + if (stage2.render.isHAds && Math.abs(stage2.render.hAdsY - y2) > bus.ddInstance.GLOBAL_ADV_WEIGHT) { + stage2.render.isHAds = false; + stage2.render.hAdsY = Infinity; + } else if (stage2.render.isHAds) { + hAdsValue = 0; + } else { + stage2.render.isHAds = true; + hAdsValue = -hAds; + stage2.render.hAdsY = y2; + } + } + if (vAds != Infinity) { + if (stage2.render.isVAds && Math.abs(stage2.render.vAdsX - x2) > bus.ddInstance.GLOBAL_ADV_WEIGHT) { + stage2.render.isVAds = false; + stage2.render.vAdsX = Infinity; + } else if (stage2.render.isVAds) { + vAdsValue = 0; + } else { + stage2.render.isVAds = true; + vAdsValue = -vAds; + stage2.render.vAdsX = x2; + } + } + let ignoreModelIds = []; + models.forEach((model) => { + var _a22, _b22, _c22, _d22, _e22, _f2; + ignoreModelIds.push(model.id); + let dx = 0; + let dy = 0; + if (dragObj && dragObj[model.id]) { + dx = ((_a22 = dragObj[model.id]) == null ? void 0 : _a22.dx) ? (_b22 = dragObj[model.id]) == null ? void 0 : _b22.dx : 0; + dy = ((_c22 = dragObj[model.id]) == null ? void 0 : _c22.dy) ? (_d22 = dragObj[model.id]) == null ? void 0 : _d22.dy : 0; + } + let xm = x2 / stageRatio2 - model.cpv.x + dx; + let ym = y2 / stageRatio2 - model.cpv.y + dy; + if (hAdsValue != Infinity) { + ym = hAdsValue; + } + if (vAdsValue != Infinity) { + xm = vAdsValue; + } + let moveMatrix2 = new Matrix3( + 1, + 0, + xm, + 0, + 1, + ym, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2, { skipSample: sample == 1 ? false : true }); + (_f2 = (_e22 = model.pModel) == null ? void 0 : _e22.render) == null ? void 0 : _f2.enableRefreshShape(); + }); + let rsState = DDeiUtil$1.invokeCallbackFunc("EVENT_CONTROL_DRAGING", DDeiEnumOperateType.DRAG, { models }, stage2.ddInstance, evt); + if (rsState == 0 || rsState == 1) { + DDeiUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "DRAG", { models }, stage2.ddInstance, evt); + models[0].layer.dragInPoints = []; + models[0].layer.dragOutPoints = []; + if (oldContainer && newContainer && oldContainer != newContainer) { + (_h = oldContainer == null ? void 0 : oldContainer.layoutManager) == null ? void 0 : _h.calDragOutPVS(data.x, data.y, models); + (_i = newContainer == null ? void 0 : newContainer.layoutManager) == null ? void 0 : _i.calDragInPVS(data.x, data.y, models); + } else if (oldContainer) { + (_j = oldContainer == null ? void 0 : oldContainer.layoutManager) == null ? void 0 : _j.calDragOutPVS(data.x, data.y, models); + (_k = oldContainer == null ? void 0 : oldContainer.layoutManager) == null ? void 0 : _k.calDragInPVS(data.x, data.y, models); + } + if (stage2.render.selector.passIndex == 10 || stage2.render.selector.passIndex == 13 || stage2.render.selector.passIndex == 11) { + if (changeContainer) { + if (newContainer.baseModelType == "DDeiLayer" && !newContainer.layoutManager) { + let freeLayoutManager = DDeiLayoutManagerFactory.getLayoutInstance("free"); + freeLayoutManager.container = newContainer; + newContainer.layoutManager = freeLayoutManager; + } + if (newContainer.id != oldContainer.id) { + if ((_l = newContainer == null ? void 0 : newContainer.layoutManager) == null ? void 0 : _l.canAppend(data.x, data.y, models)) { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 11 }, evt); + } else { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeCursor, { cursor: "not-allowed" }, evt); + } + } else { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: 10 }, evt); + } + } else { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeSelectorPassIndex, { passIndex: stage2.render.selector.passIndex }, evt); + } + } + } + return true; + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangePosition({ code: DDeiEnumBusCommandType.ModelChangePosition, name: "", desc: "" }); + } + } + const __vite_glob_0_17$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangePosition, + default: DDeiBusCommandModelChangePosition + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangeRotate extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + var _a3; + if ((data.ex || data.ey) && ((_a3 = data.models) == null ? void 0 : _a3.length) > 0) { + return true; + } + return false; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + let stage2 = bus.ddInstance.stage; + let selector = stage2.render.selector; + let x2 = data.ex ? data.ex : 0, y2 = data.ey ? data.ey : 0; + let pContainerModel = data.container; + let ratio = stage2 == null ? void 0 : stage2.getStageRatio(); + let models = data.models; + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_MOUSE_OPERATING", "CHANGE_ROTATE", { models }, bus.ddInstance, evt); + let scx = selector.x * ratio + selector.width / 2 * ratio; + let scy = selector.y * ratio + selector.height / 2 * ratio; + let selectorAngle = Math.round(DDeiUtil$1.getLineAngle(scx, scy, x2, y2)); + let rotate2 = selectorAngle + 90; + let selectorRotate = selector.rotate; + let angle2 = -DDeiUtil$1.preciseTimes(rotate2 - selectorRotate, DDeiConfig$1.ROTATE_UNIT); + let move1Matrix = new Matrix3( + 1, + 0, + -scx, + 0, + 1, + -scy, + 0, + 0, + 1 + ); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + scx, + 0, + 1, + scy, + 0, + 0, + 1 + ); + let m12 = new Matrix3().premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + for (let i2 = 0; i2 < models.length; i2++) { + let item = models[i2]; + item.transVectors(m12); + item.updateLinkModels(); + (_b2 = (_a3 = item.getTopContainer()) == null ? void 0 : _a3.render) == null ? void 0 : _b2.enableRefreshShape(); + (_c2 = item.render) == null ? void 0 : _c2.enableRefreshShape(); + } + selector.transVectors(m12); + pContainerModel.changeParentsBounds(); + stage2.render.helpLines = { rect: { x: scx, y: scy, rotate: rotate2 < 0 ? 360 + rotate2 : rotate2 } }; + return true; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangeRotate({ code: DDeiEnumBusCommandType.ModelChangeRotate, name: "", desc: "" }); + } + } + const __vite_glob_0_18$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangeRotate, + default: DDeiBusCommandModelChangeRotate + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangeSelect extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + if (Array.isArray(data)) { + let models = data; + let stage2 = bus.ddInstance.stage; + for (let i2 = 0; i2 < models.length; i2++) { + if (models[i2]) { + let newData = models[i2]; + let newValue = newData.value; + let model = stage2 == null ? void 0 : stage2.getModelById(newData.id); + if (model) { + if (model.state != newValue) { + model.state = newValue; + (_b2 = (_a3 = model.getTopContainer()) == null ? void 0 : _a3.render) == null ? void 0 : _b2.enableRefreshShape(); + (_c2 = model.render) == null ? void 0 : _c2.enableRefreshShape(); + } + } + } + } + return true; + } else if (typeof data == "object") { + let models = data.models; + let state = data.value; + if (models) { + models.forEach((item) => { + var _a22, _b22, _c22; + item.state = state; + (_b22 = (_a22 = item.getTopContainer()) == null ? void 0 : _a22.render) == null ? void 0 : _b22.enableRefreshShape(); + (_c22 = item.render) == null ? void 0 : _c22.enableRefreshShape(); + }); + } + return true; + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.insert(DDeiEnumBusCommandType.UpdateSelectorBounds, {}, evt, 1); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangeSelect({ code: DDeiEnumBusCommandType.ModelChangeSelect, name: "", desc: "" }); + } + } + const __vite_glob_0_19$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangeSelect, + default: DDeiBusCommandModelChangeSelect + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelChangeValue extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + var _a3, _b2, _c2; + let stage2 = bus.ddInstance.stage; + if (stage2 && (((_a3 = data == null ? void 0 : data.mids) == null ? void 0 : _a3.length) > 0 || ((_b2 = data == null ? void 0 : data.models) == null ? void 0 : _b2.length) > 0) && ((_c2 = data == null ? void 0 : data.paths) == null ? void 0 : _c2.length) > 0) { + let attrDefine = data.attrDefine; + if (attrDefine == null ? void 0 : attrDefine.readonly) { + return false; + } + } + return true; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2, _d2; + let stage2 = bus.ddInstance.stage; + if (stage2 && (((_a3 = data == null ? void 0 : data.mids) == null ? void 0 : _a3.length) > 0 || ((_b2 = data == null ? void 0 : data.models) == null ? void 0 : _b2.length) > 0) && ((_c2 = data == null ? void 0 : data.paths) == null ? void 0 : _c2.length) > 0) { + let mids = data.mids; + let models = data.models; + let paths = data.paths; + let value = data.value; + let attrDefine = data.attrDefine; + if (((_d2 = data == null ? void 0 : data.paths) == null ? void 0 : _d2.indexOf("layout")) != -1) + ; + else { + if ((mids == null ? void 0 : mids.length) > 0) { + models = []; + mids.forEach((modelId) => { + if (modelId) { + if (modelId == "DDeiStage") { + models.push(stage2); + } else if (modelId == "DDeiLayer") { + models.push(stage2 == null ? void 0 : stage2.layers[stage2 == null ? void 0 : stage2.layerIndex]); + } else { + let model = stage2 == null ? void 0 : stage2.getModelById(modelId); + if (model) { + models.push(model); + } + } + } + }); + } + if ((models == null ? void 0 : models.length) > 0) { + models.forEach((model) => { + var _a22, _b22, _c22, _d22, _e2, _f, _g, _h, _i, _j, _k; + if (model) { + if (model.baseModelType == "DDeiTable") { + if ((attrDefine == null ? void 0 : attrDefine.modelCode) == "DDeiTable") { + DDeiUtil$1.setAttrValueByPath(model, paths, value); + } else { + let cells = model.getSelectedCells(); + cells.forEach((cell) => { + paths.forEach((path) => { + var _a32; + DDeiUtil$1.setAttrValueByPath(cell, [path], value); + (_a32 = cell.render) == null ? void 0 : _a32.setCachedValue(path, value); + }); + }); + } + } else if (model.baseModelType == "DDeiLine") { + model.clps = []; + model.stage.render.refreshJumpLine = false; + DDeiUtil$1.setAttrValueByPath(model, paths, value); + (_a22 = model.render) == null ? void 0 : _a22.setCachedValue(paths, value); + } else { + DDeiUtil$1.setAttrValueByPath(model, paths, value); + (_b22 = model.render) == null ? void 0 : _b22.setCachedValue(paths, value); + } + let modelDefine = DDeiUtil$1.getControlDefine(model); + if ((_d22 = (_c22 = modelDefine == null ? void 0 : modelDefine.define) == null ? void 0 : _c22.sample) == null ? void 0 : _d22.depProps) { + let depProps = modelDefine.define.sample.depProps; + for (let type in depProps) { + let property = depProps[type]; + let rmdms = []; + let hasTypeModel = false; + let modelPropValue = model[property]; + (_e2 = model.linkModels) == null ? void 0 : _e2.forEach((lm) => { + var _a32, _b3; + if (lm.type == type && lm.dm) { + hasTypeModel = true; + if (modelPropValue) { + DDeiUtil$1.setAttrValueByPath(lm.dm, "text", modelPropValue); + (_a32 = lm.dm.render) == null ? void 0 : _a32.setCachedValue("text", modelPropValue); + (_b3 = lm.dm.render) == null ? void 0 : _b3.enableRefreshShape(); + } else { + rmdms.push(lm); + } + } + }); + if (hasTypeModel) { + rmdms.forEach((lm) => { + model.removeLinkModel(lm.dm.id, true, false); + }); + } else if (modelPropValue) { + bus.insert(DDeiEnumBusCommandType.CreateDepLinkModel, { model, text: modelPropValue }, null, 0); + } + } + model.refreshLinkModels(); + } + if (model.depModel) { + let modelDefine2 = DDeiUtil$1.getControlDefine(model.depModel); + if ((_g = (_f = modelDefine2 == null ? void 0 : modelDefine2.define) == null ? void 0 : _f.sample) == null ? void 0 : _g.depProps) { + let depProps = modelDefine2.define.sample.depProps; + let depLinkModel = (_h = model.depModel.linkModels) == null ? void 0 : _h.get(model.id); + let property = depProps[depLinkModel.type]; + if (property && depLinkModel) { + DDeiUtil$1.setAttrValueByPath(model.depModel, property, model.text); + (_i = model.depModel.render) == null ? void 0 : _i.setCachedValue(property, model.text); + (_j = model.depModel.render) == null ? void 0 : _j.enableRefreshShape(); + } + } + } + (_k = model.render) == null ? void 0 : _k.enableRefreshShape(); + } + }); + bus.executeAll(); + } + } + return true; + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + var _a3; + if (((_a3 = data == null ? void 0 : data.paths) == null ? void 0 : _a3.indexOf("layout")) != -1) { + bus == null ? void 0 : bus.insert(DDeiEnumBusCommandType.ChangeLayout, data, evt); + } else { + bus.push(DDeiEnumBusCommandType.NodifyChange); + bus.insert(DDeiEnumBusCommandType.AddHistroy); + } + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelChangeValue({ code: DDeiEnumBusCommandType.ModelChangeValue, name: "", desc: "" }); + } + } + const __vite_glob_0_20$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelChangeValue, + default: DDeiBusCommandModelChangeValue + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelCopyStyle extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + if (stage2 && ((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0 && (data == null ? void 0 : data.brushData)) { + let models = data.models; + if ((models == null ? void 0 : models.length) > 0) { + models.forEach((model) => { + if (model) { + let hasChange = false; + if (model.baseModelType == "DDeiTable") { + if (Array.isArray(data.brushData) && !Array.isArray(data.brushData[0]) && data.brushData.length == 1) { + let cells = model.getSelectedCells(); + cells.forEach((cell) => { + var _a22; + this.cloneStyle(cell, data.brushData[0]); + (_a22 = cell.render) == null ? void 0 : _a22.renderCacheData.clear(); + hasChange = true; + }); + } else if (Array.isArray(data.brushData) && Array.isArray(data.brushData[0])) { + this.copyTableStyleToTableCell(model, data.brushData); + hasChange = true; + } + } else { + if (Array.isArray(data.brushData) && !Array.isArray(data.brushData[0]) && data.brushData.length == 1) { + this.cloneStyle(model, data.brushData[0]); + hasChange = true; + } else if (Array.isArray(data.brushData) && Array.isArray(data.brushData[0])) { + this.cloneStyle(model, data.brushData[0][0]); + hasChange = true; + } + } + if (hasChange) { + bus.push(DDeiEnumBusCommandType.NodifyChange); + bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt); + } + } + }); + } + return true; + } + return false; + } + /** + * 复制表格样式到另外一个表格的单元格中 + * @param table 表格 + * @param tableJson 单元格样式 + */ + copyTableStyleToTableCell(table2, tableJson) { + let distCells = table2.getSelectedCells(); + if (distCells && distCells.length > 0 && tableJson) { + let sourceTable = tableJson; + let distTable = table2; + let sourceMinMaxRow = { minRow: 0, minCol: 0, maxRow: sourceTable.length - 1, maxCol: sourceTable[0].length - 1 }; + let distMinMaxRow = distTable.getMinMaxRowAndCol(distCells); + let distAreaAllSelected = distTable.isAllSelected(distMinMaxRow.minRow, distMinMaxRow.minCol, distMinMaxRow.maxRow, distMinMaxRow.maxCol); + if (!distAreaAllSelected) { + console.log("表格粘贴目标不是一个有效的连续区域"); + return; + } + let rowNum = 1; + let colNum = 1; + let sourceRowNum = sourceMinMaxRow.maxRow - sourceMinMaxRow.minRow + 1; + let distRowNum = distMinMaxRow.maxRow - distMinMaxRow.minRow + 1; + let sourceColNum = sourceMinMaxRow.maxCol - sourceMinMaxRow.minCol + 1; + let distColNum = distMinMaxRow.maxCol - distMinMaxRow.minCol + 1; + if (distRowNum == sourceRowNum) { + rowNum = sourceRowNum; + } else if (distRowNum > sourceRowNum) { + rowNum = distRowNum - distRowNum % sourceRowNum; + } else if (distRowNum < sourceRowNum) { + rowNum = sourceRowNum; + } + if (distColNum == sourceColNum) { + colNum = sourceColNum; + } else if (distColNum > sourceColNum) { + colNum = distColNum - distColNum % sourceColNum; + } else if (distColNum < sourceColNum) { + colNum = sourceColNum; + } + if (distTable.hasMergeCell(distMinMaxRow.minRow, distMinMaxRow.minCol, distMinMaxRow.minRow + rowNum - 1, distMinMaxRow.minCol + colNum - 1)) { + console.log("表格复制样式区域存在合并单元格"); + return; + } + if (distTable.rows.length <= distMinMaxRow.minRow + rowNum - 1 || distTable.cols.length <= distMinMaxRow.minCol + colNum - 1) { + console.log("表格复制样式区域超出表格所在最大区域"); + return; + } + for (let i2 = 0; i2 < rowNum && distMinMaxRow.minRow + i2 < distTable.rows.length; i2++) { + let offsetI = i2 % sourceRowNum; + for (let j2 = 0; j2 < colNum && distMinMaxRow.minCol + j2 < distTable.cols.length; j2++) { + let offsetJ = j2 % sourceColNum; + let sourceCell = sourceTable[sourceMinMaxRow.minRow + offsetI][sourceMinMaxRow.minCol + offsetJ]; + let targetCell = distTable.rows[distMinMaxRow.minRow + i2][distMinMaxRow.minCol + j2]; + this.cloneStyle(targetCell, sourceCell); + } + } + } + } + /** + * 复制控件样式 + * @param model + * @param sourceModel + */ + cloneStyle(model, sourceModel) { + var _a3; + if (model.baseModelType == "DDeiLine") { + if (sourceModel.fill) { + model.fill = cloneDeep(sourceModel.fill); + } else { + delete model.fill; + } + if (sourceModel.color) { + model.color = sourceModel.color; + } else { + delete model.color; + } + if (sourceModel.dash) { + model.dash = sourceModel.dash; + } else { + delete model.dash; + } + if (sourceModel.opacity) { + model.opacity = sourceModel.opacity; + } else { + delete model.opacity; + } + if (sourceModel.weight) { + model.weight = sourceModel.weight; + } else { + delete model.weight; + } + } else { + if (sourceModel.font) { + model.font = cloneDeep(sourceModel.font); + } else { + delete model.font; + } + if (sourceModel.textStyle) { + model.textStyle = cloneDeep(sourceModel.textStyle); + } else { + delete model.textStyle; + } + if (sourceModel.fill) { + model.fill = cloneDeep(sourceModel.fill); + } else { + delete model.fill; + } + if (sourceModel.border) { + model.border = cloneDeep(sourceModel.border); + } else { + delete model.border; + } + } + (_a3 = model.render) == null ? void 0 : _a3.renderCacheData.clear(); + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelCopyStyle({ code: DDeiEnumBusCommandType.CopyStyle, name: "", desc: "" }); + } + } + const __vite_glob_0_21$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelCopyStyle, + default: DDeiBusCommandModelCopyStyle + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelEdgePosition extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + let dx = data.dx ? data.dx : 0; + let dy = data.dy ? data.dy : 0; + let models = data.models; + let stage2 = bus.ddInstance.stage; + let ddInstance = stage2 == null ? void 0 : stage2.ddInstance; + if (models[0].id.lastIndexOf("_shadow") != -1) { + stage2 == null ? void 0 : stage2.getModelById(models[0].id.substring(models[0].id, models[0].id.lastIndexOf("_shadow"))); + } else { + models[0]; + } + if (dx || dy) { + stage2.wpv.x -= dx; + stage2.wpv.y -= dy; + let extW = 0; + let moveW = 0; + let hScrollWidth = ((_b2 = stage2.render.hScroll) == null ? void 0 : _b2.width) ? (_c2 = stage2.render.hScroll) == null ? void 0 : _c2.width : 0; + let vScrollHeight = ((_d2 = stage2.render.vScroll) == null ? void 0 : _d2.height) ? (_e2 = stage2.render.vScroll) == null ? void 0 : _e2.height : 0; + if (stage2.wpv.x > 0) { + if (ddInstance.EXT_STAGE_WIDTH) { + extW = stage2.wpv.x; + moveW = extW; + } else { + dx = 0; + } + stage2.wpv.x = 0; + } else if (stage2.wpv.x < -stage2.width + hScrollWidth) { + if (ddInstance.EXT_STAGE_WIDTH) { + extW = -stage2.width + hScrollWidth - stage2.wpv.x; + } else { + dx = 0; + stage2.wpv.x = -stage2.width + hScrollWidth; + } + } else if (!ddInstance.EXT_STAGE_WIDTH && hScrollWidth == 0) { + dx = 0; + } + let extH = 0; + let moveH = 0; + if (stage2.wpv.y > 0) { + if (ddInstance.EXT_STAGE_HEIGHT) { + extH = stage2.wpv.y; + moveH = extH; + } else { + dy = 0; + } + stage2.wpv.y = 0; + } else if (stage2.wpv.y < -stage2.height + vScrollHeight) { + if (ddInstance.EXT_STAGE_HEIGHT) { + extH = -stage2.height + vScrollHeight - stage2.wpv.y; + } else { + dy = 0; + stage2.wpv.y = -stage2.height + vScrollHeight; + } + } else if (!ddInstance.EXT_STAGE_HEIGHT && vScrollHeight == 0) { + dy = 0; + } + let ignoreModelIds = []; + let stageRatio2 = stage2 == null ? void 0 : stage2.getStageRatio(); + if (dx || dy) { + models.forEach((model) => { + ignoreModelIds.push(model.id); + let moveMatrix2 = new Matrix3( + 1, + 0, + dx / stageRatio2, + 0, + 1, + dy / stageRatio2, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2); + }); + } + if (extW || extH) { + stage2.width += extW; + stage2.height += extH; + if (moveW || moveH) { + let moveMatrix2 = new Matrix3( + 1, + 0, + extW / stageRatio2, + 0, + 1, + extH / stageRatio2, + 0, + 0, + 1 + ); + stage2 == null ? void 0 : stage2.spv.applyMatrix3(moveMatrix2); + let mds = stage2.getLayerModels(ignoreModelIds); + mds.forEach((item) => { + item.transVectors(moveMatrix2); + }); + models.forEach((item) => { + item.transVectors(moveMatrix2); + }); + (_f = stage2.render.selector) == null ? void 0 : _f.transVectors(moveMatrix2); + } + } + } + return true; + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelEdgePosition({ code: DDeiEnumBusCommandType.ModelEdgePosition, name: "", desc: "" }); + } + } + const __vite_glob_0_22$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelEdgePosition, + default: DDeiBusCommandModelEdgePosition + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelMerge extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + let ddInstance = bus.ddInstance; + if (ddInstance && ddInstance.stage) { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + let selectedModels = layer2.getSelectedModels(); + if (selectedModels.size > 1) { + return true; + } + } + return false; + } + /** + * 具体行为,设置属性值 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let ddInstance = bus.ddInstance; + if (ddInstance && ddInstance.stage) { + ddInstance.stage.getStageRatio(); + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + let selectedModels = layer2.getSelectedModels(); + if (selectedModels.size > 1) { + let models = Array.from(selectedModels.values()); + let outRect = DDeiAbstractShape.getOutRectByPV(models); + let controlDefine = DDeiUtil$1.getControlDefine({ modelCode: "100202" }); + let container2 = DDeiUtil$1.createControl(controlDefine, DDeiUtil$1.getEditorInsByDDei(ddInstance))[0]; + container2.layout = "compose"; + container2.layoutManager = DDeiLayoutManagerFactory.getLayoutInstance("compose"); + container2.layoutManager.container = container2; + container2.fill = { type: 0 }; + container2.border = { type: 0 }; + let m12 = new Matrix3(); + let scaleMatrix2 = new Matrix3( + outRect.width / container2.essBounds.width, + 0, + 0, + 0, + outRect.height / container2.essBounds.height, + 0, + 0, + 0, + 1 + ); + m12.premultiply(scaleMatrix2); + let moveMatrix2 = new Matrix3( + 1, + 0, + outRect.x + outRect.width / 2, + 0, + 1, + outRect.y + outRect.height / 2, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + container2.transVectors(m12); + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: ddInstance.stage.layers[ddInstance.stage.layerIndex], models: [container2], skipValid: true }, evt, 0); + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: container2, oldContainer: layer2, models, skipValid: true }, evt, 1); + ddInstance.bus.insert(DDeiEnumBusCommandType.ModelChangeSelect, { models: [container2], value: DDeiEnumControlState.SELECTED }, evt, 2); + ddInstance.bus.insert(DDeiEnumBusCommandType.ClearTemplateVars, null, evt, 3); + ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + ddInstance.bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt, 4); + ddInstance.bus.insert(DDeiEnumBusCommandType.StageChangeSelectModels, null, evt, 5); + ddInstance.bus.insert(DDeiEnumBusCommandType.RefreshShape, null, evt, 6); + return true; + } + } + return false; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelMerge({ code: DDeiEnumBusCommandType.ModelMerge, name: "", desc: "" }); + } + } + const __vite_glob_0_23$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelMerge, + default: DDeiBusCommandModelMerge + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelPush extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + if ((data == null ? void 0 : data.container) && (data == null ? void 0 : data.type)) { + if ((data == null ? void 0 : data.type) == "top" || (data == null ? void 0 : data.type) == "bottom" || (data == null ? void 0 : data.type) == "up" || (data == null ? void 0 : data.type) == "down") { + let selectedModels = data == null ? void 0 : data.container.getSelectedModels(); + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + return true; + } + } + } + return false; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let selectedModels = data == null ? void 0 : data.container.getSelectedModels(); + let hasChange = false; + if ((data == null ? void 0 : data.type) == "top") { + data.container.pushTop(Array.from(selectedModels.values())); + hasChange = true; + } else if ((data == null ? void 0 : data.type) == "bottom") { + data.container.pushBottom(Array.from(selectedModels.values())); + hasChange = true; + } else if ((data == null ? void 0 : data.type) == "up") { + data.container.pushUp(Array.from(selectedModels.values())); + hasChange = true; + } else if ((data == null ? void 0 : data.type) == "down") { + data.container.pushDown(Array.from(selectedModels.values())); + hasChange = true; + } + if (hasChange) { + bus.push(DDeiEnumBusCommandType.NodifyChange); + bus.insert(DDeiEnumBusCommandType.AddHistroy, null, evt); + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelPush({ code: DDeiEnumBusCommandType.ModelPush, name: "", desc: "" }); + } + } + const __vite_glob_0_24$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelPush, + default: DDeiBusCommandModelPush + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandModelRemove extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let models = data == null ? void 0 : data.models; + let destroy = (data == null ? void 0 : data.destroy) || (data == null ? void 0 : data.destroy) == false ? data.destroy : true; + if ((models == null ? void 0 : models.length) > 0) { + models.forEach((model) => { + model.pModel.removeModel(model, destroy); + }); + return true; + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandModelRemove({ code: DDeiEnumBusCommandType.ModelRemove, name: "", desc: "" }); + } + } + const __vite_glob_0_25$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandModelRemove, + default: DDeiBusCommandModelRemove + }, Symbol.toStringTag, { value: "Module" })); + class DDeiCommandChangeNodifyChange extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiCommandChangeNodifyChange({ code: DDeiEnumBusCommandType.NodifyChange, name: "", desc: "" }); + } + } + const __vite_glob_0_26$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiCommandChangeNodifyChange, + default: DDeiCommandChangeNodifyChange + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandNodifyControlCreated extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + if (data == null ? void 0 : data.models) { + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_CONTROL_CREATE_AFTER", DDeiEnumOperateType.CREATE, data, bus.ddInstance, evt); + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandNodifyControlCreated({ code: DDeiEnumBusCommandType.NodifyControlCreated, name: "", desc: "" }); + } + } + const __vite_glob_0_27$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandNodifyControlCreated, + default: DDeiBusCommandNodifyControlCreated + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandOVSChangePosition extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + let stage2 = bus.ddInstance.stage; + let stageRender = stage2 == null ? void 0 : stage2.render; + let x2 = (data == null ? void 0 : data.x) ? data.x : 0; + let y2 = (data == null ? void 0 : data.y) ? data.y : 0; + if ((x2 || y2) && stageRender.dragObj) { + let dragObj = stageRender.dragObj; + let model = dragObj.model; + let opPoint = dragObj.opPoint; + let modelPointIdx = model.ovs.indexOf(opPoint); + let ovsDefine = (_b2 = (_a3 = DDeiUtil$1.getControlDefine(model)) == null ? void 0 : _a3.define) == null ? void 0 : _b2.ovs; + let point2 = null; + if ((ovsDefine == null ? void 0 : ovsDefine.length) > modelPointIdx) { + point2 = ovsDefine[modelPointIdx]; + } + if (point2) { + let m12 = new Matrix3(); + let mr = null; + let dx = x2 - opPoint.x, dy = y2 - opPoint.y; + if (point2.constraint) { + switch (point2.constraint.type) { + case 0: { + return true; + } + case 1: { + let pathPvs = []; + let pvsStr = point2.constraint.pvs; + if ((pvsStr == null ? void 0 : pvsStr.length) > 0) { + pvsStr.forEach((pvsS) => { + let pvsData = DDeiUtil$1.getDataByPathList(model, pvsS); + if (Array.isArray(pvsData)) { + pvsData.forEach((pvsD) => { + pathPvs.push(pvsD); + }); + } else { + pathPvs.push(pvsData); + } + }); + } + if (pathPvs.length > 1) { + let proPoints = DDeiAbstractShape.getProjPointDists(pathPvs, x2, y2, false, 1); + if ((proPoints == null ? void 0 : proPoints.length) > 0) { + opPoint.index = proPoints[0].index; + let distance = DDeiUtil$1.getPointDistance(pathPvs[proPoints[0].index].x, pathPvs[proPoints[0].index].y, pathPvs[proPoints[0].index + 1].x, pathPvs[proPoints[0].index + 1].y); + let sita = DDeiUtil$1.getLineAngle(pathPvs[proPoints[0].index].x, pathPvs[proPoints[0].index].y, pathPvs[proPoints[0].index + 1].x, pathPvs[proPoints[0].index + 1].y); + let pointDistance = DDeiUtil$1.getPointDistance(pathPvs[proPoints[0].index].x, pathPvs[proPoints[0].index].y, proPoints[0].x, proPoints[0].y); + let rate = pointDistance / distance; + let ovSita = opPoint.sita; + if (!ovSita) { + ovSita = 0; + } + opPoint.rate = rate > 1 ? rate : rate; + opPoint.sita = sita; + dx = proPoints[0].x - opPoint.x; + dy = proPoints[0].y - opPoint.y; + if (sita != ovSita) { + mr = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -proPoints[0].x, + 0, + 1, + -proPoints[0].y, + 0, + 0, + 1 + ); + let angle2 = (-(sita - ovSita) * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + proPoints[0].x, + 0, + 1, + proPoints[0].y, + 0, + 0, + 1 + ); + mr.premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + } + } else { + dx = 0; + dy = 0; + } + } + break; + } + case 2: { + let rotate2 = model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let angle2 = (-rotate2 * DDeiConfig$1.ROTATE_UNIT).toFixed(4); + let moveMatrix22 = new Matrix3( + 1, + 0, + model.cpv.x, + 0, + 1, + model.cpv.y, + 0, + 0, + 1 + ); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let bpv2 = DDeiUtil$1.pointsToZero([model.bpv], model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let scaleY2 = Math.abs(bpv2.y / 100); + let scaleMatrix2 = new Matrix3( + scaleX2, + 0, + 0, + 0, + scaleY2, + 0, + 0, + 0, + 1 + ); + let pv1 = new Vector3(point2.constraint.x0, point2.constraint.y0, 1); + let pv2 = new Vector3(point2.constraint.x1, point2.constraint.y1, 1); + let outPVS = DDeiAbstractShape.outRectToPV(DDeiAbstractShape.pvsToOutRect([pv1, pv2])); + let m122 = new Matrix3().premultiply(scaleMatrix2).premultiply(rotateMatrix).premultiply(moveMatrix22); + outPVS.forEach((pv) => { + pv.applyMatrix3(m122); + }); + if (!DDeiAbstractShape.isInsidePolygon(outPVS, { x: x2, y: y2 })) { + let proPoints = DDeiAbstractShape.getProjPointDists(outPVS, x2, y2, false, 1); + if ((proPoints == null ? void 0 : proPoints.length) > 0) { + dx = proPoints[0].x - opPoint.x; + dy = proPoints[0].y - opPoint.y; + } else { + dx = 0; + dy = 0; + } + } + break; + } + case 3: { + let distance = DDeiUtil$1.getPointDistance(x2, y2, model.cpv.x, model.cpv.y); + let rotate2 = model.rotate; + if (!rotate2) { + rotate2 = 0; + } + let bpv2 = DDeiUtil$1.pointsToZero([model.bpv], model.cpv, rotate2)[0]; + let scaleX2 = Math.abs(bpv2.x / 100); + let r = point2.constraint.r * scaleX2; + if (Math.abs(distance) > r) { + let pointAngle = DDeiUtil$1.getLineAngle(model.cpv.x, model.cpv.y, x2, y2); + let pointRad = pointAngle * DDeiConfig$1.ROTATE_UNIT; + let fx = model.cpv.x + r * Math.cos(pointRad); + let fy = model.cpv.y + r * Math.sin(pointRad); + dx = fx - opPoint.x, dy = fy - opPoint.y; + } + break; + } + } + } + let moveMatrix2 = new Matrix3( + 1, + 0, + dx, + 0, + 1, + dy, + 0, + 0, + 1 + ); + m12.premultiply(moveMatrix2); + if (mr) { + m12.premultiply(mr); + } + opPoint.applyMatrix3(moveMatrix2); + model.updateOVSLink(opPoint, point2, m12); + model.initPVS(); + (_c2 = model.render) == null ? void 0 : _c2.enableRefreshShape(); + return true; + } + } + return false; + } + /** + * 后置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds, data, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandOVSChangePosition({ code: DDeiEnumBusCommandType.OVSChangePosition, name: "", desc: "" }); + } + } + const __vite_glob_0_28$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandOVSChangePosition, + default: DDeiBusCommandOVSChangePosition + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandRefreshShape extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,重绘所有图形 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + stage2.render.refresh = true; + return true; + } else { + return false; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandRefreshShape({ code: DDeiEnumBusCommandType.RefreshShape, name: "", desc: "" }); + } + } + const __vite_glob_0_29$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandRefreshShape, + default: DDeiBusCommandRefreshShape + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandResetSelectorState extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2 && stage2.render.selector) { + stage2.render.selector.resetState(data == null ? void 0 : data.x, data == null ? void 0 : data.y); + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandResetSelectorState({ code: DDeiEnumBusCommandType.ResetSelectorState, name: "", desc: "" }); + } + } + const __vite_glob_0_30$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandResetSelectorState, + default: DDeiBusCommandResetSelectorState + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandSetHelpLine extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2; + let stage2 = bus.ddInstance.stage; + if (stage2) { + let layer2 = data.layer; + if (!layer2) { + layer2 = stage2.layers[stage2.layerIndex]; + } + if (((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0 || ((_b2 = data == null ? void 0 : data.models) == null ? void 0 : _b2.size) > 0 || (data == null ? void 0 : data.container)) { + let models = data == null ? void 0 : data.models; + if (!models && (data == null ? void 0 : data.container)) { + models = data == null ? void 0 : data.container.getSelectedModels(); + } + if (models.set) { + models = Array.from(models.values()); + } + if ((models == null ? void 0 : models.length) > 0) { + let outRect = null; + let rotate2 = null; + let apvs2 = []; + models.forEach((model) => { + let modelAPVS = model.getAPVS(); + if ((modelAPVS == null ? void 0 : modelAPVS.length) > 0) { + apvs2 = apvs2.concat(modelAPVS); + } + }); + if (models.length == 1) { + rotate2 = models[0].rotate; + } else { + rotate2 = stage2.render.selector.rotate; + } + outRect = DDeiAbstractShape.getOutRectByPV(models); + let { hpoint, vpoint, hAds, vAds } = stage2.getAlignData({ pvs: apvs2, rotate: rotate2 }, data == null ? void 0 : data.models, data == null ? void 0 : data.points); + stage2.render.helpLines = { + hpoint, + vpoint, + rect: outRect, + hAds, + vAds + }; + return true; + } else { + stage2.render.helpLines = null; + return true; + } + } else { + stage2.render.helpLines = null; + return true; + } + } + return false; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandSetHelpLine({ code: DDeiEnumBusCommandType.SetHelpLine, name: "", desc: "" }); + } + } + const __vite_glob_0_31$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandSetHelpLine, + default: DDeiBusCommandSetHelpLine + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandStageChangeSelectModels extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + if (bus.ddInstance.disabled) { + return false; + } + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3; + let stage2 = bus.ddInstance.stage; + let editor = bus.invoker; + if (stage2) { + let optContainer = stage2.render.currentOperateContainer; + if (!optContainer) { + optContainer = stage2.layers[stage2.layerIndex]; + } + let selectedModels = optContainer.getSelectedModels(); + let oldSelectModels = stage2.selectedModels; + stage2.changeSelecetdModels(selectedModels); + let hasChange = false; + let newSelectModels = stage2.selectedModels; + if ((oldSelectModels == null ? void 0 : oldSelectModels.size) !== (newSelectModels == null ? void 0 : newSelectModels.size)) { + hasChange = true; + } + if (!hasChange) { + for (let key of oldSelectModels == null ? void 0 : oldSelectModels.keys()) { + if ((oldSelectModels == null ? void 0 : oldSelectModels.get(key)) !== (newSelectModels == null ? void 0 : newSelectModels.get(key))) { + hasChange = false; + break; + } + } + } + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + let models = Array.from(selectedModels.values()); + let firstModel = models[0]; + let firstControlDefine = cloneDeep( + editor.controls.get(firstModel == null ? void 0 : firstModel.modelCode) + ); + if (firstControlDefine) { + let removeKeys = []; + for (let i2 = 0; i2 < models.length; i2++) { + let curModel = models[i2]; + let curDefine = editor.controls.get(curModel.modelCode); + firstControlDefine.attrDefineMap.forEach( + (firstAttrDefine, attrKey) => { + if (!curDefine.attrDefineMap.has(attrKey)) { + removeKeys.push(attrKey); + firstAttrDefine.model = curModel; + } else if (!firstAttrDefine.visiable) { + removeKeys.push(attrKey); + firstAttrDefine.model = curModel; + } else { + let curAttrDefine = curDefine.attrDefineMap.get(attrKey); + if (i2 == 0) { + firstAttrDefine.value = DDeiUtil$1.getDataByPathList( + firstModel, + curAttrDefine.code, + curAttrDefine.mapping + ); + firstAttrDefine.model = firstModel; + } + let curAttrValue = DDeiUtil$1.getDataByPathList( + curModel, + curAttrDefine.code, + curAttrDefine.mapping + ); + if (firstAttrDefine.value != curAttrValue) { + firstAttrDefine.diffValues.push(curAttrValue); + } + } + } + ); + } + this.deleteAttrDefineByKeys(firstControlDefine, removeKeys); + if (((_a3 = firstControlDefine.groups) == null ? void 0 : _a3.length) > 0) { + editor.currentControlDefine = firstControlDefine; + } else { + editor.currentControlDefine = null; + } + } + } else { + editor.currentControlDefine = null; + } + selectedModels == null ? void 0 : selectedModels.forEach((model) => { + var _a22; + (_a22 = model.render) == null ? void 0 : _a22.clearCachedValue(); + }); + oldSelectModels == null ? void 0 : oldSelectModels.forEach((model) => { + var _a22; + (_a22 = model.render) == null ? void 0 : _a22.clearCachedValue(); + }); + DDeiEditorUtil$1.invokeCallbackFunc("EVENT_CONTROL_SELECT_AFTER", DDeiEnumOperateType.SELECT, { models: Array.from(selectedModels.values()) }, bus.ddInstance, evt); + return true; + } + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + return true; + } + /** + * 移除属性定义中的属性 + * @param firstControlDefine + * @param removeKeys + */ + deleteAttrDefineByKeys(firstControlDefine, removeKeys) { + removeKeys.forEach((item) => { + var _a3; + firstControlDefine.attrDefineMap.delete(item); + (_a3 = firstControlDefine.groups) == null ? void 0 : _a3.forEach((group2) => { + this.deleteGroupAttrsByKey(group2, item); + }); + }); + } + deleteGroupAttrsByKey(pData, key) { + let rmglist = []; + pData.subGroups.forEach((group2) => { + let rmlist = []; + for (let gci = 0; gci < group2.children.length; gci++) { + if (group2.children[gci].code == key) { + rmlist.push(group2.children[gci]); + } + } + rmlist.forEach((rm) => { + let index = group2.children.indexOf(rm); + if (index > -1) { + group2.children.splice(index, 1); + } + }); + if (group2.children.length == 0) { + rmglist.push(group2); + } + }); + rmglist.forEach((rmg) => { + let index = pData.subGroups.indexOf(rmg); + if (index > -1) { + pData.subGroups.splice(index, 1); + } + }); + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandStageChangeSelectModels({ code: DDeiEnumBusCommandType.StageChangeSelectModels, name: "", desc: "" }); + } + } + const __vite_glob_0_32$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandStageChangeSelectModels, + default: DDeiBusCommandStageChangeSelectModels + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandTextEditorChangeSelectPos extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandTextEditorChangeSelectPos({ code: DDeiEnumBusCommandType.TextEditorChangeSelectPos, name: "", desc: "" }); + } + } + const __vite_glob_0_33$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandTextEditorChangeSelectPos, + default: DDeiBusCommandTextEditorChangeSelectPos + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandUpdateDragObj extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + if (data == null ? void 0 : data.dragObj) { + stage2.render.dragObj = data.dragObj; + } else { + if (data.deltaX) { + stage2.render.dragObj.x += data.deltaX; + } + if (data.deltaY) { + stage2.render.dragObj.y += data.deltaY; + } + } + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandUpdateDragObj({ code: DDeiEnumBusCommandType.UpdateDragObj, name: "", desc: "" }); + } + } + const __vite_glob_0_34$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandUpdateDragObj, + default: DDeiBusCommandUpdateDragObj + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandUpdatePaperArea extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 更新纸张,确保有效纸张位置在整个画布的正中央 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2; + let stage2 = bus.ddInstance.stage; + let paperType; + if ((_a3 = stage2.paper) == null ? void 0 : _a3.type) { + paperType = stage2.paper.type; + } else if (stage2.ddInstance.paper) { + if (typeof stage2.ddInstance.paper == "string") { + paperType = stage2.ddInstance.paper; + } else { + paperType = stage2.ddInstance.paper.type; + } + } else { + paperType = DDeiModelArrtibuteValue.getAttrValueByState(stage2, "paper.type", true); + } + let paperConfig = DDeiConfig$1.PAPER[paperType]; + let stageRatio2 = stage2 == null ? void 0 : stage2.getStageRatio(); + let paperWidth, paperHeight; + let mds; + if (paperConfig) { + let paperSize = DDeiUtil$1.getPaperSize(stage2, paperType, false); + paperWidth = paperSize.width; + paperHeight = paperSize.height; + } else { + mds = stage2 == null ? void 0 : stage2.getLayerModels(null, 100); + let outRect = DDeiAbstractShape.getOutRectByPV(mds); + paperWidth = outRect.width * stageRatio2; + paperHeight = outRect.height * stageRatio2; + } + let wpv = stage2.wpv; + if (!stage2.spv) { + let sx = stage2.width / 2 - paperWidth / stageRatio2 / 2; + let sy = stage2.height / 2 - paperHeight / stageRatio2 / 2; + stage2.spv = new Vector3(sx, sy, 1); + } + let startPaperX = stage2.spv.x * stageRatio2; + let startPaperY = stage2.spv.y * stageRatio2; + let maxOutRect = DDeiAbstractShape.getOutRectByPV(stage2.getLayerModels()); + maxOutRect.x = maxOutRect.x * stageRatio2; + maxOutRect.x1 = maxOutRect.x1 * stageRatio2; + maxOutRect.y = maxOutRect.y * stageRatio2; + maxOutRect.y1 = maxOutRect.y1 * stageRatio2; + maxOutRect.width = maxOutRect.width * stageRatio2; + maxOutRect.height = maxOutRect.height * stageRatio2; + let leftExtNum = 0, rightExtNum = 0, topExtNum = 0, bottomExtNum = 0; + if (maxOutRect.width > 0 && maxOutRect.height > 0) { + if (maxOutRect.x < startPaperX) { + leftExtNum = parseInt((startPaperX - maxOutRect.x) / paperWidth); + if (Math.abs((startPaperX - maxOutRect.x) % paperWidth) > 1) { + leftExtNum++; + } + } + if (maxOutRect.x1 > startPaperX + paperWidth) { + rightExtNum = parseInt((maxOutRect.x1 - startPaperX - paperWidth) / paperWidth); + if (Math.abs((maxOutRect.x1 - startPaperX - paperWidth) % paperWidth) > 1) { + rightExtNum++; + } + } + if (maxOutRect.y < startPaperY) { + topExtNum = parseInt((startPaperY - maxOutRect.y) / paperHeight); + if (Math.abs((startPaperY - maxOutRect.y) % paperHeight) > 1) { + topExtNum++; + } + } + if (maxOutRect.y1 > startPaperY + paperHeight) { + bottomExtNum = parseInt((maxOutRect.y1 - startPaperY - paperHeight) / paperHeight); + if (Math.abs((maxOutRect.y1 - startPaperY - paperHeight) % paperHeight) > 1) { + bottomExtNum++; + } + } + } + let leftPaperWidth = (leftExtNum + 0.5) * paperWidth; + let rightPaperWidth = (rightExtNum + 1.5) * paperWidth; + let leftSpace = stage2.spv.x * stageRatio2; + let rightSpace = stage2.width - stage2.spv.x * stageRatio2; + let topPaperWidth = (topExtNum + 0.5) * paperHeight; + let bottomPaperWidth = (bottomExtNum + 1.5) * paperHeight; + let topSpace = stage2.spv.y * stageRatio2; + let bottomSpace = stage2.height - stage2.spv.y * stageRatio2; + let extW = 0, extH = 0; + let needMoveX = false, needMoveY = false; + if (rightPaperWidth > rightSpace) { + extW = rightPaperWidth - rightSpace; + } else if (rightSpace - rightPaperWidth >= paperWidth) { + extW = -parseInt((rightSpace - rightPaperWidth) / paperWidth) * paperWidth; + } + if (leftPaperWidth > leftSpace) { + extW = leftPaperWidth - leftSpace; + needMoveX = true; + } else if (parseFloat((leftSpace - leftPaperWidth).toFixed(2)) > parseFloat(paperWidth.toFixed(2))) { + extW = -parseInt((leftSpace - leftPaperWidth) / paperWidth) * paperWidth; + needMoveX = true; + } + if (bottomPaperWidth > bottomSpace) { + extH = bottomPaperWidth - bottomSpace; + } else if (bottomSpace - bottomPaperWidth >= paperHeight) { + extH = -parseInt((bottomSpace - bottomPaperWidth) / paperHeight) * paperHeight; + } + if (topPaperWidth > topSpace) { + extH = topPaperWidth - topSpace; + needMoveY = true; + } else if (parseFloat((topSpace - topPaperWidth).toFixed(2)) > parseFloat(paperHeight.toFixed(2))) { + extH = -parseInt((topSpace - topPaperWidth) / paperHeight) * paperHeight; + needMoveY = true; + } + if (!bus.ddInstance.EXT_STAGE_WIDTH) { + extW = 0; + } + if (!bus.ddInstance.EXT_STAGE_HEIGHT) { + extH = 0; + } + if (extW || extH) { + stage2.width += extW; + stage2.height += extH; + let mx = 0, my = 0; + if (needMoveX) { + mx = extW; + } + if (needMoveY) { + my = extH; + } + if (mx || my) { + let moveMatrix2 = new Matrix3( + 1, + 0, + mx / stageRatio2, + 0, + 1, + my / stageRatio2, + 0, + 0, + 1 + ); + stage2.spv.x += mx / stageRatio2; + stage2.spv.y += my / stageRatio2; + if (!mds) { + mds = stage2.getLayerModels(); + } + mds.forEach((item) => { + item.transVectors(moveMatrix2); + }); + (_b2 = stage2.render.selector) == null ? void 0 : _b2.transVectors(moveMatrix2); + wpv.x -= mx; + wpv.y -= my; + } + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandUpdatePaperArea({ code: DDeiEnumBusCommandType.UpdatePaperArea, name: "", desc: "" }); + } + } + const __vite_glob_0_35$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandUpdatePaperArea, + default: DDeiBusCommandUpdatePaperArea + }, Symbol.toStringTag, { value: "Module" })); + class DDeiBusCommandUpdateSelectorBounds extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let stage2 = bus.ddInstance.stage; + if (stage2) { + let optContainer = stage2.render.currentOperateContainer; + if (!optContainer) { + optContainer = stage2.layers[stage2.layerIndex]; + } + if (optContainer) { + let selector = stage2.render.selector; + if (selector) { + if ((data == null ? void 0 : data.operateState) == DDeiEnumOperateState.SELECT_WORKING) { + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + let stageRatio2 = stage2.getStageRatio(); + ex = ex / stageRatio2; + ey = ey / stageRatio2; + let x2 = selector.startX; + let y2 = selector.startY; + let width, height; + if (ex < x2) { + width = x2 - ex; + x2 = ex; + } else { + width = ex - x2; + } + if (ey < y2) { + height = y2 - ey; + y2 = ey; + } else { + height = ey - y2; + } + selector.updatePVSByRect(x2, y2, width, height); + } else { + let models = data == null ? void 0 : data.models; + if (!(models == null ? void 0 : models.length) > 0 && !(models == null ? void 0 : models.size) > 0) { + models = stage2.selectedModels; + } + if (!(models == null ? void 0 : models.length) > 0 && !(models == null ? void 0 : models.size) > 0) { + models = optContainer.getSelectedModels(); + } + selector.updatePVSByModels(models); + } + } + } + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiBusCommandUpdateSelectorBounds({ code: DDeiEnumBusCommandType.UpdateSelectorBounds, name: "", desc: "" }); + } + } + const __vite_glob_0_36$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiBusCommandUpdateSelectorBounds, + default: DDeiBusCommandUpdateSelectorBounds + }, Symbol.toStringTag, { value: "Module" })); + const COMMANDS = /* @__PURE__ */ new Map(); + const addCommand = function(code, command) { + COMMANDS.set(code, command); + }; + const control_ctx$2 = /* @__PURE__ */ Object.assign({ "./bus/commands/add-histroy.ts": __vite_glob_0_0$3$1, "./bus/commands/cancel-curlevel-selected-models.ts": __vite_glob_0_1$3$1, "./bus/commands/center-stage-wpv.ts": __vite_glob_0_2$3, "./bus/commands/change-cursor.ts": __vite_glob_0_3$1$1, "./bus/commands/change-edit-mode.ts": __vite_glob_0_4$1$1, "./bus/commands/change-layout.ts": __vite_glob_0_5$1$1, "./bus/commands/change-line-point.ts": __vite_glob_0_6$1$1, "./bus/commands/change-selector-passindex.ts": __vite_glob_0_7$2, "./bus/commands/change-stage-ratio.ts": __vite_glob_0_8$2, "./bus/commands/change-stage-wpv.ts": __vite_glob_0_9$2, "./bus/commands/clear-template-vars.ts": __vite_glob_0_10$2, "./bus/commands/create-dep-linkmodel.ts": __vite_glob_0_11$2, "./bus/commands/model-align.ts": __vite_glob_0_12$2, "./bus/commands/model-auto-pos.ts": __vite_glob_0_13$2, "./bus/commands/model-cancel-merge.ts": __vite_glob_0_14$2, "./bus/commands/model-change-bounds.ts": __vite_glob_0_15$2, "./bus/commands/model-change-container.ts": __vite_glob_0_16$2, "./bus/commands/model-change-position.ts": __vite_glob_0_17$2, "./bus/commands/model-change-rotate.ts": __vite_glob_0_18$2, "./bus/commands/model-change-select.ts": __vite_glob_0_19$2, "./bus/commands/model-change-value.ts": __vite_glob_0_20$2, "./bus/commands/model-copy-style.ts": __vite_glob_0_21$2, "./bus/commands/model-edge-position.ts": __vite_glob_0_22$2, "./bus/commands/model-merge.ts": __vite_glob_0_23$2, "./bus/commands/model-push.ts": __vite_glob_0_24$2, "./bus/commands/model-remove.ts": __vite_glob_0_25$2, "./bus/commands/nodify-change.ts": __vite_glob_0_26$2, "./bus/commands/nodify-control-created.ts": __vite_glob_0_27$2, "./bus/commands/ovs-change-position.ts": __vite_glob_0_28$2, "./bus/commands/refresh-shape.ts": __vite_glob_0_29$2, "./bus/commands/reset-selector-state.ts": __vite_glob_0_30$2, "./bus/commands/set-helpline.ts": __vite_glob_0_31$2, "./bus/commands/stage-change-select-models.ts": __vite_glob_0_32$2, "./bus/commands/texteditor-change-select-pos.ts": __vite_glob_0_33$2, "./bus/commands/update-drawobj.ts": __vite_glob_0_34$2, "./bus/commands/update-paper-area.ts": __vite_glob_0_35$2, "./bus/commands/update-selector-bounds.ts": __vite_glob_0_36$2 }); + let loadArray = []; + for (const path in control_ctx$2) { + loadArray.push(control_ctx$2[path]); + } + loadArray.forEach((item) => { + let command = item.default; + if (command) { + let cmdInst = command.newInstance(); + if (cmdInst == null ? void 0 : cmdInst.code) { + addCommand(cmdInst.code, cmdInst); + } + } + }); + class DDeiBus { + // ============================ 构造函数 ============================ + constructor(props) { + __publicField2(this, "ddInstance"); + __publicField2(this, "invoker"); + __publicField2(this, "drawQueue", []); + __publicField2(this, "queue", []); + __publicField2(this, "interceptor", {}); + this.ddInstance = props.ddInstance; + this.invoker = props.invoker; + } + // ============================ 方法 ============================ + /** + * 插入事件进入总线指定位置,默认最前方 + * @param actionType 类型 + * @param data 承载数据 + * @param evt 事件 + */ + insert(actionType, data, evt, index = 0, parallel = false) { + if (actionType) { + this.queue.splice(index, 0, { type: actionType, data, evt, parallel }); + } + } + /** + * 推送事件进入总线 + * @param actionType 类型 + * @param data 承载数据 + * @param evt 事件 + */ + push(actionType, data, evt, parallel = false) { + parallel = false; + if (actionType) { + this.queue.push({ type: actionType, data, evt, parallel }); + } + } + /** + * 推送多个事件进入总线 + * @param actions 多个action + * @param evt 事件 + */ + pushMulit(actions, evt) { + if (actions) { + actions.forEach((item) => { + this.push(item.actionType, item.data, evt); + }); + } + } + /** + * 延迟执行 + * @param time 延迟执行时间 + */ + executeAllDelay(time) { + setTimeout(() => { + this.executeAll(); + }, time); + } + /** + * 按照先进先出的顺序执行所有action + */ + executeAll() { + var _a3, _b2; + let result = true; + this.tempExecQueue = clone(this.queue); + while (((_a3 = this == null ? void 0 : this.queue) == null ? void 0 : _a3.length) > 0 && result) { + let paralCommands = []; + let firstActionData = this.queue[0]; + if (firstActionData.parallel == true) { + for (let i2 = 0; i2 < this.queue.length; i2++) { + let command = this.queue[i2]; + if (command.parallel == true) { + let commandAction = new Promise((resolve, reject) => { + this.execute(command); + }); + paralCommands.push(commandAction); + } else { + break; + } + } + this.queue.splice(0, paralCommands.length); + Promise.all(paralCommands); + } else { + result = this.execute(); + } + } + if (((_b2 = this == null ? void 0 : this.drawQueue) == null ? void 0 : _b2.length) > 0 && result) { + result = this.executeDraw(); + this.drawQueue = []; + } + } + restoreQueue() { + var _a3; + if (((_a3 = this.tempExecQueue) == null ? void 0 : _a3.length) > 0) { + this.queue = this.tempExecQueue; + } + } + /** + * 取出队列并执行 + */ + execute(command) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.queue && this.queue.length > 0) { + let firstActionData = null; + if (!command) { + firstActionData = this.queue[0]; + this.queue.splice(0, 1); + } else { + firstActionData = command; + } + let action = null; + if (firstActionData) { + if (firstActionData.type == DDeiEnumBusCommandType.RefreshShape) { + this.drawQueue.push(firstActionData); + return true; + } + action = COMMANDS.get(firstActionData.type); + if (action) { + if ((_a3 = this.interceptor[firstActionData.type]) == null ? void 0 : _a3.before) { + let interActions = (_b2 = this.interceptor[firstActionData.type]) == null ? void 0 : _b2.before; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + let validResult = action.before(firstActionData.data, this, firstActionData.evt); + if (validResult) { + if ((_c2 = this.interceptor[firstActionData.type]) == null ? void 0 : _c2.execute) { + let interActions = (_d2 = this.interceptor[firstActionData.type]) == null ? void 0 : _d2.execute; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + let actionResult = action.action(firstActionData.data, this, firstActionData.evt); + if (actionResult) { + if ((_e2 = this.interceptor[firstActionData.type]) == null ? void 0 : _e2.after) { + let interActions = (_f = this.interceptor[firstActionData.type]) == null ? void 0 : _f.after; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + return action.after(firstActionData.data, this, firstActionData.evt); + } else { + return false; + } + } else { + return false; + } + } + } + } + return true; + } + /** + * 执行绘图队列 + * @param command + * @returns + */ + executeDraw(command) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.drawQueue && this.drawQueue.length > 0) { + let firstActionData = null; + if (!command) { + firstActionData = this.drawQueue[0]; + this.drawQueue.splice(0, 1); + } else { + firstActionData = command; + } + let action = null; + if (firstActionData) { + action = COMMANDS.get(firstActionData.type); + if (action) { + if ((_a3 = this.interceptor[firstActionData.type]) == null ? void 0 : _a3.before) { + let interActions = (_b2 = this.interceptor[firstActionData.type]) == null ? void 0 : _b2.before; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + let validResult = action.before(firstActionData.data, this, firstActionData.evt); + if (validResult) { + if ((_c2 = this.interceptor[firstActionData.type]) == null ? void 0 : _c2.execute) { + let interActions = (_d2 = this.interceptor[firstActionData.type]) == null ? void 0 : _d2.execute; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + let actionResult = action.action(firstActionData.data, this, firstActionData.evt); + if (actionResult) { + if ((_e2 = this.interceptor[firstActionData.type]) == null ? void 0 : _e2.after) { + let interActions = (_f = this.interceptor[firstActionData.type]) == null ? void 0 : _f.after; + for (let ii = 0; ii < interActions.length; ii++) { + let result = interActions[ii](firstActionData.data, this, firstActionData.evt); + if (!result) { + return false; + } + } + } + return action.after(firstActionData.data, this, firstActionData.evt); + } else { + return false; + } + } else { + return false; + } + } + } + } + return true; + } + } + const DDeiBus$1 = DDeiBus; + var DDeiEnumAttributeType = /* @__PURE__ */ ((DDeiEnumAttributeType2) => { + DDeiEnumAttributeType2[DDeiEnumAttributeType2["GRAPHICS"] = 1] = "GRAPHICS"; + DDeiEnumAttributeType2[DDeiEnumAttributeType2["EVENT"] = 3] = "EVENT"; + DDeiEnumAttributeType2[DDeiEnumAttributeType2["BUSINESS"] = 2] = "BUSINESS"; + return DDeiEnumAttributeType2; + })(DDeiEnumAttributeType || {}); + var DDeiEnumStoreType = /* @__PURE__ */ ((DDeiEnumStoreType2) => { + DDeiEnumStoreType2[DDeiEnumStoreType2["LOCAL"] = 1] = "LOCAL"; + DDeiEnumStoreType2[DDeiEnumStoreType2["URL"] = 2] = "URL"; + DDeiEnumStoreType2[DDeiEnumStoreType2["FILE"] = 3] = "FILE"; + return DDeiEnumStoreType2; + })(DDeiEnumStoreType || {}); + class DDeiStore { + } + class DDeiAbstractArrtibuteParser { + // ============================ 构造函数 =============================== + constructor(model, define2) { + __publicField2(this, "model"); + __publicField2(this, "define"); + this.model = model; + this.define = define2; + } + } + class DDeiArrtibuteParserString extends DDeiAbstractArrtibuteParser { + // ============================ 构造函数 =============================== + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 转换一个外部值到正确的值 + * 根据dataType返回不同的结果 + */ + parseValue(value) { + if (value) { + if (this.define.isArray) { + if (Array.isArray(value)) { + return value; + } + } else { + return value.toString(); + } + } else { + return null; + } + } + /** + * 获取缺省值 + * 根据dataType返回不同的结果 + */ + getDefaultValue() { + let value = this.define.defaultValue; + if (value) { + if (this.define.isArray) { + if (Array.isArray(value)) { + return value; + } + } else { + return value.toString(); + } + } else { + return null; + } + } + } + class DDeiArrtibuteParserNumber extends DDeiAbstractArrtibuteParser { + // ============================ 构造函数 =============================== + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 转换一个外部值到正确的值 + * 根据dataType返回不同的结果 + */ + parseValue(value) { + if (value != null && value != void 0) { + if (this.define.isArray) { + if (Array.isArray(value)) { + for (let i2 = 0; i2 < value.length; i2++) { + try { + value[i2] = parseFloat(value[i2]); + } catch (e) { + } + } + return value; + } + } else { + try { + return parseFloat(value); + } catch (e) { + return null; + } + } + } else { + return null; + } + } + /** + * 获取缺省值 + * 根据dataType返回不同的结果 + */ + getDefaultValue() { + let value = this.define.defaultValue; + if (value) { + if (this.define.isArray) { + if (Array.isArray(value)) { + for (let i2 = 0; i2 < value.length; i2++) { + try { + value[i2] = parseFloat(value[i2]); + } catch (e) { + } + } + return value; + } + } else { + try { + return parseFloat(value); + } catch (e) { + return null; + } + } + } else { + return null; + } + } + } + class DDeiArrtibuteParserBool extends DDeiAbstractArrtibuteParser { + // ============================ 构造函数 =============================== + // ============================ 属性 =============================== + /** + * 转换一个外部值到正确的值 + * 根据dataType返回不同的结果 + */ + parseValue(value) { + if (value) { + if (this.define.isArray) { + if (Array.isArray(value)) { + return value; + } + } else if (value == true || value.toLocaleLowerCase() == "true") { + return true; + } else { + return false; + } + } else { + return null; + } + } + /** + * 获取缺省值 + * 根据dataType返回不同的结果 + */ + getDefaultValue() { + let value = this.define.defaultValue; + if (value) { + if (this.define.isArray) { + if (Array.isArray(value)) { + return value; + } + } else if (value == true || value.toLocaleLowerCase() == "true") { + return true; + } else { + return false; + } + } else { + return false; + } + } + } + class DDeiArrtibuteDefine { + // ============================ 构造函数 =============================== + constructor(props) { + __publicField2(this, "id"); + __publicField2(this, "mapping"); + __publicField2(this, "type"); + __publicField2(this, "code"); + __publicField2(this, "name"); + __publicField2(this, "desc"); + __publicField2(this, "dataType"); + __publicField2(this, "dataSource"); + __publicField2(this, "defaultValue"); + __publicField2(this, "notNull"); + __publicField2(this, "readonly"); + __publicField2(this, "isArray"); + __publicField2(this, "overwrite"); + __publicField2(this, "min"); + __publicField2(this, "max"); + this.id = props.id; + this.mapping = props.mapping; + this.type = props.type; + this.code = props.code; + this.name = props.name; + this.desc = props.desc; + this.dataType = props.dataType ? props.dataType : "string"; + this.dataSource = props.dataSource; + this.defaultValue = props.defaultValue; + this.notNull = props.notNull ? props.notNull : false; + this.readonly = props.readonly ? props.readonly : false; + this.isArray = props.isArray ? props.isArray : false; + this.overwrite = props.overwrite ? props.overwrite : false; + this.min = props.min ? props.min : 0; + this.max = props.max ? props.max : 100; + } + // ============================ 方法 =============================== + /** + * 初始化解析器 + */ + getParser() { + if (!this.dataType || this.dataType.toLocaleLowerCase() == "string") { + return new DDeiArrtibuteParserString(null, this); + } else if (this.dataType.toLocaleLowerCase() == "integer" || this.dataType.toLocaleLowerCase() == "float" || this.dataType.toLocaleLowerCase() == "number") { + return new DDeiArrtibuteParserNumber(null, this); + } else if (this.dataType.toLocaleLowerCase() == "boolean" || this.dataType.toLocaleLowerCase() == "bool") { + return new DDeiArrtibuteParserBool(null, this); + } + return null; + } + } + class DDeiConverterBase extends DDeiPluginBase { + // ============================ 方法 =============================== + /** + * 判定是否生效 + */ + isEnable(fileData) { + return true; + } + /** + * 输入 + */ + input(fileData) { + return fileData; + } + /** + * 输出 + */ + output(fileData) { + return fileData; + } + getConverters(editor) { + return [this]; + } + } + class DDeiMenuBase extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField2(this, "label"); + __publicField2(this, "icon"); + __publicField2(this, "disabled"); + } + getMenus(editor) { + let option = this.getOptions(); + if (option) { + for (let i2 in option) { + if (i2 != "name") { + this[i2] = option[i2]; + } + } + } + return [this]; + } + } + const ov_link_v_split_point = `(model, ov, ovd,link){ + //根据ov与圆心基准控件的大小,计算控件位置 + //获取Y轴的缩放比例 + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let scaleY = Math.abs(bpv.y / 100) + let scaleX = Math.abs(bpv.x / 100) + //获取当前ov的index,当前index与compose的index必须对应 + let ovs = DDeiUtil.getOVSByType(model,1); + let ovIndex = ovs.indexOf(ov); + let novIndex = ovIndex + 1 + + + //得到当前控制点,还原到基准坐标的大小 + + let oar = [ov] + + //如果是第一个点,则开始点为-50 + + if(novIndex < ovs.length){ + oar.push(ovs[novIndex]) + } + let opv = DDeiUtil.pointsToZero(oar, model.cpv, model.rotate) + let opvY0 = opv[0].y / scaleY + let sy,ey + if(ovIndex == 0){ + sy = -50 + }else{ + let bopv = DDeiUtil.pointsToZero([ovs[ovIndex-1]], model.cpv, model.rotate) + sy = bopv[0].y/scaleY + } + if(novIndex < ovs.length){ + let opvY1 = opv[1].y / scaleY + ey = opvY1 + }else{ + ey = 50 + } + + + let comp0HeightBase = opvY0-sy + let comp1HeightBase = ey - opvY0 + + let comp0CY = sy + comp0HeightBase / 2 + let comp1CY = sy + comp0HeightBase + comp1HeightBase / 2 + + let models = link.models + let comps0 = [] + let compsCPVS0 = [] + models?.forEach(comp0Path => { + let comp0 = DDeiUtil.getDataByPathList(model, comp0Path) + compsCPVS0.push(comp0.cpv) + comps0.push(comp0) + }); + let compCPVS0 = DDeiUtil.pointsToZero(compsCPVS0, model.cpv, model.rotate) + let vs0 = [] + compCPVS0?.forEach(vs => { + vs0.push(new Vector3(vs.x/scaleX, comp0CY, 1)) + }); + let cpvs = DDeiUtil.zeroToPoints(vs0, model.cpv, model.rotate, scaleX, scaleY) + for(let i = 0;i < comps0.length;i++){ + let comp0 = comps0[i] + //composes的cpv归零0坐标,如果compse的X坐标不为0,则需要考虑旋转后X增量带来的Y变化 + //实际位移量=中心点位移量 X 2 + let comp0DeltaBPVX = (cpvs[i].x - comp0.cpv.x) * 2 + let comp0DeltaBPVY = (cpvs[i].y - comp0.cpv.y) * 2 + //计算位移量在原始大小中的比例 + + let comp0DeltaBPVXRate = comp0DeltaBPVX / (comp0.bpv.x - comp0.cpv.x) + let comp0DeltaBPVYRate = comp0DeltaBPVY / (comp0.bpv.y - comp0.cpv.y) + + comp0.bpv.x = (comp0.bpv.x - comp0.cpv.x) * (1 + comp0DeltaBPVXRate) + cpvs[i].x + comp0.bpv.y = (comp0.bpv.y - comp0.cpv.y) * (1 + comp0DeltaBPVYRate) + cpvs[i].y + comp0.cpv.x = cpvs[i].x + comp0.cpv.y = cpvs[i].y + //重新初始化并采样 + comp0.initPVS(); + } + + + let nextModels = link.nextModels + let comps1 = [] + let compsCPVS1 = [] + nextModels?.forEach(comp1Path => { + let comp1 = DDeiUtil.getDataByPathList(model, comp1Path) + compsCPVS1.push(comp1.cpv) + comps1.push(comp1) + }); + let compCPVS1 = DDeiUtil.pointsToZero(compsCPVS1, model.cpv, model.rotate) + let vs1 = [] + compCPVS1?.forEach(vs => { + vs1.push(new Vector3(vs.x/scaleX, comp1CY, 1)) + }); + cpvs = DDeiUtil.zeroToPoints(vs1, model.cpv, model.rotate, scaleX, scaleY) + + for(let i = 0;i < comps1.length;i++){ + let comp1 = comps1[i] + //composes的cpv归零0坐标,如果compse的X坐标不为0,则需要考虑旋转后X增量带来的Y变化 + let compCPVS = DDeiUtil.pointsToZero([comp1.cpv], model.cpv, model.rotate) + + let comp1DeltaBPVX = (cpvs[i].x - comp1.cpv.x) * 2 + let comp1DeltaBPVY = (cpvs[i].y - comp1.cpv.y) * 2 + + //计算位移量在原始大小中的比例 + let comp1DeltaBPVXRate = comp1DeltaBPVX / (comp1.bpv.x - comp1.cpv.x) + let comp1DeltaBPVYRate = comp1DeltaBPVY / (comp1.bpv.y - comp1.cpv.y) + comp1.bpv.x = (comp1.bpv.x - comp1.cpv.x) * (1 - comp1DeltaBPVXRate) + cpvs[i].x + comp1.bpv.y = (comp1.bpv.y - comp1.cpv.y) * (1 - comp1DeltaBPVYRate) + cpvs[i].y + + comp1.cpv.x = cpvs[i].x + comp1.cpv.y = cpvs[i].y + + //重新初始化并采样 + comp1.initPVS(); + } +}`; + const ov_link_h_split_point = `(model, ov, ovd, link){ + //根据ov与圆心基准控件的大小,计算控件位置 + //获取Y轴的缩放比例 + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let scaleY = Math.abs(bpv.y / 100) + let scaleX = Math.abs(bpv.x / 100) + //获取当前ov的index,当前index与compose的index必须对应 + let ovs = DDeiUtil.getOVSByType(model,2); + let ovIndex = ovs.indexOf(ov); + let novIndex = ovIndex + 1 + //得到当前控制点,还原到基准坐标的大小 + + let oar = [ov] + + //如果是第一个点,则开始点为-50 + + if(novIndex < ovs.length){ + oar.push(ovs[novIndex]) + } + let opv = DDeiUtil.pointsToZero(oar, model.cpv, model.rotate) + let opvX0 = opv[0].x / scaleX + let sx,ex + if(ovIndex == 0){ + sx = -50 + }else{ + let bopv = DDeiUtil.pointsToZero([ovs[ovIndex-1]], model.cpv, model.rotate) + sx = bopv[0].x/scaleX + } + if(novIndex < ovs.length){ + let opvX1 = opv[1].x / scaleX + ex = opvX1 + }else{ + ex = 50 + } + + + let comp0Base = opvX0-sx + let comp1Base = ex - opvX0 + + let comp0CX = sx + comp0Base / 2 + let comp1CX = sx + comp0Base + comp1Base / 2 + + let models = link.models + let comps0 = [] + let compsCPVS0 = [] + models?.forEach(comp0Path => { + let comp0 = DDeiUtil.getDataByPathList(model, comp0Path) + compsCPVS0.push(comp0.cpv) + comps0.push(comp0) + }); + + let compCPVS0 = DDeiUtil.pointsToZero(compsCPVS0, model.cpv, model.rotate) + let vs0 = [] + compCPVS0?.forEach(vs => { + vs0.push(new Vector3(comp0CX, vs.y/scaleY , 1)) + }); + let cpvs = DDeiUtil.zeroToPoints(vs0, model.cpv, model.rotate, scaleX, scaleY) + for(let i = 0;i < comps0.length;i++){ + let comp0 = comps0[i] + //composes的cpv归零0坐标,如果compse的X坐标不为0,则需要考虑旋转后X增量带来的Y变化 + //实际位移量=中心点位移量 X 2 + let comp0DeltaBPVX = (cpvs[i].x - comp0.cpv.x) * 2 + let comp0DeltaBPVY = (cpvs[i].y - comp0.cpv.y) * 2 + //计算位移量在原始大小中的比例 + + let comp0DeltaBPVXRate = comp0DeltaBPVX / (comp0.bpv.x - comp0.cpv.x) + let comp0DeltaBPVYRate = comp0DeltaBPVY / (comp0.bpv.y - comp0.cpv.y) + + comp0.bpv.x = (comp0.bpv.x - comp0.cpv.x) * (1 + comp0DeltaBPVXRate) + cpvs[i].x + comp0.bpv.y = (comp0.bpv.y - comp0.cpv.y) * (1 + comp0DeltaBPVYRate) + cpvs[i].y + comp0.cpv.x = cpvs[i].x + comp0.cpv.y = cpvs[i].y + //重新初始化并采样 + comp0.initPVS(); + } + + + let nextModels = link.nextModels + let comps1 = [] + let compsCPVS1 = [] + + nextModels?.forEach(comp1Path => { + let comp1 = DDeiUtil.getDataByPathList(model, comp1Path) + compsCPVS1.push(comp1.cpv) + comps1.push(comp1) + }); + let compCPVS1 = DDeiUtil.pointsToZero(compsCPVS1, model.cpv, model.rotate) + let vs1 = [] + compCPVS1?.forEach(vs => { + vs1.push(new Vector3(comp1CX,vs.y/scaleY, 1)) + }); + cpvs = DDeiUtil.zeroToPoints(vs1, model.cpv, model.rotate, scaleX, scaleY) + + for(let i = 0;i < comps1.length;i++){ + let comp1 = comps1[i] + //composes的cpv归零0坐标,如果compse的X坐标不为0,则需要考虑旋转后X增量带来的Y变化 + let compCPVS = DDeiUtil.pointsToZero([comp1.cpv], model.cpv, model.rotate) + + let comp1DeltaBPVX = (cpvs[i].x - comp1.cpv.x) * 2 + let comp1DeltaBPVY = (cpvs[i].y - comp1.cpv.y) * 2 + + //计算位移量在原始大小中的比例 + let comp1DeltaBPVXRate = comp1DeltaBPVX / (comp1.bpv.x - comp1.cpv.x) + let comp1DeltaBPVYRate = comp1DeltaBPVY / (comp1.bpv.y - comp1.cpv.y) + comp1.bpv.x = (comp1.bpv.x - comp1.cpv.x) * (1 - comp1DeltaBPVXRate) + cpvs[i].x + comp1.bpv.y = (comp1.bpv.y - comp1.cpv.y) * (1 - comp1DeltaBPVYRate) + cpvs[i].y + + comp1.cpv.x = cpvs[i].x + comp1.cpv.y = cpvs[i].y + + //重新初始化并采样 + comp1.initPVS(); + } +}`; + class DDeiThemeBase extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField2(this, "label"); + __publicField2(this, "icon"); + __publicField2(this, "css"); + } + // ============================ 方法 =============================== + getThemes(editor) { + let option = this.getOptions(); + if (option) { + for (let i2 in option) { + if (i2 != "name") { + this[i2] = option[i2]; + } + } + } + return [this]; + } + } + const _DDeiEditorCommandAddHistroy = class _DDeiEditorCommandAddHistroy2 extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let editor = bus.invoker; + if ((editor == null ? void 0 : editor.files.length) > 0 && (editor.currentFileIndex == 0 || editor.currentFileIndex)) { + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if ((file == null ? void 0 : file.active) == DDeiActiveType.ACTIVE) { + let data2 = JSON.stringify(file.toJSON()); + let lastData = null; + if (file.histroyIdx != -1) { + lastData = file.histroy[file.histroyIdx]; + } + if (data2 != lastData) { + _DDeiEditorCommandAddHistroy2.addHistroy(file, data2); + } + } + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new _DDeiEditorCommandAddHistroy2({ code: DDeiEditorEnumBusCommandType.AddFileHistroy, name: "", desc: "" }); + } + static addHistroy(file, data) { + file.addHistroy(data); + } + }; + _DDeiEditorCommandAddHistroy.addHistroy = debounce(_DDeiEditorCommandAddHistroy.addHistroy, 200, { trailing: true, leading: false }); + let DDeiEditorCommandAddHistroy = _DDeiEditorCommandAddHistroy; + const __vite_glob_0_0$7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandAddHistroy, + default: DDeiEditorCommandAddHistroy + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandChangeEditMode extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let editor = bus.invoker; + if (data == null ? void 0 : data.mode) { + editor.changeEditMode(data.mode); + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + bus.insert(DDeiEnumBusCommandType.ChangeEditMode, data, evt); + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandChangeEditMode({ code: DDeiEditorEnumBusCommandType.ChangeEditMode, name: "", desc: "" }); + } + } + const __vite_glob_0_1$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandChangeEditMode, + default: DDeiEditorCommandChangeEditMode + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandClearTemplateUI extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + { + let ele = document.getElementById(bus.invoker.containerid); + let dialogs = []; + for (let i2 = 0; i2 < ele.children.length; i2++) { + if (ele.children[i2].className == "ddei-combox-show-dialog") { + dialogs.push(ele.children[i2]); + } + } + dialogs.forEach((dialog) => { + dialog.style.display = "none"; + }); + } + { + DDeiEditorUtil$1.closeDialogs(bus.invoker, ["bottom-dialog", "property-dialog", "top-dialog", "toolbox-dialog"]); + } + { + let menuDialogId = DDeiUtil$1.getMenuControlId(bus.invoker); + let menuEle = document.getElementById(menuDialogId); + if (menuEle) { + menuEle.style.display = "none"; + } + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandClearTemplateUI({ code: DDeiEditorEnumBusCommandType.ClearTemplateUI, name: "", desc: "" }); + } + } + const __vite_glob_0_2$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandClearTemplateUI, + default: DDeiEditorCommandClearTemplateUI + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandFileDirty extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let editor = bus.invoker; + if ((data == null ? void 0 : data.state) && (editor == null ? void 0 : editor.files.length) > 0 && (editor.currentFileIndex == 0 || editor.currentFileIndex)) { + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if ((file == null ? void 0 : file.active) == DDeiActiveType.ACTIVE) { + file.modelNumber = file.calModelNumber(); + file.state = data == null ? void 0 : data.state; + } + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandFileDirty({ code: DDeiEditorEnumBusCommandType.RefreshEditorParts, name: "", desc: "" }); + } + } + const __vite_glob_0_3$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandFileDirty, + default: DDeiEditorCommandFileDirty + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandLoadFile extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let editor = bus.invoker; + let ddInstance = editor.ddInstance; + let loadFile = DDeiEditorUtil$1.getConfigValue( + "EVENT_LOAD_FILE", + editor + ); + if (loadFile) { + loadFile().then((fileData) => { + let converters = editor.getEnabledConverters(fileData, 1); + converters == null ? void 0 : converters.forEach((converter) => { + fileData = converter.input(fileData); + }); + if (fileData) { + let file = null; + for (let x2 = 0; x2 < editor.files.length; x2++) { + if (editor.files[x2].id == fileData.id) { + file = editor.files[x2]; + } + editor.files[x2].active = DDeiActiveType.NONE; + } + if (!file) { + if (fileData == null ? void 0 : fileData.content) { + file = DDeiFile.loadFromJSON(JSON.parse(fileData == null ? void 0 : fileData.content), { + currentDdInstance: editor.ddInstance + }); + file.id = fileData.id; + file.publish = fileData.publish; + file.name = fileData.name; + file.path = fileData.path; + file.desc = fileData.desc; + file.version = fileData.version; + file.extData = fileData.extData; + file.busiData = fileData.busiData; + } else { + file = new DDeiFile({ + id: fileData.id, + publish: fileData.publish, + name: fileData.name, + path: fileData.path, + desc: fileData.desc, + version: fileData.version, + extData: fileData.extData, + busiData: fileData.busiData, + sheets: [ + new DDeiSheet({ + name: "新建页面", + desc: "新建页面", + stage: DDeiStage.initByJSON( + { id: "stage_1" }, + { currentDdInstance: ddInstance } + ), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }); + } + editor.addFile(file); + file.state = DDeiFileState.NONE; + } + editor.currentFileIndex = editor.files.indexOf(file); + file.active = DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + file.changeSheet(file.currentSheetIndex); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + file.initHistroy(); + ddInstance.stage = stage2; + stage2.initRender(); + editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.insert(DDeiEditorEnumBusCommandType.ClearTemplateUI, 0); + ddInstance.bus.insert(DDeiEnumBusCommandType.RefreshShape, 1); + ddInstance.bus.insert(DDeiEditorEnumBusCommandType.RefreshEditorParts, 2); + ddInstance.bus.executeAll(); + } + } + }); + } else { + let fileText = editor.i18n("ddei.file"); + let newText = editor.i18n("ddei.new"); + let pageText = editor.i18n("ddei.page"); + let file = DDeiFile.loadFromJSON( + { + name: newText + fileText + "_NEW", + path: "/" + newText + fileText + "_NEW", + sheets: [ + new DDeiSheet({ + name: pageText + "-1", + desc: pageText + "-1", + stage: DDeiStage.initByJSON({ id: "stage_1" }, { currentDdInstance: ddInstance }), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }, + { currentDdInstance: ddInstance } + ); + if (editor.currentFileIndex != -1) { + editor.files[editor.currentFileIndex].active = DDeiActiveType.NONE; + } + editor.addFile(file); + editor.currentFileIndex = editor.files.indexOf(file); + file.active = DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + file.changeSheet(file.currentSheetIndex); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + file.initHistroy(); + ddInstance.stage = stage2; + stage2.initRender(); + editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.insert(DDeiEditorEnumBusCommandType.ClearTemplateUI, 0); + ddInstance.bus.insert(DDeiEnumBusCommandType.RefreshShape, 1); + ddInstance.bus.insert(DDeiEditorEnumBusCommandType.RefreshEditorParts, 2); + ddInstance.bus.executeAll(); + } + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandLoadFile({ code: DDeiEditorEnumBusCommandType.LoadFile, name: "", desc: "" }); + } + } + const __vite_glob_0_4$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandLoadFile, + default: DDeiEditorCommandLoadFile + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandRefreshEditorParts extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + var _a3, _b2, _c2; + let editor = bus.invoker; + if (((_a3 = data == null ? void 0 : data.parts) == null ? void 0 : _a3.length) > 0) { + (_b2 = editor.layoutViewer) == null ? void 0 : _b2.forceRefreshParts(data == null ? void 0 : data.parts); + } else { + (_c2 = editor.layoutViewer) == null ? void 0 : _c2.forceRefreshParts(); + } + return true; + } + /** + * 后置行为,分发 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandRefreshEditorParts({ code: DDeiEditorEnumBusCommandType.RefreshEditorParts, name: "", desc: "" }); + } + } + const __vite_glob_0_5$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandRefreshEditorParts, + default: DDeiEditorCommandRefreshEditorParts + }, Symbol.toStringTag, { value: "Module" })); + class DDeiEditorCommandSaveFile extends DDeiBusCommand { + // ============================ 构造函数 ============================ + // ============================ 静态方法 ============================ + // ============================ 属性 =============================== + // ============================ 方法 =============================== + /** + * 前置行为,用于校验,本Command无需校验 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + before(data, bus, evt) { + return true; + } + /** + * 具体行为,设置当前控件的选中状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + action(data, bus, evt) { + let editor = bus.invoker; + if ((editor == null ? void 0 : editor.files.length) > 0 && (editor.currentFileIndex == 0 || editor.currentFileIndex)) { + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if ((file == null ? void 0 : file.active) == DDeiActiveType.ACTIVE) { + if ((file == null ? void 0 : file.state) == DDeiFileState.NEW || (file == null ? void 0 : file.state) == DDeiFileState.MODIFY || data.publish == 1) { + let oldState = file.state; + file.lastUpdateTime = (/* @__PURE__ */ new Date()).getTime(); + let json = file.toJSON(); + if (json) { + let converters = editor.getEnabledConverters(json, 2); + converters == null ? void 0 : converters.forEach((converter) => { + json = converter.output(json); + }); + json.state = DDeiFileState.NONE; + if (data.publish == 1) { + file.state = DDeiFileState.PUBLISHING; + let publishFile = DDeiEditorUtil$1.getConfigValue( + "EVENT_PUBLISH_FILE", + editor + ); + if (publishFile) { + DDeiUtil$1.stageScreenToImage(bus.ddInstance, 400, 240).then((thumbBase64) => { + if (thumbBase64) { + json.thumb = thumbBase64; + } + publishFile(json).then((data2) => { + if (data2.result == 1) { + file.state = DDeiFileState.NONE; + file.histroy.forEach((his) => { + if (his.isNew == true) { + delete his.isNew; + } + }); + file.histroy[file.histroyIdx].isNew = true; + } else if (data2.result != 4) { + file.state = oldState; + } + }); + }); + } + } else { + file.state = DDeiFileState.SAVING; + let saveFile = DDeiEditorUtil$1.getConfigValue( + "EVENT_SAVE_FILE", + editor + ); + if (saveFile) { + DDeiUtil$1.stageScreenToImage(bus.ddInstance, 400, 240).then((thumbBase64) => { + if (thumbBase64) { + json.thumb = thumbBase64; + } + saveFile(json, file).then((data2) => { + if (data2.result == 1) { + file.state = DDeiFileState.NONE; + file.histroy.forEach((his) => { + if (his.isNew == true) { + delete his.isNew; + } + }); + file.histroy[file.histroyIdx].isNew = true; + bus == null ? void 0 : bus.insert(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["openfiles"] }, evt); + bus.executeAll(); + } else if (data2.result != 4) { + file.state = oldState; + } + }); + }); + } + } + } + } + } + } + return true; + } + /** + * 后置行为,分发,修改当前editor的状态 + * @param data bus分发后,当前承载的数据 + * @param bus 总线对象引用 + * @param evt 事件对象引用 + */ + after(data, bus, evt) { + return true; + } + /** + * 返回当前实例 + * @returns + */ + static newInstance() { + return new DDeiEditorCommandSaveFile({ code: DDeiEditorEnumBusCommandType.SaveFile, name: "", desc: "" }); + } + } + const __vite_glob_0_6$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + DDeiEditorCommandSaveFile, + default: DDeiEditorCommandSaveFile + }, Symbol.toStringTag, { value: "Module" })); + const autoLoadCommand = function() { + const control_ctx2 = /* @__PURE__ */ Object.assign({ "./bus/commands/add-histroy.ts": __vite_glob_0_0$7, "./bus/commands/change-edit-mode.ts": __vite_glob_0_1$4, "./bus/commands/clear-template-ui.ts": __vite_glob_0_2$4, "./bus/commands/file-dirty.ts": __vite_glob_0_3$4, "./bus/commands/load-file.ts": __vite_glob_0_4$3, "./bus/commands/refresh-editor-parts.ts": __vite_glob_0_5$3, "./bus/commands/save-file.ts": __vite_glob_0_6$3 }); + let loadArray2 = []; + for (const path in control_ctx2) { + loadArray2.push(control_ctx2[path]); + } + loadArray2.forEach((item) => { + let command = item.default; + if (command) { + let cmdInst = command.newInstance(); + if (cmdInst == null ? void 0 : cmdInst.code) { + addCommand(cmdInst.code, cmdInst); + } + } + }); + }; + class DDeiEditorArrtibute extends DDeiArrtibuteDefine { + // ============================ 构造函数 =============================== + constructor(props) { + super(props); + __publicField2(this, "group"); + __publicField2(this, "controlType"); + __publicField2(this, "orderNo"); + __publicField2(this, "visiable"); + __publicField2(this, "diffValues", []); + __publicField2(this, "hiddenTitle"); + __publicField2(this, "display"); + __publicField2(this, "value", null); + __publicField2(this, "exmapping"); + __publicField2(this, "itemStyle", null); + __publicField2(this, "canSearch", false); + __publicField2(this, "step", 1); + __publicField2(this, "cascadeDisplay", null); + this.group = props.group; + this.controlType = props.controlType ? props.controlType : "text"; + this.orderNo = props.orderNo; + this.visiable = props.visiable == false ? false : true; + this.value = props.value ? props.value : null; + this.display = props.display ? props.display : "row"; + this.hiddenTitle = props.hiddenTitle ? props.hiddenTitle : false; + this.step = props.step ? props.step : 1; + this.itemStyle = props.itemStyle ? props.itemStyle : null; + this.canSearch = props.canSearch ? props.canSearch : false; + this.exmapping = props.exmapping; + this.cascadeDisplay = props.cascadeDisplay; + } + // ============================ 方法 =============================== + /** + * 根据当前的值,更新配置信息 + */ + doCascadeDisplayByValue() { + var _a3, _b2; + let cascadeDisplayConfig = null; + if (this.cascadeDisplay) { + if (this.cascadeDisplay[this.value]) { + cascadeDisplayConfig = this.cascadeDisplay[this.value]; + } else { + if (this.value && this.value != "" && this.value != "0" && this.value != 0) { + cascadeDisplayConfig = this.cascadeDisplay["notempty"]; + } else if (this.value == null && this.defaultValue) { + cascadeDisplayConfig = this.cascadeDisplay["default"]; + } else { + cascadeDisplayConfig = this.cascadeDisplay["empty"]; + } + } + } + if (((_a3 = cascadeDisplayConfig == null ? void 0 : cascadeDisplayConfig.show) == null ? void 0 : _a3.length) > 0) { + DDeiEditorArrtibute.showAttributesByCode( + this.topGroup, + cascadeDisplayConfig.show + ); + } + if (((_b2 = cascadeDisplayConfig == null ? void 0 : cascadeDisplayConfig.hidden) == null ? void 0 : _b2.length) > 0) { + DDeiEditorArrtibute.hiddenAttributesByCode( + this.topGroup, + cascadeDisplayConfig.hidden + ); + } + } + /** + * + * @param propTopGroup 隐藏属性 + * @param paths + */ + static hiddenAttributesByCode(propTopGroup, ...paths) { + var _a3; + if (((_a3 = propTopGroup == null ? void 0 : propTopGroup.subGroups) == null ? void 0 : _a3.length) > 0 && paths) { + propTopGroup.subGroups.forEach((group2) => { + var _a22; + if (((_a22 = group2 == null ? void 0 : group2.children) == null ? void 0 : _a22.length) > 0) { + group2.children.forEach((item) => { + paths.forEach((path) => { + if (path.indexOf(item.code) != -1) { + item.visiable = false; + } + }); + }); + } + }); + } + } + /** + * 显示属性 + * @param propTopGroup + * @param paths + */ + static showAttributesByCode(propTopGroup, ...paths) { + var _a3; + if (((_a3 = propTopGroup == null ? void 0 : propTopGroup.subGroups) == null ? void 0 : _a3.length) > 0 && paths) { + propTopGroup.subGroups.forEach((group2) => { + var _a22; + if (((_a22 = group2 == null ? void 0 : group2.children) == null ? void 0 : _a22.length) > 0) { + group2.children.forEach((item) => { + paths.forEach((path) => { + if (path.indexOf(item.code) != -1) { + item.visiable = true; + } + }); + }); + } + }); + } + } + } + class DDeiLifeCycle extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField2(this, "EVENT_CONTROL_SELECT_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_DBL_CLICK", null); + __publicField2(this, "EVENT_CONTROL_SELECT_AFTER", null); + __publicField2(this, "EVENT_CONTROL_CREATE_BEFORE", null); + __publicField2(this, "EVENT_MOUSE_OPERATING", null); + __publicField2(this, "EVENT_CONTROL_CREATE_AFTER", null); + __publicField2(this, "EVENT_CONTROL_DRAG_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_DRAGING", null); + __publicField2(this, "EVENT_CONTROL_DRAG_AFTER", null); + __publicField2(this, "EVENT_LINE_DRAG_BEFORE", null); + __publicField2(this, "EVENT_LINE_DRAG_AFTER", null); + __publicField2(this, "EVENT_CONTROL_DEL_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_DEL_AFTER", null); + __publicField2(this, "EVENT_CONTROL_EDIT_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_EDIT_AFTER", null); + __publicField2(this, "EVENT_CONTROL_VIEW_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_VIEW", null); + __publicField2(this, "EVENT_CONTROL_VIEW_AFTER", null); + __publicField2(this, "EVENT_STAGE_CHANGE_WPV", null); + __publicField2(this, "EVENT_STAGE_CHANGE_RATIO", null); + __publicField2(this, "EVENT_MOUSE_MOVE_IN_CONTROL", null); + __publicField2(this, "EVENT_MOUSE_MOVE_IN_LAYER", null); + __publicField2(this, "EVENT_MOUSE_IN_AREA", null); + __publicField2(this, "EVENT_CLOSE_FILE_AFTER", null); + __publicField2(this, "EVENT_CHANGE_FILE_AFTER", null); + __publicField2(this, "EVENT_CHANGE_SHEET_AFTER", null); + __publicField2(this, "EVENT_DEL_SHEET_AFTER", null); + __publicField2(this, "EVENT_CLOSE_FILE_BEFORE", null); + __publicField2(this, "EVENT_CHANGE_FILE_BEFORE", null); + __publicField2(this, "EVENT_CHANGE_SHEET_BEFORE", null); + __publicField2(this, "EVENT_DEL_SHEET_BEFORE", null); + __publicField2(this, "EVENT_ADD_FILE_AFTER", null); + __publicField2(this, "EVENT_ADD_SHEET_AFTER", null); + __publicField2(this, "EVENT_ADD_FILE_BEFORE", null); + __publicField2(this, "EVENT_ADD_SHEET_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_ROTATE_BEFORE", null); + __publicField2(this, "EVENT_CONTROL_ROTATE_AFTER", null); + } + // ============================ 方法 =============================== + getLifeCyclies(editor) { + let option = this.getOptions(); + if (option) { + for (let i2 in option) { + if (i2 != "name") { + this[i2] = option[i2]; + } + } + } + return [this]; + } + } + const _sfc_main$1g = { + name: "DDei-Editor-Menu-Dialog", + extends: null, + mixins: [], + props: { + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + /** + * 执行菜单的Action + */ + execMenuAction(menu, evt) { + var _a3, _b2, _c2; + let stage2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage; + let menuAction = this.editor.menus[menu.name]; + if (menuAction && stage2) { + let menuShape = (_c2 = stage2.render) == null ? void 0 : _c2.currentMenuShape; + menuAction.action(menuShape, evt); + } + this.$refs.menuDialog.style.display = "none"; + stage2.render.operateState = DDeiEnumOperateState.NONE; + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + this.editor.bus.executeAll(); + }, + /** + * 判断菜单是否显示 + */ + isVisiable(menu) { + var _a3, _b2, _c2; + try { + let stage2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage; + let menuAction = this.editor.menus[menu.name]; + if (menuAction && stage2) { + let menuShape = (_c2 = stage2.render) == null ? void 0 : _c2.currentMenuShape; + return menuAction.isVisiable(menuShape); + } + } catch (e) { + console.error(e); + } + return false; + } + } + }; + const MenuDialog_vue_vue_type_style_index_0_scoped_1cde0d47_lang = ""; + const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; + }; + const _hoisted_1$1e = ["id"]; + const _hoisted_2$V = ["onClick"]; + const _hoisted_3$R = { + key: 0, + class: "ddei-editor-menu-dialog-item-icon" + }; + const _hoisted_4$G = { + key: 0, + class: "icon", + "aria-hidden": "true" + }; + const _hoisted_5$y = ["xlink:href"]; + const _hoisted_6$s = { + key: 1, + class: "ddei-editor-menu-dialog-item-content" + }; + const _hoisted_7$p = { + key: 2, + class: "ddei-editor-menu-dialog-item-desc" + }; + function _sfc_render$1g(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2; + return vue.openBlock(), vue.createElementBlock("div", { + id: ((_a3 = $props.editor) == null ? void 0 : _a3.id) + "_menu_dialog", + ref: "menuDialog", + class: "ddei-editor-menu-dialog" + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b2 = $props.editor) == null ? void 0 : _b2.currentMenuData, (menu) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-menu-dialog-hr": menu.code == "split", "ddei-editor-menu-dialog-item": menu.code != "split" }), + onClick: ($event) => $options.execMenuAction(menu, $event) + }, [ + menu.code != "split" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$R, [ + menu.icon ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_4$G, [ + vue.createElementVNode("use", { + "xlink:href": menu.icon + }, null, 8, _hoisted_5$y) + ])) : vue.createCommentVNode("", true) + ])) : vue.createCommentVNode("", true), + menu.code != "split" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$s, vue.toDisplayString($props.editor.i18n(menu.label)), 1)) : vue.createCommentVNode("", true), + menu.code != "split" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$p, vue.toDisplayString($props.editor.i18n(menu.desc)), 1)) : vue.createCommentVNode("", true) + ], 10, _hoisted_2$V)), [ + [vue.vShow, $options.isVisiable(menu)] + ]); + }), 256)) + ], 8, _hoisted_1$1e); + } + const MenuDialog = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["render", _sfc_render$1g], ["__scopeId", "data-v-1cde0d47"]]); + const en_US$1 = { + ddei: { + file: "File", + new: "New", + open: "Open", + save: "Save", + abort: "Abort", + publish: "Publish", + download: "Download", + export: "Export", + import: "Import", + clear: "Clear", + close: "Close", + collection: "Collection", + confirm: "Confirm", + cancel: "Cancel", + cutBoard: "CutBoard", + textEdit: "TextEdit", + tools: "Tools", + sortAndAlign: "Sort", + scale: "Scale", + style: "Style", + fill: "Fill", + border: "Border", + line: "Line", + layout: "Layout", + text: "Text", + code: "Code", + name: "Name", + desc: "Description", + format: "Format", + data: "Data", + database: "DataBase", + setting: "Setting", + cut: "Cut", + copy: "Copy", + delete: "Delete", + paste: "Paste", + more: "More", + page: "Page", + shapesCount: "Shapes:", + shapes: "Shapes:", + layerName: "Layer", + newLayer: "New", + background: "Back Ground", + backgroundColor: "BGColor", + position: "Position", + align: "Align", + combina: "Combina", + cancelCombina: "Spread", + sort: "Sort", + flip: "Flap", + rotate: "Rotate", + mirror: "Mirror", + choose: "Choose", + moveStage: "Move", + linkLine: "Line", + search: "Search", + replace: "Replace", + fileDescription: "DDei Design File", + wholePage: "Whole Page", + precent: "Pre", + chooseShapeGroups: "Choose Shapes", + basicSubject: "Basic", + umlSubject: "UML", + brush: "Brush", + startPoint: "Start", + endPoint: "End", + lineType: "Type", + lineColor: "Color", + lineWeight: "Weight", + lineDash: "Dash", + pushUp: "Up", + pushDown: "Down", + pushTop: "Top", + pushBottom: "Bottom", + assistant: "Assistant", + mark: "Mark", + paper: "Paper", + propertyName: "Property", + searchResult: "Search Result", + property: { + id: "id", + code: "Code", + text: "Text", + format: "Format", + width: "Width", + height: "Height", + weight: "Weight", + borderType: "Border Type", + fillType: "Fill Type", + startPointType: "Start", + endPointType: "End", + type: "Type", + color: "Color", + opacity: "Opacity", + dash: "Dash", + round: "Round", + image: "Image", + font: "Font", + size: "Size", + align: "Align", + feed: "Wrap", + outSize: "Out of Range", + lockWidth: "Lock Width", + paddingWeight: "Padding", + hollow: "Hollow", + bold: "Bold", + italic: "Italic", + underline: "Underline", + deleteline: "Strike Through", + topline: "Top Line", + textbg: "Text Background", + subtype: "Annotation Type", + textAlign: "Text Align", + textValign: "Vertical Align", + hspace: "Horizontal Space", + vspace: "Vertical Space", + dateType: "Date Type", + nscale: "Decimal", + tmark: "Thousands Separator", + mmark: "Currency Symbol", + moneyUnit: "Currency Unit", + moneyUpCase: "Currency in Uppercase", + paperType: "Paper", + unit: "Unit", + direct: "Direction", + markType: "Watermark", + mark: "Watermark", + markDirect: "Direction", + ruler: "Ruler", + grid: "Grid", + jumpline: "JumpLine", + background: "Back Ground", + backgroundColor: "BG Color", + backgroundImage: "BG Image", + bgImageMode: "Mode", + bgImageScale: "Scale", + bgImagePosition: "Position", + code001: "code001", + linePointType: "Point Type", + ds: { + none: "None", + color: "Color", + image: "Image", + yes: "Yes", + no: "No", + global: "Global", + hidden: "Hidden", + ellipsis: "Ellipsis", + narrow: "Narrow", + ext: "Extend", + subType: "Normal", + subType1: "Superscript", + subType2: "Subscript", + subType3: "Strike", + text: "Text", + decimal: "Decimal", + money: "Currency", + time: "Time", + custom: "Custom", + money1: "CNY", + money2: "USD", + money3: "EUR", + money4: "GBP", + money5: "JPY", + money6: "RUB", + money7: "CHF", + line: "Solid Line", + point: "Dotted", + pos1: "TLeft", + pos2: "TCenter", + pos3: "TRight", + pos4: "MLeft", + pos5: "Center", + pos6: "MRight", + pos7: "BLeft", + pos8: "BCenter", + pos9: "BRight", + mm: "mm", + cm: "cm", + m: "m", + inch: "in", + px: "px", + transverse: "Landscape", + portrait: "Portrait", + ltrd: "Left-Right", + rtld: "Right-Left", + horizontal: "Horizontal", + fill: "Fill", + scale: "Scale", + original: "Original", + lineType1: "Straight", + lineType2: "Broken", + lineType3: "Curve", + pointType1: "Arrow", + pointType2: "Circle", + pointType21: "FillCir", + pointType3: "Rect", + pointType31: "FillRect", + pointType4: "Diamond", + pointType41: "FillDiam", + pointType5: "Triangle", + pointType51: "FillTria", + pointType6: "HalfCir", + pointType61: "FillHalfCir" + }, + description: {} + }, + control: { + groups: { + basic: "Basic Shapes", + flow: "Flow Shapes" + }, + controltran: "CtrlTran", + pageref: "PageRef", + display: "Display", + delay: "Delay", + prepare: "Prepare", + card: "Card", + manualoperate: "Manual", + manualinput: "ManualIn", + looparea: "LoopArea", + "store-data": "StoreData", + "seq-data": "SeqData", + "direct-data": "DictData", + "defined-flow": "DefFlow", + "small-bracket": "Parenthes", + "middle-bracket": "Square", + "big-bracket": "Curly", + comment: "Comment", + document: "Document", + polygon: "Polygon", + stage: "Stage", + text: "Text", + square: "Square", + rectangle: "Rectangle", + circle: "Circle", + squareRound: "Square", + rectangleRound: "Rectangle", + ellipse: "Ellipse", + cube: "Cube", + line: "Line", + triangle: "Triangle", + hexstar: "Hexstar", + "triangle-left-90": "Triangle", + "triangle-right-90": "Triangle", + fivestar: "Fivestar", + diamond: "Diamond", + paralgram: "Paralgram", + "triangle-left-90-round": "Triangle", + hexagon: "Hexagon", + "half-circle": "HalfCir", + "rectangle-split": "SplitRect", + "circle-split": "SplitCir", + trapezoid: "Trapezoid", + "arrow-left": "ArrowLeft", + "arrow-right": "ArrowRight", + pentagon: "Pentagon", + angle: "Angle", + bidfunnel: "BidFunnel", + ptap: "PaperTape", + human: "Human", + start: "Start", + end: "End", + task: "Task", + "start-or-end": "StartEnd", + switch: "Switch", + subflow: "SubFlow", + description: {} + }, + selectColor: { + "standard": "Standard", + "recently": "Recent", + "choosed": "Selected" + } + } + }; + const __vite_glob_0_0$6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: en_US$1 + }, Symbol.toStringTag, { value: "Module" })); + const zh_CN$1 = { + ddei: { + file: "文件", + new: "新建", + open: "打开", + save: "保存", + abort: "放弃", + publish: "发布", + download: "下载", + export: "导出", + import: "导入", + clear: "清空", + close: "关闭", + collection: "收藏", + confirm: "确定", + cancel: "取消", + cutBoard: "剪切板", + textEdit: "文本编辑", + tools: "工具", + sortAndAlign: "排列与对齐", + sort: "排列", + scale: "缩放", + style: "样式", + fill: "填充", + border: "边框", + line: "线条", + layout: "布局", + text: "文本", + code: "编码", + name: "名称", + desc: "备注", + format: "格式", + data: "数据", + database: "数据库", + setting: "设置", + cut: "剪切", + copy: "复制", + delete: "删除", + paste: "粘贴", + more: "更多", + page: "页面", + shapesCount: "形状数:", + shapes: "形状", + layerName: "图层", + newLayer: "新建图层", + background: "背景", + backgroundColor: "背景颜色", + position: "位置", + align: "对齐", + combina: "组合", + cancelCombina: "取消组合", + flip: "翻转", + rotate: "旋转", + mirror: "镜像", + choose: "选择", + moveStage: "移动画布", + linkLine: "连接线", + search: "搜索", + replace: "替换", + fileDescription: "DDei设计文件", + wholePage: "整页", + precent: "百分比", + chooseShapeGroups: "选择图形", + basicSubject: "基本", + umlSubject: "UML", + brush: "格式刷", + startPoint: "起点", + endPoint: "终点", + lineType: "类型", + lineColor: "颜色", + lineWeight: "粗细", + lineDash: "虚线", + pushUp: "上移一层", + pushDown: "下移一层", + pushTop: "置于顶层", + pushBottom: "置于底层", + assistant: "辅助功能", + mark: "水印", + paper: "纸张", + propertyName: "属性", + searchResult: "搜索结果", + property: { + id: "id", + code: "编码", + text: "文本", + format: "格式化", + width: "宽度", + weight: "大小", + height: "高度", + borderType: "边框类型", + fillType: "填充类型", + startPointType: "起点", + endPointType: "终点", + type: "类型", + color: "颜色", + opacity: "透明度", + dash: "虚线", + round: "圆角", + image: "图片", + font: "字体", + size: "大小", + align: "对齐", + feed: "换行", + outSize: "超出范围", + lockWidth: "锁定宽度", + paddingWeight: "间隔大小", + hollow: "镂空", + bold: "加粗", + italic: "倾斜", + underline: "下划线", + deleteline: "删除线", + topline: "顶部线", + textbg: "文字背景", + subtype: "标注类型", + textAlign: "水平对齐", + textValign: "垂直对齐", + hspace: "水平间距", + vspace: "垂直间距", + dateType: "日期类型", + nscale: "小数", + tmark: "千分符", + mmark: "货币符号", + moneyUnit: "货币单位", + moneyUpCase: "人民币大写", + paperType: "纸张类型", + unit: "单位", + direct: "方向", + markType: "水印类型", + mark: "水印", + markDirect: "水印方向", + ruler: "标尺", + grid: "网格", + jumpline: "自动跳线", + background: "背景", + backgroundColor: "背景颜色", + backgroundImage: "背景图片", + bgImageMode: "图片模式", + bgImageScale: "缩放", + bgImagePosition: "位置", + code001: "编码001", + linePointType: "端点类型", + ds: { + none: "无", + color: "纯色", + image: "图片", + yes: "是", + no: "否", + global: "全局", + hidden: "隐藏", + ellipsis: "省略", + narrow: "缩小", + ext: "扩展", + subType: "正常", + subType1: "上标", + subType2: "中标", + subType3: "下标", + text: "文本", + decimal: "数字", + money: "金额", + time: "时间", + custom: "自定义", + money1: "人民币", + money2: "美元", + money3: "欧元", + money4: "英镑", + money5: "日元", + money6: "卢布", + money7: "法郎", + line: "实线", + point: "点阵", + pos1: "左上", + pos2: "中上", + pos3: "右上", + pos4: "左中", + pos5: "正中", + pos6: "右中", + pos7: "左下", + pos8: "中下", + pos9: "右下", + mm: "毫米", + cm: "厘米", + m: "米", + inch: "英寸", + px: "像素", + transverse: "横向", + portrait: "纵向", + ltrd: "左上右下", + rtld: "右上左下", + horizontal: "水平显示", + fill: "填充", + scale: "缩放", + original: "原始", + lineType1: "直线", + lineType2: "折线", + lineType3: "曲线", + pointType1: "箭头", + pointType2: "圆", + pointType21: "实心圆", + pointType3: "方形", + pointType31: "实心方形", + pointType4: "菱形", + pointType41: "实心菱形", + pointType5: "三角", + pointType51: "实心三角", + pointType6: "半圆", + pointType61: "实心半圆" + }, + description: {} + }, + control: { + groups: { + basic: "基础图形", + flow: "流程图形" + }, + controltran: "控制传递", + pageref: "跨页引用", + display: "显示内容", + delay: "推迟", + prepare: "准备", + card: "卡片", + manualoperate: "手动操作", + manualinput: "手动输入", + looparea: "循环界限", + "store-data": "存储数据", + "seq-data": "顺序数据", + "direct-data": "直接数据", + "defined-flow": "预定义流程", + "small-bracket": "小括号", + "middle-bracket": "中括号", + "big-bracket": "大括号", + comment: "注释", + document: "文档", + polygon: "多边形", + stage: "画布", + text: "文本", + square: "正方形", + rectangle: "长方形", + circle: "圆", + ellipse: "椭圆", + cube: "正方体", + line: "连接线", + triangle: "三角形", + hexstar: "六角形", + "triangle-left-90": "直角三角形", + "triangle-right-90": "直角三角形", + fivestar: "五角星", + diamond: "菱形", + paralgram: "平行四边形", + hexagon: "六边形", + "half-circle": "半圆", + "rectangle-split": "长方形-切割", + "circle-split": "圆-切割", + trapezoid: "梯形", + "arrow-left": "左箭头", + "arrow-right": "右箭头", + pentagon: "五边形", + angle: "角", + bidfunnel: "双向漏斗", + ptap: "纸带", + human: "人", + start: "开始", + end: "结束", + task: "任务", + "start-or-end": "开始/结束", + switch: "分支", + subflow: "子流程", + description: {} + }, + selectColor: { + "standard": "标准颜色", + "recently": "最近使用", + "choosed": "已选颜色" + }, + "confirm-save-file": "是否保存文件?" + } + }; + const __vite_glob_0_1$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: zh_CN$1 + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$1f = { + name: "ddei-core-panel-topmenu", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + file: null, + forceRefresh: true + }; + }, + //注册组件 + components: {}, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "topmenu" || parts.indexOf("topmenu") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + refreshData() { + var _a3, _b2; + this.editor.topMenuViewer = this; + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + this.file = file; + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + if (this.editor.state != DDeiEditorState.TOP_MENU_OPERATING && this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.TOP_MENU_OPERATING); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const TopMenu_vue_vue_type_style_index_0_scoped_fefbc1f9_lang = ""; + const _hoisted_1$1d = { class: "ddei-core-panel-topmenu-quickbox" }; + function _sfc_render$1f(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "ddei-core-panel-topmenu", + onMousedown: _cache[0] || (_cache[0] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)) + }, [ + vue.createElementVNode("div", _hoisted_1$1d, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a3 = $props.editor) == null ? void 0 : _a3.getPartPanels($props.options, "panels"), (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + options: item.options, + ref_for: true + }, item.options), null, 16, ["editor", "controlDefine", "options"]); + }), 256)) + ]) + ], 32)) : vue.createCommentVNode("", true); + } + const TopMenu = /* @__PURE__ */ _export_sfc(_sfc_main$1f, [["render", _sfc_render$1f], ["__scopeId", "data-v-fefbc1f9"]]); + const _DDeiCoreTopMenuPanel = class _DDeiCoreTopMenuPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", TopMenu.name); + __publicField3(this, "defaultOptions", { + "panels": [ + "ddei-core-panel-fileinfo", + "ddei-core-panel-operate", + "ddei-core-panel-fontandtext", + "ddei-core-panel-tool", + "ddei-core-panel-sort" + ] + }); + __publicField3(this, "plugins", [TopMenu]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[TopMenu.name]) { + for (let i2 in options[TopMenu.name]) { + newOptions[i2] = options[TopMenu.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreTopMenuPanel(newOptions); + return panels; + } + } + return _DDeiCoreTopMenuPanel; + } + static modify(fn) { + return _DDeiCoreTopMenuPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTopMenuPanel, "defaultIns", new _DDeiCoreTopMenuPanel()); + let DDeiCoreTopMenuPanel = _DDeiCoreTopMenuPanel; + const _sfc_main$1e = { + name: "ddei-core-panel-toolbox", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + //是否允许自定义控件工具箱 + custom: { + type: Boolean, + default: true + }, + //是否允许搜索控件 + search: { + type: Boolean, + default: true + }, + //定义分组 + customGroups: { + type: Array, + default: null + }, + //是否允许展开收折 + expand: { + type: Boolean, + default: true + } + }, + data() { + return { + //分组数据 + groups: [], + //用于搜索时保存原始的groups + searchOriginGroups: null, + //搜索控件时用的文本 + searchText: "", + forceRefresh: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "toolbox" || parts.indexOf("toolbox") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + refreshData() { + var _a3; + this.editor.needControlIcon = true; + this.editor.toolBarViewer = this; + if (this.editor.ddInstance && !this.editor.ddInstance.render) { + this.editor.ddInstance.initRender(); + } + DDeiEditorUtil.readRecentlyToolGroups(); + let hisGroups = DDeiEditorUtil.recentlyToolGroups; + if ((hisGroups == null ? void 0 : hisGroups.length) > 0) { + let groups = []; + hisGroups.forEach((hg) => { + let group2 = null; + for (let i2 = 0; i2 < this.editor.groups.length; i2++) { + if (this.editor.groups[i2].id == hg.id) { + group2 = this.editor.groups[i2]; + break; + } + } + if (group2) { + group2.expand = hg.expand; + groups.push(group2); + } + }); + this.groups = groups; + } else { + this.groups = clone(this.editor.groups); + DDeiEditorUtil.whiteRecentlyToolGroups(this.groups); + } + if (this.customGroups) { + let newGroups = []; + (_a3 = this.customGroups) == null ? void 0 : _a3.forEach((cg) => { + for (let i2 = 0; i2 < this.groups.length; i2++) { + if (this.groups[i2].id == cg) { + newGroups.push(this.groups[i2]); + break; + } + } + }); + this.groups = newGroups; + } + this.searchOriginGroups = this.groups; + }, + mouseWheel(evt) { + if (evt.currentTarget.clientHeight < evt.currentTarget.scrollHeight) { + evt.cancelBubble = true; + return false; + } + }, + cancelCreateControl(e) { + if (this.editor.state == DDeiEditorState.CONTROL_CREATING) { + if (this.editor.creatingControls) { + let ddInstance = this.editor.ddInstance; + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + layer2.removeModels(this.editor.creatingControls, true, false); + this.editor.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, e); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.changeState(DDeiEditorState.TOOLBOX_ACTIVE); + this.editor.bus.executeAll(); + e.preventDefault(); + e.cancelBubble = true; + } + }, + /** + * 弹出选择控件Dialog + */ + showChooseDialog(evt) { + let srcElement = evt.currentTarget; + let selectGroups = []; + this.groups.forEach((group2) => { + if (group2.display) { + selectGroups.push(group2.id); + } + }); + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-choosecontrolgroup", { + selectGroups, + callback: { + select: this.groupBoxChoose + }, + group: "toolbox-dialog" + }, { type: 4 }, srcElement); + }, + /** + * 隐藏工具栏 + */ + hiddenToolBox() { + window.leftWidth = this.editor.leftWidth; + this.editor.leftWidth = 0; + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + /** + * 展开或收折groupbox + */ + groupBoxExpand(group2) { + if (group2) { + group2.expand = !group2.expand; + DDeiEditorUtil.whiteRecentlyToolGroups(this.groups); + } + }, + /** + * 关闭groupbox + */ + groupBoxClose(group2) { + if (group2) { + group2.display = false; + if (this.groups.indexOf(group2) != -1) { + this.groups.splice(this.groups.indexOf(group2), 1); + } + DDeiEditorUtil.whiteRecentlyToolGroups(this.groups); + } + }, + /** + * 关闭groupbox + */ + groupBoxOpen(group2) { + if (group2) { + group2.display = true; + if (this.groups.indexOf(group2) == -1) { + this.groups.push(group2); + } + DDeiEditorUtil.whiteRecentlyToolGroups(this.groups); + } + }, + /** + * 选择groupBox + */ + groupBoxChoose(groupid, choose) { + let group2 = null; + for (let i2 = 0; i2 < this.editor.groups.length; i2++) { + if (this.editor.groups[i2].id == groupid) { + group2 = this.editor.groups[i2]; + break; + } + } + if (choose) { + this.groupBoxOpen(group2); + } else { + this.groupBoxClose(group2); + } + }, + /** + * 搜索按钮按下时,检测是否按下enter,按下后执行搜索 + * @param evt + */ + searchInputEnter(evt) { + if (evt.keyCode == 13) { + this.searchControl(); + } + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + this.editor.changeState(DDeiEditorState.TOOLBOX_ACTIVE); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + }, + /** + * 准备创建 + */ + createControlPrepare(control, e) { + var _a3, _b2, _c2, _d2, _e2; + let ddInstance = this.editor.ddInstance; + ddInstance.render.inEdge = 0; + let stage2 = ddInstance.stage; + let layer2 = stage2.layers[stage2.layerIndex]; + if (layer2.display == 0 && !layer2.tempDisplay || layer2.lock) { + return; + } + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(this.editor.ddInstance, null, [control]); + if (!controlInitJSON) { + return; + } + let models = DDeiEditorUtil.createControl(controlInitJSON[0], this.editor); + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", DDeiEnumOperateType.CREATE, { models }, ddInstance, e); + if (rsState == 0 || rsState == 1) { + DDeiUtil.invokeCallbackFunc("EVENT_MOUSE_OPERATING", DDeiEnumOperateType.CREATE, null, ddInstance, e); + let stageRatio2 = stage2.getStageRatio(); + let moveMatrix2 = new Matrix3( + 1, + 0, + -stage2.wpv.x * stageRatio2, + 0, + 1, + -stage2.wpv.y * stageRatio2, + 0, + 0, + 1 + ); + models.forEach((model) => { + model.transVectors(moveMatrix2); + model.setState(DDeiEnumControlState.CREATING); + }); + if ((models == null ? void 0 : models.length) > 0) { + let ddInstance2 = this.editor.ddInstance; + let stage22 = ddInstance2.stage; + if (((_a3 = stage22 == null ? void 0 : stage22.render) == null ? void 0 : _a3.operateState) == DDeiEnumOperateState.QUICK_EDITING && ((_b2 = stage22 == null ? void 0 : stage22.render) == null ? void 0 : _b2.editorShadowControl)) { + (_c2 = DDeiUtil.getEditorText()) == null ? void 0 : _c2.enterValue(); + } + this.editor.changeState(DDeiEditorState.CONTROL_CREATING); + this.editor.creatingControls = models; + (_d2 = this.editor.bus) == null ? void 0 : _d2.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + (_e2 = this.editor.bus) == null ? void 0 : _e2.executeAll(); + } + e.preventDefault(); + e.cancelBubble = true; + } + }, + /** + * 搜索控件 + */ + searchControl() { + let text2 = trim(this.searchText); + if (text2 == "") { + this.groups = this.searchOriginGroups; + } else { + let searchControls = []; + let gp = {}; + gp.name = this.editor.i18n("ddei.searchResult"); + this.searchOriginGroups.forEach((group2) => { + if (group2.controls) { + group2.controls.forEach((control) => { + if (control.code.indexOf(text2) != -1 || this.editor.i18n(control.name).indexOf(text2) != -1) { + searchControls.push(control); + } + }); + } + }); + gp.controls = cloneDeep(searchControls); + gp.display = true; + gp.expand = true; + gp.cannotClose = true; + this.groups = [gp]; + } + } + } + }; + const Toolbox_vue_vue_type_style_index_0_scoped_ea668126_lang = ""; + const _hoisted_1$1c = { class: "ddei-core-panel-toolbox-header" }; + const _hoisted_2$U = { + key: 0, + class: "icon icon1", + "aria-hidden": "true" + }; + const _hoisted_3$Q = { + key: 1, + class: "header-3" + }; + const _hoisted_4$F = { class: "header-4" }; + const _hoisted_5$x = { + key: 0, + class: "ddei-core-panel-toolbox-searchbox" + }; + const _hoisted_6$r = { class: "ddei-core-panel-toolbox-searchbox-group" }; + const _hoisted_7$o = ["title"]; + const _hoisted_8$k = ["placeholder"]; + const _hoisted_9$i = { class: "ddei-core-panel-toolbox-groups-group" }; + const _hoisted_10$c = ["onClick"]; + const _hoisted_11$c = { class: "title" }; + const _hoisted_12$9 = ["onClick", "title"]; + const _hoisted_13$8 = { + key: 0, + class: "ddei-core-panel-toolbox-groups-group-itempanel" + }; + const _hoisted_14$7 = ["title", "onMousedown"]; + const _hoisted_15$6 = ["src"]; + const _hoisted_16$4 = ["innerHTML"]; + const _hoisted_17$3 = { class: "text" }; + function _sfc_render$1e(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + onMousedown: _cache[6] || (_cache[6] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)), + onMouseup: _cache[7] || (_cache[7] = ($event) => $options.cancelCreateControl($event)), + ref: "toolbox", + class: "ddei-core-panel-toolbox" + }, [ + vue.createElementVNode("div", _hoisted_1$1c, [ + _cache[12] || (_cache[12] = vue.createElementVNode("div", { class: "header-1" }, null, -1)), + $props.custom ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$U, _cache[8] || (_cache[8] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-control-icon" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.custom ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$Q)) : vue.createCommentVNode("", true), + $props.custom ? (vue.openBlock(), vue.createElementBlock("div", { + key: 2, + class: "ddei-core-panel-toolbox-header-morecontrol", + onClick: _cache[0] || (_cache[0] = ($event) => $options.showChooseDialog($event)) + }, [ + vue.createElementVNode("div", _hoisted_4$F, vue.toDisplayString($props.editor.i18n("ddei.more")), 1), + _cache[9] || (_cache[9] = vue.createElementVNode("div", { class: "header-3" }, null, -1)), + _cache[10] || (_cache[10] = vue.createElementVNode("svg", { + class: "icon icon2", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ])) : vue.createCommentVNode("", true), + _cache[13] || (_cache[13] = vue.createElementVNode("div", { style: { "flex": "1" } }, null, -1)), + $props.expand ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 3, + class: "icon header-7", + "aria-hidden": "true", + onClick: _cache[1] || (_cache[1] = (...args) => $options.hiddenToolBox && $options.hiddenToolBox(...args)) + }, _cache[11] || (_cache[11] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-expand3" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]), + $props.search ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$x, [ + vue.createElementVNode("div", _hoisted_6$r, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + "aria-hidden": "true", + onClick: _cache[2] || (_cache[2] = (...args) => $options.searchControl && $options.searchControl(...args)), + title: $props.editor.i18n("ddei.search") + }, _cache[14] || (_cache[14] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-search" }, null, -1) + ]), 8, _hoisted_7$o)), + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.searchText = $event), + class: "input", + onKeypress: _cache[4] || (_cache[4] = (...args) => $options.searchInputEnter && $options.searchInputEnter(...args)), + placeholder: $props.editor.i18n("ddei.search"), + autocomplete: "off", + name: "ddei_toolbox_search_input" + }, null, 40, _hoisted_8$k), [ + [vue.vModelText, $data.searchText] + ]) + ]) + ])) : vue.createCommentVNode("", true), + vue.createElementVNode("div", { + class: "ddei-core-panel-toolbox-groups", + onMousewheel: _cache[5] || (_cache[5] = ($event) => $options.mouseWheel($event)), + style: vue.normalizeStyle({ height: "calc(100vh - " + (((_a3 = $props.editor) == null ? void 0 : _a3.topHeight) + ((_b2 = $props.editor) == null ? void 0 : _b2.bottomHeight) + 90) + "px" }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.groups, (group2) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_9$i, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-core-panel-toolbox-groups-group-box": true, "ddei-core-panel-toolbox-groups-group--expanded": group2.expand }), + onClick: ($event) => $options.groupBoxExpand(group2) + }, [ + vue.createElementVNode("span", _hoisted_11$c, vue.toDisplayString($props.editor.i18n(group2.name)), 1), + $props.custom && !group2.cannotClose ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + class: "icon close", + "aria-hidden": "true", + onClick: ($event) => $options.groupBoxClose(group2), + title: $props.editor.i18n("ddei.close") + }, _cache[15] || (_cache[15] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }, null, -1) + ]), 8, _hoisted_12$9)) : vue.createCommentVNode("", true) + ], 10, _hoisted_10$c), + group2.expand == true ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13$8, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(group2.controls, (control) => { + var _a4; + return vue.openBlock(), vue.createElementBlock("div", { + class: "ddei-core-panel-toolbox-groups-group-itempanel-item", + title: control.desc, + onMousedown: ($event) => $options.createControlPrepare(control, $event) + }, [ + !control.icon ? (vue.openBlock(), vue.createElementBlock("img", { + key: 0, + class: "icon", + src: (_a4 = $props.editor) == null ? void 0 : _a4.icons[control.id] + }, null, 8, _hoisted_15$6)) : vue.createCommentVNode("", true), + control.icon ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + innerHTML: control.icon + }, null, 8, _hoisted_16$4)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_17$3, vue.toDisplayString($props.editor.i18n(control.name)), 1) + ], 40, _hoisted_14$7); + }), 256)) + ])) : vue.createCommentVNode("", true) + ], 512)), [ + [vue.vShow, group2.display == true] + ]); + }), 256)) + ], 36) + ], 544)) : vue.createCommentVNode("", true); + } + const Toolbox = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["render", _sfc_render$1e], ["__scopeId", "data-v-ea668126"]]); + const _DDeiCoreToolboxPanel = class _DDeiCoreToolboxPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Toolbox.name); + __publicField3(this, "plugins", [Toolbox]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Toolbox.name]) { + for (let i2 in options[Toolbox.name]) { + newOptions[i2] = options[Toolbox.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreToolboxPanel(newOptions); + return panels; + } + } + return _DDeiCoreToolboxPanel; + } + static modify(fn) { + return _DDeiCoreToolboxPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreToolboxPanel, "defaultIns", new _DDeiCoreToolboxPanel()); + let DDeiCoreToolboxPanel = _DDeiCoreToolboxPanel; + const _DDeiCoreToolboxPanels = class _DDeiCoreToolboxPanels extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiCoreToolboxPanel]); + } + getPanels(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPanels(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPanels(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCoreToolboxPanels(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCoreToolboxPanels; + } + static modify(fn) { + return _DDeiCoreToolboxPanels.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreToolboxPanels, "defaultIns", new _DDeiCoreToolboxPanels(null)); + let DDeiCoreToolboxPanels = _DDeiCoreToolboxPanels; + const _sfc_main$1d = { + name: "ddei-core-panel-quickcolorview", + extends: null, + mixins: [], + props: { + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + colors: [], + //当前编辑的模式,1填充,2边框,3字体 + mode: 1, + dataSource: [ + { value: 1, text: "填充", img: "#icon-fill" }, + { value: 2, text: "边框", img: "#icon-border-pencil" }, + { value: 3, text: "字体", img: "#icon-font" } + ] + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.colors = [ + "#FFB6C1", + "#FFC0CB", + "#DC143C", + "#FF0F55", + "#DB7093", + "#FF69B4", + "#FF1493", + "#C71585", + "#DA70D6", + "#D8BFD8", + "#DDA0DD", + "#EE82EE", + "#FF00FF", + "#FF00FF", + "#8B008B", + "#800080", + "#BA55D3", + "#9400D3", + "#9932CC", + "#4B0082", + "#8A2BE2", + "#9370DB", + "#7B68EE", + "#6A5ACD", + "#483D8B", + "#E6E6FA", + "#F8F8FF", + "#0000FF", + "#0000FF", + "#0000CD", + "#191970", + "#00008B", + "#000080", + "#4169E1", + "#6495ED", + "#B0C4DE", + "#778899", + "#708090", + "#1E90FF", + "#F0F8FF", + "#4682B4", + "#87CEFA", + "#87CEEB", + "#00BFFF", + "#ADD8E6", + "#B0E0E6", + "#5F9EA0", + "#F0FFFF", + "#E1FFFF", + "#AFEEEE", + "#00FFFF", + "#00FFFF", + "#00CED1", + "#2F4F4F", + "#008B8B", + "#008080", + "#48D1CC", + "#20B2AA", + "#40E0D0", + "#7FFFAA", + "#00FA9A", + "#00FF7F", + "#F5FFFA", + "#3CB371", + "#2E8B57", + "#F0FFF0", + "#90EE90", + "#98FB98", + "#8FBC8F", + "#32CD32", + "#00FF00", + "#228B22", + "#008000", + "#006400", + "#7FFF00", + "#7CFC00", + "#ADFF2F", + "#556B2F", + "#F5F5DC", + "#FAFAD2", + "#FFFFF0", + "#FFFFE0", + "#FFFF00", + "#808000", + "#BDB76B", + "#FFFACD", + "#EEE8AA", + "#F0E68C", + "#FFD700", + "#FFF8DC" + ]; + }, + methods: { + changeMode(m) { + this.mode = m.value; + }, + //打开弹出框 + showDialog(evt) { + let dataSource = []; + this.dataSource.forEach((ds) => { + if (ds.value != this.mode) { + dataSource.push(ds); + } + }); + let el = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog( + this.editor, + "ddei-core-dialog-qcview", + { + dataSource, + callback: { + ok: this.changeMode + } + }, + { type: 2 }, + el + ); + }, + /** + * 改变模型颜色 + */ + changeModelColor(color, evt) { + let stage2 = this.editor.ddInstance.stage; + if (stage2 && color) { + let selectedModels = stage2.selectedModels; + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + let mds = Array.from(selectedModels.values()); + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds }, this.editor.ddInstance); + if (rsState != -1) { + switch (this.mode) { + case 1: + selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths: ["fill.color"], value: color }, + evt, + true + ); + }); + break; + case 2: + selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths: [ + "border.color", + "border.top.color", + "border.bottom.color", + "border.left.color", + "border.right.color" + ], + value: color + }, + evt, + true + ); + }); + break; + case 3: + selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths: ["font.color"], value: color }, + evt, + true + ); + }); + break; + } + this.editor.bus.push( + DDeiEnumBusCommandType.StageChangeSelectModels, + null, + evt + ); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + this.editor.bus.executeAll(); + } + } + } + } + } + }; + const QuickColorView_vue_vue_type_style_index_0_scoped_f305cac8_lang = ""; + const _hoisted_1$1b = { class: "ddei-editor-qcview" }; + const _hoisted_2$T = ["title"]; + const _hoisted_3$P = { + class: "icon", + "aria-hidden": "true" + }; + const _hoisted_4$E = ["xlink:href"]; + const _hoisted_5$w = ["onClick"]; + function _sfc_render$1d(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1b, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: "ddei-editor-qcview-type", + onClick: _cache[0] || (_cache[0] = ($event) => $options.showDialog($event)), + title: item.text + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_3$P, [ + vue.createElementVNode("use", { + "xlink:href": item.img + }, null, 8, _hoisted_4$E) + ])), + _cache[1] || (_cache[1] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ], 8, _hoisted_2$T)), [ + [vue.vShow, item.value == $data.mode] + ]); + }), 256)), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.colors, (color) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-qcview-color": true }), + style: vue.normalizeStyle({ "background-color": "" + color }), + onClick: ($event) => { + var _a3, _b2, _c2, _d2; + return ((_d2 = (_c2 = (_b2 = (_a3 = $props.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0 && $options.changeModelColor(color, $event); + } + }, null, 12, _hoisted_5$w); + }), 256)) + ]); + } + const QuickColorView = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$1d], ["__scopeId", "data-v-f305cac8"]]); + const _DDeiCoreQuickColorViewPanel = class _DDeiCoreQuickColorViewPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QuickColorView.name); + __publicField3(this, "plugins", [QuickColorView]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QuickColorView.name]) { + for (let i2 in options[QuickColorView.name]) { + newOptions[i2] = options[QuickColorView.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreQuickColorViewPanel(newOptions); + return panels; + } + } + return _DDeiCoreQuickColorViewPanel; + } + static modify(fn) { + return _DDeiCoreQuickColorViewPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreQuickColorViewPanel, "defaultIns", new _DDeiCoreQuickColorViewPanel(null)); + let DDeiCoreQuickColorViewPanel = _DDeiCoreQuickColorViewPanel; + const _sfc_main$1c = { + name: "ddei-core-panel-propertyview", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + //是否允许展开收折 + expand: { + type: Boolean, + default: true + } + }, + data() { + return { + //当前被选中控件的引用 + selectedModels: null, + //属性定义的引用 + controlDefine: null, + //当前的顶级group + topGroups: null, + currentTopGroup: null, + currentSubGroup: null, + reFresh: true, + propertyDisabled: false, + propertyViewShow: true, + pvGroupWidth: 0, + rightRate: 0, + //右边部分所占的比例 + forceRefresh: true + }; + }, + computed: {}, + watch: { + currentSubGroup() { + this.forceRefreshSub(); + } + }, + components: {}, + created() { + this.$watch("editor.ddInstance.stage.selectedModels", this.refreshAttrs); + this.$watch("editor.maxWidth", function(newVal, oldVal) { + if (this.rightRate == 0) { + this.rightRate = this.editor.rightWidth / document.body.clientWidth; + } + }); + }, + mounted() { + }, + methods: { + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "property" || parts.indexOf("property") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + refreshData() { + this.editor.properyViewer = this; + this.refreshAttrs(); + }, + mouseWheel(evt) { + if (evt.currentTarget.clientHeight < evt.currentTarget.scrollHeight) { + evt.cancelBubble = true; + return false; + } + }, + forceRefreshSub() { + this.reFresh = false; + this.propertyDisabled = false; + this.$nextTick(() => { + this.propertyDisabled = this.editor.state == DDeiEditorState.QUICK_EDITING; + this.reFresh = true; + }); + }, + refreshAttrs(newVal, oldVal) { + var _a3, _b2, _c2, _d2, _e2, _f; + let firstControlDefine; + let firstModel; + if (!this.editor.currentControlDefine) { + let models = [this.editor.ddInstance.stage]; + firstModel = models[0]; + this.selectedModels = models; + firstControlDefine = cloneDeep( + this.editor.controls.get(firstModel == null ? void 0 : firstModel.modelCode) + ); + } else { + this.selectedModels = this.editor.ddInstance.stage.selectedModels; + if (((_a3 = this.selectedModels) == null ? void 0 : _a3.size) > 0) { + firstModel = Array.from(this.selectedModels.values()); + firstControlDefine = this.editor.currentControlDefine; + } + } + if (firstControlDefine) { + let topGroups = null; + if (firstControlDefine.type == "DDeiStage") { + firstControlDefine.attrDefineMap.forEach((attrDefine, attrKey) => { + attrDefine.value = DDeiUtil.getDataByPathList( + firstModel, + attrDefine.code, + attrDefine.mapping + ); + attrDefine.model = firstModel; + }); + let layerControlDefine = cloneDeep( + this.editor.controls.get("DDeiLayer") + ); + let layer2 = firstModel.layers[firstModel.layerIndex]; + layerControlDefine.attrDefineMap.forEach((attrDefine, attrKey) => { + attrDefine.value = DDeiUtil.getDataByPathList( + layer2, + attrDefine.code, + attrDefine.mapping + ); + attrDefine.model = layer2; + }); + firstControlDefine.groups.forEach((topGroup) => { + topGroup.img = topGroup.icon; + }); + layerControlDefine.groups.forEach((topGroup) => { + topGroup.img = topGroup.icon; + }); + topGroups = layerControlDefine.groups.concat(firstControlDefine.groups); + } else { + firstControlDefine.groups.forEach((topGroup) => { + topGroup.img = topGroup.icon; + }); + topGroups = firstControlDefine.groups; + } + if ((topGroups == null ? void 0 : topGroups.length) > 0) { + let upName = (_b2 = this.currentTopGroup) == null ? void 0 : _b2.name; + let currentTopGroup = null; + if (upName) { + for (let x2 = 0; x2 < firstControlDefine.groups.length; x2++) { + let topGroup = topGroups[x2]; + if (!topGroup.empty && upName == topGroup.name) { + topGroup.selected = true; + currentTopGroup = topGroup; + break; + } + } + } + if (!currentTopGroup) { + topGroups[0].selected = true; + currentTopGroup = topGroups[0]; + } + this.currentTopGroup = currentTopGroup; + this.controlDefine = firstControlDefine; + this.topGroups = topGroups; + let upSubGroupName = (_c2 = this.currentSubGroup) == null ? void 0 : _c2.name; + let currentSubGroup = null; + if (upSubGroupName) { + for (let sgi = 0; sgi < (currentTopGroup == null ? void 0 : currentTopGroup.subGroups.length); sgi++) { + if (!((_d2 = currentTopGroup == null ? void 0 : currentTopGroup.subGroups[sgi]) == null ? void 0 : _d2.empty) && upSubGroupName == ((_e2 = currentTopGroup == null ? void 0 : currentTopGroup.subGroups[sgi]) == null ? void 0 : _e2.name)) { + currentSubGroup = currentTopGroup == null ? void 0 : currentTopGroup.subGroups[sgi]; + break; + } + } + } + if (!currentSubGroup) { + for (let sgi = 0; sgi < (currentTopGroup == null ? void 0 : currentTopGroup.subGroups.length); sgi++) { + if (!((_f = currentTopGroup == null ? void 0 : currentTopGroup.subGroups[sgi]) == null ? void 0 : _f.empty)) { + currentSubGroup = currentTopGroup == null ? void 0 : currentTopGroup.subGroups[sgi]; + break; + } + } + } + this.changeSubGroup(currentSubGroup); + } else { + this.controlDefine = null; + this.topGroups = null; + if (this.currentTopGroup) { + this.currentTopGroup.subGroups = null; + } + if (this.currentSubGroup) { + this.currentSubGroup.children = null; + } + this.editor.currentControlDefine = null; + } + } + }, + getFirstChildAttrsGroup(control) { + var _a3, _b2; + if (((_a3 = control.models) == null ? void 0 : _a3.size) > 0) { + let firstControl = control.models.get(control.midList[0]); + let curDefine = this.editor.controls.get(firstControl.modelCode); + if (((_b2 = curDefine.groups) == null ? void 0 : _b2.length) > 0) { + let returnGroups = curDefine.groups; + returnGroups.forEach((group2) => { + group2 == null ? void 0 : group2.subGroups.forEach((subGroup) => { + var _a4; + (_a4 = subGroup.children) == null ? void 0 : _a4.forEach((attrDefine) => { + attrDefine.value = DDeiUtil.getDataByPathList( + firstControl, + attrDefine.code, + attrDefine.mapping + ); + attrDefine.model = firstControl; + }); + }); + }); + return returnGroups; + } else if (firstControl.baseModelType == "DDeiContainer" && firstControl.layout == "compose") { + return this.getFirstChildAttrsGroup(firstControl); + } + } + return null; + }, + /** + * 展开顶级属性,收起其他顶级层级 + */ + changeTopGroup(pData) { + var _a3, _b2, _c2, _d2; + if (this.currentTopGroup != pData) { + this.topGroups.forEach((group2) => { + if (group2 != pData) { + group2.selected = false; + } + }); + pData.selected = true; + this.currentTopGroup = pData; + let upSubGroupName = (_a3 = this.currentSubGroup) == null ? void 0 : _a3.name; + let currentSubGroup = null; + if (upSubGroupName) { + for (let sgi = 0; sgi < (pData == null ? void 0 : pData.subGroups.length); sgi++) { + if (!((_b2 = pData == null ? void 0 : pData.subGroups[sgi]) == null ? void 0 : _b2.empty) && upSubGroupName == ((_c2 = pData == null ? void 0 : pData.subGroups[sgi]) == null ? void 0 : _c2.name)) { + currentSubGroup = pData == null ? void 0 : pData.subGroups[sgi]; + break; + } + } + } + if (!currentSubGroup) { + for (let sgi = 0; sgi < (pData == null ? void 0 : pData.subGroups.length); sgi++) { + if (!((_d2 = pData == null ? void 0 : pData.subGroups[sgi]) == null ? void 0 : _d2.empty)) { + currentSubGroup = pData == null ? void 0 : pData.subGroups[sgi]; + break; + } + } + } + this.changeSubGroup(currentSubGroup); + } + }, + /** + * 展开次级属性,收起其他次级层级 + */ + changeSubGroup(pData) { + var _a3, _b2; + if (this.currentSubGroup != pData) { + this.currentTopGroup.subGroups.forEach((group2) => { + if (group2 != pData) { + group2.selected = false; + } + }); + pData.selected = true; + this.selectedModels = this.editor.ddInstance.stage.selectedModels; + let models = null; + if (((_a3 = this.selectedModels) == null ? void 0 : _a3.size) > 0) { + models = Array.from(this.selectedModels.values()); + } else { + models = [this.editor.ddInstance.stage]; + } + (_b2 = pData == null ? void 0 : pData.children) == null ? void 0 : _b2.forEach((attd) => { + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_VIEW_BEFORE", DDeiEnumOperateType.VIEW, { models, propName: attd == null ? void 0 : attd.code }, this.editor.ddInstance, null); + if (rsState == 0 || rsState == 1) { + attd.forceHidden = false; + } else { + attd.forceHidden = true; + } + }); + this.currentSubGroup = pData; + } + setTimeout(() => { + this.$forceUpdate(); + }, 100); + }, + syncAttrsToGroup(firstControlDefine, pData) { + var _a3, _b2; + let newChildren = []; + if (((_a3 = pData == null ? void 0 : pData.groups) == null ? void 0 : _a3.length) > 0) { + (_b2 = pData == null ? void 0 : pData.groups) == null ? void 0 : _b2.forEach((group2) => { + var _a4; + let newGroupChildren = []; + (_a4 = group2.children) == null ? void 0 : _a4.forEach((curAttr) => { + var _a5; + let mapObj = (_a5 = firstControlDefine == null ? void 0 : firstControlDefine.attrDefineMap) == null ? void 0 : _a5.get(curAttr.code); + if (mapObj && mapObj.visiable != false) { + mapObj.topGroup = pData; + mapObj.modelCode = firstControlDefine.type; + newGroupChildren.push(mapObj); + newChildren.push(mapObj); + } + }); + group2.children = newGroupChildren; + if (newGroupChildren.length == 0) { + group2.empty = true; + } + }); + } + pData.children = newChildren; + if (newChildren.length == 0) { + pData.empty = true; + } + }, + /** + * 隐藏or展示属性编辑器 + */ + hidOrShowPV() { + this.propertyViewShow = !this.propertyViewShow; + let pvFullWidth = document.body.clientWidth * this.rightRate; + let pvGroupViewEle = this.$refs.propertyviewGroupview; + this.pvGroupWidth = pvGroupViewEle.clientWidth; + if (this.editor.rightWidth > this.pvGroupWidth) { + let deltaX = pvFullWidth - this.pvGroupWidth; + this.editor.rightWidth = this.pvGroupWidth; + this.editor.middleWidth += deltaX; + } else { + let deltaX = pvFullWidth - this.pvGroupWidth; + this.editor.rightWidth = pvFullWidth; + this.editor.middleWidth -= deltaX; + } + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + if (this.editor.state != DDeiEditorState.PROPERTY_EDITING && this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const PropertyView_vue_vue_type_style_index_0_scoped_156d5ed6_lang = ""; + const _hoisted_1$1a = { class: "propertyview-header" }; + const _hoisted_2$S = { + key: 0, + "xlink:href": "#icon-expand4" + }; + const _hoisted_3$O = { + key: 1, + "xlink:href": "#icon-expand3" + }; + const _hoisted_4$D = { + key: 1, + class: "icon ding", + "aria-hidden": "true" + }; + const _hoisted_5$v = { class: "content" }; + const _hoisted_6$q = { class: "propertyview-subgroup" }; + const _hoisted_7$n = { class: "propertyview-subgroup-tabtitle" }; + const _hoisted_8$j = ["title", "onMouseup"]; + const _hoisted_9$h = ["title"]; + const _hoisted_10$b = { + key: 0, + class: "title" + }; + const _hoisted_11$b = { key: 0 }; + const _hoisted_12$8 = { + key: 1, + class: "editor" + }; + const _hoisted_13$7 = { + class: "propertyview-groupview", + ref: "propertyviewGroupview" + }; + const _hoisted_14$6 = { class: "propertyview-groupview-items" }; + const _hoisted_15$5 = ["onClick", "title"]; + const _hoisted_16$3 = { + class: "icon img", + "aria-hidden": "true" + }; + const _hoisted_17$2 = ["xlink:href"]; + function _sfc_render$1c(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + ref: "propertyView", + class: vue.normalizeClass({ "propertyview": true, "propertyview--disabled": $data.propertyDisabled }), + onMousedown: _cache[2] || (_cache[2] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)) + }, [ + vue.createElementVNode("div", _hoisted_1$1a, [ + $props.expand ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + "aria-hidden": "true", + class: vue.normalizeClass({ "icon": true, "header-7": $data.propertyViewShow, "header-7-expand": !$data.propertyViewShow }), + onClick: _cache[0] || (_cache[0] = (...args) => $options.hidOrShowPV && $options.hidOrShowPV(...args)) + }, [ + $data.propertyViewShow ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_2$S)) : vue.createCommentVNode("", true), + !$data.propertyViewShow ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$O)) : vue.createCommentVNode("", true) + ], 2)) : vue.createCommentVNode("", true), + _cache[4] || (_cache[4] = vue.createElementVNode("div", { style: { "flex": "1" } }, null, -1)), + $data.propertyViewShow ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_4$D, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ding" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]), + vue.createElementVNode("div", _hoisted_5$v, [ + vue.withDirectives(vue.createElementVNode("div", _hoisted_6$q, [ + vue.createElementVNode("div", _hoisted_7$n, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a3 = $data.currentTopGroup) == null ? void 0 : _a3.subGroups, (subGroup) => { + var _a4; + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass(((_a4 = $data.currentTopGroup) == null ? void 0 : _a4.subGroups.length) > 1 && subGroup.selected ? "propertyview-subgroup-tabtitle-item--selected" : "propertyview-subgroup-tabtitle-item"), + title: subGroup.name, + onMouseup: ($event) => $options.changeSubGroup(subGroup) + }, vue.toDisplayString($props.editor.i18n(subGroup.name)), 43, _hoisted_8$j)), [ + [vue.vShow, !subGroup.empty] + ]); + }), 256)) + ]), + vue.createElementVNode("div", { + class: "propertyview-subgroup-tabpanel", + onMousewheel: _cache[1] || (_cache[1] = ($event) => $options.mouseWheel($event)) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b2 = $data.currentSubGroup) == null ? void 0 : _b2.children, (attrDefine) => { + var _a4; + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "propertyview-subgroup-tabpanel-editors-column": attrDefine.display == "column", "propertyview-subgroup-tabpanel-editors-row": attrDefine.display != "column", "empty-value": attrDefine.value ? false : true }), + title: attrDefine.desc + }, [ + !attrDefine.hiddenTitle && (attrDefine == null ? void 0 : attrDefine.visiable) != false ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$b, [ + vue.createTextVNode(vue.toDisplayString($props.editor.i18n(attrDefine.name)), 1), + attrDefine.notNull ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_11$b, "*")) : vue.createCommentVNode("", true), + _cache[5] || (_cache[5] = vue.createTextVNode(": ")) + ])) : vue.createCommentVNode("", true), + attrDefine.visiable != false ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$8, [ + $data.reFresh && (attrDefine == null ? void 0 : attrDefine.visiable) != false ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_a4 = $props.editor) == null ? void 0 : _a4.getPropEditor(attrDefine.controlType)), { + key: 0, + editor: $props.editor, + controlDefine: $data.controlDefine, + attrDefine + }, null, 8, ["editor", "controlDefine", "attrDefine"])) : vue.createCommentVNode("", true) + ])) : vue.createCommentVNode("", true) + ], 10, _hoisted_9$h)), [ + [vue.vShow, (attrDefine == null ? void 0 : attrDefine.visiable) && !(attrDefine == null ? void 0 : attrDefine.forceHidden)] + ]); + }), 256)) + ], 32) + ], 512), [ + [vue.vShow, ((_c2 = $props.editor) == null ? void 0 : _c2.rightWidth) > $data.pvGroupWidth] + ]), + vue.createElementVNode("div", _hoisted_13$7, [ + vue.createElementVNode("div", _hoisted_14$6, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.topGroups, (topGroup) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass(topGroup.selected ? "propertyview-groupview-items-item--selected" : "propertyview-groupview-items-item"), + onClick: ($event) => $options.changeTopGroup(topGroup), + title: topGroup.name + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_16$3, [ + vue.createElementVNode("use", { + "xlink:href": "#" + topGroup.img + }, null, 8, _hoisted_17$2) + ])) + ], 10, _hoisted_15$5)), [ + [vue.vShow, !(topGroup == null ? void 0 : topGroup.empty)] + ]); + }), 256)) + ]) + ], 512) + ]) + ], 34)) : vue.createCommentVNode("", true); + } + const PropertyView = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$1c], ["__scopeId", "data-v-156d5ed6"]]); + const _DDeiCorePropertyViewPanel = class _DDeiCorePropertyViewPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", PropertyView.name); + __publicField3(this, "plugins", [PropertyView]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[PropertyView.name]) { + for (let i2 in options[PropertyView.name]) { + newOptions[i2] = options[PropertyView.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCorePropertyViewPanel(newOptions); + return panels; + } + } + return _DDeiCorePropertyViewPanel; + } + static modify(fn) { + return _DDeiCorePropertyViewPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePropertyViewPanel, "defaultIns", new _DDeiCorePropertyViewPanel()); + let DDeiCorePropertyViewPanel = _DDeiCorePropertyViewPanel; + const _sfc_main$1b = { + name: "ddei-core-panel-openfilesview", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + //是否允许展开收折 + expand: { + type: Boolean, + default: false + }, + create: { + type: Boolean, + default: true + }, + close: { + type: Boolean, + default: true + }, + rename: { + type: Boolean, + default: true + }, + drag: { + type: Boolean, + default: true + }, + max: { + type: Number, + default: 0 + }, + beforeCloseFile: { + type: Function, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //当前打开的页的开始下标 + openIndex: 0, + //最大可以打开的数量 + maxOpenSize: 1, + // tempFile: null, + unitFileWidth: 160, + // user: null, + forceRefresh: true + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("editor.files.length", function(newVal, oldVal) { + setTimeout(() => { + let activeIndex = -1; + for (let i2 = 0; i2 < this.editor.files.length; i2++) { + if (this.editor.files[i2].active == DDeiActiveType.ACTIVE) { + activeIndex = i2; + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["toolbox", "property"] + }); + this.editor.bus.executeAll(); + break; + } + } + this.openIndex = activeIndex + 1 - this.maxOpenSize; + if (this.openIndex < 0) { + this.openIndex = 0; + } + }, 10); + }); + }, + mounted() { + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + let { width, height } = entry.contentRect; + if (width == 0 || height == 0) { + width = this.$refs.openFilesView.clientWidth; + height = this.$refs.openFilesView.clientHeight; + } + if (width != 0 && height != 0) { + let fileEles = this.$refs.openFilesView.getElementsByClassName("ddei-core-panel-openfilesview-item"); + let fileWidth = 0; + if (fileEles.length > 0) { + fileWidth = fileEles[0].clientWidth; + } + if (!fileWidth) { + fileWidth = 160; + } + this.unitFileWidth = fileWidth; + let size = parseInt((width - 120) / fileWidth); + if (size > this.maxOpenSize && this.openIndex > 0) { + this.openIndex--; + } + this.maxOpenSize = size; + this.width = width; + } + } + }); + resizeObserver.observe(this.$refs.openFilesView); + this.refreshData(); + }, + methods: { + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "openfiles" || parts.indexOf("openfiles") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + refreshData() { + this.editor.openFilesViewer = this; + }, + /** + * 新建文件 + * @param evt + */ + newFile(evt) { + var _a3, _b2; + if ((_a3 = this.editor) == null ? void 0 : _a3.ddInstance) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_BEFORE", "ADD_FILE", null, this.editor.ddInstance, null); + if (rsState != -1) { + let ddInstance = this.editor.ddInstance; + let fileText = this.editor.i18n("ddei.file"); + let newText = this.editor.i18n("ddei.new"); + let pageText = this.editor.i18n("ddei.page"); + let file = DDeiFile.loadFromJSON( + { + name: newText + fileText + "_NEW", + path: "/" + newText + fileText + "_NEW", + sheets: [ + new DDeiSheet({ + name: pageText + "-1", + desc: pageText + "-1", + stage: DDeiStage.initByJSON({ id: "stage_1" }, { currentDdInstance: ddInstance }), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }, + { currentDdInstance: ddInstance } + ); + file.local = 1; + if (this.editor.currentFileIndex != -1) { + this.editor.files[this.editor.currentFileIndex].active = DDeiActiveType.NONE; + } + this.editor.addFile(file); + this.editor.currentFileIndex = this.editor.files.length - 1; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + ddInstance.stage.destroyRender(); + let stage2 = sheets[0].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + file.initHistroy(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.canvas.width / ddInstance.render.ratio) / 2, + y: -(stage2.height - ddInstance.render.canvas.height / ddInstance.render.ratio) / 2, + z: 0 + }; + } + stage2.initRender(); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu", "topmenu"] + }); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } + DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_AFTER", "ADD_FILE", null, this.editor.ddInstance, null); + if (this.editor.files.length == 0) { + ddInstance.disabled = true; + } else { + ddInstance.disabled = false; + } + } + } + }, + /** + * 修改文件标题 + */ + startChangeFileName(file, evt) { + let ele = evt.target; + let domPos = DDeiUtil.getDomAbsPosition(ele); + let editor = DDeiEditor.ACTIVE_INSTANCE; + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let input = document.getElementById(editor.id + "_change_file_name_input"); + if (!input) { + input = document.createElement("input"); + input.setAttribute("id", editor.id + "_change_file_name_input"); + input.style.position = "absolute"; + input.style.fontSize = "16px"; + editorEle.appendChild(input); + input.onblur = function() { + var _a3; + if (input.value) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + let file2 = editor2 == null ? void 0 : editor2.files[editor2 == null ? void 0 : editor2.currentFileIndex]; + if (input.value != file2.name) { + file2.name = input.value; + if (file2.path) { + if (file2.path.indexOf("/") != -1) { + file2.path = file2.path.substring(0, file2.path.lastIndexOf("/")) + "/" + file2.name; + } else { + file2.path = file2.name; + } + } + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["openfiles"] + }); + editor2.bus.executeAll(); + editor2.changeState(DDeiEditorState.DESIGNING); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } + }; + input.onkeydown = function(e) { + var _a3; + if (e.keyCode == 13) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + let file2 = editor2 == null ? void 0 : editor2.files[editor2 == null ? void 0 : editor2.currentFileIndex]; + if (input.value != file2.name) { + file2.name = input.value; + if (file2.path) { + if (file2.path.indexOf("/") != -1) { + file2.path = file2.path.substring(0, file2.path.lastIndexOf("/")) + "/" + file2.name; + } else { + file2.path = file2.name; + } + } + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["openfiles"] + }); + editor2.bus.executeAll(); + editor2.changeState(DDeiEditorState.DESIGNING); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } else if (e.keyCode == 27) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + editor2.changeState(DDeiEditorState.DESIGNING); + } + }; + } + input.style.width = ele.offsetWidth + "px"; + input.style.height = ele.offsetHeight - 3 + "px"; + input.style.left = domPos.left - editorDomPos.left + "px"; + input.style.top = domPos.top + 2 - editorDomPos.top + "px"; + input.style.border = "none"; + input.style.outline = "none"; + input.style.borderBottom = "1px solid #1F72FF"; + input.style.borderRadius = "1px"; + input.value = file.name; + input.style.display = "block"; + input.selectionStart = 0; + input.selectionEnd = input.value.length; + input.style.background = "var(--background)"; + input.style.color = "var(--text)"; + input.focus(); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + if (this.editor.state != DDeiEditorState.PROPERTY_EDITING && this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } + }, + /** + * file开始拖拽移动 + */ + fileDragStart(fileEle, evt) { + this.dragFileEle = evt.currentTarget; + }, + /** + * 拖拽元素移动 + */ + fileDragOver(e) { + if (this.dragFileEle) { + if (e.currentTarget.className.indexOf("ddei-core-panel-openfilesview-item") != -1) { + let parentDiv = this.dragFileEle.parentElement; + let sourceIndex = -1; + let targetIndex = -1; + let children = parentDiv.children; + for (let i2 = 1; i2 < children.length - 4; i2++) { + children[i2].style.borderLeft = ""; + children[i2].style.borderRight = ""; + if (children[i2] == this.dragFileEle) { + sourceIndex = i2; + } else if (e.currentTarget == children[i2]) { + targetIndex = i2; + } + } + if (sourceIndex != -1 && targetIndex != -1) { + this.sourceFileIndex = sourceIndex - 1; + if (targetIndex == children.length - 5) { + let pos = DDeiUtil.getDomAbsPosition(children[targetIndex]); + let halfPos = pos.left + children[targetIndex].offsetWidth / 2; + if (halfPos <= e.clientX && e.clientX <= pos.left + children[targetIndex].offsetWidth) { + this.changeFileIndex = targetIndex; + children[targetIndex].style.borderRight = "2px solid #1F72FF"; + } else { + this.changeFileIndex = targetIndex - 1; + children[targetIndex].style.borderLeft = "2px solid #1F72FF"; + } + } else { + this.changeFileIndex = targetIndex - 1; + children[targetIndex].style.borderLeft = "2px solid #1F72FF"; + } + } + e.preventDefault(); + } + } + }, + /** + * 拖拽元素放开 + */ + fileDragDrop(e) { + if ((this.sourceFileIndex || this.sourceFileIndex == 0) && (this.changeFileIndex || this.changeFileIndex == 0)) { + let files = this.editor.files; + let sourceFile = this.editor.files[this.sourceFileIndex]; + let currentFile = this.editor.files[this.editor.currentFileIndex]; + files[this.sourceFileIndex] = null; + files.splice(this.changeFileIndex, 0, sourceFile); + for (let j2 = files.length; j2 >= 0; j2--) { + if (files[j2] == null) { + files.splice(j2, 1); + } + } + for (let j2 = files.length; j2 >= 0; j2--) { + if (currentFile == files[j2]) { + this.editor.currentFileIndex = j2; + } + } + let parentDiv = this.dragFileEle.parentElement; + let children = parentDiv.children; + for (let i2 = 1; i2 < children.length - 4; i2++) { + children[i2].style.borderLeft = ""; + children[i2].style.borderRight = ""; + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["openfiles"] + }); + this.editor.bus.executeAll(); + } + this.dragFileEle = null; + this.sourceFileIndex = null; + this.changeFileIndex = null; + }, + /** + * 变更实例 + * @param instance + */ + changeFile(file) { + var _a3; + let ddInstance = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance; + if (!file) { + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } else { + if (this.editor.files.indexOf(file) != this.editor.currentFileIndex) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_CHANGE_FILE_BEFORE", "CHANGE_FILE", null, ddInstance, null); + if (rsState != -1) { + this.editor.changeFile(this.editor.files.indexOf(file)); + DDeiEditorUtil.invokeCallbackFunc("EVENT_CHANGE_FILE_AFTER", "CHANGE_FILE", null, ddInstance, null); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } + } + } + if (this.editor.files.length == 0) { + ddInstance.disabled = true; + } else { + ddInstance.disabled = false; + } + }, + // /** + // * 放弃并关闭确认弹框 + // */ + // abortAndCloseFileConfirmDialog() { + // this.tempFile.state = DDeiFileState.NONE; + // this.closeFile(this.tempFile); + // }, + // /** + // * 保存 + // * @param evt + // */ + // saveAndCloseFileConfirmDialog() { + // if (this.tempFile) { + // //获取json信息 + // let file = this.tempFile; + // if (file) { + // let json = file.toJSON(); + // if (json) { + // //执行保存 + // let storeIns = new DDeiStoreLocal(); + // json.state = DDeiFileState.NONE; + // storeIns.save(file.id, json).then((data) => { + // //回写ID + // file.id = data; + // file.state = DDeiFileState.NONE; + // this.closeFile(this.tempFile); + // }); + // } + // } + // } + // }, + /** + * 关闭文件 + * @param instance + */ + closeFile(file, evt) { + var _a3; + let canClose = true; + if (this.beforeCloseFile) { + canClose = this.beforeCloseFile(file); + } + if (canClose) { + let ddInstance = this.editor.ddInstance; + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_CLOSE_FILE_BEFORE", "CLOSE_FILE", null, ddInstance, evt); + if (rsState != -1) { + let index = this.editor.files.indexOf(file); + this.editor.removeFile(file); + if (index < this.editor.currentFileIndex) { + this.editor.currentFileIndex--; + } else if (index == this.editor.currentFileIndex) { + if (index > 0) { + this.changeFile( + this.editor.files[this.editor.currentFileIndex - 1] + ); + } else if (this.editor.files.length > 0) { + this.changeFile(this.editor.files[0]); + } + } + if (this.editor.files.length == 0) { + this.changeFile(null); + this.editor.currentFileIndex = -1; + } + if (index > this.openIndex) { + this.openIndex--; + if (this.openIndex < 0) { + this.openIndex = 0; + } + } + DDeiEditorUtil.invokeCallbackFunc("EVENT_CLOSE_FILE_AFTER", "CLOSE_FILE", null, ddInstance, evt); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu", "topmenu"] + }); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_a3 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _a3.executeAll(); + } + } + }, + /** + * 在存在显示隐藏的情况下移动tab + */ + moveItem(index = 0) { + if (index != 0) { + this.openIndex += index; + if (this.openIndex > this.editor.files.length - this.maxOpenSize) { + this.openIndex = this.editor.files.length - this.maxOpenSize; + } else if (this.openIndex < 0) { + this.openIndex = 0; + } + } + }, + /** + * 展开工具栏 + */ + expandToolBox() { + this.editor.leftWidth = window.leftWidth; + this.editor.middleWidth -= window.leftWidth; + delete window.leftWidth; + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const OpenFilesView_vue_vue_type_style_index_0_scoped_cf0859cc_lang = ""; + const _hoisted_1$19 = { + key: 0, + class: "ddei-core-panel-openfilesview-item" + }; + const _hoisted_2$R = ["onClick", "title"]; + const _hoisted_3$N = { class: "textcontent" }; + const _hoisted_4$C = ["onDblclick"]; + const _hoisted_5$u = { class: "dirty" }; + const _hoisted_6$p = ["onClick"]; + function _sfc_render$1b(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + onMousedown: _cache[6] || (_cache[6] = ($event) => $options.changeEditorFocus()), + onMouseup: _cache[7] || (_cache[7] = ($event) => $props.drag && $options.fileDragDrop($event)), + ref: "openFilesView", + class: "ddei-core-panel-openfilesview" + }, [ + vue.withDirectives(vue.createElementVNode("div", { + class: "ddei-core-panel-openfilesview-expandbox", + onClick: _cache[0] || (_cache[0] = (...args) => $options.expandToolBox && $options.expandToolBox(...args)) + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-expand4" }) + ], -1) + ]), 512), [ + [vue.vShow, ((_a3 = this.editor) == null ? void 0 : _a3.leftWidth) == 0] + ]), + !((_b2 = $props.editor) == null ? void 0 : _b2.files) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$19)) : vue.createCommentVNode("", true), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_c2 = $props.editor) == null ? void 0 : _c2.files, (item, i2) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass(item.active == 1 ? "ddei-core-panel-openfilesview-item ddei-core-panel-openfilesview-item--selected" : "ddei-core-panel-openfilesview-item"), + onClick: ($event) => $options.changeFile(item), + onMousedown: _cache[1] || (_cache[1] = ($event) => $props.drag && $options.fileDragStart(_ctx.index, $event)), + onMousemove: _cache[2] || (_cache[2] = ($event) => $props.drag && $options.fileDragOver($event)), + title: item.name + }, [ + _cache[10] || (_cache[10] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-file" }) + ], -1)), + vue.createElementVNode("span", _hoisted_3$N, [ + vue.createElementVNode("div", { + class: "text", + onDblclick: ($event) => $props.rename && $options.startChangeFileName(item, $event) + }, vue.toDisplayString(item.name), 41, _hoisted_4$C), + vue.withDirectives(vue.createElementVNode("div", _hoisted_5$u, "ꔷ", 512), [ + [vue.vShow, item.state != 0] + ]) + ]), + $props.close ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + onClick: vue.withModifiers(($event) => $options.closeFile(item, $event), ["prevent", "stop"]), + class: "icon close", + "aria-hidden": "true" + }, _cache[9] || (_cache[9] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }, null, -1) + ]), 8, _hoisted_6$p)) : vue.createCommentVNode("", true) + ], 42, _hoisted_2$R)), [ + [vue.vShow, i2 >= $data.openIndex && (i2 - $data.openIndex + 1) * $data.unitFileWidth + 120 <= _ctx.width] + ]); + }), 256)), + $props.create && (!$props.max || ((_e2 = (_d2 = $props.editor) == null ? void 0 : _d2.files) == null ? void 0 : _e2.length) < $props.max) ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 1, + class: "icon addfile", + "aria-hidden": "true", + onClick: _cache[3] || (_cache[3] = (...args) => $options.newFile && $options.newFile(...args)) + }, _cache[11] || (_cache[11] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-add" }, null, -1) + ]))) : vue.createCommentVNode("", true), + _cache[14] || (_cache[14] = vue.createElementVNode("div", { style: { "flex": "1 1 1px" } }, null, -1)), + vue.withDirectives(vue.createElementVNode("div", { + class: "ddei-core-panel-openfilesview-movebox", + onClick: _cache[4] || (_cache[4] = ($event) => $options.moveItem(-1)) + }, _cache[12] || (_cache[12] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-left" }) + ], -1) + ]), 512), [ + [vue.vShow, ((_g = (_f = $props.editor) == null ? void 0 : _f.files) == null ? void 0 : _g.length) > $data.maxOpenSize] + ]), + vue.withDirectives(vue.createElementVNode("div", { + class: "ddei-core-panel-openfilesview-movebox", + onClick: _cache[5] || (_cache[5] = ($event) => $options.moveItem(1)) + }, _cache[13] || (_cache[13] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-right" }) + ], -1) + ]), 512), [ + [vue.vShow, ((_i = (_h = $props.editor) == null ? void 0 : _h.files) == null ? void 0 : _i.length) > $data.maxOpenSize] + ]) + ], 544)) : vue.createCommentVNode("", true); + } + const OpenFilesView = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$1b], ["__scopeId", "data-v-cf0859cc"]]); + const _DDeiCoreOpenFilesViewPanel = class _DDeiCoreOpenFilesViewPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", OpenFilesView.name); + __publicField3(this, "plugins", [OpenFilesView]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[OpenFilesView.name]) { + for (let i2 in options[OpenFilesView.name]) { + newOptions[i2] = options[OpenFilesView.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreOpenFilesViewPanel(newOptions); + return panels; + } + } + return _DDeiCoreOpenFilesViewPanel; + } + static modify(fn) { + return _DDeiCoreOpenFilesViewPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreOpenFilesViewPanel, "defaultIns", new _DDeiCoreOpenFilesViewPanel(null)); + let DDeiCoreOpenFilesViewPanel = _DDeiCoreOpenFilesViewPanel; + const _sfc_main$1a = { + name: "ddei-core-panel-canvasview", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + computed: {}, + watch: {}, + created() { + this.mouseWheelThrottle = throttle(this.mouseWheelThrottle, 10); + this.mouseMove = throttle(this.mouseMove, 20); + }, + mounted() { + let ddInstance = this.editor.ddInstance; + ddInstance.initRender(); + if (!ddInstance.stage.wpv) { + ddInstance.stage.wpv = { + x: -(ddInstance.stage.width - ddInstance.render.container.clientWidth) / 2, + y: -(ddInstance.stage.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + ddInstance.render.drawShape(); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.LoadFile); + ddInstance.bus.executeAll(); + }, + methods: { + /** + * 画布双击 + */ + canvasDBClick(evt) { + var _a3, _b2; + let middleCanvas = this.$refs.middleCanvas; + let middleCanvasPos = DDeiUtil.getDomAbsPosition(middleCanvas); + if (middleCanvasPos.left + 5 <= evt.clientX && middleCanvasPos.left + middleCanvas.offsetWidth - 5 >= evt.clientX) { + let ddInstance = this.editor.ddInstance; + let stage2 = ddInstance.stage; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + let stageRatio2 = stage2.getStageRatio(); + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + let operateControls = DDeiAbstractShape.findBottomModelsByArea(stage2.layers[stage2.layerIndex], ex2, ey2, true, true); + if (operateControls != null && operateControls.length > 0) { + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_DBL_CLICK", "DBL_CLICK", { models: operateControls, ex, ey }, ddInstance, null); + if (rsState == 0 || rsState == 1) { + (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.hotkeys["ddei-core-keyaction-quickedit-start"]) == null ? void 0 : _b2.action(evt, this.editor.ddInstance); + } + } + } + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + return true; + }, + /** + * 触控板滑动事件 + */ + mouseWheel(evt) { + if (this.editor.state == DDeiEditorState.DESIGNING) { + this.mouseWheelThrottle(evt); + evt.preventDefault(); + evt.cancelBubble = true; + return false; + } + }, + mouseWheelThrottle(evt) { + this.editor.ddInstance.render.mouseWheel(evt); + }, + mouseDown(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + let middleCanvas = this.$refs.middleCanvas; + let middleCanvasPos = DDeiUtil.getDomAbsPosition(middleCanvas); + if (middleCanvasPos.left + 5 <= evt.clientX && middleCanvasPos.left + middleCanvas.offsetWidth - 5 >= evt.clientX) { + if (this.editor.state == DDeiEditorState.QUICK_EDITING) { + if ((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.render) == null ? void 0 : _d2.editorShadowControl) { + let stage2 = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage; + let rat1 = stage2.ddInstance.render.ratio; + let stageRatio2 = stage2.getStageRatio(); + let scaleSize = DDeiUtil.DRAW_TEMP_CANVAS && rat1 < 2 ? 2 / rat1 : 1; + let ex = evt.offsetX; + let ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + let shadowControl = (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.render) == null ? void 0 : _j.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.isInTextArea(ex2, ey2)) { + let cx = (ex2 - shadowControl.cpv.x) * rat1 * stageRatio2; + let cy = (ey2 - shadowControl.cpv.y) * rat1 * stageRatio2; + let startIndex = 0; + let sx = 0; + let i2 = 0; + for (; i2 < shadowControl.render.textUsedArea.length; i2++) { + let rowData = shadowControl.render.textUsedArea[i2]; + let ry = rowData.y / scaleSize; + let rh = rowData.height / scaleSize; + let rx = rowData.x / scaleSize; + let rw = rowData.width / scaleSize; + if (cy >= ry && cy <= ry + rh) { + if (cx >= rx && cx <= rx + rw) { + let endI = startIndex + rowData.text.length; + for (let x2 = startIndex; x2 < endI; x2++) { + let fx = shadowControl.render.textUsedArea[0].textPosCache[x2].x / scaleSize; + let lx = x2 < endI - 1 ? shadowControl.render.textUsedArea[0].textPosCache[x2 + 1].x / scaleSize : rx + rw; + let halfW = (lx - fx) / 2; + if (cx >= fx && cx < lx) { + if (cx > fx + halfW) { + sx = x2 + 1; + } else { + sx = x2; + } + break; + } + } + } + if (!sx) { + if (ex < shadowControl.cpv.x) { + sx = startIndex; + } else { + sx = startIndex + rowData.text.length; + } + } + break; + } + startIndex += rowData.text.length; + } + if (!sx) { + if (ex < shadowControl.cpv.x) { + sx = 0; + } else { + sx = startIndex + shadowControl.render.textUsedArea[i2 - 1].text.length; + } + } + let editorText = DDeiUtil.getEditorText(); + editorText.selectionStart = sx; + editorText.selectionEnd = sx; + setTimeout(() => { + editorText.focus(); + }, 10); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + this.editor.ddInstance.stage.render.tempTextStart = editorText.selectionStart; + this.editor.ddInstance.stage.render.operateState = DDeiEnumOperateState.QUICK_EDITING_TEXT_SELECTING; + return; + } + } + } + let isDialogOpen = false; + for (let oid in DDeiEditor.ACTIVE_INSTANCE.tempDialogData) { + if (DDeiEditor.ACTIVE_INSTANCE.tempDialogData[oid]) { + isDialogOpen = true; + break; + } + } + this.changeEditorFocus(); + this.editor.ddInstance.state = DDeiEnumState.NONE; + if (!isDialogOpen) { + this.editor.ddInstance.render.mouseDown(evt); + } + } + }, + /** + * 拖拽元素移动 + */ + mouseMove(e) { + var _a3, _b2, _c2, _d2, _e2; + if (this.editor.state == DDeiEditorState.CONTROL_CREATING) { + DDeiKeyAction.updateKeyState(e); + let ddInstance = this.editor.ddInstance; + let stage2 = ddInstance.stage; + let ex = e.offsetX; + let ey = e.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + if (this.editor.creatingControls) { + let layer2 = stage2.layers[stage2.layerIndex]; + if (layer2) { + stage2.render.currentOperateContainer = layer2; + stage2.render.operateState = DDeiEnumOperateState.CONTROL_CREATING; + let controls2 = this.editor.creatingControls; + stage2.render.currentOperateShape = controls2[0]; + if (!layer2.models.has(controls2[0].id)) { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeContainer, + { newContainer: layer2, models: controls2 }, + e + ); + let dragObj = { + x: ex, + y: ey, + model: controls2[0], + num: 0 + }; + controls2.forEach((c) => { + dragObj[c.id] = { + dx: c.cpv.x - controls2[0].cpv.x, + //鼠标在控件中心坐标的增量位置 + dy: c.cpv.y - controls2[0].cpv.y + }; + }); + this.editor.bus.push( + DDeiEnumBusCommandType.UpdateDragObj, + { dragObj }, + e + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangePosition, + { + models: controls2, + x: ex, + y: ey, + sample: 1, + dragObj + }, + e + ); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + } else { + let ex1 = e.offsetX / window.remRatio; + let ey1 = e.offsetY / window.remRatio; + let rat1 = (_a3 = ddInstance.render) == null ? void 0 : _a3.ratio; + let canvasWidth = ddInstance.render.canvas.width / rat1; + let canvasHeight = ddInstance.render.canvas.height / rat1; + let edgeWeight = 25; + if (ex1 < edgeWeight) { + ddInstance.render.inEdge = 4; + } else if (ex1 > canvasWidth - edgeWeight) { + ddInstance.render.inEdge = 2; + } else if (ey1 < edgeWeight) { + ddInstance.render.inEdge = 1; + } else if (ey1 > canvasHeight - edgeWeight) { + ddInstance.render.inEdge = 3; + } else { + ddInstance.render.inEdge = 0; + } + if (!ddInstance.render.inEdge) { + let selectedModels = /* @__PURE__ */ new Map(); + controls2.forEach((control) => { + selectedModels.set(control.id, control); + }); + (_c2 = (_b2 = this.editor) == null ? void 0 : _b2.bus) == null ? void 0 : _c2.push( + DDeiEnumBusCommandType.SetHelpLine, + { models: selectedModels }, + e + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangePosition, + { + models: controls2, + x: ex, + y: ey, + dx: 0, + dy: 0, + sample: 1, + dragObj: ddInstance.stage.render.dragObj + }, + e + ); + let isAlt = DDei.KEY_DOWN_STATE.get("alt"); + this.editor.bus.push( + DDeiEnumBusCommandType.ChangeSelectorPassIndex, + { passIndex: 10 }, + e + ); + let lastOnContainer = layer2; + if (isAlt) { + let stageRatio2 = stage2.getStageRatio(); + let ex2 = ex / stageRatio2; + let ey2 = ey / stageRatio2; + let mouseOnContainers = DDeiAbstractShape.findBottomContainersByArea( + layer2, + ex2, + ey2 + ); + if (mouseOnContainers && mouseOnContainers.length > 0) { + lastOnContainer = mouseOnContainers[mouseOnContainers.length - 1]; + } + if (lastOnContainer != layer2) { + this.editor.bus.push( + DDeiEnumBusCommandType.ChangeSelectorPassIndex, + { passIndex: 11 }, + e + ); + } + } + (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.RefreshShape); + } + } + this.editor.bus.executeAll(); + e.preventDefault(); + } + } + } else if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.STAGE_SCROLL_WORKING) { + this.editor.ddInstance.render.mouseMove(e); + } else if (this.editor.dragPart) { + this.editor.dragPart.boxDraging(e); + } else { + this.editor.ddInstance.render.mouseMove(e); + } + }, + /** + * 拖拽元素放开 + */ + mouseUp(e) { + if (this.editor.state == DDeiEditorState.CONTROL_CREATING) { + let ddInstance = this.editor.ddInstance; + let stage2 = ddInstance.stage; + let ex = e.offsetX / window.remRatio; + let ey = e.offsetY / window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + let stageRatio2 = stage2.getStageRatio(); + ex /= stageRatio2; + ey /= stageRatio2; + if (this.editor.creatingControls) { + let ddInstance2 = this.editor.ddInstance; + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.CREATE, { models: this.editor.creatingControls, ex, ey }, ddInstance2, null); + if (rsState == 0 || rsState == 1) { + let isAlt = DDei.KEY_DOWN_STATE.get("alt"); + ddInstance2.stage.idIdx++; + let layer2 = ddInstance2.stage.layers[ddInstance2.stage.layerIndex]; + if (isAlt) { + let mouseOnContainers = DDeiAbstractShape.findBottomContainersByArea(layer2, ex, ey); + let lastOnContainer = layer2; + if (mouseOnContainers && mouseOnContainers.length > 0) { + lastOnContainer = mouseOnContainers[mouseOnContainers.length - 1]; + } + if (lastOnContainer != layer2) { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeContainer, + { + newContainer: lastOnContainer, + oldContainer: layer2, + models: this.editor.creatingControls + } + ); + } + } + this.editor.creatingControls.forEach((model) => { + var _a3, _b2; + let controlDefine = this.editor.controls.get(model.modelCode); + if ((_b2 = (_a3 = controlDefine == null ? void 0 : controlDefine.define) == null ? void 0 : _a3.sample) == null ? void 0 : _b2.depProps) { + let depProps = controlDefine.define.sample.depProps; + for (let type in depProps) { + let property = depProps[type]; + let modelPropValue = model[property]; + if (modelPropValue) { + DDeiUtil.createDepLinkModel(model, modelPropValue, type); + } + } + } + model.refreshLinkModels(); + }); + this.editor.bus.push( + DDeiEnumBusCommandType.CancelCurLevelSelectedModels, + { container: layer2, curLevel: true } + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeSelect, + [{ + id: this.editor.creatingControls[0].id, + value: DDeiEnumControlState.SELECTED + }] + ); + this.editor.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + this.editor.bus.push(DDeiEnumBusCommandType.UpdatePaperArea); + let mds = { + models: this.editor.creatingControls + }; + this.editor.bus.push(DDeiEnumBusCommandType.NodifyControlCreated, mds); + this.editor.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + this.editor.bus.push(DDeiEnumBusCommandType.NodifyChange); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.creatingControls = null; + this.editor.state = DDeiEditorState.DESIGNING; + this.editor.bus.executeAll(); + } + } + e.preventDefault(); + } else if (this.editor.dragPart) { + this.editor.dragPart.boxDragEnd(e); + this.editor.changeState(DDeiEditorState.DESIGNING); + } else if (this.editor.state == DDeiEditorState.DESIGNING || this.editor.state == DDeiEditorState.QUICK_EDITING) { + this.editor.ddInstance.render.mouseUp(e); + } + } + } + }; + const CanvasView_vue_vue_type_style_index_0_lang = ""; + const _hoisted_1$18 = ["id"]; + function _sfc_render$1a(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return vue.openBlock(), vue.createElementBlock("div", { + id: ((_a3 = $props.editor) == null ? void 0 : _a3.id) + "_canvas", + ref: "middleCanvas", + class: "ddei-editor-canvasview", + onMousedown: _cache[0] || (_cache[0] = ($event) => $options.mouseDown($event)), + ondragstart: "return false;", + onWheel: _cache[1] || (_cache[1] = ($event) => $options.mouseWheel($event)), + onMousemove: _cache[2] || (_cache[2] = ($event) => $options.mouseMove($event)), + onMouseup: _cache[3] || (_cache[3] = ($event) => $options.mouseUp($event)), + onDblclick: _cache[4] || (_cache[4] = (...args) => $options.canvasDBClick && $options.canvasDBClick(...args)), + onContextmenu: _cache[5] || (_cache[5] = vue.withModifiers(() => { + }, ["prevent"])) + }, null, 40, _hoisted_1$18); + } + const CanvasView = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$1a]]); + const _DDeiCoreCanvasViewPanel = class _DDeiCoreCanvasViewPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", CanvasView.name); + __publicField3(this, "plugins", [CanvasView]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[CanvasView.name]) { + for (let i2 in options[CanvasView.name]) { + newOptions[i2] = options[CanvasView.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreCanvasViewPanel(newOptions); + return panels; + } + } + return _DDeiCoreCanvasViewPanel; + } + static modify(fn) { + return _DDeiCoreCanvasViewPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCanvasViewPanel, "defaultIns", new _DDeiCoreCanvasViewPanel(null)); + let DDeiCoreCanvasViewPanel = _DDeiCoreCanvasViewPanel; + const _sfc_main$19 = { + name: "ddei-core-panel-bottommenu", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + forceRefresh: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "bottommenu" || parts.indexOf("bottommenu") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + refreshData() { + this.editor.bottomMenuViewer = this; + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + if (this.editor.state != DDeiEditorState.BOTTOM_MENU_OPERATING && this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.BOTTOM_MENU_OPERATING); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const BottomMenu_vue_vue_type_style_index_0_scoped_5ec138cc_lang = ""; + function _sfc_render$19(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "ddei-core-panel-bottommenu", + onMousedown: _cache[0] || (_cache[0] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a3 = $props.editor) == null ? void 0 : _a3.getPartPanels($props.options, "panels"), (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + editor: $props.editor, + options: item.options, + ref_for: true + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 32)) : vue.createCommentVNode("", true); + } + const BottomMenu = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$19], ["__scopeId", "data-v-5ec138cc"]]); + const _DDeiCoreBottomMenuPanel = class _DDeiCoreBottomMenuPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", BottomMenu.name); + __publicField3(this, "defaultOptions", { + "panels": [ + "ddei-core-panel-bottom-sheets", + "ddei-core-panel-bottom-shapecount", + "ddei-core-panel-bottom-managelayers", + "ddei-core-panel-bottom-changeratio", + "ddei-core-panel-bottom-suitratio" + ] + }); + __publicField3(this, "plugins", [BottomMenu]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[BottomMenu.name]) { + for (let i2 in options[BottomMenu.name]) { + newOptions[i2] = options[BottomMenu.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreBottomMenuPanel(newOptions); + return panels; + } + } + return _DDeiCoreBottomMenuPanel; + } + static modify(fn) { + return _DDeiCoreBottomMenuPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBottomMenuPanel, "defaultIns", new _DDeiCoreBottomMenuPanel()); + let DDeiCoreBottomMenuPanel = _DDeiCoreBottomMenuPanel; + const _sfc_main$18 = { + name: "ddei-core-panel-eimport", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + file: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2; + this.file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + }, + methods: { + // showExportDialog(evt: Event) { + // let srcElement = evt.currentTarget; + // DDeiEditorUtil.showOrCloseDialog("ddei-core-dialog-exportoption", { + // callback: { + // }, + // mode: 2, + // group: "top-dialog", + // background: "white", + // opacity: "1%", + // event: -1 + // }, {}, srcElement) + // if (this.editor.tempDialogData && this.editor.tempDialogData["ddei-core-dialog-exportoption"]) { + // this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + // } else { + // this.editor.changeState(DDeiEditorState.DESIGNING); + // } + // }, + /** + * 下载文件 + */ + download(evt) { + var _a3, _b2, _c2, _d2; + if ((_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) { + let file = (_d2 = this.editor) == null ? void 0 : _d2.files[(_c2 = this.editor) == null ? void 0 : _c2.currentFileIndex]; + if (file) { + let json = file.toJSON(); + if (json) { + let eleLink = document.createElement("a"); + eleLink.download = file.name + ".dei"; + eleLink.style.display = "none"; + let blob = new Blob([JSON.stringify(json)]); + eleLink.href = URL.createObjectURL(blob); + document.body.appendChild(eleLink); + eleLink.click(); + document.body.removeChild(eleLink); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + } + } + }; + const ExportAndImport_vue_vue_type_style_index_0_scoped_9c97ea48_lang = ""; + const _hoisted_1$17 = { class: "ddei-core-panel-eimport" }; + const _hoisted_2$Q = { class: "content" }; + const _hoisted_3$M = { class: "part" }; + const _hoisted_4$B = { class: "text" }; + function _sfc_render$18(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$17, [ + _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$Q, [ + vue.createElementVNode("div", _hoisted_3$M, [ + vue.createElementVNode("div", { + class: "button-v", + onClick: _cache[0] || (_cache[0] = (...args) => $options.download && $options.download(...args)) + }, [ + _cache[1] || (_cache[1] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-download" }) + ], -1)), + vue.createElementVNode("div", _hoisted_4$B, vue.toDisplayString($props.editor.i18n("ddei.download")), 1) + ]) + ]) + ]), + _cache[3] || (_cache[3] = vue.createElementVNode("div", { class: "tail" }, null, -1)) + ]); + } + const ExportAndImport = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$18], ["__scopeId", "data-v-9c97ea48"]]); + const _DDeiCoreExportAndImportPanel = class _DDeiCoreExportAndImportPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ExportAndImport.name); + __publicField3(this, "plugins", [ExportAndImport]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ExportAndImport.name]) { + for (let i2 in options[ExportAndImport.name]) { + newOptions[i2] = options[ExportAndImport.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreExportAndImportPanel(newOptions); + return panels; + } + } + return _DDeiCoreExportAndImportPanel; + } + static modify(fn) { + return _DDeiCoreExportAndImportPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreExportAndImportPanel, "defaultIns", new _DDeiCoreExportAndImportPanel(null)); + let DDeiCoreExportAndImportPanel = _DDeiCoreExportAndImportPanel; + const _sfc_main$17 = { + name: "ddei-core-panel-fileinfo", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + file: {}, + fileNameEditing: false, + fileDescEditing: false + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2; + this.file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + }, + methods: { + /** + * 保存 + * @param evt + */ + save(evt) { + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.push(DDeiEditorEnumBusCommandType.SaveFile, {}, evt); + this.editor.bus.executeAll(); + }, + /** + * 下载文件 + */ + download(evt) { + var _a3, _b2, _c2, _d2; + if ((_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) { + let file = (_d2 = this.editor) == null ? void 0 : _d2.files[(_c2 = this.editor) == null ? void 0 : _c2.currentFileIndex]; + if (file) { + let json = file.toJSON(); + if (json) { + let eleLink = document.createElement("a"); + eleLink.download = file.name + ".dei"; + eleLink.style.display = "none"; + let blob = new Blob([JSON.stringify(json)]); + eleLink.href = URL.createObjectURL(blob); + document.body.appendChild(eleLink); + eleLink.click(); + document.body.removeChild(eleLink); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }, + /** + * 打开文件 + * @param evt + */ + async openFile(evt) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_BEFORE", "LOAD_FILE", null, this.editor.ddInstance, evt); + if (rsState != -1) { + let openFileHandle = await showOpenFilePicker({ + description: this.editor.i18n("ddei.fileDescription"), + types: [{ + accept: { + "text/plain": [".dei"] + } + }] + }); + let openFile = await openFileHandle[0].getFile(); + let read = new FileReader(); + read.readAsText(openFile); + read.onload = async () => { + var _a3, _b2, _c2, _d2, _e2; + let result = read.result; + let resultJSON = JSON.parse(result); + let ddInstance = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance; + let file = DDeiFile.loadFromJSON(resultJSON, { + currentDdInstance: ddInstance + }); + let openedFiles = this.editor.files; + let openedFileIndex = -1; + if (!file.id) { + file.id = DDeiUtil.getUniqueCode(); + } + for (let fi = 0; fi < openedFiles.length; fi++) { + if (openedFiles[fi].id && openedFiles[fi].id == file.id) { + openedFileIndex = fi; + break; + } + } + ddInstance.stage.destroyRender(); + if (openedFileIndex == -1) { + file.localFileHandler = openFileHandle[0]; + file.local = 1; + this.editor.addFile(file); + for (let x2 = 0; x2 < this.editor.files.length; x2++) { + this.editor.files[x2].active = DDeiActiveType.NONE; + } + this.editor.currentFileIndex = this.editor.files.length - 1; + file.state = DDeiFileState.NONE; + file.active = DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + file.changeSheet(file.currentSheetIndex); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.disabled = false; + file.initHistroy(); + file.histroy[0].isNew = true; + ddInstance.stage = stage2; + stage2.initRender(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + this.editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.RefreshEditorParts, + { parts: ["bottommenu", "topmenu"] } + ); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.RefreshShape); + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.executeAll(); + } + } else { + file = this.editor.files[openedFileIndex]; + if (file && ddInstance) { + for (let x2 = 0; x2 < this.editor.files.length; x2++) { + this.editor.files[x2].active = DDeiActiveType.NONE; + } + file.active = DDeiActiveType.ACTIVE; + this.editor.currentFileIndex = openedFileIndex; + let stage2 = file.sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + ddInstance.disabled = false; + stage2.initRender(); + this.editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.RefreshEditorParts, + { parts: ["bottommenu", "topmenu"] } + ); + (_d2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _d2.push(DDeiEnumBusCommandType.RefreshShape); + (_e2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _e2.executeAll(); + } + } + DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_AFTER", "LOAD_FILE", { file }, this.editor.ddInstance, evt); + }; + } + }, + /** + * 新建文件 + * @param evt + */ + newFile(evt) { + var _a3, _b2; + if ((_a3 = this.editor) == null ? void 0 : _a3.ddInstance) { + let ddInstance = this.editor.ddInstance; + let fileText = this.editor.i18n("ddei.file"); + let newText = this.editor.i18n("ddei.new"); + let pageText = this.editor.i18n("ddei.page"); + let file = DDeiFile.loadFromJSON( + { + name: newText + fileText + "_NEW", + path: "/" + newText + fileText + "_NEW", + sheets: [ + new DDeiSheet({ + name: pageText + "-1", + desc: pageText + "-1", + stage: DDeiStage.initByJSON({ id: "stage_1" }, { currentDdInstance: ddInstance }), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }, + { currentDdInstance: ddInstance } + ); + if (this.editor.currentFileIndex != -1) { + this.editor.files[this.editor.currentFileIndex].active = DDeiActiveType.NONE; + } + this.editor.addFile(file); + this.editor.currentFileIndex = this.editor.files.length - 1; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + ddInstance.stage.destroyRender(); + let stage2 = sheets[0].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + file.initHistroy(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + stage2.initRender(); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu", "topmenu"] + }); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } + } + } + } + }; + const FileInfo_vue_vue_type_style_index_0_scoped_b1753b91_lang = ""; + const _hoisted_1$16 = { class: "ddei-core-panel-fileinfo" }; + const _hoisted_2$P = { class: "content" }; + const _hoisted_3$L = { class: "part" }; + const _hoisted_4$A = ["title"]; + const _hoisted_5$t = { class: "text" }; + const _hoisted_6$o = { class: "part" }; + const _hoisted_7$m = ["title"]; + const _hoisted_8$i = { class: "text" }; + const _hoisted_9$g = { class: "part" }; + const _hoisted_10$a = ["title"]; + const _hoisted_11$a = { class: "text" }; + const _hoisted_12$7 = { class: "part" }; + const _hoisted_13$6 = ["title"]; + const _hoisted_14$5 = { class: "text" }; + const _hoisted_15$4 = { class: "tail" }; + function _sfc_render$17(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$16, [ + _cache[8] || (_cache[8] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$P, [ + vue.createElementVNode("div", _hoisted_3$L, [ + vue.createElementVNode("div", { + class: "button-v", + onClick: _cache[0] || (_cache[0] = (...args) => $options.newFile && $options.newFile(...args)), + title: $props.editor.i18n("ddei.new") + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-new-file" }) + ], -1)), + vue.createElementVNode("div", _hoisted_5$t, vue.toDisplayString($props.editor.i18n("ddei.new")), 1) + ], 8, _hoisted_4$A) + ]), + vue.createElementVNode("div", _hoisted_6$o, [ + vue.createElementVNode("div", { + class: "button-v", + onClick: _cache[1] || (_cache[1] = (...args) => $options.openFile && $options.openFile(...args)), + title: $props.editor.i18n("ddei.open") + }, [ + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-folder" }) + ], -1)), + vue.createElementVNode("div", _hoisted_8$i, vue.toDisplayString($props.editor.i18n("ddei.open")), 1) + ], 8, _hoisted_7$m) + ]), + vue.createElementVNode("div", _hoisted_9$g, [ + vue.createElementVNode("div", { + class: "button-v", + onClick: _cache[2] || (_cache[2] = (...args) => $options.save && $options.save(...args)), + title: $props.editor.i18n("ddei.save") + }, [ + _cache[6] || (_cache[6] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-save" }) + ], -1)), + vue.createElementVNode("div", _hoisted_11$a, vue.toDisplayString($props.editor.i18n("ddei.save")), 1) + ], 8, _hoisted_10$a) + ]), + vue.createElementVNode("div", _hoisted_12$7, [ + vue.createElementVNode("div", { + class: "button-v", + onClick: _cache[3] || (_cache[3] = (...args) => $options.download && $options.download(...args)), + title: $props.editor.i18n("ddei.download") + }, [ + _cache[7] || (_cache[7] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-download" }) + ], -1)), + vue.createElementVNode("div", _hoisted_14$5, vue.toDisplayString($props.editor.i18n("ddei.download")), 1) + ], 8, _hoisted_13$6) + ]) + ]), + vue.createElementVNode("div", _hoisted_15$4, vue.toDisplayString($props.editor.i18n("ddei.file")), 1) + ]); + } + const FileInfo = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$17], ["__scopeId", "data-v-b1753b91"]]); + const _DDeiCoreFileInfoPanel = class _DDeiCoreFileInfoPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", FileInfo.name); + __publicField3(this, "plugins", [FileInfo]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[FileInfo.name]) { + for (let i2 in options[FileInfo.name]) { + newOptions[i2] = options[FileInfo.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreFileInfoPanel(newOptions); + return panels; + } + } + return _DDeiCoreFileInfoPanel; + } + static modify(fn) { + return _DDeiCoreFileInfoPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreFileInfoPanel, "defaultIns", new _DDeiCoreFileInfoPanel(null)); + let DDeiCoreFileInfoPanel = _DDeiCoreFileInfoPanel; + const _sfc_main$16 = { + name: "ddei-core-panel-fileoperate", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + icons: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + /** + * 新建文件 + * @param evt + */ + newFile(evt) { + var _a3; + if ((_a3 = this.editor) == null ? void 0 : _a3.ddInstance) { + let ddInstance = this.editor.ddInstance; + let file = DDeiFile.loadFromJSON( + { + name: "新建文件_NEW", + path: "/新建文件_NEW", + sheets: [ + new DDeiSheet({ + name: "页面-1", + desc: "页面-1", + stage: DDeiStage.initByJSON({ id: "stage_1" }), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }, + { currentDdInstance: ddInstance } + ); + if (this.editor.currentFileIndex != -1) { + this.editor.files[this.editor.currentFileIndex].active = DDeiActiveType.NONE; + } + this.editor.addFile(file); + this.editor.currentFileIndex = this.editor.files.length - 1; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + let stage2 = sheets[0].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + file.initHistroy(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + stage2.initRender(); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu"] + }); + this.editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.executeAll(); + } + } + }, + /** + * 保存 + * @param evt + */ + save(evt) { + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.push(DDeiEditorEnumBusCommandType.SaveFile, {}, evt); + this.editor.bus.executeAll(); + }, + /** + * 下载文件 + */ + download(evt) { + var _a3, _b2, _c2, _d2; + if ((_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) { + let file = (_d2 = this.editor) == null ? void 0 : _d2.files[(_c2 = this.editor) == null ? void 0 : _c2.currentFileIndex]; + if (file) { + let json = file.toJSON(); + if (json) { + let eleLink = document.createElement("a"); + eleLink.download = file.name + ".dei"; + eleLink.style.display = "none"; + let blob = new Blob([JSON.stringify(json)]); + eleLink.href = URL.createObjectURL(blob); + document.body.appendChild(eleLink); + eleLink.click(); + document.body.removeChild(eleLink); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }, + /** + * 打开文件 + * @param evt + */ + openFile(evt) { + } + } + }; + const FileOperate_vue_vue_type_style_index_0_scoped_891d9231_lang = ""; + const _hoisted_1$15 = { class: "ddei-core-panel-fileoperate" }; + const _hoisted_2$O = { + class: "ddei-core-panel-fileoperate-item", + style: { "grid-row": "1/3" } + }; + const _hoisted_3$K = ["src"]; + const _hoisted_4$z = ["src"]; + const _hoisted_5$s = ["src"]; + const _hoisted_6$n = ["src"]; + const _hoisted_7$l = { class: "ddei-core-panel-fileoperate-item" }; + const _hoisted_8$h = { class: "ddei-core-panel-fileoperate-item-text" }; + function _sfc_render$16(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$15, [ + vue.createElementVNode("div", _hoisted_2$O, [ + vue.createElementVNode("div", { + class: "ddei-core-panel-fileoperate-item-box", + onClick: _cache[0] || (_cache[0] = (...args) => $options.newFile && $options.newFile(...args)) + }, [ + vue.createElementVNode("img", { + width: "16px", + height: "16px", + src: $data.icons["icon-file"] + }, null, 8, _hoisted_3$K), + vue.createElementVNode("div", null, vue.toDisplayString($props.editor.i18n("ddei.new")), 1) + ]), + vue.createElementVNode("div", { + class: "ddei-core-panel-fileoperate-item-box", + onClick: _cache[1] || (_cache[1] = (...args) => $options.save && $options.save(...args)) + }, [ + vue.createElementVNode("img", { + width: "16px", + height: "16px", + src: $data.icons["icon-save"] + }, null, 8, _hoisted_4$z), + vue.createElementVNode("div", null, vue.toDisplayString($props.editor.i18n("ddei.save")), 1) + ]), + vue.createElementVNode("div", { + class: "ddei-core-panel-fileoperate-item-box", + onClick: _cache[2] || (_cache[2] = (...args) => $options.openFile && $options.openFile(...args)) + }, [ + vue.createElementVNode("img", { + width: "16px", + height: "16px", + src: $data.icons["icon-open"] + }, null, 8, _hoisted_5$s), + vue.createElementVNode("div", null, vue.toDisplayString($props.editor.i18n("ddei.open")), 1) + ]), + vue.createElementVNode("div", { + class: "ddei-core-panel-fileoperate-item-box", + onClick: _cache[3] || (_cache[3] = (...args) => $options.download && $options.download(...args)) + }, [ + vue.createElementVNode("img", { + width: "16px", + height: "16px", + src: $data.icons["icon-download"] + }, null, 8, _hoisted_6$n), + vue.createElementVNode("div", null, vue.toDisplayString($props.editor.i18n("ddei.download")), 1) + ]) + ]), + vue.createElementVNode("div", _hoisted_7$l, [ + vue.createElementVNode("div", _hoisted_8$h, vue.toDisplayString($props.editor.i18n("ddei.save")), 1) + ]) + ]); + } + const FileOperate = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$16], ["__scopeId", "data-v-891d9231"]]); + const _DDeiCoreFileOperatePanel = class _DDeiCoreFileOperatePanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", FileOperate.name); + __publicField3(this, "plugins", [FileOperate]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[FileOperate.name]) { + for (let i2 in options[FileOperate.name]) { + newOptions[i2] = options[FileOperate.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreFileOperatePanel(newOptions); + return panels; + } + } + return _DDeiCoreFileOperatePanel; + } + static modify(fn) { + return _DDeiCoreFileOperatePanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreFileOperatePanel, "defaultIns", new _DDeiCoreFileOperatePanel(null)); + let DDeiCoreFileOperatePanel = _DDeiCoreFileOperatePanel; + const _sfc_main$15 = { + name: "ddei-core-panel-fontandtext", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + } + }; + const FontAndText_vue_vue_type_style_index_0_scoped_84f4d012_lang = ""; + const _hoisted_1$14 = { class: "ddei-core-panel-fontandtext" }; + const _hoisted_2$N = { class: "content" }; + const _hoisted_3$J = { class: "buttons" }; + const _hoisted_4$y = { class: "b1" }; + const _hoisted_5$r = { class: "b2" }; + const _hoisted_6$m = { class: "buttons" }; + const _hoisted_7$k = { class: "mg14" }; + const _hoisted_8$g = { class: "mg16" }; + const _hoisted_9$f = { class: "mg16" }; + const _hoisted_10$9 = { class: "mg165" }; + const _hoisted_11$9 = { class: "mg17" }; + const _hoisted_12$6 = { class: "mg17" }; + const _hoisted_13$5 = { class: "b4" }; + const _hoisted_14$4 = { class: "b5" }; + const _hoisted_15$3 = { class: "b6" }; + const _hoisted_16$2 = { class: "tail" }; + function _sfc_render$15(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$14, [ + _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$N, [ + vue.createElementVNode("div", _hoisted_3$J, [ + vue.createElementVNode("div", _hoisted_4$y, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_a3 = $props.editor) == null ? void 0 : _a3.panels["ddei-core-btn-fontfamily"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_5$r, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_b2 = $props.editor) == null ? void 0 : _b2.panels["ddei-core-btn-fontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_c2 = $props.editor) == null ? void 0 : _c2.panels["ddei-core-btn-addfontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + addValue: 1, + attrCode: "font.size", + img: "icon-add-fontsize", + extcls: "magtop-2" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_d2 = $props.editor) == null ? void 0 : _d2.panels["ddei-core-btn-addfontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + addValue: -1, + attrCode: "font.size", + img: "icon-reduce-fontsize", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_e2 = $props.editor) == null ? void 0 : _e2.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + supportQuickEdit: false, + attrCode: "textStyle.align", + img: "icon-text-align-left", + extcls: "magtop-1", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_f = $props.editor) == null ? void 0 : _f.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "2", + supportQuickEdit: false, + attrCode: "textStyle.align", + img: "icon-font-align", + extcls: "magtop-1", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_g = $props.editor) == null ? void 0 : _g.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "3", + supportQuickEdit: false, + attrCode: "textStyle.align", + img: "icon-text-align-right", + extcls: "magtop-1", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]) + ]), + vue.createElementVNode("div", _hoisted_6$m, [ + vue.createElementVNode("div", _hoisted_7$k, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_h = $props.editor) == null ? void 0 : _h.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.bold", + img: "icon-bold" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_8$g, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_i = $props.editor) == null ? void 0 : _i.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.italic", + img: "icon-font-italic" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_9$f, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_j = $props.editor) == null ? void 0 : _j.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.underline", + img: "icon-text-underline", + extcls: "ext-underline" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_10$9, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_k = $props.editor) == null ? void 0 : _k.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + electedValue: "1", + attrCode: "textStyle.deleteline", + img: "icon-font-deleteline" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_11$9, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_l = $props.editor) == null ? void 0 : _l.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + onlyQuickEdit: true, + attrCode: "textStyle.subtype", + img: "icon-text-subtype-1", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_12$6, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_m = $props.editor) == null ? void 0 : _m.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "2", + onlyQuickEdit: true, + attrCode: "textStyle.subtype", + img: "icon-text-subtype-2", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_13$5, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_n = $props.editor) == null ? void 0 : _n.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "3", + onlyQuickEdit: true, + attrCode: "textStyle.subtype", + img: "icon-text-subtype-3", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_14$4, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_o = $props.editor) == null ? void 0 : _o.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "textStyle.bgcolor", + img: "icon-fill" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_15$3, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_p = $props.editor) == null ? void 0 : _p.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "font.color", + img: "icon-font" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_q = $props.editor) == null ? void 0 : _q.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + supportQuickEdit: false, + attrCode: "textStyle.valign", + img: "icon-text-align-left", + extcls: "rotate-90", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_r = $props.editor) == null ? void 0 : _r.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "2", + supportQuickEdit: false, + attrCode: "textStyle.valign", + img: "icon-font-align", + extcls: "rotate-90", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", null, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_s = $props.editor) == null ? void 0 : _s.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "3", + supportQuickEdit: false, + attrCode: "textStyle.valign", + img: "icon-text-align-right", + extcls: "rotate-90", + unSelectValue: 2 + }, null, 8, ["editor", "controlDefine"])) + ]) + ]) + ]), + vue.createElementVNode("div", _hoisted_16$2, vue.toDisplayString($props.editor.i18n("ddei.textEdit")), 1) + ]); + } + const FontAndText = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$15], ["__scopeId", "data-v-84f4d012"]]); + const _DDeiCoreFontAndTextPanel = class _DDeiCoreFontAndTextPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", FontAndText.name); + __publicField3(this, "plugins", [FontAndText]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[FontAndText.name]) { + for (let i2 in options[FontAndText.name]) { + newOptions[i2] = options[FontAndText.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreFontAndTextPanel(newOptions); + return panels; + } + } + return _DDeiCoreFontAndTextPanel; + } + static modify(fn) { + return _DDeiCoreFontAndTextPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreFontAndTextPanel, "defaultIns", new _DDeiCoreFontAndTextPanel(null)); + let DDeiCoreFontAndTextPanel = _DDeiCoreFontAndTextPanel; + const _sfc_main$14 = { + name: "ddei-core-panel-operate", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + hasClipData: false, + displayBrush: false, + canEdit: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3; + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds }, this.editor.ddInstance); + if (rsState == -1) { + this.canEdit = false; + } + this.hasClipboard(); + this.isDisplayBrush(); + }, + methods: { + /** + * 执行剪切 + */ + execShearAction(evt) { + var _a3, _b2; + (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.hotkeys["ddei-core-keyaction-cut"]) == null ? void 0 : _b2.action(evt, this.editor.ddInstance, this.editor); + }, + /** + * 执行复制 + */ + execCopyAction(evt) { + var _a3, _b2; + (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.hotkeys["ddei-core-keyaction-copy"]) == null ? void 0 : _b2.action(evt, this.editor.ddInstance, this.editor); + }, + /** + * 执行格式刷 + */ + execBrushAction(evt) { + var _a3, _b2; + (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.hotkeys["ddei-core-keyaction-brush-data"]) == null ? void 0 : _b2.action(evt, this.editor.ddInstance, this.editor); + }, + /** + * 判定是否显示格式刷 + */ + isDisplayBrush() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + this.displayBrush = false; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) == 1) { + let model = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + )[0]; + if (model.baseModelType == "DDeiTable") { + let selectedCells = model.getSelectedCells(); + if ((selectedCells == null ? void 0 : selectedCells.length) > 0) { + this.displayBrush = true; + } + } else { + this.displayBrush = true; + } + } + }, + /** + * 检查剪切板中是否有内容 + */ + async hasClipboard() { + var _a3, _b2, _c2; + this.hasClipData = false; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.copyMode) { + this.hasClipData = true; + } else { + let hasFocus = document.hasFocus(); + if (hasFocus) { + try { + if (!DDeiUtil.isSafari()) { + if (DDeiConfig.ALLOW_CLIPBOARD) { + let items = await navigator.clipboard.read(); + if ((items == null ? void 0 : items.length) > 0) { + this.hasClipData = true; + } + } + } + } catch (e) { + } + } + } + } + } + }; + const Operate_vue_vue_type_style_index_0_scoped_fc2f1000_lang = ""; + const _hoisted_1$13 = { class: "ddei-core-panel-operate" }; + const _hoisted_2$M = { class: "content" }; + const _hoisted_3$I = { class: "part" }; + const _hoisted_4$x = ["title"]; + const _hoisted_5$q = { class: "text" }; + const _hoisted_6$l = { class: "part" }; + const _hoisted_7$j = ["title"]; + const _hoisted_8$f = { class: "text" }; + const _hoisted_9$e = { class: "part" }; + const _hoisted_10$8 = ["title"]; + const _hoisted_11$8 = { class: "text" }; + const _hoisted_12$5 = { class: "part" }; + const _hoisted_13$4 = ["title"]; + const _hoisted_14$3 = { class: "text" }; + const _hoisted_15$2 = { class: "tail" }; + function _sfc_render$14(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$13, [ + _cache[7] || (_cache[7] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$M, [ + vue.createElementVNode("div", _hoisted_3$I, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": ((_c2 = (_b2 = (_a3 = $props.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.copyMode) == "cut", "button-v": ((_g = (_f = (_e2 = (_d2 = $props.editor) == null ? void 0 : _d2.ddInstance) == null ? void 0 : _e2.stage) == null ? void 0 : _f.selectedModels) == null ? void 0 : _g.size) > 0, "button-v--disabled": !$data.canEdit || ((_k = (_j = (_i = (_h = $props.editor) == null ? void 0 : _h.ddInstance) == null ? void 0 : _i.stage) == null ? void 0 : _j.selectedModels) == null ? void 0 : _k.size) == 0 || !((_n = (_m = (_l = $props.editor) == null ? void 0 : _l.ddInstance) == null ? void 0 : _m.stage) == null ? void 0 : _n.selectedModels) }), + title: $props.editor.i18n("ddei.cut"), + onClick: _cache[0] || (_cache[0] = ($event) => { + var _a4, _b3, _c3, _d3; + return $data.canEdit && ((_d3 = (_c3 = (_b3 = (_a4 = $props.editor) == null ? void 0 : _a4.ddInstance) == null ? void 0 : _b3.stage) == null ? void 0 : _c3.selectedModels) == null ? void 0 : _d3.size) > 0 && $options.execShearAction($event); + }) + }, [ + _cache[3] || (_cache[3] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-cut" }) + ], -1)), + vue.createElementVNode("div", _hoisted_5$q, vue.toDisplayString($props.editor.i18n("ddei.cut")), 1) + ], 10, _hoisted_4$x) + ]), + vue.createElementVNode("div", _hoisted_6$l, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": ((_q = (_p = (_o = $props.editor) == null ? void 0 : _o.ddInstance) == null ? void 0 : _p.stage) == null ? void 0 : _q.copyMode) == "copy", "button-v": ((_u = (_t = (_s = (_r = $props.editor) == null ? void 0 : _r.ddInstance) == null ? void 0 : _s.stage) == null ? void 0 : _t.selectedModels) == null ? void 0 : _u.size) > 0, "button-v--disabled": ((_y = (_x = (_w = (_v = $props.editor) == null ? void 0 : _v.ddInstance) == null ? void 0 : _w.stage) == null ? void 0 : _x.selectedModels) == null ? void 0 : _y.size) == 0 || !((_B = (_A = (_z = $props.editor) == null ? void 0 : _z.ddInstance) == null ? void 0 : _A.stage) == null ? void 0 : _B.selectedModels) }), + title: $props.editor.i18n("ddei.new"), + onClick: _cache[1] || (_cache[1] = ($event) => { + var _a4, _b3, _c3, _d3; + return ((_d3 = (_c3 = (_b3 = (_a4 = $props.editor) == null ? void 0 : _a4.ddInstance) == null ? void 0 : _b3.stage) == null ? void 0 : _c3.selectedModels) == null ? void 0 : _d3.size) > 0 && $options.execCopyAction($event); + }) + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-copy-file" }) + ], -1)), + vue.createElementVNode("div", _hoisted_8$f, vue.toDisplayString($props.editor.i18n("ddei.copy")), 1) + ], 10, _hoisted_7$j) + ]), + vue.createElementVNode("div", _hoisted_9$e, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v": $data.hasClipData, "button-v--disabled": !$data.canEdit || !$data.hasClipData }), + title: $props.editor.i18n("ddei.paste") + }, [ + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-paste" }) + ], -1)), + vue.createElementVNode("div", _hoisted_11$8, vue.toDisplayString($props.editor.i18n("ddei.paste")), 1) + ], 10, _hoisted_10$8) + ]), + vue.createElementVNode("div", _hoisted_12$5, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": $data.canEdit && ((_E = (_D = (_C = $props.editor) == null ? void 0 : _C.ddInstance) == null ? void 0 : _D.stage) == null ? void 0 : _E.brushData), "button-v": $data.canEdit && $data.displayBrush, "button-v--disabled": !$data.canEdit || !$data.displayBrush }), + title: $props.editor.i18n("ddei.brush"), + onClick: _cache[2] || (_cache[2] = ($event) => { + var _a4, _b3, _c3, _d3; + return $data.canEdit && ((_d3 = (_c3 = (_b3 = (_a4 = $props.editor) == null ? void 0 : _a4.ddInstance) == null ? void 0 : _b3.stage) == null ? void 0 : _c3.selectedModels) == null ? void 0 : _d3.size) == 1 && $options.execBrushAction($event); + }) + }, [ + _cache[6] || (_cache[6] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-brush" }) + ], -1)), + vue.createElementVNode("div", _hoisted_14$3, vue.toDisplayString($props.editor.i18n("ddei.brush")), 1) + ], 10, _hoisted_13$4) + ]) + ]), + vue.createElementVNode("div", _hoisted_15$2, vue.toDisplayString($props.editor.i18n("ddei.cutBoard")), 1) + ]); + } + const Operate = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$14], ["__scopeId", "data-v-fc2f1000"]]); + const _DDeiCoreOperatePanel = class _DDeiCoreOperatePanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Operate.name); + __publicField3(this, "plugins", [Operate]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Operate.name]) { + for (let i2 in options[Operate.name]) { + newOptions[i2] = options[Operate.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreOperatePanel(newOptions); + return panels; + } + } + return _DDeiCoreOperatePanel; + } + static modify(fn) { + return _DDeiCoreOperatePanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreOperatePanel, "defaultIns", new _DDeiCoreOperatePanel(null)); + let DDeiCoreOperatePanel = _DDeiCoreOperatePanel; + const _sfc_main$13 = { + name: "ddei-core-panel-sort", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dialogShow: "", + canEdit: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3; + let mds = [this.editor.currentStage]; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds }, this.editor.ddInstance); + if (rsState == -1) { + this.canEdit = false; + } + }, + methods: { + /** + * 显示弹出框 + */ + showPositionDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-changeposition", { + group: "top-dialog" + }, { type: 5 }, srcElement); + }, + showAlignDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-align", { + group: "top-dialog" + }, { type: 5 }, srcElement); + }, + showMergeDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-mergecompose", { + group: "top-dialog" + }, { type: 5 }, srcElement); + }, + showRotateDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-changerotate", { + group: "top-dialog" + }, { type: 5 }, srcElement); + }, + /** + * 对齐按钮是否显示 + */ + isButtonEnable(num = 1) { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) >= num) { + return true; + } + return false; + } + } + }; + const Sort_vue_vue_type_style_index_0_scoped_9f739241_lang = ""; + const _hoisted_1$12 = { class: "ddei-core-panel-sort" }; + const _hoisted_2$L = { class: "content" }; + const _hoisted_3$H = { class: "part" }; + const _hoisted_4$w = { class: "text" }; + const _hoisted_5$p = { class: "part" }; + const _hoisted_6$k = { class: "text" }; + const _hoisted_7$i = { class: "part" }; + const _hoisted_8$e = { class: "text" }; + const _hoisted_9$d = { class: "part" }; + const _hoisted_10$7 = { class: "text" }; + const _hoisted_11$7 = { class: "tail" }; + function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$12, [ + _cache[12] || (_cache[12] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$L, [ + vue.createElementVNode("div", _hoisted_3$H, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--disabled": !$data.canEdit || !$options.isButtonEnable(), "button-v--selected": $data.canEdit && $options.isButtonEnable() && $data.dialogShow == "ddei-core-panel-sort-ddei-core-dialog-changeposition", "button-v": $data.canEdit && $options.isButtonEnable() }), + onClick: _cache[0] || (_cache[0] = ($event) => $data.canEdit && $options.isButtonEnable() && $options.showPositionDialog($event)) + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-position" }) + ], -1)), + vue.createElementVNode("div", _hoisted_4$w, vue.toDisplayString($props.editor.i18n("ddei.position")), 1), + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon extbtn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ], 2) + ]), + vue.createElementVNode("div", _hoisted_5$p, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--disabled": !$data.canEdit || !$options.isButtonEnable(2), "button-v--selected": $data.canEdit && $options.isButtonEnable(2) && $data.dialogShow == "ddei-core-panel-sort-align-dialog", "button-v": $data.canEdit && $options.isButtonEnable(2) }), + onClick: _cache[1] || (_cache[1] = ($event) => $data.canEdit && $options.isButtonEnable(2) && $options.showAlignDialog($event)) + }, [ + _cache[6] || (_cache[6] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-align" }) + ], -1)), + vue.createElementVNode("div", _hoisted_6$k, vue.toDisplayString($props.editor.i18n("ddei.align")), 1), + _cache[7] || (_cache[7] = vue.createElementVNode("svg", { + class: "icon extbtn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ], 2) + ]), + vue.createElementVNode("div", _hoisted_7$i, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--disabled": !$data.canEdit || !$options.isButtonEnable(), "button-v--selected": $data.canEdit && $options.isButtonEnable() && $data.dialogShow == "ddei-core-panel-sort-merge-dialog", "button-v": $data.canEdit && $options.isButtonEnable() }), + onClick: _cache[2] || (_cache[2] = ($event) => $data.canEdit && $options.isButtonEnable() && $options.showMergeDialog($event)) + }, [ + _cache[8] || (_cache[8] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-merge1" }) + ], -1)), + vue.createElementVNode("div", _hoisted_8$e, vue.toDisplayString($props.editor.i18n("ddei.combina")), 1), + _cache[9] || (_cache[9] = vue.createElementVNode("svg", { + class: "icon extbtn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ], 2) + ]), + vue.createElementVNode("div", _hoisted_9$d, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--disabled": !$data.canEdit || !$options.isButtonEnable(), "button-v--selected": $data.canEdit && $options.isButtonEnable() && $data.dialogShow == "ddei-core-panel-sort-ddei-core-dialog-changerotate", "button-v": $data.canEdit && $options.isButtonEnable() }), + onClick: _cache[3] || (_cache[3] = ($event) => $data.canEdit && $options.isButtonEnable() && $options.showRotateDialog($event)) + }, [ + _cache[10] || (_cache[10] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-flip" }) + ], -1)), + vue.createElementVNode("div", _hoisted_10$7, vue.toDisplayString($props.editor.i18n("ddei.flip")), 1), + _cache[11] || (_cache[11] = vue.createElementVNode("svg", { + class: "icon extbtn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1)) + ], 2) + ]) + ]), + vue.createElementVNode("div", _hoisted_11$7, vue.toDisplayString($props.editor.i18n("ddei.sortAndAlign")), 1) + ]); + } + const Sort = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$13], ["__scopeId", "data-v-9f739241"]]); + const _DDeiCoreSortPanel = class _DDeiCoreSortPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Sort.name); + __publicField3(this, "plugins", [Sort]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Sort.name]) { + for (let i2 in options[Sort.name]) { + newOptions[i2] = options[Sort.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSortPanel(newOptions); + return panels; + } + } + return _DDeiCoreSortPanel; + } + static modify(fn) { + return _DDeiCoreSortPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSortPanel, "defaultIns", new _DDeiCoreSortPanel(null)); + let DDeiCoreSortPanel = _DDeiCoreSortPanel; + const _sfc_main$12 = { + name: "ddei-core-panel-quickstyle", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + } + }; + const Style_vue_vue_type_style_index_0_scoped_109430c5_lang = ""; + const _hoisted_1$11 = { class: "ddei-core-panel-quickstyle" }; + const _hoisted_2$K = { + class: "ddei-core-panel-quickstyle-item", + style: { "grid-column": "1/16" } + }; + const _hoisted_3$G = { class: "ddei-core-panel-quickstyle-item-text" }; + function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$11, [ + _cache[0] || (_cache[0] = vue.createStaticVNode('
Abc
Abc
Abc
Abc
Abc
Abc
Abc
Abc
', 4)), + vue.createElementVNode("div", _hoisted_2$K, [ + vue.createElementVNode("div", _hoisted_3$G, vue.toDisplayString(_ctx.editor.i18n("ddei.style")), 1) + ]) + ]); + } + const Style = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$12], ["__scopeId", "data-v-109430c5"]]); + const _DDeiCoreStylePanel = class _DDeiCoreStylePanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Style.name); + __publicField3(this, "plugins", [Style]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Style.name]) { + for (let i2 in options[Style.name]) { + newOptions[i2] = options[Style.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreStylePanel(newOptions); + return panels; + } + } + return _DDeiCoreStylePanel; + } + static modify(fn) { + return _DDeiCoreStylePanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreStylePanel, "defaultIns", new _DDeiCoreStylePanel(null)); + let DDeiCoreStylePanel = _DDeiCoreStylePanel; + const _sfc_main$11 = { + name: "ddei-core-panel-tool", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + canEdit: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3; + let mds = [this.editor.currentStage]; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds }, this.editor.ddInstance); + if (rsState == -1) { + this.canEdit = false; + } + }, + methods: { + /** + * 修改当前编辑器的编辑模式 + */ + changeEditMode(mode) { + this.editor.bus.push(DDeiEditorEnumBusCommandType.ChangeEditMode, { + mode + }); + this.editor.bus.executeAll(); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + }; + const Tool_vue_vue_type_style_index_0_scoped_d02823f2_lang = ""; + const _hoisted_1$10 = { class: "ddei-core-panel-tool" }; + const _hoisted_2$J = { class: "content" }; + const _hoisted_3$F = { class: "part" }; + const _hoisted_4$v = ["title"]; + const _hoisted_5$o = { class: "text" }; + const _hoisted_6$j = { class: "part" }; + const _hoisted_7$h = ["title"]; + const _hoisted_8$d = { class: "text" }; + const _hoisted_9$c = { class: "part" }; + const _hoisted_10$6 = ["title"]; + const _hoisted_11$6 = { class: "text" }; + const _hoisted_12$4 = { class: "tail" }; + function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$10, [ + _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "header" }, null, -1)), + vue.createElementVNode("div", _hoisted_2$J, [ + vue.createElementVNode("div", _hoisted_3$F, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": ((_a3 = $props.editor) == null ? void 0 : _a3.editMode) == 1, "button-v": ((_b2 = $props.editor) == null ? void 0 : _b2.editMode) != 1 }), + title: $props.editor.i18n("ddei.choose"), + onClick: _cache[0] || (_cache[0] = ($event) => $options.changeEditMode(1)) + }, [ + _cache[3] || (_cache[3] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-selector" }) + ], -1)), + vue.createElementVNode("div", _hoisted_5$o, vue.toDisplayString($props.editor.i18n("ddei.choose")), 1) + ], 10, _hoisted_4$v) + ]), + vue.createElementVNode("div", _hoisted_6$j, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": ((_c2 = $props.editor) == null ? void 0 : _c2.editMode) == 2, "button-v": ((_d2 = $props.editor) == null ? void 0 : _d2.editMode) != 2 }), + title: $props.editor.i18n("ddei.moveStage"), + onClick: _cache[1] || (_cache[1] = ($event) => $options.changeEditMode(2)) + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-hand" }) + ], -1)), + vue.createElementVNode("div", _hoisted_8$d, vue.toDisplayString($props.editor.i18n("ddei.moveStage")), 1) + ], 10, _hoisted_7$h) + ]), + vue.createElementVNode("div", _hoisted_9$c, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "button-v--selected": $data.canEdit && ((_e2 = $props.editor) == null ? void 0 : _e2.editMode) == 4, "button-v": $data.canEdit && ((_f = $props.editor) == null ? void 0 : _f.editMode) != 4, "button-v--disabled": !$data.canEdit }), + title: $props.editor.i18n("ddei.linkLine"), + onClick: _cache[2] || (_cache[2] = ($event) => $data.canEdit && $options.changeEditMode(4)) + }, [ + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-link-line" }) + ], -1)), + vue.createElementVNode("div", _hoisted_11$6, vue.toDisplayString($props.editor.i18n("ddei.linkLine")), 1) + ], 10, _hoisted_10$6) + ]) + ]), + vue.createElementVNode("div", _hoisted_12$4, vue.toDisplayString($props.editor.i18n("ddei.tools")), 1) + ]); + } + const Tool = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$11], ["__scopeId", "data-v-d02823f2"]]); + const _DDeiCoreToolPanel = class _DDeiCoreToolPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Tool.name); + __publicField3(this, "plugins", [Tool]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Tool.name]) { + for (let i2 in options[Tool.name]) { + newOptions[i2] = options[Tool.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreToolPanel(newOptions); + return panels; + } + } + return _DDeiCoreToolPanel; + } + static modify(fn) { + return _DDeiCoreToolPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreToolPanel, "defaultIns", new _DDeiCoreToolPanel(null)); + let DDeiCoreToolPanel = _DDeiCoreToolPanel; + const _DDeiCoreCommonPanels = class _DDeiCoreCommonPanels extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreExportAndImportPanel, + DDeiCoreFileInfoPanel, + DDeiCoreFileOperatePanel, + DDeiCoreFontAndTextPanel, + DDeiCoreOperatePanel, + DDeiCoreOperatePanel, + DDeiCoreSortPanel, + DDeiCoreStylePanel, + DDeiCoreToolPanel + ]); + } + getPanels(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPanels(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPanels(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCoreCommonPanels(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCoreCommonPanels; + } + static modify(fn) { + return _DDeiCoreCommonPanels.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCommonPanels, "defaultIns", new _DDeiCoreCommonPanels(null)); + let DDeiCoreCommonPanels = _DDeiCoreCommonPanels; + const _sfc_main$10 = { + name: "ddei-core-panel-bottom-shapecount", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + } + }; + const ShapeCount_vue_vue_type_style_index_0_scoped_91252de3_lang = ""; + const _hoisted_1$$ = { class: "ddei-core-panel-bottom-shapecount" }; + function _sfc_render$10(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$$, vue.toDisplayString($props.editor.i18n("ddei.shapesCount")) + " " + vue.toDisplayString((_c2 = (_b2 = $props.editor) == null ? void 0 : _b2.files[(_a3 = $props.editor) == null ? void 0 : _a3.currentFileIndex]) == null ? void 0 : _c2.modelNumber), 1); + } + const ShapeCount = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$10], ["__scopeId", "data-v-91252de3"]]); + const _DDeiCoreShapeCountPanel = class _DDeiCoreShapeCountPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ShapeCount.name); + __publicField3(this, "plugins", [ShapeCount]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ShapeCount.name]) { + for (let i2 in options[ShapeCount.name]) { + newOptions[i2] = options[ShapeCount.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreShapeCountPanel(newOptions); + return panels; + } + } + return _DDeiCoreShapeCountPanel; + } + static modify(fn) { + return _DDeiCoreShapeCountPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreShapeCountPanel, "defaultIns", new _DDeiCoreShapeCountPanel(null)); + let DDeiCoreShapeCountPanel = _DDeiCoreShapeCountPanel; + const _sfc_main$$ = { + name: "ddei-core-panel-bottom-managelayers", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + allowOpenMultLayers: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.allowOpenMultLayers = DDeiEditorUtil.getConfigValue( + "GLOBAL_ALLOW_OPEN_MULT_LAYERS", + this.editor + ); + }, + methods: { + showLayersDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-managerlayers", { + group: "bottom-dialog" + }, { type: 3 }, srcElement); + if (DDeiEditor.ACTIVE_INSTANCE.tempDialogData && DDeiEditor.ACTIVE_INSTANCE.tempDialogData["ddei-core-dialog-managerlayers"]) { + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } else { + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }; + const ManageLayers_vue_vue_type_style_index_0_scoped_e3adc5da_lang = ""; + function _sfc_render$$(_ctx, _cache, $props, $setup, $data, $options) { + return $data.allowOpenMultLayers ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "ddei-core-panel-bottom-managelayers", + onClick: _cache[0] || (_cache[0] = ($event) => $options.showLayersDialog($event)) + }, _cache[1] || (_cache[1] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-layers" }) + ], -1) + ]))) : vue.createCommentVNode("", true); + } + const ManageLayers = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$$], ["__scopeId", "data-v-e3adc5da"]]); + const _DDeiCoreManageLayersPanel = class _DDeiCoreManageLayersPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ManageLayers.name); + __publicField3(this, "plugins", [ManageLayers]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ManageLayers.name]) { + for (let i2 in options[ManageLayers.name]) { + newOptions[i2] = options[ManageLayers.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreManageLayersPanel(newOptions); + return panels; + } + } + return _DDeiCoreManageLayersPanel; + } + static modify(fn) { + return _DDeiCoreManageLayersPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreManageLayersPanel, "defaultIns", new _DDeiCoreManageLayersPanel(null)); + let DDeiCoreManageLayersPanel = _DDeiCoreManageLayersPanel; + const _sfc_main$_ = { + name: "ddei-core-panel-bottom-play", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: {} + }; + const Play_vue_vue_type_style_index_0_scoped_7e2fc5b7_lang = ""; + const _hoisted_1$_ = { class: "ddei-core-panel-bottom-play" }; + function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$_, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-play" }) + ], -1) + ])); + } + const Play = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$_], ["__scopeId", "data-v-7e2fc5b7"]]); + const _DDeiCorePlayPanel = class _DDeiCorePlayPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Play.name); + __publicField3(this, "plugins", [Play]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Play.name]) { + for (let i2 in options[Play.name]) { + newOptions[i2] = options[Play.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCorePlayPanel(newOptions); + return panels; + } + } + return _DDeiCorePlayPanel; + } + static modify(fn) { + return _DDeiCorePlayPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePlayPanel, "defaultIns", new _DDeiCorePlayPanel(null)); + let DDeiCorePlayPanel = _DDeiCorePlayPanel; + const stage = { + "id": "DDeiStage", + "name": "ddei.control.stage", + "code": "stage", + "desc": "整体画布的属性", + "type": "DDeiStage", + /** + * 定义组件属性 + * 样式属性会影响图形的显示,修改样式属性也会刷新图形 + * 数据属性一般用于业务计算,数据属性一般不会刷新图形,除非数据属性和样式属性产生联动关系 + * 事件属性一般用来作为扩展用 + * 属性采用三层结构:组---子分组---属性,在基础json中先定义而后使用(可以复写) + * 特殊属性: + * code属性编码在统一个组中,code唯一 + * mapping建立与模型中属性的映射关系,为null时为默认,采用code指向的属性映射;mapping为[]时交由控件编辑器处理值映射 + * hiddenTitle隐藏标题,为true时不会显示属性标题,默认false不隐藏标题 + * display控件显示模式,有row(横向排列)和column(纵向排列)两个选项,默认row + */ + attrs: [ + { + "code": "paper.type", + "name": "ddei.property.paperType", + "desc": "用来快速选择纸张的类型,以便于套用相关的样式", + "controlType": "combox", + "dataType": "string", + "dataSource": { + "type": "config", + "data": "PAPER_DATASOURCE", + "text": "name", + "value": "code", + "desc": "desc" + }, + "canSearch": false, + "itemStyle": { width: 170, align: "left", paddingLeft: "10px", height: 25, col: 1, row: 8, imgWidth: 20, imgHeight: 20 }, + "defaultValue": "A4", + "cascadeDisplay": { "ddei.property.ds.none": { hidden: ["paper.direct", "paper.width", "paper.height", "paper.unit"] }, "ddei.property.ds.custom": { show: ["paper.direct", "paper.width", "paper.height", "paper.unit"] }, notempty: { show: ["paper.direct"], hidden: ["paper.width", "paper.height", "paper.unit"] }, empty: { hidden: ["paper.width", "paper.height", "paper.unit"] }, default: { hidden: ["paper.width", "paper.height", "paper.unit"] } }, + "type": 1 + }, + { + "code": "paper.width", + "name": "ddei.property.width", + "desc": "用来设置纸张的宽度,以便于套用相关的样式", + "controlType": "text", + "dataType": "integer", + "defaultValue": 210, + "type": 1 + }, + { + "code": "paper.height", + "name": "ddei.property.height", + "desc": "用来设置纸张的高度,以便于套用相关的样式", + "controlType": "text", + "dataType": "integer", + "defaultValue": 297, + "type": 1 + }, + { + "code": "paper.unit", + "name": "ddei.property.unit", + "desc": "用来设置纸张的宽高单位,以便于套用相关的样式", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.mm", "value": "mm" }, { "text": "ddei.property.ds.cm", "value": "cm" }, { "text": "ddei.property.ds.m", "value": "m" }, { "text": "ddei.property.ds.inch", "value": "inch" }, { "text": "ddei.property.ds.px", "value": "px" }], + "defaultValue": "mm" + }, + { + "code": "paper.direct", + "name": "ddei.property.direct", + "desc": "用来设置纸张的方向,以便于套用相关的样式", + "controlType": "radio", + "dataSource": [{ "text": "ddei.property.ds.transverse", "value": 1 }, { "text": "ddei.property.ds.portrait", "value": 2 }], + "dataType": "integer", + "defaultValue": 2, + "type": 1 + }, + { + "code": "mark.type", + "name": "ddei.property.markType", + "desc": "用来快速选择水印的类型,以便于套用相关的样式", + "controlType": "radio", + "dataSource": [{ "text": "ddei.property.ds.none", "value": 0 }, { "text": "ddei.property.ds.text", "value": 1 }, { "text": "ddei.property.ds.image", "value": 2 }], + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "cascadeDisplay": { 1: { show: ["mark.data", "mark.direct", "mark.opacity", "mark.font.family", "mark.font.size", "mark.font.color"] }, 2: { show: ["mark.data", "mark.direct", "mark.opacity"], hidden: ["mark.font.family", "mark.font.size", "mark.font.color"] }, empty: { hidden: ["mark.data", "mark.direct", "mark.opacity", "mark.font.family", "mark.font.size", "mark.font.color"] } }, + "mapping": [], + "type": 1 + }, + { + "code": "mark.data", + "name": "ddei.property.mark", + "desc": "当水印类型为1时,此字段将显示文本,当类行为2时,此字段显示为图片", + "controlType": "image", + "dataType": "string", + "defaultValue": "", + "type": 1 + }, + { + "code": "mark.direct", + "name": "ddei.property.markDirect", + "desc": "水印的显示方向", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.ltrd", "value": "1" }, { "text": "ddei.property.ds.rtld", "value": "2" }, { "text": "ddei.property.ds.horizontal", "value": "3" }], + "defaultValue": "1", + "type": 1 + }, + { + "code": "mark.opacity", + "name": "ddei.property.opacity", + "desc": "透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "dataType": "float", + "defaultValue": 0.25, + "display": "column" + }, + { + "code": "mark.font.family", + "name": "ddei.property.font", + "desc": "文本的字体名称", + "controlType": "combox", + "dataType": "string", + "dataSource": { + "type": "config", + "data": "fonts", + "text": "ch", + "value": "en", + "bold": "isSystemDefault", + "fontFamily": "en" + }, + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 }, + "canSearch": true, + "defaultValue": "" + }, + { + "code": "mark.font.size", + "name": "ddei.property.size", + "desc": "文本的字体大小", + "max": 50, + "min": 5, + "step": 0.5, + "controlType": "font-size", + "dataType": "float", + "defaultValue": 14 + }, + { + "code": "mark.font.color", + "name": "ddei.property.color", + "desc": "文本的颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "ruler.display", + "name": "ddei.property.ruler", + "desc": "是否显示标尺", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 1, + "display": "column", + "hiddenTitle": true, + "type": 1, + "cascadeDisplay": { 1: { show: ["ruler.unit"] }, default: { show: ["ruler.unit"] }, empty: { hidden: ["ruler.unit"] } } + }, + { + "code": "ruler.unit", + "name": "ddei.property.unit", + "desc": "用来设置标尺单位样式", + "controlType": "combox", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.mm", "value": "mm" }, { "text": "ddei.property.ds.cm", "value": "cm" }, { "text": "ddei.property.ds.m", "value": "m" }, { "text": "ddei.property.ds.inch", "value": "inch" }, { "text": "ddei.property.ds.px", "value": "px" }], + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 }, + "defaultValue": "mm", + "type": 1 + }, + { + "code": "grid.display", + "name": "ddei.property.grid", + "desc": "设置网格线样式", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.none", "value": "0" }, { "text": "ddei.property.ds.line", "value": "1" }, { "text": "ddei.property.ds.point", "value": "2" }], + "defaultValue": "1", + "type": 1 + }, + { + "code": "global.jumpline", + "name": "ddei.property.jumpline", + "desc": "遇到线交叉时,展示跳线", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 1, + "type": 1, + "display": "column", + "hiddenTitle": true + } + ], + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-setting", + subGroups: [ + { + name: "ddei.paper", + attrs: ["paper.type", "paper.width", "paper.height", "paper.unit", "paper.direct"] + }, + { + name: "ddei.mark", + attrs: ["mark.type", "mark.data", "mark.direct", "mark.opacity", "mark.font.family", "mark.font.size", "mark.font.color"] + }, + { + name: "ddei.assistant", + attrs: ["ruler.display", "ruler.unit", "grid.display", "global.jumpline"] + } + ] + } + ] + }; + const __vite_glob_0_99$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: stage + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$Z = { + name: "ddei-core-panel-bottom-suitratio", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + allowStageRatio: true, + currentStage: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2; + this.allowStageRatio = DDeiEditorUtil.getConfigValue( + "GLOBAL_ALLOW_STAGE_RATIO", + this.editor + ); + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + this.currentStage = sheet == null ? void 0 : sheet.stage; + }, + methods: { + /** + * 自动设置页面模式, + */ + autoRatio(type) { + if (type == 1) { + let maxOutRect = DDeiAbstractShape.getOutRectByPV( + this.editor.ddInstance.stage.getLayerModels() + ); + if (maxOutRect.width > 0 && maxOutRect.height > 0) { + let canvas = this.editor.ddInstance.render.canvas; + let rat1 = this.editor.ddInstance.render.ratio; + let stageRatio2 = this.currentStage.getStageRatio(); + let hscrollWeight = 0; + let vscrollWeight = 0; + if (this.editor.ddInstance.stage.render.hScroll) { + hscrollWeight = 15; + } + if (this.editor.ddInstance.stage.render.vScroll) { + vscrollWeight = 15; + } + let ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState( + this.editor.ddInstance.stage, + "ruler.display", + true + ); + let ruleWeight = 0; + if (ruleDisplay == 1 || ruleDisplay == "1") { + ruleWeight = 16; + } + let cWidth = canvas.width / rat1 - ruleWeight - vscrollWeight; + let cHeight = canvas.height / rat1 - ruleWeight - hscrollWeight; + let wScale = maxOutRect.width * stageRatio2 / cWidth; + let hScale = maxOutRect.height * stageRatio2 / cHeight; + let scale = wScale; + if (wScale < hScale) { + scale = hScale; + } + let sc = stageRatio2 / scale; + this.setRatio(sc); + setTimeout(() => { + var _a3, _b2, _c2, _d2; + (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.CenterStageWPV); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.bus) == null ? void 0 : _d2.executeAll(100); + }, 10); + } + } + }, + /** + * 设置缩放比率 + */ + setRatio(ratio) { + var _a3; + if (ratio < this.min) { + ratio = this.min; + } else if (ratio > this.max) { + ratio = this.max; + } + (_a3 = this.currentStage) == null ? void 0 : _a3.setStageRatio(ratio); + } + } + }; + const SuitRatio_vue_vue_type_style_index_0_scoped_4eeb5012_lang = ""; + const _hoisted_1$Z = ["title"]; + function _sfc_render$Z(_ctx, _cache, $props, $setup, $data, $options) { + return $data.allowStageRatio ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "ddei-core-panel-bottom-suitratio", + onClick: _cache[0] || (_cache[0] = ($event) => $options.autoRatio(1)), + title: $props.editor.i18n("ddei.wholePage") + }, _cache[1] || (_cache[1] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-suit-ratio" }) + ], -1) + ]), 8, _hoisted_1$Z)) : vue.createCommentVNode("", true); + } + const SuitRatio = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["render", _sfc_render$Z], ["__scopeId", "data-v-4eeb5012"]]); + const _DDeiCoreSuitRatioPanel = class _DDeiCoreSuitRatioPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SuitRatio.name); + __publicField3(this, "plugins", [SuitRatio]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SuitRatio.name]) { + for (let i2 in options[SuitRatio.name]) { + newOptions[i2] = options[SuitRatio.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSuitRatioPanel(newOptions); + return panels; + } + } + return _DDeiCoreSuitRatioPanel; + } + static modify(fn) { + return _DDeiCoreSuitRatioPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSuitRatioPanel, "defaultIns", new _DDeiCoreSuitRatioPanel(null)); + let DDeiCoreSuitRatioPanel = _DDeiCoreSuitRatioPanel; + const _sfc_main$Y = { + name: "ddei-core-panel-bottom-changeratio", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + delta: { + type: Number, + default: 0.05 + }, + min: { + type: Number, + default: 0.1 + }, + max: { + type: Number, + default: 4 + }, + dialog: { + type: Boolean, + default: true + }, + range: { + type: Boolean, + default: true + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + ratioInputValue: 0, + stageRatio: 1, + allowStageRatio: true, + currentStage: null + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("currentStage.ratio", function(newVal, oldVal) { + if (DDeiEditorUtil.getConfigValue("GLOBAL_ALLOW_STAGE_RATIO", this.editor)) { + if (oldVal && oldVal != newVal) { + if (!this.changeCurrentStage) { + this.ratioInputValue = parseFloat(newVal) * 100; + this.stageRatio = newVal; + if (!this.tempSheetChange) { + this.changeRatio(); + } else { + delete this.tempSheetChange; + } + } else { + this.changeCurrentStage = false; + } + } + } + }); + this.$watch("stageRatio", function(newVal, oldVal) { + if (DDeiEditorUtil.getConfigValue("GLOBAL_ALLOW_STAGE_RATIO", this.editor)) { + this.setRatio(newVal); + } + }); + }, + mounted() { + var _a3, _b2; + this.editor.ddInstance.ratioWatch = true; + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + this.currentStage = sheet == null ? void 0 : sheet.stage; + this.allowStageRatio = DDeiEditorUtil.getConfigValue( + "GLOBAL_ALLOW_STAGE_RATIO", + this.editor + ); + }, + methods: { + showChangeRatioDialog(evt) { + var _a3; + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-changeratio", { + ratio: (_a3 = this.currentStage) == null ? void 0 : _a3.ratio, + min: this.min, + max: this.max, + callback: { + ok: this.setRatio + }, + group: "bottom-dialog" + }, { type: 2 }, srcElement); + if (DDeiEditor.ACTIVE_INSTANCE.tempDialogData && DDeiEditor.ACTIVE_INSTANCE.tempDialogData["ddei-core-dialog-changeratio"]) { + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } else { + this.editor.changeState(DDeiEditorState.DESIGNING); + } + }, + /** + * 增加缩放比率 + */ + addRatio(deltaRatio) { + var _a3, _b2, _c2; + let ratio = (_a3 = this.currentStage) == null ? void 0 : _a3.getStageRatio(); + let newRatio = parseFloat((ratio + deltaRatio).toFixed(2)); + if (newRatio < this.min) { + newRatio = this.min; + } else if (newRatio > this.max) { + newRatio = this.max; + } + (_b2 = this.currentStage) == null ? void 0 : _b2.setStageRatio(newRatio); + this.stageRatio = (_c2 = this.currentStage) == null ? void 0 : _c2.ratio; + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + /** + * 设置缩放比率 + */ + setRatio(ratio) { + var _a3, _b2; + if (ratio < this.min) { + ratio = this.min; + } else if (ratio > this.max) { + ratio = this.max; + } + (_a3 = this.currentStage) == null ? void 0 : _a3.setStageRatio(ratio); + this.stageRatio = (_b2 = this.currentStage) == null ? void 0 : _b2.ratio; + }, + /** + * 修改当前的全局缩放比率 + */ + changeRatio() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_a3 = this.currentStage) == null ? void 0 : _a3.ratio) || ((_b2 = this.currentStage) == null ? void 0 : _b2.ratio) == 0) { + if (((_c2 = this.currentStage) == null ? void 0 : _c2.oldRatio) || ((_d2 = this.currentStage) == null ? void 0 : _d2.oldRatio) == 0) { + (_f = (_e2 = this.editor) == null ? void 0 : _e2.bus) == null ? void 0 : _f.push( + DDeiEnumBusCommandType.ChangeStageRatio, + { + oldValue: this.currentStage.oldRatio, + newValue: this.currentStage.ratio + }, + null + ); + (_h = (_g = this.editor) == null ? void 0 : _g.bus) == null ? void 0 : _h.executeAll(); + } + } + } + } + }; + const ChangeRatio_vue_vue_type_style_index_0_scoped_f8d489b0_lang = ""; + const _hoisted_1$Y = { + key: 0, + class: "ddei-core-panel-bottom-changeratio" + }; + const _hoisted_2$I = { + key: 0, + class: "icon expbtn", + "aria-hidden": "true" + }; + const _hoisted_3$E = { + key: 0, + class: "icon expbtn", + "aria-hidden": "true" + }; + const _hoisted_4$u = ["min", "max", "step"]; + function _sfc_render$Y(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2; + return $data.allowStageRatio ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$Y, [ + $props.range ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: vue.normalizeClass({ "ddei-core-panel-bottom-changeratio__combox": true, "ddei-core-panel-bottom-changeratio__combox__dialog": $props.dialog }), + onClick: _cache[0] || (_cache[0] = ($event) => $props.dialog && $options.showChangeRatioDialog($event)) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(parseInt(((_a3 = $data.currentStage) == null ? void 0 : _a3.ratio) * 100)) + "% ", 1), + $props.dialog ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$I, _cache[5] || (_cache[5] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ], 2)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", { + onClick: _cache[1] || (_cache[1] = ($event) => $options.addRatio(-$props.delta)) + }, _cache[6] || (_cache[6] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-reduce" }) + ], -1) + ])), + !$props.range ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: vue.normalizeClass({ "ddei-core-panel-bottom-changeratio__combox": true, "ddei-core-panel-bottom-changeratio__combox__dialog": $props.dialog }), + onClick: _cache[2] || (_cache[2] = ($event) => $props.dialog && $options.showChangeRatioDialog($event)) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(parseInt(((_b2 = $data.currentStage) == null ? void 0 : _b2.ratio) * 100)) + "% ", 1), + $props.dialog ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_3$E, _cache[7] || (_cache[7] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ], 2)) : vue.createCommentVNode("", true), + vue.withDirectives(vue.createElementVNode("input", { + type: "range", + min: $props.min, + max: $props.max, + step: $props.delta, + "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.stageRatio = $event), + autocomplete: "off", + name: "ddei-core-panel-bottom-changeratio__range" + }, null, 8, _hoisted_4$u), [ + [vue.vShow, $props.range], + [vue.vModelText, $data.stageRatio] + ]), + vue.createElementVNode("div", { + onClick: _cache[4] || (_cache[4] = ($event) => $options.addRatio($props.delta)) + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-add" }) + ], -1) + ])) + ])) : vue.createCommentVNode("", true); + } + const ChangeRatio$1 = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$Y], ["__scopeId", "data-v-f8d489b0"]]); + const _DDeiCoreChangeRatioPanel = class _DDeiCoreChangeRatioPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ChangeRatio$1.name); + __publicField3(this, "plugins", [ChangeRatio$1]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChangeRatio$1.name]) { + for (let i2 in options[ChangeRatio$1.name]) { + newOptions[i2] = options[ChangeRatio$1.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreChangeRatioPanel(newOptions); + return panels; + } + } + return _DDeiCoreChangeRatioPanel; + } + static modify(fn) { + return _DDeiCoreChangeRatioPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreChangeRatioPanel, "defaultIns", new _DDeiCoreChangeRatioPanel(null)); + let DDeiCoreChangeRatioPanel = _DDeiCoreChangeRatioPanel; + const _sfc_main$X = { + name: "ddei-core-panel-bottom-sheets", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + max: { + type: Number, + default: 0 + }, + drag: { + type: Boolean, + default: true + }, + create: { + type: Boolean, + default: true + }, + rename: { + type: Boolean, + default: true + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + file: null, + maxOpenSize: 0, + openIndex: 0, + allowEditSheet: true + //是否允许编辑页签 + // sslink: null, + // user: null, + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2; + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const { width, height } = entry.contentRect; + if (width != 0 && height != 0) { + let pagesEles = document.getElementsByClassName("ddei-core-panel-bottom-pages"); + let pageEles = document.getElementsByClassName("ddei-core-panel-bottom-pages-page"); + let divWidth = 0; + let pagesWidth = 1e3; + if (pageEles.length > 0) { + divWidth = pageEles[0].clientWidth; + } + if (!divWidth) { + divWidth = 70; + } + if (pagesEles.length > 0) { + pagesWidth = pagesEles[0].clientWidth; + } + let size = parseInt(pagesWidth / divWidth); + if (size > this.maxOpenSize && this.openIndex > 0) { + this.openIndex--; + } + this.maxOpenSize = size - 1; + } + } + }); + resizeObserver.observe(this.$refs.bottomSheets); + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + this.changeCurrentStage = true; + this.editor.currentStage = sheet == null ? void 0 : sheet.stage; + this.allowEditSheet = ((_c2 = this.editor.ddInstance) == null ? void 0 : _c2.AC_DESIGN_EDIT) != false ? true : false; + this.file = file; + }, + methods: { + /** + * 在存在显示隐藏的情况下移动tab + */ + moveItem(index = 0) { + var _a3, _b2; + if (index != 0) { + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheets = file == null ? void 0 : file.sheets; + this.openIndex += index; + if (this.openIndex > sheets.length - this.maxOpenSize) { + this.openIndex = sheets.length - this.maxOpenSize; + } else if (this.openIndex < 0) { + this.openIndex = 0; + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + }, + /** + * sheet开始拖拽移动 + */ + sheetDragStart(sheetEle, evt) { + this.dragSheetEle = evt.currentTarget; + }, + /** + * 拖拽元素移动 + */ + sheetDragOver(e) { + if (this.dragSheetEle) { + let parentDiv = this.dragSheetEle.parentElement; + let sourceIndex = -1; + let targetIndex = -1; + let children = parentDiv.children; + for (let i2 = 0; i2 < children.length - 2; i2++) { + children[i2].style.borderLeft = ""; + children[i2].style.borderRight = ""; + if (children[i2] == this.dragSheetEle) { + sourceIndex = i2; + } else if (e.target == children[i2]) { + targetIndex = i2; + } + } + if (sourceIndex != -1 && targetIndex != -1) { + this.sourceSheetIndex = sourceIndex; + if (targetIndex == children.length - 3) { + let pos = DDeiUtil.getDomAbsPosition(children[targetIndex]); + let halfPos = pos.left + children[targetIndex].offsetWidth / 2; + if (halfPos <= e.clientX && e.clientX <= pos.left + children[targetIndex].offsetWidth) { + this.changeSheetIndex = targetIndex; + children[targetIndex].style.borderRight = "2px solid #017fff"; + } else { + this.changeSheetIndex = targetIndex - 1; + children[targetIndex].style.borderLeft = "2px solid #017fff"; + } + } else { + this.changeSheetIndex = targetIndex - 1; + children[targetIndex].style.borderLeft = "2px solid #017fff"; + } + } + e.preventDefault(); + } + }, + /** + * 拖拽元素放开 + */ + sheetDragDrop(e) { + var _a3; + if ((this.sourceSheetIndex || this.sourceSheetIndex == 0) && (this.changeSheetIndex || this.changeSheetIndex == 0)) { + let file = this.editor.files[this.editor.currentFileIndex]; + let sheet = file.sheets[this.sourceSheetIndex]; + let currentSheet = file.sheets[file.currentSheetIndex]; + file.sheets[this.sourceSheetIndex] = null; + file.sheets.splice(this.changeSheetIndex + 1, 0, sheet); + for (let j2 = file.sheets.length; j2 >= 0; j2--) { + if (file.sheets[j2] == null) { + file.sheets.splice(j2, 1); + } + } + for (let j2 = file.sheets.length; j2 >= 0; j2--) { + if (currentSheet == file.sheets[j2]) { + file.currentSheetIndex = j2; + } + } + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu"] + }); + this.editor.bus.executeAll(); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + this.dragSheetEle = null; + this.sourceSheetIndex = null; + this.changeSheetIndex = null; + }, + /** + * 开始修改页标题 + */ + startChangeSheetName(sheet, evt) { + let ele = evt.target; + let domPos = DDeiUtil.getDomAbsPosition(ele); + let editor = DDeiEditor.ACTIVE_INSTANCE; + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let input = document.getElementById(editor.id + "_change_sheet_name_input"); + if (!input) { + input = document.createElement("input"); + input.setAttribute("id", editor.id + "_change_sheet_name_input"); + input.style.position = "absolute"; + input.style.fontSize = "16px"; + editorEle.appendChild(input); + input.onblur = function() { + var _a3; + if (input.value) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + let file = editor2 == null ? void 0 : editor2.files[editor2 == null ? void 0 : editor2.currentFileIndex]; + let sheet2 = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + if (input.value != sheet2.name) { + sheet2.name = input.value; + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu"] + }); + editor2.bus.executeAll(); + editor2.changeState(DDeiEditorState.DESIGNING); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } + }; + input.onkeydown = function(e) { + var _a3; + if (e.keyCode == 13) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + let file = editor2 == null ? void 0 : editor2.files[editor2 == null ? void 0 : editor2.currentFileIndex]; + let sheet2 = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + if (input.value != sheet2.name) { + sheet2.name = input.value; + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu"] + }); + editor2.bus.executeAll(); + editor2.changeState(DDeiEditorState.DESIGNING); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } else if (e.keyCode == 27) { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + editor2.changeState(DDeiEditorState.DESIGNING); + } + }; + } + input.style.width = ele.offsetWidth + "px"; + input.style.height = ele.offsetHeight + "px"; + input.style.left = domPos.left - editorDomPos.left + "px"; + input.style.top = domPos.top - editorDomPos.top + "px"; + input.style.outline = "1px solid #017fff"; + input.style.border = "none"; + input.style.borderRadius = "1px"; + input.value = sheet.name; + input.style.display = "block"; + input.style.background = "var(--background)"; + input.style.color = "var(--text)"; + input.selectionStart = 0; + input.selectionEnd = input.value.length; + input.focus(); + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + }, + /** + * 创建一个sheet + */ + newSheet() { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheets = file == null ? void 0 : file.sheets; + if (this.max && sheets.length >= this.max) { + return; + } + let ddInstance = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance; + if (file && sheets && ddInstance) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_SHEET_BEFORE", "ADD_SHEET", null, ddInstance, null); + if (rsState != -1) { + let i2 = sheets.length + 1; + let stage2 = DDeiStage.initByJSON( + { id: "stage" }, + { currentDdInstance: ddInstance } + ); + let pageText = this.editor.i18n("ddei.page"); + sheets.push( + new DDeiSheet({ + name: pageText + "-" + i2, + desc: pageText + "-" + i2, + stage: stage2 + }) + ); + file.changeSheet(sheets.length - 1); + ddInstance.stage.destroyRender(); + ddInstance.stage = stage2; + this.editor.currentStage = stage2; + stage2.initRender(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_SHEET_AFTER", "ADD_SHEET", null, ddInstance, null); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_d2 = this.editor.editorViewer) == null ? void 0 : _d2.changeFileModifyDirty(); + (_e2 = ddInstance.bus) == null ? void 0 : _e2.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + (_f = ddInstance.bus) == null ? void 0 : _f.push(DDeiEnumBusCommandType.RefreshShape); + (_g = ddInstance.bus) == null ? void 0 : _g.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + DDeiEditorUtil.closeDialogs(this.editor, null, true); + DDeiEditorUtil.closeDialogs(this.editor, null, false); + let activeIndex = sheets.length - 1; + this.openIndex = activeIndex + 1 - this.maxOpenSize; + if (this.openIndex < 0) { + this.openIndex = 0; + } + } + } + }, + /** + * 切换sheet + */ + changeSheet(index) { + var _a3, _b2, _c2; + let file = (_b2 = this.editor) == null ? void 0 : _b2.files[(_a3 = this.editor) == null ? void 0 : _a3.currentFileIndex]; + let sheets = file == null ? void 0 : file.sheets; + let ddInstance = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance; + if (file && sheets && ddInstance && (index >= 0 || index < sheets.length)) { + if (index != file.currentSheetIndex) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_CHANGE_SHEET_BEFORE", "CHANGE_SHEET", null, ddInstance, null); + if (rsState != -1) { + this.tempSheetChange = true; + file.changeSheet(index); + let stage2 = sheets[index].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage.destroyRender(); + ddInstance.stage = stage2; + this.editor.currentStage = stage2; + stage2.initRender(); + DDeiEditorUtil.invokeCallbackFunc("EVENT_CHANGE_SHEET_AFTER", "CHANGE_SHEET", null, ddInstance, null); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + DDeiEditorUtil.closeDialogs(this.editor, null, true); + DDeiEditorUtil.closeDialogs(this.editor, null, false); + this.showPopPicker(stage2); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }, + showPopPicker(stage2) { + var _a3; + if (((_a3 = stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + let models = Array.from(stage2.selectedModels.values()); + if ((models == null ? void 0 : models.length) > 0) { + let height = 100; + let modelPos = DDeiUtil.getModelsDomAbsPosition(models); + let left = modelPos.left + modelPos.width / 2; + let top = modelPos.top + modelPos.height / 2; + if (modelPos.top - height <= modelPos.cTop) { + if (modelPos.height > 400) { + top = top + height + 20; + } else { + top = top + modelPos.height / 2 + 20; + } + } else { + top = top - height; + } + if (top < 0) { + top = modelPos.cTop + modelPos.cHeight / 2; + } + if (left < 0) { + left = 0; + } + DDeiEditorUtil.showDialog(this.editor, "ddei-core-dialog-quickpop", { + group: "canvas-pop" + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + } + }, + /** + * 显示右键菜单 + */ + showMenu(sheet, evt) { + DDeiUtil.showContextMenu(sheet, this.editor.ddInstance, evt); + evt.preventDefault(); + return false; + } + } + }; + const Sheets_vue_vue_type_style_index_0_scoped_d059d47d_lang = ""; + const _hoisted_1$X = { + key: 0, + class: "ddei-core-panel-bottom-pages-page" + }; + const _hoisted_2$H = ["onClick", "onContextmenu", "onDblclick", "title"]; + function _sfc_render$X(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ + $data.allowEditSheet && $props.create && (!$props.max || ((_d2 = (_c2 = (_b2 = $props.editor) == null ? void 0 : _b2.files[(_a3 = $props.editor) == null ? void 0 : _a3.currentFileIndex]) == null ? void 0 : _c2.sheets) == null ? void 0 : _d2.length) < $props.max) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "ddei-core-panel-bottom-addpage", + onClick: _cache[0] || (_cache[0] = (...args) => $options.newSheet && $options.newSheet(...args)) + }, _cache[6] || (_cache[6] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-add" }) + ], -1) + ]))) : vue.createCommentVNode("", true), + vue.createElementVNode("div", { + class: "ddei-core-panel-bottom-pages", + ref: "bottomSheets", + onMouseup: _cache[5] || (_cache[5] = ($event) => $props.drag && $options.sheetDragDrop($event)) + }, [ + $data.maxOpenSize == 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$X, _cache[7] || (_cache[7] = [ + vue.createElementVNode("span", null, null, -1) + ]))) : vue.createCommentVNode("", true), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_g = (_f = $props.editor) == null ? void 0 : _f.files[(_e2 = $props.editor) == null ? void 0 : _e2.currentFileIndex]) == null ? void 0 : _g.sheets, (sheet, index) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + onMousedown: _cache[1] || (_cache[1] = ($event) => $data.allowEditSheet && $props.drag && $options.sheetDragStart(null, $event)), + onClick: vue.withModifiers(($event) => $options.changeSheet(index), ["left"]), + onContextmenu: vue.withModifiers(($event) => $options.showMenu(sheet, $event), ["right"]), + onMousemove: _cache[2] || (_cache[2] = ($event) => $props.drag && $options.sheetDragOver($event)), + onDblclick: ($event) => $data.allowEditSheet && $props.rename && $options.startChangeSheetName(sheet, $event), + class: vue.normalizeClass({ "ddei-core-panel-bottom-pages-page": sheet.active == 0, "ddei-core-panel-bottom-pages-page--selected": sheet.active == 1 }), + title: sheet.name + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(sheet.name), 1) + ], 42, _hoisted_2$H)), [ + [vue.vShow, index >= $data.openIndex && index < $data.openIndex + $data.maxOpenSize] + ]); + }), 256)), + vue.withDirectives(vue.createElementVNode("div", { + class: "ddei-core-panel-bottom-pages-movebox", + onClick: _cache[3] || (_cache[3] = ($event) => $options.moveItem(-1)) + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-left" }) + ], -1) + ]), 512), [ + [vue.vShow, ((_k = (_j = (_i = $props.editor) == null ? void 0 : _i.files[(_h = $props.editor) == null ? void 0 : _h.currentFileIndex]) == null ? void 0 : _j.sheets) == null ? void 0 : _k.length) > $data.maxOpenSize] + ]), + vue.withDirectives(vue.createElementVNode("div", { + class: "ddei-core-panel-bottom-pages-movebox", + onClick: _cache[4] || (_cache[4] = ($event) => $options.moveItem(1)) + }, _cache[9] || (_cache[9] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-right" }) + ], -1) + ]), 512), [ + [vue.vShow, ((_o = (_n = (_m = $props.editor) == null ? void 0 : _m.files[(_l = $props.editor) == null ? void 0 : _l.currentFileIndex]) == null ? void 0 : _n.sheets) == null ? void 0 : _o.length) > $data.maxOpenSize] + ]) + ], 544) + ], 64); + } + const Sheets = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$X], ["__scopeId", "data-v-d059d47d"]]); + const _DDeiCoreSheetsPanel = class _DDeiCoreSheetsPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Sheets.name); + __publicField3(this, "plugins", [Sheets]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[Sheets.name]) { + for (let i2 in options[Sheets.name]) { + newOptions[i2] = options[Sheets.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSheetsPanel(newOptions); + return panels; + } + } + return _DDeiCoreSheetsPanel; + } + static modify(fn) { + return _DDeiCoreSheetsPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSheetsPanel, "defaultIns", new _DDeiCoreSheetsPanel(null)); + let DDeiCoreSheetsPanel = _DDeiCoreSheetsPanel; + const _DDeiCoreBottomPanels = class _DDeiCoreBottomPanels extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreShapeCountPanel, + DDeiCoreManageLayersPanel, + DDeiCorePlayPanel, + DDeiCoreSuitRatioPanel, + DDeiCoreChangeRatioPanel, + DDeiCoreSheetsPanel + ]); + } + getPanels(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPanels(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPanels(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCoreBottomPanels(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCoreBottomPanels; + } + static modify(fn) { + return _DDeiCoreBottomPanels.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBottomPanels, "defaultIns", new _DDeiCoreBottomPanels(null)); + let DDeiCoreBottomPanels = _DDeiCoreBottomPanels; + const _sfc_main$W = { + name: "ddei-core-panel-toolbox-simple", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + groups: null, + forceRefresh: true, + forceRefreshGroup: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const { width, height } = entry.contentRect; + if (width != 0 && height != 0) { + this.width = width; + this.height = height; + this.resetPosition(width, height); + } + } + }); + resizeObserver.observe(middleCanvas); + this.refreshData(); + }, + methods: { + resetPosition(width, height) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + if (((_a3 = this.options) == null ? void 0 : _a3.direct) == 2) { + this.$refs["toolbox"].style.maxWidth = width - 80 + "px"; + this.$refs["toolbox"].style.flexDirection = ""; + if ((_b2 = this.options) == null ? void 0 : _b2.width) { + this.$refs["toolbox"].style.width = this.options.width; + } else { + this.$refs["toolbox"].style.width = ""; + } + if ((_c2 = this.options) == null ? void 0 : _c2.height) { + this.$refs["toolbox"].style.height = this.options.height; + } else { + this.$refs["toolbox"].style.height = "40px"; + } + } else { + this.$refs["toolbox"].style.flexDirection = "column"; + this.$refs["toolbox"].style.maxHeight = height - 80 + "px"; + if ((_d2 = this.options) == null ? void 0 : _d2.width) { + this.$refs["toolbox"].style.width = this.options.width; + } else { + this.$refs["toolbox"].style.width = "40px"; + } + if ((_e2 = this.options) == null ? void 0 : _e2.height) { + this.$refs["toolbox"].style.height = this.options.height; + } else { + this.$refs["toolbox"].style.height = ""; + } + } + let cachePos = null; + if (((_f = this.options) == null ? void 0 : _f.drag) == 1) { + cachePos = localStorage.getItem("pos-" + this.editor.id + "-ddei-core-panel-toolbox-simple"); + } + if (!cachePos) { + switch ((_g = this.options) == null ? void 0 : _g.position) { + case 2: + this.$refs["toolbox"].style.left = (width - this.$refs["toolbox"].clientWidth) / 2 + "px"; + this.$refs["toolbox"].style.top = "30px"; + break; + case 3: + this.$refs["toolbox"].style.left = width - this.$refs["toolbox"].clientWidth - 30 + "px"; + this.$refs["toolbox"].style.top = "30px"; + break; + case 4: + this.$refs["toolbox"].style.left = width - this.$refs["toolbox"].clientWidth - 30 + "px"; + this.$refs["toolbox"].style.top = (height - this.$refs["toolbox"].clientHeight) / 2 + "px"; + break; + case 5: + this.$refs["toolbox"].style.left = width - this.$refs["toolbox"].clientWidth - 30 + "px"; + this.$refs["toolbox"].style.top = height - this.$refs["toolbox"].clientHeight - 30 + "px"; + break; + case 6: + this.$refs["toolbox"].style.left = (width - this.$refs["toolbox"].clientWidth) / 2 + "px"; + this.$refs["toolbox"].style.top = height - this.$refs["toolbox"].clientHeight - 30 + "px"; + break; + case 7: + this.$refs["toolbox"].style.left = "30px"; + this.$refs["toolbox"].style.top = height - this.$refs["toolbox"].clientHeight - 30 + "px"; + break; + case 8: + this.$refs["toolbox"].style.left = "30px"; + this.$refs["toolbox"].style.top = (height - this.$refs["toolbox"].clientHeight) / 2 + "px"; + break; + case 9: + this.$refs["toolbox"].style.left = (width - this.$refs["toolbox"].clientWidth) / 2 + "px"; + this.$refs["toolbox"].style.top = (height - this.$refs["toolbox"].clientHeight) / 2 + "px"; + break; + default: + this.$refs["toolbox"].style.left = "30px"; + this.$refs["toolbox"].style.top = "30px"; + break; + } + } else { + let posJson = JSON.parse(cachePos); + this.$refs["toolbox"].style.left = posJson.left + "px"; + this.$refs["toolbox"].style.top = posJson.top + "px"; + } + this.$refs["toolbox"].style.display = "flex"; + }, + refreshData() { + var _a3, _b2, _c2; + this.editor.needControlIcon = true; + this.editor.toolBarViewer = this; + if (this.editor.ddInstance && !this.editor.ddInstance.render) { + this.editor.ddInstance.initRender(); + } + if (!this.groups) { + let groups = []; + for (let i2 = 0; i2 < ((_b2 = (_a3 = this.options) == null ? void 0 : _a3.groups) == null ? void 0 : _b2.length); i2++) { + let group2 = clone(this.options.groups[i2]); + let controls2 = []; + (_c2 = group2.controls) == null ? void 0 : _c2.forEach((controlid) => { + let control = this.editor.controls.get(controlid); + if (control) { + controls2.push(control); + } + }); + if (controls2.length > 0) { + group2.controls = controls2; + } + groups.push(group2); + } + this.groups = groups; + } + }, + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "toolbox" || parts.indexOf("toolbox") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.$nextTick(() => { + this.resetPosition(this.width, this.height); + }); + } + }); + } + }, + changeEditMode(editMode) { + if (!editMode) { + this.editor.bus.push(DDeiEditorEnumBusCommandType.ChangeEditMode, { + mode: 1 + }); + } else { + this.editor.bus.push(DDeiEditorEnumBusCommandType.ChangeEditMode, { + mode: editMode + }); + } + this.editor.bus.executeAll(); + return true; + }, + /** + * 准备创建 + */ + createControlPrepare(group2, e) { + var _a3, _b2, _c2, _d2, _e2, _f; + let control = group2.currentControl ? group2.currentControl : ((_a3 = group2.controls) == null ? void 0 : _a3.length) > 0 ? group2.controls[0] : null; + let editMode = group2.editMode; + let ddInstance = this.editor.ddInstance; + ddInstance.render.inEdge = 0; + let stage2 = ddInstance.stage; + let layer2 = stage2.layers[stage2.layerIndex]; + if (layer2.display == 0 && !layer2.tempDisplay || layer2.lock) { + return; + } + if (control) { + if (editMode != 4) { + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(this.editor.ddInstance, null, [control]); + if (!controlInitJSON) { + return; + } + let models = DDeiEditorUtil.createControl(controlInitJSON[0], this.editor); + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", DDeiEnumOperateType.CREATE, { models }, ddInstance, e); + if (rsState == 0 || rsState == 1) { + DDeiUtil.invokeCallbackFunc("EVENT_MOUSE_OPERATING", DDeiEnumOperateType.CREATE, null, ddInstance, e); + let stageRatio2 = stage2.getStageRatio(); + let moveMatrix2 = new Matrix3( + 1, + 0, + -stage2.wpv.x * stageRatio2, + 0, + 1, + -stage2.wpv.y * stageRatio2, + 0, + 0, + 1 + ); + models.forEach((model) => { + model.transVectors(moveMatrix2); + model.setState(DDeiEnumControlState.CREATING); + }); + if ((models == null ? void 0 : models.length) > 0) { + let ddInstance2 = this.editor.ddInstance; + let stage22 = ddInstance2.stage; + if (((_b2 = stage22 == null ? void 0 : stage22.render) == null ? void 0 : _b2.operateState) == DDeiEnumOperateState.QUICK_EDITING && ((_c2 = stage22 == null ? void 0 : stage22.render) == null ? void 0 : _c2.editorShadowControl)) { + (_d2 = DDeiUtil.getEditorText()) == null ? void 0 : _d2.enterValue(); + } + this.editor.changeState(DDeiEditorState.CONTROL_CREATING); + this.editor.creatingControls = models; + (_e2 = this.editor.bus) == null ? void 0 : _e2.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + (_f = this.editor.bus) == null ? void 0 : _f.executeAll(); + } + e.preventDefault(); + e.cancelBubble = true; + } + } else { + DDeiEditorUtil.lineInitJSON = { + modelCode: control.id + }; + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + DDeiEditorUtil.hiddenDialog(this.editor, "ddei-core-dialog-choosecontrol"); + }, + /** + * 显示组控件列表 + * @param group 组 + * @param e + */ + showGroupControlBox(group2, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x; + DDeiEditorUtil.hiddenDialog(this.editor, "ddei-core-dialog-choosecontrol"); + if (this.editor.state != DDeiEditorState.CONTROL_CREATING) { + if (((_a3 = group2.controls) == null ? void 0 : _a3.length) > 1) { + let el = evt.srcElement; + let type = 99; + if (((_b2 = this.options) == null ? void 0 : _b2.direct) == 2) { + if (((_c2 = this.options) == null ? void 0 : _c2.position) == 1 || ((_d2 = this.options) == null ? void 0 : _d2.position) == 2 || ((_e2 = this.options) == null ? void 0 : _e2.position) == 3 || ((_f = this.options) == null ? void 0 : _f.position) == 4 || ((_g = this.options) == null ? void 0 : _g.position) == 8 || ((_h = this.options) == null ? void 0 : _h.position) == 9 || !((_i = this.options) == null ? void 0 : _i.position)) { + type = 5; + } else if (((_j = this.options) == null ? void 0 : _j.position) == 5 || ((_k = this.options) == null ? void 0 : _k.position) == 6 || ((_l = this.options) == null ? void 0 : _l.position) == 7) { + type = 3; + } + } else if (((_m = this.options) == null ? void 0 : _m.direct) == 1) { + if (((_n = this.options) == null ? void 0 : _n.position) == 1 || ((_o = this.options) == null ? void 0 : _o.position) == 7 || ((_p = this.options) == null ? void 0 : _p.position) == 8 || ((_q = this.options) == null ? void 0 : _q.position) == 2 || ((_r = this.options) == null ? void 0 : _r.position) == 6 || !((_s = this.options) == null ? void 0 : _s.position) || ((_t = this.options) == null ? void 0 : _t.position) == 9) { + type = 9; + } else if (((_u = this.options) == null ? void 0 : _u.position) == 3 || ((_v = this.options) == null ? void 0 : _v.position) == 4 || ((_w = this.options) == null ? void 0 : _w.position) == 5) { + type = 7; + } + } + DDeiEditorUtil.showDialog(this.editor, "ddei-core-dialog-choosecontrol", { + controlGroup: group2, + callback: { + ok: this.changeGroupControl, + drag: ((_x = this.options) == null ? void 0 : _x.dragCreate) == 1 ? this.dragCreateControlPrepare : null + } + }, { type, hiddenMask: true }, el, true, true); + } + } + }, + changeGroupControl(group2, control, evt) { + var _a3; + this.changeEditMode(group2 == null ? void 0 : group2.editMode); + if ((group2 == null ? void 0 : group2.editMode) == 4) { + DDeiEditorUtil.lineInitJSON = { + modelCode: control.id + }; + } + group2.currentControl = control; + if ((_a3 = this.options) == null ? void 0 : _a3.chooseCreate) { + this.createControlCenter(group2); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-choosecontrol"); + this.forceRefreshGroup = false; + this.$nextTick(() => { + this.forceRefreshGroup = true; + }); + }, + dragCreateControlPrepare(group2, control, evt) { + var _a3; + this.changeEditMode(group2 == null ? void 0 : group2.editMode); + group2.currentControl = control; + if ((_a3 = this.options) == null ? void 0 : _a3.dragCreate) { + this.createControlPrepare(group2, evt); + } + this.forceRefreshGroup = false; + this.$nextTick(() => { + this.forceRefreshGroup = true; + }); + }, + /** + * 准备拖拽 + */ + prepareDragBox(e) { + this.editor.dragPart = this; + this.$refs["toolbox"].style.userSelect = "none"; + this.$refs["toolbox"].children[0].style.backgroundColor = "var(--dot)"; + this.$refs["toolbox"].style.pointerEvents = "none"; + }, + /** + * 拖拽中 + */ + boxDraging(e) { + var _a3; + if (this.editor.dragPart) { + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + let posLeft = e.offsetX - 15; + let posTop = e.offsetY - 5; + if (((_a3 = this.options) == null ? void 0 : _a3.direct) == 2) { + posLeft = e.offsetX - 5; + posTop = e.offsetY - 15; + } + if (posLeft < 0) { + posLeft = 0; + } + if (posLeft < 0) { + posTop = 0; + } + if (posLeft + this.$refs["toolbox"].offsetWidth > middleCanvas.offsetWidth) { + posLeft = middleCanvas.offsetWidth - this.$refs["toolbox"].offsetWidth; + } + if (posTop + this.$refs["toolbox"].offsetHeight > middleCanvas.offsetHeight) { + posTop = middleCanvas.offsetHeight - this.$refs["toolbox"].offsetHeight; + } + this.$refs["toolbox"].style.left = posLeft + "px"; + this.$refs["toolbox"].style.top = posTop + "px"; + } + }, + /** + * 拖拽完毕 + */ + boxDragEnd(e) { + if (this.editor.dragPart) { + let posJson = { left: this.$refs["toolbox"].offsetLeft, top: this.$refs["toolbox"].offsetTop }; + localStorage.setItem("pos-" + this.editor.id + "-ddei-core-panel-toolbox-simple", JSON.stringify(posJson)); + this.$refs["toolbox"].style.userSelect = ""; + this.$refs["toolbox"].style.pointerEvents = ""; + this.$refs["toolbox"].children[0].style.backgroundColor = ""; + delete this.editor.dragPart; + } + }, + /** + * 创建控件在中心点处 + */ + createControlCenter(group2, e) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + if ((group2 == null ? void 0 : group2.editMode) != 4) { + let control = group2.currentControl ? group2.currentControl : ((_a3 = group2.controls) == null ? void 0 : _a3.length) > 0 ? group2.controls[0] : null; + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.creatingControls = null; + if (control) { + let ddInstance = this.editor.ddInstance; + ddInstance.render.inEdge = 0; + let stage2 = ddInstance.stage; + let layer2 = stage2.layers[stage2.layerIndex]; + if (layer2.display == 0 && !layer2.tempDisplay || layer2.lock) { + return; + } + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(this.editor.ddInstance, null, [{ model: control.id }]); + if (controlInitJSON) { + let models = this.editor.addControls(controlInitJSON); + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", DDeiEnumOperateType.CREATE, { models }, ddInstance, e); + if (rsState == 0 || rsState == 1) { + let pushDatas = []; + models.forEach((model, key) => { + pushDatas.push({ id: model.id, value: DDeiEnumControlState.SELECTED }); + }); + (_c2 = (_b2 = this.editor.ddInstance) == null ? void 0 : _b2.bus) == null ? void 0 : _c2.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, e); + (_e2 = (_d2 = this.editor.ddInstance) == null ? void 0 : _d2.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.ModelChangeSelect, pushDatas, e); + (_g = (_f = this.editor.ddInstance) == null ? void 0 : _f.bus) == null ? void 0 : _g.push(DDeiEnumBusCommandType.StageChangeSelectModels); + this.editor.bus.executeAll(); + this.editor.changeState(DDeiEditorState.DESIGNING); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_CREATE_AFTER", DDeiEnumOperateType.CREATE, { models }, ddInstance, e); + } + } + } + } + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + this.editor.changeState(DDeiEditorState.TOOLBOX_ACTIVE); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const ToolboxSimple_vue_vue_type_style_index_0_scoped_bd214554_lang = ""; + const _hoisted_1$W = ["title", "onMouseenter", "onMousedown", "onClick"]; + const _hoisted_2$G = ["innerHTML"]; + const _hoisted_3$D = ["src"]; + const _hoisted_4$t = ["innerHTML"]; + function _sfc_render$W(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + onMousedown: _cache[1] || (_cache[1] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)), + ref: "toolbox", + class: "ddei-core-panel-toolbox-simple" + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item-drag": ((_a3 = $props.options) == null ? void 0 : _a3.drag) == 1 && ((_b2 = $props.options) == null ? void 0 : _b2.direct) != 2, "item-drag-2": ((_c2 = $props.options) == null ? void 0 : _c2.drag) == 1 && ((_d2 = $props.options) == null ? void 0 : _d2.direct) == 2, "item-block": ((_e2 = $props.options) == null ? void 0 : _e2.drag) != 1 }), + onMousedown: _cache[0] || (_cache[0] = ($event) => { + var _a4; + return ((_a4 = $props.options) == null ? void 0 : _a4.drag) == 1 && $options.prepareDragBox(); + }) + }, null, 34), + $data.forceRefreshGroup ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList($data.groups, (group2) => { + var _a4, _b3, _c3, _d3, _e3, _f, _g, _h, _i, _j, _k; + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": group2.editMode == $props.editor.editMode }), + title: ((_a4 = group2.currentControl) == null ? void 0 : _a4.desc) ? group2.currentControl.desc : ((_b3 = group2.controls) == null ? void 0 : _b3.length) > 0 && ((_c3 = group2.controls[0]) == null ? void 0 : _c3.desc) ? group2.controls[0].desc : group2.desc ? group2.desc : "", + onMouseenter: ($event) => $options.showGroupControlBox(group2, $event), + onMousedown: ($event) => $options.changeEditMode(group2 == null ? void 0 : group2.editMode) && $options.createControlPrepare(group2, $event), + onClick: ($event) => { + var _a5; + return ((_a5 = group2.controls) == null ? void 0 : _a5.length) > 0 && $options.changeEditMode(group2 == null ? void 0 : group2.editMode) && $options.createControlCenter(group2, $event); + } + }, [ + (group2 == null ? void 0 : group2.editMode) == 1 || (group2 == null ? void 0 : group2.editMode) == 2 ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + innerHTML: group2.icon + }, null, 8, _hoisted_2$G)) : vue.createCommentVNode("", true), + group2.currentControl && !group2.currentControl.icon || !group2.currentControl && ((_d3 = group2.controls) == null ? void 0 : _d3.length) > 0 && !((_e3 = group2.controls[0]) == null ? void 0 : _e3.icon) ? (vue.openBlock(), vue.createElementBlock("img", { + key: 1, + class: "icon", + src: (_f = $props.editor) == null ? void 0 : _f.icons[group2.currentControl ? group2.currentControl.id : group2.controls[0].id] + }, null, 8, _hoisted_3$D)) : vue.createCommentVNode("", true), + group2.currentControl && group2.currentControl.icon || !group2.currentControl && ((_g = group2.controls) == null ? void 0 : _g.length) > 0 && ((_h = group2.controls[0]) == null ? void 0 : _h.icon) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 2, + class: "item-icon-html", + innerHTML: ((_i = group2.currentControl) == null ? void 0 : _i.icon) ? group2.currentControl.icon : ((_j = group2.controls) == null ? void 0 : _j.length) > 0 ? (_k = group2.controls[0]) == null ? void 0 : _k.icon : "" + }, null, 8, _hoisted_4$t)) : vue.createCommentVNode("", true) + ], 42, _hoisted_1$W); + }), 256)) : vue.createCommentVNode("", true), + _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "item-block" }, null, -1)) + ], 544)) : vue.createCommentVNode("", true); + } + const ToolboxSimple = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$W], ["__scopeId", "data-v-bd214554"]]); + const _DDeiCoreToolboxSimplePanel = class _DDeiCoreToolboxSimplePanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ToolboxSimple.name); + __publicField3(this, "plugins", [ToolboxSimple]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ToolboxSimple.name]) { + for (let i2 in options[ToolboxSimple.name]) { + newOptions[i2] = options[ToolboxSimple.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreToolboxSimplePanel(newOptions); + return panels; + } + } + return _DDeiCoreToolboxSimplePanel; + } + static modify(fn) { + return _DDeiCoreToolboxSimplePanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreToolboxSimplePanel, "defaultIns", new _DDeiCoreToolboxSimplePanel({ + direct: 1, + //方向,1纵向,2横向 + position: 8, + //位置1-9顺时针,1为左上角,9为中心 + drag: 1, + //是否允许拖拽位置 + chooseCreate: 0, + //是否在选择控件时创建一个控件 + dragCreate: 0, + //是否在拖拽时创建控件 + groups: [ + { + editMode: 1, + desc: "选择", + icon: `` + }, + { + editMode: 2, + desc: "平移画布", + icon: `` + }, + { + controls: [ + "100103" + ] + }, + { + controls: [ + "100001", + "100002", + "100003", + "100004", + "100005", + "100006", + "100007" + ] + }, + { + controls: [ + "100040", + "100041", + "100050", + "100051" + ] + }, + { + editMode: 4, + desc: "连线", + controls: [ + "100401" + ] + } + ] + })); + let DDeiCoreToolboxSimplePanel = _DDeiCoreToolboxSimplePanel; + const _sfc_main$V = { + name: "ddei-core-panel-topmenu-simple", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + forceRefresh: true + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const { width, height } = entry.contentRect; + if (width != 0 && height != 0) { + this.width = width; + this.height = height; + this.resetPosition(width, height); + } + } + }); + resizeObserver.observe(middleCanvas); + this.refreshData(); + }, + methods: { + internalAction(id, evt) { + if (id == "ddei-core-save") { + this.save(evt); + } else if (id == "ddei-core-open") { + this.openFile(evt); + } else if (id == "ddei-core-new") { + this.newFile(evt); + } else if (id == "ddei-core-download") { + this.download(evt); + } + }, + /** + * 保存 + * @param evt + */ + save(evt) { + this.editor.changeState(DDeiEditorState.DESIGNING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.push(DDeiEditorEnumBusCommandType.SaveFile, {}, evt); + this.editor.bus.executeAll(); + }, + /** + * 下载文件 + */ + download(evt) { + var _a3, _b2, _c2, _d2; + if ((_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) { + let file = (_d2 = this.editor) == null ? void 0 : _d2.files[(_c2 = this.editor) == null ? void 0 : _c2.currentFileIndex]; + if (file) { + let json = file.toJSON(); + if (json) { + let eleLink = document.createElement("a"); + eleLink.download = file.name + ".dei"; + eleLink.style.display = "none"; + let blob = new Blob([JSON.stringify(json)]); + eleLink.href = URL.createObjectURL(blob); + document.body.appendChild(eleLink); + eleLink.click(); + document.body.removeChild(eleLink); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }, + /** + * 打开文件 + * @param evt + */ + async openFile(evt) { + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_BEFORE", "LOAD_FILE", null, this.editor.ddInstance, evt); + if (rsState != -1) { + let openFileHandle = await showOpenFilePicker({ + description: "DDei Design File", + types: [{ + accept: { + "text/plain": [".dei"] + } + }] + }); + let openFile = await openFileHandle[0].getFile(); + let read = new FileReader(); + read.readAsText(openFile); + read.onload = async () => { + var _a3, _b2, _c2, _d2, _e2; + let result = read.result; + let resultJSON = JSON.parse(result); + let ddInstance = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance; + let file = DDeiFile.loadFromJSON(resultJSON, { + currentDdInstance: ddInstance + }); + let openedFiles = this.editor.files; + let openedFileIndex = -1; + if (!file.id) { + file.id = DDeiUtil.getUniqueCode(); + } + for (let fi = 0; fi < openedFiles.length; fi++) { + if (openedFiles[fi].id && openedFiles[fi].id == file.id) { + openedFileIndex = fi; + break; + } + } + ddInstance.stage.destroyRender(); + if (openedFileIndex == -1) { + file.localFileHandler = openFileHandle[0]; + file.local = 1; + this.editor.addFile(file); + for (let x2 = 0; x2 < this.editor.files.length; x2++) { + this.editor.files[x2].active = DDeiActiveType.NONE; + } + this.editor.currentFileIndex = this.editor.files.length - 1; + file.state = DDeiFileState.NONE; + file.active = DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + file.changeSheet(file.currentSheetIndex); + let stage2 = sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.disabled = false; + file.initHistroy(); + file.histroy[0].isNew = true; + ddInstance.stage = stage2; + stage2.initRender(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + this.editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.RefreshEditorParts, + { parts: ["bottommenu", "topmenu"] } + ); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.RefreshShape); + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.executeAll(); + } + } else { + file = this.editor.files[openedFileIndex]; + if (file && ddInstance) { + for (let x2 = 0; x2 < this.editor.files.length; x2++) { + this.editor.files[x2].active = DDeiActiveType.NONE; + } + file.active = DDeiActiveType.ACTIVE; + this.editor.currentFileIndex = openedFileIndex; + let stage2 = file.sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + ddInstance.disabled = false; + stage2.initRender(); + this.editor.changeState(DDeiEditorState.DESIGNING); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + DDeiEditorEnumBusCommandType.RefreshEditorParts, + { parts: ["bottommenu", "topmenu"] } + ); + (_d2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _d2.push(DDeiEnumBusCommandType.RefreshShape); + (_e2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _e2.executeAll(); + } + } + DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_AFTER", "LOAD_FILE", { file }, this.editor.ddInstance, evt); + }; + } + }, + /** + * 新建文件 + * @param evt + */ + newFile(evt) { + var _a3, _b2; + if ((_a3 = this.editor) == null ? void 0 : _a3.ddInstance) { + let ddInstance = this.editor.ddInstance; + let file = DDeiFile.loadFromJSON( + { + name: "新建文件_NEW", + path: "/新建文件_NEW", + sheets: [ + new DDeiSheet({ + name: "页面-1", + desc: "页面-1", + stage: DDeiStage.initByJSON({ id: "stage_1" }, { currentDdInstance: ddInstance }), + active: DDeiActiveType.ACTIVE + }) + ], + currentSheetIndex: 0, + state: DDeiFileState.NEW, + active: DDeiActiveType.ACTIVE + }, + { currentDdInstance: ddInstance } + ); + if (this.editor.currentFileIndex != -1) { + this.editor.files[this.editor.currentFileIndex].active = DDeiActiveType.NONE; + } + this.editor.addFile(file); + this.editor.currentFileIndex = this.editor.files.length - 1; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + ddInstance.stage.destroyRender(); + let stage2 = sheets[0].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + file.initHistroy(); + if (!stage2.wpv) { + stage2.wpv = { + x: -(stage2.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage2.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + stage2.initRender(); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["bottommenu", "topmenu"] + }); + this.editor.changeState(DDeiEditorState.DESIGNING); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } + } + }, + resetPosition(width, height) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + if (((_a3 = this.options) == null ? void 0 : _a3.direct) == 2) { + this.$refs["topmenu"].style.maxWidth = width - 80 + "px"; + this.$refs["topmenu"].style.flexDirection = ""; + if ((_b2 = this.options) == null ? void 0 : _b2.width) { + this.$refs["topmenu"].style.width = this.options.width; + } else { + this.$refs["topmenu"].style.width = ""; + } + if ((_c2 = this.options) == null ? void 0 : _c2.height) { + this.$refs["topmenu"].style.height = this.options.height; + } else { + this.$refs["topmenu"].style.height = "32px"; + } + } else { + this.$refs["topmenu"].style.flexDirection = "column"; + this.$refs["topmenu"].style.maxHeight = height - 80 + "px"; + if ((_d2 = this.options) == null ? void 0 : _d2.width) { + this.$refs["topmenu"].style.width = this.options.width; + } else { + this.$refs["topmenu"].style.width = "32px"; + } + if ((_e2 = this.options) == null ? void 0 : _e2.height) { + this.$refs["topmenu"].style.height = this.options.height; + } else { + this.$refs["topmenu"].style.height = ""; + } + } + let cachePos = null; + if (((_f = this.options) == null ? void 0 : _f.drag) == 1) { + cachePos = localStorage.getItem("pos-" + this.editor.id + "-ddei-core-panel-topmenu-simple"); + } + if (!cachePos) { + switch ((_g = this.options) == null ? void 0 : _g.position) { + case 2: + this.$refs["topmenu"].style.left = (width - this.$refs["topmenu"].clientWidth) / 2 + "px"; + this.$refs["topmenu"].style.top = "30px"; + break; + case 3: + this.$refs["topmenu"].style.left = width - this.$refs["topmenu"].clientWidth - 30 + "px"; + this.$refs["topmenu"].style.top = "30px"; + break; + case 4: + this.$refs["topmenu"].style.left = width - this.$refs["topmenu"].clientWidth - 30 + "px"; + this.$refs["topmenu"].style.top = (height - this.$refs["topmenu"].clientHeight) / 2 + "px"; + break; + case 5: + this.$refs["topmenu"].style.left = width - this.$refs["topmenu"].clientWidth - 30 + "px"; + this.$refs["topmenu"].style.top = height - this.$refs["topmenu"].clientHeight - 30 + "px"; + break; + case 6: + this.$refs["topmenu"].style.left = (width - this.$refs["topmenu"].clientWidth) / 2 + "px"; + this.$refs["topmenu"].style.top = height - this.$refs["topmenu"].clientHeight - 30 + "px"; + break; + case 7: + this.$refs["topmenu"].style.left = "30px"; + this.$refs["topmenu"].style.top = height - this.$refs["topmenu"].clientHeight - 30 + "px"; + break; + case 8: + this.$refs["topmenu"].style.left = "30px"; + this.$refs["topmenu"].style.top = (height - this.$refs["topmenu"].clientHeight) / 2 + "px"; + break; + case 9: + this.$refs["topmenu"].style.left = (width - this.$refs["topmenu"].clientWidth) / 2 + "px"; + this.$refs["topmenu"].style.top = (height - this.$refs["topmenu"].clientHeight) / 2 + "px"; + break; + default: + this.$refs["topmenu"].style.left = "30px"; + this.$refs["topmenu"].style.top = "30px"; + break; + } + } else { + let posJson = JSON.parse(cachePos); + this.$refs["topmenu"].style.left = posJson.left + "px"; + this.$refs["topmenu"].style.top = posJson.top + "px"; + } + this.$refs["topmenu"].style.display = "flex"; + }, + refreshData() { + }, + //强制刷新当前以及下层组件 + forceRefreshParts(parts) { + if (!parts || parts == "topmenu" || parts.indexOf("topmenu") != -1) { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + this.$nextTick(() => { + this.resetPosition(this.width, this.height); + }); + } + }); + } + }, + /** + * 准备拖拽 + */ + prepareDragBox(e) { + this.editor.dragPart = this; + this.$refs["topmenu"].style.userSelect = "none"; + this.$refs["topmenu"].children[0].style.backgroundColor = "var(--dot)"; + this.$refs["topmenu"].style.pointerEvents = "none"; + }, + /** + * 拖拽中 + */ + boxDraging(e) { + var _a3; + if (this.editor.dragPart) { + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + let posLeft = e.offsetX - 15; + let posTop = e.offsetY - 5; + if (((_a3 = this.options) == null ? void 0 : _a3.direct) == 2) { + posLeft = e.offsetX - 5; + posTop = e.offsetY - 15; + } + if (posLeft < 0) { + posLeft = 0; + } + if (posLeft < 0) { + posTop = 0; + } + if (posLeft + this.$refs["topmenu"].offsetWidth > middleCanvas.offsetWidth) { + posLeft = middleCanvas.offsetWidth - this.$refs["topmenu"].offsetWidth; + } + if (posTop + this.$refs["topmenu"].offsetHeight > middleCanvas.offsetHeight) { + posTop = middleCanvas.offsetHeight - this.$refs["topmenu"].offsetHeight; + } + this.$refs["topmenu"].style.left = posLeft + "px"; + this.$refs["topmenu"].style.top = posTop + "px"; + } + }, + /** + * 拖拽完毕 + */ + boxDragEnd(e) { + if (this.editor.dragPart) { + let posJson = { left: this.$refs["topmenu"].offsetLeft, top: this.$refs["topmenu"].offsetTop }; + localStorage.setItem("pos-" + this.editor.id + "-ddei-core-panel-topmenu-simple", JSON.stringify(posJson)); + this.$refs["topmenu"].style.userSelect = ""; + this.$refs["topmenu"].style.pointerEvents = ""; + this.$refs["topmenu"].children[0].style.backgroundColor = ""; + delete this.editor.dragPart; + } + }, + /** + * 焦点进入当前区域 + */ + changeEditorFocus() { + this.editor.changeState(DDeiEditorState.TOP_MENU_OPERATING); + this.editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + this.editor.bus.executeAll(); + } + } + }; + const TopMenuSimple_vue_vue_type_style_index_0_scoped_52f75ccc_lang = ""; + const _hoisted_1$V = { class: "item" }; + const _hoisted_2$F = ["onClick"]; + const _hoisted_3$C = ["onClick"]; + function _sfc_render$V(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + onMousedown: _cache[5] || (_cache[5] = (...args) => $options.changeEditorFocus && $options.changeEditorFocus(...args)), + ref: "topmenu", + class: "ddei-core-panel-topmenu-simple" + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item-drag": ((_a3 = $props.options) == null ? void 0 : _a3.drag) == 1 && ((_b2 = $props.options) == null ? void 0 : _b2.direct) != 2, "item-drag-2": ((_c2 = $props.options) == null ? void 0 : _c2.drag) == 1 && ((_d2 = $props.options) == null ? void 0 : _d2.direct) == 2, "item-block": ((_e2 = $props.options) == null ? void 0 : _e2.drag) != 1 }), + onMousedown: _cache[0] || (_cache[0] = ($event) => { + var _a4; + return ((_a4 = $props.options) == null ? void 0 : _a4.drag) == 1 && $options.prepareDragBox(); + }) + }, null, 34), + !((_f = $props.options) == null ? void 0 : _f.items) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "item", + onClick: _cache[1] || (_cache[1] = (...args) => $options.newFile && $options.newFile(...args)) + }, vue.toDisplayString($props.editor.i18n("ddei.new")), 1)) : vue.createCommentVNode("", true), + !((_g = $props.options) == null ? void 0 : _g.items) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: "item", + onClick: _cache[2] || (_cache[2] = (...args) => $options.openFile && $options.openFile(...args)) + }, vue.toDisplayString($props.editor.i18n("ddei.open")), 1)) : vue.createCommentVNode("", true), + !((_h = $props.options) == null ? void 0 : _h.items) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 2, + class: "item", + onClick: _cache[3] || (_cache[3] = (...args) => $options.save && $options.save(...args)) + }, vue.toDisplayString($props.editor.i18n("ddei.save")), 1)) : vue.createCommentVNode("", true), + !((_i = $props.options) == null ? void 0 : _i.items) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 3, + class: "item", + onClick: _cache[4] || (_cache[4] = (...args) => $options.download && $options.download(...args)) + }, vue.toDisplayString($props.editor.i18n("ddei.download")), 1)) : vue.createCommentVNode("", true), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_j = $props.options) == null ? void 0 : _j.items, (menu) => { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$V, [ + menu && !menu.viewer && menu.id ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + onClick: ($event) => $options.internalAction(menu.id, $event) + }, vue.toDisplayString($props.editor.i18n(menu.name)), 9, _hoisted_2$F)) : vue.createCommentVNode("", true), + menu && !menu.viewer && !menu.id ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + onClick: ($event) => menu.action($props.editor, $event) + }, vue.toDisplayString($props.editor.i18n(menu.name)), 9, _hoisted_3$C)) : vue.createCommentVNode("", true), + menu && menu.viewer ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(menu.viewer), { + key: 2, + options: $props.options, + editor: $props.editor + }, null, 8, ["options", "editor"])) : vue.createCommentVNode("", true) + ]); + }), 256)), + _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "item-block" }, null, -1)) + ], 544)) : vue.createCommentVNode("", true); + } + const TopMenuSimple = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["render", _sfc_render$V], ["__scopeId", "data-v-52f75ccc"]]); + const _DDeiCoreTopMenuSimplePanel = class _DDeiCoreTopMenuSimplePanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", TopMenuSimple.name); + __publicField3(this, "plugins", [TopMenuSimple]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[TopMenuSimple.name]) { + for (let i2 in options[TopMenuSimple.name]) { + newOptions[i2] = options[TopMenuSimple.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreTopMenuSimplePanel(newOptions); + return panels; + } + } + return _DDeiCoreTopMenuSimplePanel; + } + static modify(fn) { + return DDeiCoreToolboxSimplePanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTopMenuSimplePanel, "defaultIns", new _DDeiCoreTopMenuSimplePanel({ + direct: 2, + //方向,1纵向,2横向 + position: 2, + //位置1-9顺时针,1为左上角,9为中心 + drag: 1 + //是否允许拖拽位置 + })); + let DDeiCoreTopMenuSimplePanel = _DDeiCoreTopMenuSimplePanel; + const _DDeiCoreSimplePanels = class _DDeiCoreSimplePanels extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiCoreToolboxSimplePanel, DDeiCoreTopMenuSimplePanel]); + } + getPanels(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPanels(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPanels(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCoreSimplePanels(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCoreSimplePanels; + } + static modify(fn) { + return _DDeiCoreSimplePanels.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSimplePanels, "defaultIns", new _DDeiCoreSimplePanels(null)); + let DDeiCoreSimplePanels = _DDeiCoreSimplePanels; + const _DDeiCorePanels = class _DDeiCorePanels extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreTopMenuPanel, + DDeiCoreToolboxPanels, + DDeiCoreQuickColorViewPanel, + DDeiCorePropertyViewPanel, + DDeiCoreOpenFilesViewPanel, + DDeiCoreCanvasViewPanel, + DDeiCoreBottomMenuPanel, + DDeiCoreCommonPanels, + DDeiCoreBottomPanels, + DDeiCoreSimplePanels + ]); + } + getPanels(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPanels(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPanels(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCorePanels(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCorePanels; + } + static modify(fn) { + return _DDeiCorePanels.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePanels, "defaultIns", new _DDeiCorePanels(null)); + let DDeiCorePanels = _DDeiCorePanels; + const _sfc_main$U = { + name: "ddei-core-btn-addfontsize", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + addValue: { + type: Number, + default: null + }, + img: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: 0 + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("editor.textEditorSelectedChange", function(newVal, oldVal) { + if (newVal) { + this.refreshEditor(); + } + }); + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + this.value = 0; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() }; + }, + valueChange(evt) { + var _a3, _b2; + let value = this.value + this.addValue; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, evt, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.executeAll(); + if (this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }; + const QBTEditAddFontSize_vue_vue_type_style_index_0_scoped_4ef00c85_lang = ""; + const _hoisted_1$U = ["xlink:href"]; + function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-quickifat-item-box": true, "ddei-editor-quickifat-item-box--disabled": !$data.attrDefine }), + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && $options.valueChange($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: vue.normalizeClass("icon " + ($props.extcls ? $props.extcls : "")), + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { + "xlink:href": "#" + $props.img + }, null, 8, _hoisted_1$U) + ], 2)) + ], 2); + } + const QBTEditAddFontSize = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$U], ["__scopeId", "data-v-4ef00c85"]]); + const _DDeiCoreAddFontSizeButton = class _DDeiCoreAddFontSizeButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTEditAddFontSize.name); + __publicField3(this, "plugins", [QBTEditAddFontSize]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTEditAddFontSize.name]) { + for (let i2 in options[QBTEditAddFontSize.name]) { + newOptions[i2] = options[QBTEditAddFontSize.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreAddFontSizeButton(newOptions); + return panels; + } + } + return _DDeiCoreAddFontSizeButton; + } + static modify(fn) { + return _DDeiCoreAddFontSizeButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreAddFontSizeButton, "defaultIns", new _DDeiCoreAddFontSizeButton(null)); + let DDeiCoreAddFontSizeButton = _DDeiCoreAddFontSizeButton; + const _sfc_main$T = { + name: "ddei-core-btn-borderdash", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + hiddenCombo: { + type: String, + default: "0" + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectborderdash", { + value: this.attrDefine.value, + dataSource: this.attrDefine.dataSource, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement, false, true); + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() }; + }, + valueChange(value) { + var _a3, _b2; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, null, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + }; + const QBTBorderDash_vue_vue_type_style_index_0_scoped_8ff63c75_lang = ""; + const _hoisted_1$T = { class: "div_input" }; + const _hoisted_2$E = ["stroke-dasharray"]; + const _hoisted_3$B = { + key: 0, + style: { "display": "flex", "justify-content": "center", "align-items": "center" } + }; + function _sfc_render$T(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-border-dash-combox": true, "ddei-pv-border-dash-combox--disabled": !$data.attrDefine || $data.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: "textinput", + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && $options.showDialog($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_1$T, [ + vue.createElementVNode("line", { + x1: "0", + y1: "0", + x2: "100%", + y2: "0", + stroke: "black", + fill: "white", + "stroke-width": "3", + "stroke-dasharray": (_a3 = $data.attrDefine) == null ? void 0 : _a3.value + }, null, 8, _hoisted_2$E) + ])), + $props.hiddenCombo != "1" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$B, _cache[1] || (_cache[1] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 2); + } + const QBTBorderDash = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$T], ["__scopeId", "data-v-8ff63c75"]]); + const _DDeiCoreBorderDashButton = class _DDeiCoreBorderDashButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTBorderDash.name); + __publicField3(this, "plugins", [QBTBorderDash]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTBorderDash.name]) { + for (let i2 in options[QBTBorderDash.name]) { + newOptions[i2] = options[QBTBorderDash.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreBorderDashButton(newOptions); + return panels; + } + } + return _DDeiCoreBorderDashButton; + } + static modify(fn) { + return _DDeiCoreBorderDashButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBorderDashButton, "defaultIns", new _DDeiCoreBorderDashButton(null)); + let DDeiCoreBorderDashButton = _DDeiCoreBorderDashButton; + const _sfc_main$S = { + name: "ddei-core-btn-borderweight", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + hiddenCombo: { + type: String, + default: "0" + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectboderweight", { + value: this.attrDefine.value, + dataSource: [ + { value: "0.1" }, + { value: "0.5" }, + { value: "1" }, + { value: "2" }, + { value: "3" }, + { value: "4" }, + { value: "5" }, + { value: "6" }, + { value: "8" }, + { value: "10" }, + { value: "12" } + ], + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement, false, true); + }, + //获取数据值 + getDataValue() { + var _a3; + if (this.attrDefine) { + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_a3 = this.attrDefine) == null ? void 0 : _a3.getParser().getDefaultValue() }; + }, + valueChange(value) { + var _a3, _b2; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, null, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + }; + const QBTBorderWeight_vue_vue_type_style_index_0_scoped_e7c6034b_lang = ""; + const _hoisted_1$S = { class: "div_input" }; + const _hoisted_2$D = ["stroke-width"]; + const _hoisted_3$A = { + key: 0, + style: { "display": "flex", "justify-content": "center", "align-items": "center" } + }; + function _sfc_render$S(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei_pv_border_weight_combox": true, "ddei_pv_border_weight_combox_disabled": !$data.attrDefine || $data.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: "textinput", + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && $options.showDialog($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_1$S, [ + vue.createElementVNode("line", { + x1: "0", + y1: "0", + x2: "100%", + y2: "0", + stroke: "black", + fill: "white", + "stroke-width": (_a3 = $data.attrDefine) == null ? void 0 : _a3.value + }, null, 8, _hoisted_2$D) + ])), + $props.hiddenCombo != "1" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$A, _cache[1] || (_cache[1] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 2); + } + const QBTBorderWeight = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$S], ["__scopeId", "data-v-e7c6034b"]]); + const _DDeiCoreBorderWeightButton = class _DDeiCoreBorderWeightButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTBorderWeight.name); + __publicField3(this, "plugins", [QBTBorderWeight]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTBorderWeight.name]) { + for (let i2 in options[QBTBorderWeight.name]) { + newOptions[i2] = options[QBTBorderWeight.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreBorderWeightButton(newOptions); + return panels; + } + } + return _DDeiCoreBorderWeightButton; + } + static modify(fn) { + return _DDeiCoreBorderWeightButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBorderWeightButton, "defaultIns", new _DDeiCoreBorderWeightButton(null)); + let DDeiCoreBorderWeightButton = _DDeiCoreBorderWeightButton; + const _sfc_main$R = { + name: "ddei-core-btn-editbox", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + unSelectValue: { + default: null + }, + supportQuickEdit: { + type: Boolean, + default: true + }, + onlyQuickEdit: { + type: Boolean, + default: false + }, + selectedValue: { + default: null + }, + img: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: false + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("editor.textEditorSelectedChange", function(newVal, oldVal) { + if (newVal) { + this.refreshEditor(); + } + }); + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + if (!this.supportQuickEdit && ((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.render) == null ? void 0 : _d2.operateState) == DDeiEnumOperateState.QUICK_EDITING) { + this.attrDefine = null; + return; + } + if (this.onlyQuickEdit && ((_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.render) == null ? void 0 : _h.operateState) != DDeiEnumOperateState.QUICK_EDITING) { + this.attrDefine = null; + return; + } + this.value = false; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_i = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _i.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault && valueDefine.value + "" == this.selectedValue + "") { + this.value = true; + } + } + } else { + this.attrDefine = null; + } + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList( + this.attrDefine.model, + this.attrDefine.code, + this.attrDefine.mapping + ); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { + isDefault: true, + value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() + }; + }, + valueChange(evt) { + var _a3, _b2; + if (this.value == true) { + this.value = false; + } else { + this.value = true; + } + let value = this.unSelectValue; + if (this.value == true) { + value = this.selectedValue; + } + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths, value: parsedValue }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.executeAll(); + if (this.editor.state != DDeiEditorState.QUICK_EDITING) { + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + }; + const QBTEditBox_vue_vue_type_style_index_0_scoped_b43b0371_lang = ""; + const _hoisted_1$R = ["xlink:href"]; + function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-quick-fat-item-box": true, "ddei-editor-quick-fat-item-box--selected": $data.value, "ddei-editor-quick-fat-item-box--disabled": !$data.attrDefine }), + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && $options.valueChange($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: vue.normalizeClass("icon " + ($props.extcls ? $props.extcls : "")), + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { + "xlink:href": "#" + $props.img + }, null, 8, _hoisted_1$R) + ], 2)) + ], 2); + } + const QBTEditBox = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["render", _sfc_render$R], ["__scopeId", "data-v-b43b0371"]]); + const _DDeiCoreEditBoxButton = class _DDeiCoreEditBoxButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTEditBox.name); + __publicField3(this, "plugins", [QBTEditBox]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTEditBox.name]) { + for (let i2 in options[QBTEditBox.name]) { + newOptions[i2] = options[QBTEditBox.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditBoxButton(newOptions); + return panels; + } + } + return _DDeiCoreEditBoxButton; + } + static modify(fn) { + return _DDeiCoreEditBoxButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditBoxButton, "defaultIns", new _DDeiCoreEditBoxButton(null)); + let DDeiCoreEditBoxButton = _DDeiCoreEditBoxButton; + const _sfc_main$Q = { + name: "ddei-core-btn-color", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + img: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: null + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("editor.textEditorSelectedChange", function(newVal, oldVal) { + if (newVal) { + this.refreshEditor(); + } + }); + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + }, + showColor(evt) { + let editorState = this.editor.state; + let colorInput = this.$refs.colorInput; + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectcolor", { + value: colorInput.value, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement, false, true); + this.editor.state = editorState; + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() }; + }, + valueChange(value) { + var _a3, _b2; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, null, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + }; + const QBTEditColor_vue_vue_type_style_index_0_scoped_019ae087_lang = ""; + const _hoisted_1$Q = ["xlink:href"]; + function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-quick-fat-item-box": true, "ddei-editor-quick-fat-item-box--disabled": !$data.attrDefine }), + onClick: _cache[1] || (_cache[1] = ($event) => $data.attrDefine && $options.showColor($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: vue.normalizeClass("icon " + ($props.extcls ? $props.extcls : "")), + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { + "xlink:href": "#" + $props.img + }, null, 8, _hoisted_1$Q) + ], 2)), + vue.createElementVNode("div", { + class: "colorbar", + style: vue.normalizeStyle({ "background-color": $data.value ? $data.value : "black" }) + }, null, 4), + vue.withDirectives(vue.createElementVNode("input", { + ref: "colorInput", + type: "color", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.value = $event), + class: "colinput", + autocomplete: "off" + }, null, 512), [ + [vue.vModelText, $data.value] + ]) + ], 2); + } + const QBTEditColor = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["render", _sfc_render$Q], ["__scopeId", "data-v-019ae087"]]); + const _DDeiCoreEditColorButton = class _DDeiCoreEditColorButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTEditColor.name); + __publicField3(this, "plugins", [QBTEditColor]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTEditColor.name]) { + for (let i2 in options[QBTEditColor.name]) { + newOptions[i2] = options[QBTEditColor.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditColorButton(newOptions); + return panels; + } + } + return _DDeiCoreEditColorButton; + } + static modify(fn) { + return _DDeiCoreEditColorButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditColorButton, "defaultIns", new _DDeiCoreEditColorButton(null)); + let DDeiCoreEditColorButton = _DDeiCoreEditColorButton; + const _sfc_main$P = { + name: "ddei-core-btn-fontfamily", + extends: null, + mixins: [], + components: {}, + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + dataSource: null, + value: null, + text: null, + defaultText: null, + expanded: false, + canSearch: true + }; + }, + computed: {}, + watch: {}, + created() { + this.search = debounce(this.search, 200); + this.$watch("editor.textEditorSelectedChange", function(newVal, oldVal) { + if (newVal) { + this.refreshEditor(); + } + }); + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get("font.family"); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + } + } else { + this.attrDefine = null; + } + this.getDataSource(this.attrDefine); + let type = this.getDataValue(); + let define2 = this.getDataDefine(type.value); + if (!type.isDefault) { + this.attrDefine.value = type.value; + this.text = define2.text; + if (define2.img) { + this.$refs.combox.img = define2.img; + } + } else { + this.defaultText = define2.text; + } + this.value = type.value; + }, + search() { + this.searchText = this.text; + this.getDataSource(this.attrDefine); + this.showDialog(); + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectfont", { + dataSource: this.dataSource, + value: this.attrDefine.value, + group: "property-dialog", + callback: { + ok: this.valueChange + } + }, { type: 5 }, srcElement, false, true); + }, + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + if (this.dataSource[i2].value.toString() == value.toString()) { + return this.dataSource[i2]; + } + } + } + return { text: "" }; + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList( + this.attrDefine.model, + this.attrDefine.code, + this.attrDefine.mapping + ); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { + isDefault: true, + value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() + }; + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + if (this.attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource( + this.editor, + this.attrDefine, + this.searchText + ); + this.dataSource = dataSources; + return this.dataSource; + } + }, + valueChange(value, evt) { + var _a3, _b2; + this.attrDefine.value = value; + let itemDefine = this.getDataDefine(value); + let text2 = itemDefine.text; + this.text = text2; + this.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths, value: parsedValue }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + this.editor.bus.executeAll(); + } + } + }; + const QBTFontFamily_vue_vue_type_style_index_0_scoped_ec936992_lang = ""; + const _hoisted_1$P = ["readonly", "placeholder"]; + function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", null, [ + vue.createElementVNode("div", { + id: "ddei-editor-quick-fat-item-fontfamily", + class: vue.normalizeClass({ "ddei-editor-quick-fat-item-fontfamily": true, "ddei-editor-quick-fat-item-fontfamily--disabled": !$data.attrDefine }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + class: "ddei-editor-quick-fat-item-fontfamily_input", + readonly: !$data.attrDefine || $data.attrDefine && ($data.attrDefine.readonly || !$data.canSearch), + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.text = $event), + placeholder: $data.defaultText, + onClick: _cache[1] || (_cache[1] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && !$data.canSearch && $options.showDialog($event)), + onKeydown: _cache[2] || (_cache[2] = ($event) => $options.search($event)), + autocomplete: "off" + }, null, 40, _hoisted_1$P), [ + [vue.vModelText, $data.text] + ]), + vue.createElementVNode("div", { + class: "ddei-editor-quick-fat-item-fontfamily_combox", + onClick: _cache[3] || (_cache[3] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && $options.showDialog($event)) + }, _cache[4] || (_cache[4] = [ + vue.createElementVNode("svg", { + class: "icon iconfont-45", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-expand2" }) + ], -1) + ])) + ], 2) + ]); + } + const QBTFontFamily = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$P], ["__scopeId", "data-v-ec936992"]]); + const _DDeiCoreEditFontFamilyButton = class _DDeiCoreEditFontFamilyButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTFontFamily.name); + __publicField3(this, "plugins", [QBTFontFamily]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTFontFamily.name]) { + for (let i2 in options[QBTFontFamily.name]) { + newOptions[i2] = options[QBTFontFamily.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditFontFamilyButton(newOptions); + return panels; + } + } + return _DDeiCoreEditFontFamilyButton; + } + static modify(fn) { + return _DDeiCoreEditFontFamilyButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditFontFamilyButton, "defaultIns", new _DDeiCoreEditFontFamilyButton(null)); + let DDeiCoreEditFontFamilyButton = _DDeiCoreEditFontFamilyButton; + const _sfc_main$O = { + name: "ddei-core-btn-fontsize", + extends: null, + mixins: [], + components: {}, + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + dataSource: null, + value: null, + text: null, + defaultText: null, + expanded: false, + canSearch: true + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("editor.textEditorSelectedChange", function(newVal, oldVal) { + if (newVal) { + this.refreshEditor(); + } + }); + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get("font.size"); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + } + } else { + this.attrDefine = null; + } + if (this.attrDefine) { + this.getDataSource(this.attrDefine); + let type = this.getDataValue(); + let define2 = this.getDataDefine(type.value); + if (!type.isDefault) { + this.attrDefine.value = type.value; + this.text = define2.text; + } else { + this.defaultText = define2.text; + } + if (this.attrDefine.value) { + this.value = this.attrDefine.value; + this.text = this.attrDefine.value; + } else { + this.value = type.value; + } + } + }, + inputValue(value) { + var _a3, _b2; + let dialogSet = false; + if (value) { + dialogSet = true; + this.attrDefine.value = value; + let itemDefine = this.getDataDefine(value); + let text2 = itemDefine.text; + this.text = text2; + this.value = value; + } else { + value = this.text; + this.attrDefine.value = value; + this.value = value; + let itemDefine = this.getDataDefine(value); + if (itemDefine == null ? void 0 : itemDefine.text) { + this.text = itemDefine.text; + } + } + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + parsedValue = isNaN(parsedValue) || parsedValue <= 0 ? null : parsedValue; + parsedValue = parsedValue > 300 ? 300 : parsedValue; + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + if (dialogSet) { + setTimeout(() => { + editorText.focus(); + }, 20); + } + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths, value: parsedValue }, + null, + true + ); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectfontsize", { + dataSource: this.dataSource, + value: this.attrDefine.value, + group: "property-dialog", + callback: { + ok: this.inputValue + } + }, { type: 5 }, srcElement, false, true); + }, + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + if (this.dataSource[i2].value.toString() == value.toString()) { + return this.dataSource[i2]; + } + } + } + return { text: "" }; + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + return { isDefault: true, value }; + } else { + return { value }; + } + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList( + this.attrDefine.model, + this.attrDefine.code, + this.attrDefine.mapping + ); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { + isDefault: true, + value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() + }; + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + if (this.attrDefine) { + this.attrDefine.dataSource = [ + { text: "9", value: 9 }, + { text: "10", value: 10 }, + { text: "10.5", value: 10.5 }, + { text: "11", value: 11 }, + { text: "12", value: 12 }, + { text: "13", value: 13 }, + { text: "14", value: 14 }, + { text: "18", value: 18 }, + { text: "24", value: 24 }, + { text: "36", value: 36 }, + { text: "48", value: 48 }, + { text: "64", value: 64 }, + { text: "72", value: 72 }, + { text: "96", value: 96 }, + { text: "144", value: 144 }, + { text: "288", value: 288 } + ]; + let dataSources = DDeiEditorUtil.getDataSource( + this.editor, + this.attrDefine, + this.searchText + ); + this.dataSource = dataSources; + return this.dataSource; + } + } + } + }; + const QBTFontSize_vue_vue_type_style_index_0_scoped_4fcf2a95_lang = ""; + const _hoisted_1$O = ["readonly", "placeholder"]; + function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", null, [ + vue.createElementVNode("div", { + id: "ddei-editor-quick-fat-item-fontsize", + class: vue.normalizeClass({ "ddei-editor-quick-fat-item-fontsize": true, "ddei-editor-quick-fat-item-fontsize--disabled": !$data.attrDefine }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + class: "ddei-editor-quick-fat-item-fontsize_input", + readonly: !$data.attrDefine || $data.attrDefine && $data.attrDefine.readonly, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.text = $event), + onInput: _cache[1] || (_cache[1] = ($event) => $options.inputValue()), + placeholder: $data.defaultText, + autocomplete: "off" + }, null, 40, _hoisted_1$O), [ + [vue.vModelText, $data.text] + ]), + vue.createElementVNode("div", { + class: "ddei-editor-quick-fat-item-fontsize_combox", + onClick: _cache[2] || (_cache[2] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && $options.showDialog($event)) + }, _cache[3] || (_cache[3] = [ + vue.createElementVNode("svg", { + class: "icon iconfont-45", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-expand2" }) + ], -1) + ])) + ], 2) + ]); + } + const QBTFontSize = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$O], ["__scopeId", "data-v-4fcf2a95"]]); + const _DDeiCoreEditFontSizeButton = class _DDeiCoreEditFontSizeButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTFontSize.name); + __publicField3(this, "plugins", [QBTFontSize]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTFontSize.name]) { + for (let i2 in options[QBTFontSize.name]) { + newOptions[i2] = options[QBTFontSize.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditFontSizeButton(newOptions); + return panels; + } + } + return _DDeiCoreEditFontSizeButton; + } + static modify(fn) { + return _DDeiCoreEditFontSizeButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditFontSizeButton, "defaultIns", new _DDeiCoreEditFontSizeButton(null)); + let DDeiCoreEditFontSizeButton = _DDeiCoreEditFontSizeButton; + const _sfc_main$N = { + name: "ddei-core-btn-linepointtype", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: null, + text: "" + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshText() { + var _a3; + let text2 = ""; + if ((_a3 = this.attrDefine) == null ? void 0 : _a3.dataSource) { + for (let i2 = 0; i2 < this.attrDefine.dataSource.length; i2++) { + if (this.attrDefine.dataSource[i2].value == this.value) { + text2 = this.attrDefine.dataSource[i2].text; + break; + } + } + } + this.text = text2; + }, + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + this.refreshText(); + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-linepointtype", { + value: this.attrDefine.value, + dataSource: this.attrDefine.dataSource, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement, false, true); + }, + //获取数据值 + getDataValue() { + var _a3; + if (this.attrDefine) { + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_a3 = this.attrDefine) == null ? void 0 : _a3.getParser().getDefaultValue() }; + }, + valueChange(value) { + var _a3, _b2; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, null, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + this.refreshText(); + } + } + }; + const QBTLinePointType_vue_vue_type_style_index_0_scoped_5b25a083_lang = ""; + const _hoisted_1$N = { class: "div_input" }; + function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei_pv_line_point_combox": true, "ddei_pv_line_point_combox_disabled": !$data.attrDefine || $data.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: "textinput", + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && !$data.attrDefine.readonly && $options.showDialog($event)) + }, [ + vue.createElementVNode("div", _hoisted_1$N, vue.toDisplayString($data.text), 1), + _cache[1] || (_cache[1] = vue.createElementVNode("div", { style: { "display": "flex", "justify-content": "center", "align-items": "center" } }, [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ]) + ], -1)) + ]) + ], 2); + } + const QBTLinePointType = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$N], ["__scopeId", "data-v-5b25a083"]]); + const _DDeiCoreEditLinePointTypeButton = class _DDeiCoreEditLinePointTypeButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTLinePointType.name); + __publicField3(this, "plugins", [QBTLinePointType]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTLinePointType.name]) { + for (let i2 in options[QBTLinePointType.name]) { + newOptions[i2] = options[QBTLinePointType.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditLinePointTypeButton(newOptions); + return panels; + } + } + return _DDeiCoreEditLinePointTypeButton; + } + static modify(fn) { + return _DDeiCoreEditLinePointTypeButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditLinePointTypeButton, "defaultIns", new _DDeiCoreEditLinePointTypeButton(null)); + let DDeiCoreEditLinePointTypeButton = _DDeiCoreEditLinePointTypeButton; + const _sfc_main$M = { + name: "ddei-core-btn-linetype", + extends: null, + mixins: [], + components: {}, + props: { + attrCode: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + img: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + value: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshEditor(); + }, + methods: { + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get(this.attrCode); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + let valueDefine = this.getDataValue(); + if (valueDefine && !valueDefine.isDefault) { + this.value = valueDefine.value; + } + } + } else { + this.attrDefine = null; + } + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-linetype", { + value: this.attrDefine.value, + dataSource: this.attrDefine.dataSource, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement, false, true); + }, + //获取数据值 + getDataValue() { + var _a3, _b2, _c2; + if (this.attrDefine) { + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = shadowControl.getSptStyle(curSIdx, curEIdx, paths); + if (value === void 0) { + value = DDeiModelArrtibuteValue.getAttrValueByState(shadowControl, paths[0], true); + } + return { value }; + } + } + } + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList(this.attrDefine.model, this.attrDefine.code, this.attrDefine.mapping); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { isDefault: true, value: (_c2 = this.attrDefine) == null ? void 0 : _c2.getParser().getDefaultValue() }; + }, + valueChange(value) { + var _a3, _b2; + this.value = value; + this.attrDefine.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, parsedValue); + this.editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + setTimeout(() => { + editorText.focus(); + }, 20); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push(DDeiEnumBusCommandType.ModelChangeValue, { mids: [element.id], paths, value: parsedValue }, null, true); + }); + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + }; + const QBTLineType_vue_vue_type_style_index_0_scoped_739c83c3_lang = ""; + const _hoisted_1$M = ["xlink:href"]; + function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + onClick: _cache[0] || (_cache[0] = ($event) => $data.attrDefine && $options.showDialog($event)), + class: vue.normalizeClass({ "ddei-pv-line-type-combox": true, "ddei-pv-line-type-combox--disabled": !$data.attrDefine || $data.attrDefine.readonly }) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: vue.normalizeClass("icon " + ($props.extcls ? $props.extcls : "")), + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { + "xlink:href": "#" + $props.img + }, null, 8, _hoisted_1$M) + ], 2)) + ], 2); + } + const QBTLineType = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$M], ["__scopeId", "data-v-739c83c3"]]); + const _DDeiCoreEditLineTypeButton = class _DDeiCoreEditLineTypeButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTLineType.name); + __publicField3(this, "plugins", [QBTLineType]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTLineType.name]) { + for (let i2 in options[QBTLineType.name]) { + newOptions[i2] = options[QBTLineType.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditLineTypeButton(newOptions); + return panels; + } + } + return _DDeiCoreEditLineTypeButton; + } + static modify(fn) { + return _DDeiCoreEditLineTypeButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditLineTypeButton, "defaultIns", new _DDeiCoreEditLineTypeButton(null)); + let DDeiCoreEditLineTypeButton = _DDeiCoreEditLineTypeButton; + const _sfc_main$L = { + name: "ddei-core-btn-textalign", + extends: null, + mixins: [], + components: {}, + props: { + img: { + type: String, + default: null + }, + extcls: { + type: String, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + }, + controlDefine: { + type: Object, + default: null + } + }, + data() { + return { + attrDefine: null, + valignAttrDefine: null, + value: false + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshEditor(); + }, + methods: { + showTextAlignDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-textalign", { + group: "top-dialog", + align: this.attrDefine.value, + valign: this.valignAttrDefine.value, + callback: { + ok: this.valueChange + } + }, { type: 5 }, srcElement, false, true); + }, + refreshEditor() { + var _a3; + if (this.controlDefine) { + let attrD = this.controlDefine.attrDefineMap.get("textStyle.align"); + let mds = []; + if (((_a3 = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + mds = Array.from(this.editor.ddInstance.stage.selectedModels.values()); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: attrD == null ? void 0 : attrD.code }, this.editor.ddInstance); + if (rsState != -1) { + this.attrDefine = attrD; + this.valignAttrDefine = this.controlDefine.attrDefineMap.get( + "textStyle.valign" + ); + } + } else { + this.attrDefine = null; + this.valignAttrDefine = null; + } + }, + valueChange(value = 5) { + switch (value) { + case 1: + this.attrDefine.value = 1; + this.valignAttrDefine.value = 1; + break; + case 2: + this.attrDefine.value = 2; + this.valignAttrDefine.value = 1; + break; + case 3: + this.attrDefine.value = 3; + this.valignAttrDefine.value = 1; + break; + case 4: + this.attrDefine.value = 1; + this.valignAttrDefine.value = 2; + break; + case 5: + this.attrDefine.value = 2; + this.valignAttrDefine.value = 2; + break; + case 6: + this.attrDefine.value = 3; + this.valignAttrDefine.value = 2; + break; + case 7: + this.attrDefine.value = 1; + this.valignAttrDefine.value = 3; + break; + case 8: + this.attrDefine.value = 2; + this.valignAttrDefine.value = 3; + break; + case 9: + this.attrDefine.value = 3; + this.valignAttrDefine.value = 3; + break; + } + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + var _a3, _b2, _c2, _d2; + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.mapping) == null ? void 0 : _b2.forEach((element2) => { + paths.push(element2); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let paths1 = []; + (_d2 = (_c2 = this.valignAttrDefine) == null ? void 0 : _c2.mapping) == null ? void 0 : _d2.forEach((element2) => { + paths1.push(element2); + }); + if (!((paths1 == null ? void 0 : paths1.length) > 0)) { + paths1 = [this.valignAttrDefine.code]; + } + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths, value: this.attrDefine.value }, + null, + true + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [element.id], paths: paths1, value: this.valignAttrDefine.value }, + null, + true + ); + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.executeAll(); + } + } + }; + const QBTEditTextAlign_vue_vue_type_style_index_0_scoped_781d8566_lang = ""; + const _hoisted_1$L = ["xlink:href"]; + function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-editor-quick-fat-item-box": true, "ddei-editor-quick-fat-item-box--disabled": !($data.attrDefine || $data.valignAttrDefine) }), + onClick: _cache[0] || (_cache[0] = ($event) => ($data.attrDefine || $data.valignAttrDefine) && $options.showTextAlignDialog($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: vue.normalizeClass("icon " + ($props.extcls ? $props.extcls : "")), + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { + "xlink:href": "#" + $props.img + }, null, 8, _hoisted_1$L) + ], 2)) + ], 2); + } + const QBTEditTextAlign = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["render", _sfc_render$L], ["__scopeId", "data-v-781d8566"]]); + const _DDeiCoreEditTextAlignButton = class _DDeiCoreEditTextAlignButton extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QBTEditTextAlign.name); + __publicField3(this, "plugins", [QBTEditTextAlign]); + } + getComponents(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QBTEditTextAlign.name]) { + for (let i2 in options[QBTEditTextAlign.name]) { + newOptions[i2] = options[QBTEditTextAlign.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreEditTextAlignButton(newOptions); + return panels; + } + } + return _DDeiCoreEditTextAlignButton; + } + static modify(fn) { + return _DDeiCoreEditTextAlignButton.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreEditTextAlignButton, "defaultIns", new _DDeiCoreEditTextAlignButton(null)); + let DDeiCoreEditTextAlignButton = _DDeiCoreEditTextAlignButton; + const _DDeiCoreComponents = class _DDeiCoreComponents extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreAddFontSizeButton, + DDeiCoreBorderDashButton, + DDeiCoreBorderWeightButton, + DDeiCoreEditBoxButton, + DDeiCoreEditColorButton, + DDeiCoreEditFontFamilyButton, + DDeiCoreEditFontSizeButton, + DDeiCoreEditLinePointTypeButton, + DDeiCoreEditLineTypeButton, + DDeiCoreEditTextAlignButton + ]); + } + getComponents(editor) { + var _a3; + let components = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getComponents(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getComponents(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + components = components.concat(ls); + } + }); + return components; + } + static configuration(options) { + var _a3; + if (options) { + let components = new _DDeiCoreComponents(options); + for (let i2 = 0; i2 < ((_a3 = components.plugins) == null ? void 0 : _a3.length); i2++) { + components.plugins[i2] = components.plugins[i2].configuration(options, true); + } + return components; + } + return _DDeiCoreComponents; + } + static modify(fn) { + return _DDeiCoreComponents.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreComponents, "defaultIns", new _DDeiCoreComponents(null)); + let DDeiCoreComponents = _DDeiCoreComponents; + const _sfc_main$K = { + name: "ddei-core-layout-standard", + extends: null, + mixins: [], + props: { + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dragObj: null, + changeIndex: -1, + allowOpenMultFiles: true, + allowQuickColor: true, + initLeftWidth: 0, + initRightWidth: 0, + toolboxShow: true, + propertyViewShow: true, + leftComponents: [], + rightComponents: [], + topComponents: [], + bottomComponents: [], + middleComponents: [] + }; + }, + //注册组件 + components: {}, + computed: {}, + watch: {}, + created() { + this.$watch("editor.leftWidth", function(newVal, oldVal) { + this.$refs.left.style.flexBasis = newVal + "px"; + }); + this.$watch("editor.rightWidth", function(newVal, oldVal) { + this.$refs.right.style.flexBasis = newVal + "px"; + }); + this.$watch("editor.topHeight", function(newVal, oldVal) { + this.$refs.top.style.flexBasis = newVal + "px"; + }); + this.$watch("editor.bottomHeight", function(newVal, oldVal) { + this.$refs.bottom.style.flexBasis = newVal + "px"; + }); + this.leftComponents = vue.markRaw(this.editor.getPartPanels(this.options, "left")); + this.rightComponents = vue.markRaw(this.editor.getPartPanels(this.options, "right")); + this.topComponents = vue.markRaw(this.editor.getPartPanels(this.options, "top")); + this.bottomComponents = vue.markRaw(this.editor.getPartPanels(this.options, "bottom")); + this.middleComponents = vue.markRaw(this.editor.getPartPanels(this.options, "middle")); + }, + mounted() { + this.editor.layoutViewer = this; + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const { width, height } = entry.contentRect; + if (width != 0 && height != 0) { + this.editor.ddInstance.render.setSize( + width, + height, + 0, + 0 + ); + this.editor.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.ddInstance.bus.executeAll(); + } + } + }); + resizeObserver.observe(middleCanvas); + this.editor.leftWidth = this.$refs.left.offsetWidth; + this.editor.rightWidth = this.$refs.right.offsetWidth; + this.editor.topHeight = this.$refs.top.offsetHeight; + this.editor.bottomHeight = this.$refs.bottom.offsetHeight; + this.editor.middleWidth = this.$refs.middle.offsetWidth; + this.editor.middleHeight = this.$refs.middle.offsetHeight; + this.initLeftWidth = this.$refs.left.offsetWidth; + this.initRightWidth = this.$refs.right.offsetWidth; + this.editor.maxWidth = this.editor.leftWidth + this.editor.rightWidth + this.editor.middleWidth; + let ddInstance = this.editor.ddInstance; + if (ddInstance) { + let modeName = DDeiUtil.getConfigValue("MODE_NAME", ddInstance); + let accessCreate = DDeiUtil.isAccess( + DDeiEnumOperateType.CREATE, + null, + null, + modeName, + ddInstance + ); + this.toolboxShow = accessCreate; + let accessEdit = DDeiUtil.isAccess( + DDeiEnumOperateType.EDIT, + null, + null, + modeName, + ddInstance + ); + this.propertyViewShow = accessEdit; + } + }, + methods: { + //强制刷新下层组件 + forceRefreshParts(parts) { + let arr = [this.$refs.topComponents, this.$refs.leftComponents, this.$refs.middleComponents, this.$refs.rightComponents, this.$refs.bottomComponents]; + arr.forEach((comps) => { + if (comps) { + if (Array.isArray(comps)) { + comps.forEach((comp) => { + if (comp && comp.forceRefreshParts) { + comp.forceRefreshParts(parts); + } + }); + } else if (comps.forceRefreshParts) { + comps.forceRefreshParts(parts); + } + } + }); + } + // resetSize() { + // let layoutRoot = this.$refs.layoutRoot; + // let width = layoutRoot.scrollWidth + // let height = layoutRoot.scrollHeight + // if (!window.upSizeWidth || !window.upSizeHeight) { + // window.upSizeWidth = width; + // window.upSizeHeight = height; + // } else { + // let deltaWidth = width - window.upSizeWidth; + // let deltaHeight = height - window.upSizeHeight; + // if (this.editor.middleWidth + deltaWidth >= 305) { + // window.upSizeWidth = width; + // this.editor.middleWidth += deltaWidth; + // this.editor.maxWidth = + // this.editor.leftWidth + + // this.editor.rightWidth + + // this.editor.middleWidth; + // } + // if (this.editor.middleHeight + deltaHeight >= 305) { + // window.upSizeHeight = height; + // this.editor.middleHeight += deltaHeight; + // this.editor.maxHeight = + // this.editor.leftHeight + + // this.editor.rightHeight + + // this.editor.middleHeight; + // } + // this.editor.ddInstance.render.setSize( + // this.editor.middleWidth, + // this.editor.middleHeight, + // 0, + // 0 + // ); + // this.editor.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + // this.editor.ddInstance.bus.executeAll(); + // } + // }, + } + }; + const StandardLayout_vue_vue_type_style_index_0_scoped_43088579_lang = ""; + const StandardLayout_vue_vue_type_style_index_1_lang = ""; + const _hoisted_1$K = { + class: "ddei-editor-layout-standrad", + ref: "layoutRoot" + }; + const _hoisted_2$C = { + class: "top", + ref: "top" + }; + const _hoisted_3$z = { class: "body" }; + const _hoisted_4$s = { + class: "left", + ref: "left" + }; + const _hoisted_5$n = { + class: "middle", + ref: "middle" + }; + const _hoisted_6$i = { + class: "right", + ref: "right" + }; + const _hoisted_7$g = { + class: "bottom", + ref: "bottom" + }; + function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$K, [ + vue.withDirectives(vue.createElementVNode("div", _hoisted_2$C, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.topComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "topComponents", + editor: $props.editor + }, item.options, { + options: item.options + }), null, 16, ["editor", "options"]); + }), 256)) + ], 512), [ + [vue.vShow, ((_a3 = $data.topComponents) == null ? void 0 : _a3.length) > 0] + ]), + vue.createElementVNode("div", _hoisted_3$z, [ + vue.withDirectives(vue.createElementVNode("div", _hoisted_4$s, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.leftComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "leftComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512), [ + [vue.vShow, $data.toolboxShow && ((_b2 = $data.leftComponents) == null ? void 0 : _b2.length) > 0] + ]), + vue.withDirectives(vue.createElementVNode("div", _hoisted_5$n, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.middleComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "middleComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512), [ + [vue.vShow, ((_c2 = $data.middleComponents) == null ? void 0 : _c2.length) > 0] + ]), + vue.withDirectives(vue.createElementVNode("div", _hoisted_6$i, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.rightComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "rightComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512), [ + [vue.vShow, $data.propertyViewShow && ((_d2 = $data.rightComponents) == null ? void 0 : _d2.length) > 0] + ]) + ]), + vue.withDirectives(vue.createElementVNode("div", _hoisted_7$g, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.bottomComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "bottomComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512), [ + [vue.vShow, ((_e2 = $data.bottomComponents) == null ? void 0 : _e2.length) > 0] + ]) + ], 512); + } + const Layout$1 = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$K], ["__scopeId", "data-v-43088579"]]); + const _DDeiCoreStandLayout = class _DDeiCoreStandLayout extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Layout$1.name); + __publicField3(this, "defaultOptions", { + top: ["ddei-core-panel-topmenu"], + left: ["ddei-core-panel-toolbox"], + middle: ["ddei-core-panel-canvasview"], + right: ["ddei-core-panel-propertyview"], + bottom: ["ddei-core-panel-bottommenu"] + }); + __publicField3(this, "plugins", [Layout$1]); + } + getLayouts(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreStandLayout.defaultIns.defaultOptions); + if (fullConfig) { + if (fullConfig) { + if (options[Layout$1.name]) { + for (let i2 in options[Layout$1.name]) { + newOptions[i2] = options[Layout$1.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreStandLayout(newOptions); + return layouts; + } + } + return _DDeiCoreStandLayout; + } + static modify(fn) { + return _DDeiCoreStandLayout.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreStandLayout, "defaultIns", new _DDeiCoreStandLayout()); + let DDeiCoreStandLayout = _DDeiCoreStandLayout; + const _sfc_main$J = { + name: "ddei-core-layout-simple", + extends: null, + mixins: [], + props: { + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + otherComponents: [], + topComponents: [], + bottomComponents: [], + middleComponents: [] + }; + }, + //注册组件 + components: {}, + computed: {}, + watch: {}, + created() { + this.otherComponents = vue.markRaw(this.editor.getPartPanels(this.options, "other")); + this.topComponents = vue.markRaw(this.editor.getPartPanels(this.options, "top")); + this.bottomComponents = vue.markRaw(this.editor.getPartPanels(this.options, "bottom")); + this.middleComponents = vue.markRaw(this.editor.getPartPanels(this.options, "middle")); + }, + mounted() { + this.editor.layoutViewer = this; + let middleCanvas = document.getElementById(this.editor.id + "_canvas"); + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const { width, height } = entry.contentRect; + if (width != 0 && height != 0) { + this.editor.ddInstance.render.setSize( + width, + height, + 0, + 0 + ); + this.editor.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.ddInstance.bus.executeAll(); + } + } + }); + resizeObserver.observe(middleCanvas); + this.editor.topHeight = this.$refs.top.offsetHeight; + this.editor.bottomHeight = this.$refs.bottom.offsetHeight; + this.editor.middleWidth = this.$refs.middle.offsetWidth; + this.editor.middleHeight = this.$refs.middle.offsetHeight; + let ddInstance = this.editor.ddInstance; + if (ddInstance) { + let modeName = DDeiUtil.getConfigValue("MODE_NAME", ddInstance); + let accessCreate = DDeiUtil.isAccess( + DDeiEnumOperateType.CREATE, + null, + null, + modeName, + ddInstance + ); + this.toolboxShow = accessCreate; + let accessEdit = DDeiUtil.isAccess( + DDeiEnumOperateType.EDIT, + null, + null, + modeName, + ddInstance + ); + this.propertyViewShow = accessEdit; + } + }, + methods: { + //强制刷新下层组件 + forceRefreshParts(parts) { + let arr = [this.$refs.topComponents, this.$refs.middleComponents, this.$refs.otherComponents, this.$refs.bottomComponents]; + arr.forEach((comps) => { + if (comps) { + if (Array.isArray(comps)) { + comps.forEach((comp) => { + if (comp && comp.forceRefreshParts) { + comp.forceRefreshParts(parts); + } + }); + } else if (comps.forceRefreshParts) { + comps.forceRefreshParts(parts); + } + } + }); + } + } + }; + const SimpleLayout_vue_vue_type_style_index_0_scoped_4920d2e1_lang = ""; + const SimpleLayout_vue_vue_type_style_index_1_lang = ""; + const _hoisted_1$J = { + class: "ddei-editor-layout-simple", + ref: "layoutRoot" + }; + const _hoisted_2$B = { + class: "top", + ref: "top" + }; + const _hoisted_3$y = { + class: "middle", + ref: "middle" + }; + const _hoisted_4$r = { + class: "bottom", + ref: "bottom" + }; + function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$J, [ + vue.createElementVNode("div", _hoisted_2$B, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.topComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "topComponents", + editor: $props.editor + }, item.options, { + options: item.options + }), null, 16, ["editor", "options"]); + }), 256)) + ], 512), + vue.createElementVNode("div", _hoisted_3$y, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.middleComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "middleComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.otherComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "otherComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512), + vue.createElementVNode("div", _hoisted_4$r, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.bottomComponents, (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.comp), vue.mergeProps({ + ref_for: true, + ref: "bottomComponents", + editor: $props.editor, + options: item.options + }, item.options), null, 16, ["editor", "options"]); + }), 256)) + ], 512) + ], 512); + } + const Layout = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$J], ["__scopeId", "data-v-4920d2e1"]]); + const _DDeiCoreSimpleLayout = class _DDeiCoreSimpleLayout extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", Layout.name); + __publicField3(this, "defaultOptions", { + other: ["ddei-core-panel-toolbox-simple", "ddei-core-panel-topmenu-simple"], + middle: ["ddei-core-panel-canvasview"], + top: [], + bottom: [] + }); + __publicField3(this, "plugins", [Layout]); + } + getLayouts(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreSimpleLayout.defaultIns.defaultOptions); + if (fullConfig) { + if (fullConfig) { + if (options[Layout.name]) { + for (let i2 in options[Layout.name]) { + newOptions[i2] = options[Layout.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreSimpleLayout(newOptions); + return layouts; + } + } + return _DDeiCoreSimpleLayout; + } + static modify(fn) { + return _DDeiCoreSimpleLayout.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSimpleLayout, "defaultIns", new _DDeiCoreSimpleLayout()); + let DDeiCoreSimpleLayout = _DDeiCoreSimpleLayout; + const _DDeiCoreLayouts = class _DDeiCoreLayouts extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiCoreStandLayout, DDeiCoreSimpleLayout]); + } + getLayouts(editor) { + var _a3; + let layouts = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getLayouts(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getLayouts(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + layouts = layouts.concat(ls); + } + }); + return layouts; + } + static configuration(options) { + var _a3; + let layouts = new _DDeiCoreLayouts(options); + for (let i2 = 0; i2 < ((_a3 = layouts.plugins) == null ? void 0 : _a3.length); i2++) { + layouts.plugins[i2] = layouts.plugins[i2].configuration(options, true); + } + return layouts; + } + static modify(fn) { + return _DDeiCoreLayouts.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreLayouts, "defaultIns", new _DDeiCoreLayouts(null)); + let DDeiCoreLayouts = _DDeiCoreLayouts; + const DialogBase$2 = { + props: { + editor: { + type: DDeiEditor, + default: null + } + }, + data: function() { + return { + forceRefresh: false + }; + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + } + }; + const _sfc_main$I = { + name: "ddei-core-dialog-align", + extends: null, + mixins: [DialogBase$2], + props: { + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-align" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + /** + * 修改对齐方式 + */ + changeAlign(v) { + var _a3; + let file = this.editor.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_a3 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelAlign, { + models: Array.from(stage2.selectedModels.values()), + value: v + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + }, + /** + * 自动分布 + */ + doAutoPos(type) { + var _a3; + let file = this.editor.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_a3 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelAutoPos, { + models: Array.from(stage2.selectedModels.values()), + value: type + }); + this.editor.bus.executeAll(); + } + } + } + }; + const AlignDialog_vue_vue_type_style_index_0_scoped_6574182d_lang = ""; + const _hoisted_1$I = ["id"]; + const _hoisted_2$A = { class: "content" }; + const _hoisted_3$x = { class: "title" }; + const _hoisted_4$q = { class: "group" }; + const _hoisted_5$m = { class: "title" }; + const _hoisted_6$h = { class: "group_content" }; + const _hoisted_7$f = { class: "group" }; + const _hoisted_8$c = { class: "title" }; + const _hoisted_9$b = { class: "group_content" }; + function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-align" + }, [ + vue.createElementVNode("div", _hoisted_2$A, [ + vue.createElementVNode("div", _hoisted_3$x, vue.toDisplayString(_ctx.editor.i18n("ddei.align")), 1), + vue.createElementVNode("div", _hoisted_4$q, [ + vue.createElementVNode("div", _hoisted_5$m, vue.toDisplayString(_ctx.editor.i18n("ddei.align")) + ":", 1), + vue.createElementVNode("div", _hoisted_6$h, [ + vue.createElementVNode("div", { + class: "item", + onClick: _cache[0] || (_cache[0] = ($event) => $options.changeAlign("left")) + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-left" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[1] || (_cache[1] = ($event) => $options.changeAlign("center")) + }, _cache[9] || (_cache[9] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-v" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[2] || (_cache[2] = ($event) => $options.changeAlign("right")) + }, _cache[10] || (_cache[10] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-right" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[3] || (_cache[3] = ($event) => $options.changeAlign("top")) + }, _cache[11] || (_cache[11] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-top" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[4] || (_cache[4] = ($event) => $options.changeAlign("middle")) + }, _cache[12] || (_cache[12] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-h" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[5] || (_cache[5] = ($event) => $options.changeAlign("bottom")) + }, _cache[13] || (_cache[13] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-align-bottom" }) + ], -1) + ])) + ]) + ]), + vue.createElementVNode("div", _hoisted_7$f, [ + vue.createElementVNode("div", _hoisted_8$c, vue.toDisplayString(_ctx.editor.i18n("ddei.sort")) + ":", 1), + vue.createElementVNode("div", _hoisted_9$b, [ + vue.createElementVNode("div", { + class: "item", + onClick: _cache[6] || (_cache[6] = ($event) => $options.doAutoPos(2)) + }, _cache[14] || (_cache[14] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-equ-dist-v" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "item", + onClick: _cache[7] || (_cache[7] = ($event) => $options.doAutoPos(1)) + }, _cache[15] || (_cache[15] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shape-equ-dist-h" }) + ], -1) + ])) + ]) + ]) + ]) + ], 8, _hoisted_1$I)) : vue.createCommentVNode("", true); + } + const AlignDialog$1 = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["render", _sfc_render$I], ["__scopeId", "data-v-6574182d"]]); + const _DDeiCoreAlignDialog = class _DDeiCoreAlignDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", AlignDialog$1.name); + __publicField3(this, "plugins", [AlignDialog$1]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[AlignDialog$1.name]) { + for (let i2 in options[AlignDialog$1.name]) { + newOptions[i2] = options[AlignDialog$1.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreAlignDialog(newOptions); + return panels; + } + } + return _DDeiCoreAlignDialog; + } + static modify(fn) { + return _DDeiCoreAlignDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreAlignDialog, "defaultIns", new _DDeiCoreAlignDialog(null)); + let DDeiCoreAlignDialog = _DDeiCoreAlignDialog; + const _sfc_main$H = { + name: "ddei-core-dialog-changeratio", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + input: { + type: Boolean, + default: true + }, + min: { + type: Number, + default: 0.1 + }, + max: { + type: Number, + default: 10 + }, + dataSource: { + type: Array, + default: [ + { text: "400%", value: 4 }, + { text: "200%", value: 2 }, + { text: "150%", value: 1.5 }, + { text: "125%", value: 1.25 }, + { text: "100%", value: 1 }, + { text: "75%", value: 0.75 }, + { text: "50%", value: 0.5 }, + { text: "25%", value: 0.25 } + ] + } + }, + data() { + return { + dialogId: "ddei-core-dialog-changeratio", + ratioInputValue: 100, + iMin: 0.1, + iMax: 10 + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId])) { + if (this.editor.tempDialogData[this.dialogId].min || this.editor.tempDialogData[this.dialogId].min == 0) { + this.iMin = this.editor.tempDialogData[this.dialogId].min; + } else if (this.min || this.min == 0) { + this.iMin = this.min; + } + if (this.editor.tempDialogData[this.dialogId].max || this.editor.tempDialogData[this.dialogId].max == 0) { + this.iMax = this.editor.tempDialogData[this.dialogId].max; + } else if (this.max || this.max == 0) { + this.iMax = this.max; + } + if (this.editor.tempDialogData[this.dialogId].ratio > this.iMax) { + this.ratioInputValue = this.iMax * 100; + } else if (this.editor.tempDialogData[this.dialogId].ratio < this.iMin) { + this.ratioInputValue = this.iMin * 100; + } else { + this.ratioInputValue = this.editor.tempDialogData[this.dialogId].ratio * 100; + } + } + }, + ok(data) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (!data) { + data = 1; + } + this.ratioInputValue = data * 100; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(data); + } + }, + ratioInputChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (!evt || evt.keyCode == 13) { + if (this.ratioInputValue > this.max * 100) { + this.ratioInputValue = this.max * 100; + } else if (this.ratioInputValue < this.min * 100) { + this.ratioInputValue = this.min * 100; + } + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.ratioInputValue / 100); + } + } + } + } + }; + const ChangeRatioDialog_vue_vue_type_style_index_0_scoped_561a0908_lang = ""; + const _hoisted_1$H = ["id"]; + const _hoisted_2$z = { class: "content" }; + const _hoisted_3$w = { class: "title" }; + const _hoisted_4$p = { class: "group" }; + const _hoisted_5$l = { class: "group_content" }; + const _hoisted_6$g = ["onClick"]; + const _hoisted_7$e = { + key: 0, + class: "item", + style: { "flex": "1", "border-top": "1px solid var(--panel-border)" } + }; + const _hoisted_8$b = ["min", "max"]; + function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-changeratio" + }, [ + vue.createElementVNode("div", _hoisted_2$z, [ + vue.createElementVNode("div", _hoisted_3$w, vue.toDisplayString(_ctx.editor.i18n("ddei.scale")), 1), + vue.createElementVNode("div", _hoisted_4$p, [ + vue.createElementVNode("div", _hoisted_5$l, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($props.dataSource, (data) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item_selected": $data.ratioInputValue / 100 == data.value }), + onClick: ($event) => $options.ok(data.value) + }, vue.toDisplayString(data.text), 11, _hoisted_6$g)), [ + [vue.vShow, (data == null ? void 0 : data.value) >= $data.iMin && (data == null ? void 0 : data.value) <= $data.iMax] + ]); + }), 256)), + $props.input ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$e, [ + vue.createTextVNode(vue.toDisplayString(_ctx.editor.i18n("ddei.precent")) + ":", 1), + vue.withDirectives(vue.createElementVNode("input", { + type: "number", + min: $data.iMin * 100, + max: $data.iMax * 100, + onKeydown: _cache[0] || (_cache[0] = ($event) => $options.ratioInputChange($event)), + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.ratioInputValue = $event), + onBlur: _cache[2] || (_cache[2] = ($event) => $options.ratioInputChange()), + autocomplete: "off", + name: "ddei_bottom_input" + }, null, 40, _hoisted_8$b), [ + [vue.vModelText, $data.ratioInputValue] + ]), + _cache[3] || (_cache[3] = vue.createTextVNode("% ")) + ])) : vue.createCommentVNode("", true) + ]) + ]) + ]) + ], 8, _hoisted_1$H)) : vue.createCommentVNode("", true); + } + const ChangeRatioDialog = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["render", _sfc_render$H], ["__scopeId", "data-v-561a0908"]]); + const _DDeiCoreChangeRatioDialog = class _DDeiCoreChangeRatioDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ChangeRatioDialog.name); + __publicField3(this, "plugins", [ChangeRatioDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChangeRatioDialog.name]) { + for (let i2 in options[ChangeRatioDialog.name]) { + newOptions[i2] = options[ChangeRatioDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreChangeRatioDialog(newOptions); + return panels; + } + } + return _DDeiCoreChangeRatioDialog; + } + static modify(fn) { + return _DDeiCoreChangeRatioDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreChangeRatioDialog, "defaultIns", new _DDeiCoreChangeRatioDialog(null)); + let DDeiCoreChangeRatioDialog = _DDeiCoreChangeRatioDialog; + const _sfc_main$G = { + name: "ddei-core-dialog-choosecontrolgroup", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-choosecontrolgroup", + subGroups: null, + menuId: null, + selectGroups: [] + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2; + this.menuId = null; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.selectGroups)) { + this.selectGroups = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].selectGroups; + } + }, + expandSubMenu(menuid, evt) { + if (this.menuId != menuid) { + let groups = []; + this.editor.groups.forEach((group2) => { + if (group2.subject == menuid) { + let ginfo = { id: group2.id, name: group2.name }; + if (this.selectGroups.indexOf(group2.id) != -1) { + ginfo.selected = true; + } else { + ginfo.selected = false; + } + groups.push(ginfo); + } + }); + this.subGroups = groups; + this.menuId = menuid; + let srcElement = evt.currentTarget; + setTimeout(() => { + let dialogEle = document.getElementById(this.editor.id + "_ddei-core-dialog-choosecontrolgroup"); + let subContentEle = document.getElementById(this.editor.id + "_ddei-core-dialog-choosecontrolgroup_subcontent"); + subContentEle.style.display = "block"; + let dialogDomPos = DDeiUtil.getDomAbsPosition(dialogEle); + let domPos = DDeiUtil.getDomAbsPosition(srcElement); + subContentEle.style.left = domPos.left - dialogDomPos.left + srcElement.clientWidth + "px"; + subContentEle.style.top = domPos.top - dialogDomPos.top + "px"; + }, 50); + } + }, + chooseGroup(groupid) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let ginfo = null; + for (let i2 = 0; i2 < this.subGroups.length; i2++) { + if (this.subGroups[i2].id == groupid) { + ginfo = this.subGroups[i2]; + break; + } + } + if (ginfo) { + ginfo.selected = !ginfo.selected; + if (ginfo.selected) { + if (this.selectGroups.indexOf(ginfo.id) == -1) { + this.selectGroups.push(ginfo.id); + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.select) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.select(ginfo.id, true); + } + } + } else { + if (this.selectGroups.indexOf(ginfo.id) != -1) { + this.selectGroups.splice(this.selectGroups.indexOf(ginfo.id), 1); + if ((_i = (_h = (_g = this.editor) == null ? void 0 : _g.tempDialogData[this.dialogId]) == null ? void 0 : _h.callback) == null ? void 0 : _i.select) { + (_l = (_k = (_j = this.editor) == null ? void 0 : _j.tempDialogData[this.dialogId]) == null ? void 0 : _k.callback) == null ? void 0 : _l.select(ginfo.id, false); + } + } + } + } + } + } + }; + const ChooseControlGroupDialog_vue_vue_type_style_index_0_scoped_d0e0cfd9_lang = ""; + const _hoisted_1$G = ["id"]; + const _hoisted_2$y = { class: "content" }; + const _hoisted_3$v = { class: "title" }; + const _hoisted_4$o = { class: "group" }; + const _hoisted_5$k = { class: "groupname" }; + const _hoisted_6$f = { class: "groupname" }; + const _hoisted_7$d = ["id"]; + const _hoisted_8$a = { class: "group" }; + const _hoisted_9$a = ["onClick"]; + const _hoisted_10$5 = ["onUpdate:modelValue", "name"]; + const _hoisted_11$5 = { class: "groupname" }; + function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-choosecontrolgroup" + }, [ + vue.createElementVNode("div", _hoisted_2$y, [ + vue.createElementVNode("div", _hoisted_3$v, vue.toDisplayString(_ctx.editor.i18n("ddei.chooseShapeGroups")), 1), + vue.createElementVNode("div", _hoisted_4$o, [ + vue.createElementVNode("div", { + class: "item", + onMousemove: _cache[0] || (_cache[0] = ($event) => $options.expandSubMenu("basic", $event)) + }, [ + _cache[2] || (_cache[2] = vue.createElementVNode("svg", { + class: "icon groupicon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shapes-catalogy" }) + ], -1)), + vue.createElementVNode("div", _hoisted_5$k, vue.toDisplayString(_ctx.editor.i18n("ddei.basicSubject")), 1), + _cache[3] || (_cache[3] = vue.createElementVNode("svg", { + class: "icon expand", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-right" }) + ], -1)) + ], 32), + vue.createElementVNode("div", { + class: "item", + onMousemove: _cache[1] || (_cache[1] = ($event) => $options.expandSubMenu("uml", $event)) + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon groupicon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-groups" }) + ], -1)), + vue.createElementVNode("div", _hoisted_6$f, vue.toDisplayString(_ctx.editor.i18n("ddei.umlSubject")), 1), + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon expand", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-right" }) + ], -1)) + ], 32) + ]) + ]), + vue.withDirectives(vue.createElementVNode("div", { + class: "subcontent", + id: ((_b2 = _ctx.editor) == null ? void 0 : _b2.id) + "_ddei-core-dialog-choosecontrolgroup_subcontent" + }, [ + vue.createElementVNode("div", _hoisted_8$a, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.subGroups, (group2) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "item", + onClick: ($event) => $options.chooseGroup(group2.id) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "checkbox", + "onUpdate:modelValue": ($event) => group2.selected = $event, + style: { "pointer-events": "none" }, + name: group2.id, + autocomplete: "off" + }, null, 8, _hoisted_10$5), [ + [vue.vModelCheckbox, group2.selected] + ]), + vue.createElementVNode("div", _hoisted_11$5, vue.toDisplayString(_ctx.editor.i18n(group2.name)), 1) + ], 8, _hoisted_9$a); + }), 256)) + ]) + ], 8, _hoisted_7$d), [ + [vue.vShow, ((_c2 = $data.subGroups) == null ? void 0 : _c2.length) > 0] + ]) + ], 8, _hoisted_1$G)) : vue.createCommentVNode("", true); + } + const ChooseControlGroupDialog = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["render", _sfc_render$G], ["__scopeId", "data-v-d0e0cfd9"]]); + const _DDeiCoreChooseControlGroupDialog = class _DDeiCoreChooseControlGroupDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ChooseControlGroupDialog.name); + __publicField3(this, "plugins", [ChooseControlGroupDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChooseControlGroupDialog.name]) { + for (let i2 in options[ChooseControlGroupDialog.name]) { + newOptions[i2] = options[ChooseControlGroupDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreChooseControlGroupDialog(newOptions); + return panels; + } + } + return _DDeiCoreChooseControlGroupDialog; + } + static modify(fn) { + return _DDeiCoreChooseControlGroupDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreChooseControlGroupDialog, "defaultIns", new _DDeiCoreChooseControlGroupDialog(null)); + let DDeiCoreChooseControlGroupDialog = _DDeiCoreChooseControlGroupDialog; + const _sfc_main$F = { + name: "ddei-core-dialog-closefile", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-closefile" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-closefile"); + }, + cancel() { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.cancel) { + this.editor.tempDialogData[this.dialogId].callback.cancel(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-closefile"); + }, + abort() { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.abort) { + this.editor.tempDialogData[this.dialogId].callback.abort(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-closefile"); + } + } + }; + const CloseFileConfirmDialog_vue_vue_type_style_index_0_scoped_929ef917_lang = ""; + const _hoisted_1$F = ["id"]; + const _hoisted_2$x = { class: "content" }; + const _hoisted_3$u = { class: "header" }; + const _hoisted_4$n = { class: "tail" }; + function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-closefile" + }, [ + vue.createElementVNode("div", _hoisted_2$x, [ + vue.createElementVNode("div", _hoisted_3$u, [ + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon warn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-warn" }) + ], -1)), + vue.createElementVNode("span", null, vue.toDisplayString(_ctx.editor.i18n("ddei.confirm-save-file")), 1), + _cache[6] || (_cache[6] = vue.createElementVNode("div", { style: { "flex": "1" } }, null, -1)), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon close", + "aria-hidden": "true", + onClick: _cache[0] || (_cache[0] = (...args) => $options.cancel && $options.cancel(...args)) + }, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }, null, -1) + ]))) + ]), + _cache[7] || (_cache[7] = vue.createElementVNode("div", { class: "msg" }, null, -1)), + vue.createElementVNode("div", _hoisted_4$n, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[1] || (_cache[1] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.save")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[2] || (_cache[2] = (...args) => $options.abort && $options.abort(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.abort")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[3] || (_cache[3] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$F)) : vue.createCommentVNode("", true); + } + const CloseFileConfirmDialog = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["render", _sfc_render$F], ["__scopeId", "data-v-929ef917"]]); + const _DDeiCoreCloseFileConfirmDialog = class _DDeiCoreCloseFileConfirmDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", CloseFileConfirmDialog.name); + __publicField3(this, "plugins", [CloseFileConfirmDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[CloseFileConfirmDialog.name]) { + for (let i2 in options[CloseFileConfirmDialog.name]) { + newOptions[i2] = options[CloseFileConfirmDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreCloseFileConfirmDialog(newOptions); + return panels; + } + } + return _DDeiCoreCloseFileConfirmDialog; + } + static modify(fn) { + return _DDeiCoreCloseFileConfirmDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCloseFileConfirmDialog, "defaultIns", new _DDeiCoreCloseFileConfirmDialog(null)); + let DDeiCoreCloseFileConfirmDialog = _DDeiCoreCloseFileConfirmDialog; + const _sfc_main$E = { + name: "ddei-core-dialog-collfile", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-collfile" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-collfile"); + }, + cancel() { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.cancel) { + this.editor.tempDialogData[this.dialogId].callback.cancel(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-collfile"); + } + } + }; + const CollFileConfirmDialog_vue_vue_type_style_index_0_scoped_068f2102_lang = ""; + const _hoisted_1$E = ["id"]; + const _hoisted_2$w = { class: "content" }; + const _hoisted_3$t = { class: "header" }; + const _hoisted_4$m = { class: "tail" }; + function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-collfile" + }, [ + vue.createElementVNode("div", _hoisted_2$w, [ + vue.createElementVNode("div", _hoisted_3$t, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon warn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shoucang" }) + ], -1)), + vue.createElementVNode("span", null, vue.toDisplayString(_ctx.editor.i18n("ddei.collection")), 1), + _cache[5] || (_cache[5] = vue.createElementVNode("div", { style: { "flex": "1" } }, null, -1)), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon close", + "aria-hidden": "true", + onClick: _cache[0] || (_cache[0] = (...args) => $options.cancel && $options.cancel(...args)) + }, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }, null, -1) + ]))) + ]), + _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "msg" }, null, -1)), + vue.createElementVNode("div", _hoisted_4$m, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[1] || (_cache[1] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.confirm")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[2] || (_cache[2] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$E)) : vue.createCommentVNode("", true); + } + const CollFileConfirmDialog = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["render", _sfc_render$E], ["__scopeId", "data-v-068f2102"]]); + const _DDeiCoreCollFileConfirmDialog = class _DDeiCoreCollFileConfirmDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", CollFileConfirmDialog.name); + __publicField3(this, "plugins", [CollFileConfirmDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[CollFileConfirmDialog.name]) { + for (let i2 in options[CollFileConfirmDialog.name]) { + newOptions[i2] = options[CollFileConfirmDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreCollFileConfirmDialog(newOptions); + return panels; + } + } + return _DDeiCoreCollFileConfirmDialog; + } + static modify(fn) { + return _DDeiCoreCollFileConfirmDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCollFileConfirmDialog, "defaultIns", new _DDeiCoreCollFileConfirmDialog(null)); + let DDeiCoreCollFileConfirmDialog = _DDeiCoreCollFileConfirmDialog; + const _sfc_main$D = { + name: "ddei-core-dialog-linepointtype", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-linepointtype", + value: [], + dataSource: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.value)) { + this.value = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].value; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.dataSource)) { + this.dataSource = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].dataSource; + } + }, + select(value) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = value; + if (this.value) { + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + } + }, + selectAndConfirm(value) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = value; + if (this.value) { + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + } + this.ok(); + }, + ok() { + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-linepointtype"); + } + } + }; + const LinePointTypeDialog_vue_vue_type_style_index_0_scoped_ec516138_lang = ""; + const _hoisted_1$D = ["id"]; + const _hoisted_2$v = { class: "content" }; + const _hoisted_3$s = { class: "group" }; + const _hoisted_4$l = { class: "title" }; + const _hoisted_5$j = { class: "group_content" }; + const _hoisted_6$e = ["onClick", "onDblclick"]; + function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-linepointtype" + }, [ + vue.createElementVNode("div", _hoisted_2$v, [ + vue.createElementVNode("div", _hoisted_3$s, [ + vue.createElementVNode("div", _hoisted_4$l, vue.toDisplayString(_ctx.editor.i18n("ddei.property.linePointType")), 1), + vue.createElementVNode("div", _hoisted_5$j, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (data) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": JSON.stringify($data.value) == JSON.stringify(data.value) }), + onClick: ($event) => $options.select(data.value), + onDblclick: ($event) => $options.selectAndConfirm(data.value) + }, vue.toDisplayString(_ctx.editor.i18n(data.text)), 43, _hoisted_6$e); + }), 256)) + ]) + ]) + ]) + ], 8, _hoisted_1$D)) : vue.createCommentVNode("", true); + } + const LinePointTypeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["render", _sfc_render$D], ["__scopeId", "data-v-ec516138"]]); + const _DDeiCoreLinePointTypeDialog = class _DDeiCoreLinePointTypeDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", LinePointTypeDialog.name); + __publicField3(this, "plugins", [LinePointTypeDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[LinePointTypeDialog.name]) { + for (let i2 in options[LinePointTypeDialog.name]) { + newOptions[i2] = options[LinePointTypeDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreLinePointTypeDialog(newOptions); + return panels; + } + } + return _DDeiCoreLinePointTypeDialog; + } + static modify(fn) { + return _DDeiCoreLinePointTypeDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreLinePointTypeDialog, "defaultIns", new _DDeiCoreLinePointTypeDialog(null)); + let DDeiCoreLinePointTypeDialog = _DDeiCoreLinePointTypeDialog; + const _sfc_main$C = { + name: "ddei-core-dialog-linetype", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-linetype", + value: 1 + //当前选中值 + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2; + let value = 1; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId])) { + value = (_c2 = this.editor) == null ? void 0 : _c2.tempDialogData[this.dialogId].value; + } + this.value = value; + }, + /** + * 修改文本对齐方式 + */ + changeType(v) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = v; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + }, + /** + * 修改文本对齐方式 + */ + ok(v) { + this.changeType(v); + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-linetype"); + } + } + }; + const LineTypeDialog_vue_vue_type_style_index_0_scoped_5fc9eaad_lang = ""; + const _hoisted_1$C = ["id"]; + const _hoisted_2$u = { class: "content" }; + const _hoisted_3$r = { class: "title" }; + const _hoisted_4$k = { class: "group" }; + const _hoisted_5$i = { class: "group_content" }; + function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-linetype" + }, [ + vue.createElementVNode("div", _hoisted_2$u, [ + vue.createElementVNode("div", _hoisted_3$r, vue.toDisplayString(_ctx.editor.i18n("ddei.lineType")), 1), + vue.createElementVNode("div", _hoisted_4$k, [ + vue.createElementVNode("div", _hoisted_5$i, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 1 }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.changeType(1)), + onDblclick: _cache[1] || (_cache[1] = ($event) => $options.ok(1)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.lineType1")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 2 }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.changeType(2)), + onDblclick: _cache[3] || (_cache[3] = ($event) => $options.ok(2)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.lineType2")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 3 }), + onClick: _cache[4] || (_cache[4] = ($event) => $options.changeType(3)), + onDblclick: _cache[5] || (_cache[5] = ($event) => $options.ok(3)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.lineType3")), 35) + ]) + ]) + ]) + ], 8, _hoisted_1$C)) : vue.createCommentVNode("", true); + } + const LineTypeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$C], ["__scopeId", "data-v-5fc9eaad"]]); + const _DDeiCoreLineTypeDialog = class _DDeiCoreLineTypeDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", LineTypeDialog.name); + __publicField3(this, "plugins", [LineTypeDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[LineTypeDialog.name]) { + for (let i2 in options[LineTypeDialog.name]) { + newOptions[i2] = options[LineTypeDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreLineTypeDialog(newOptions); + return panels; + } + } + return _DDeiCoreLineTypeDialog; + } + static modify(fn) { + return _DDeiCoreLineTypeDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreLineTypeDialog, "defaultIns", new _DDeiCoreLineTypeDialog(null)); + let DDeiCoreLineTypeDialog = _DDeiCoreLineTypeDialog; + const _sfc_main$B = { + name: "ddei-core-dialog-managerlayers", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-managerlayers", + allowAddLayer: true, + allowEditLayes: true, + //是否允许编辑多图层 + allowOpenMultLayers: true, + currentStage: null, + file: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2; + this.allowOpenMultLayers = DDeiEditorUtil.getConfigValue( + "GLOBAL_ALLOW_OPEN_MULT_LAYERS", + this.editor + ); + this.allowEditLayes = ((_a3 = this.editor.ddInstance) == null ? void 0 : _a3.AC_DESIGN_EDIT) != false ? true : false; + this.allowAddLayer = this.allowEditLayes && DDeiUtil.isAccess( + DDeiEnumOperateType.CREATE, + { modelType: "DDeiLayer" }, + DDeiUtil.getConfigValue("MODE_NAME", this.editor.ddInstance), + this.editor.ddInstance + ); + let file = (_c2 = this.editor) == null ? void 0 : _c2.files[(_b2 = this.editor) == null ? void 0 : _b2.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + this.currentStage = sheet == null ? void 0 : sheet.stage; + this.file = file; + }, + /** + * layer开始拖拽移动 + */ + layerDragStart(layerEle, evt) { + this.dragLayerEle = evt.target; + }, + /** + * 拖拽layer移动 + */ + layerDragOver(e) { + if (this.dragLayerEle) { + let parentDiv = this.dragLayerEle.parentElement; + let sourceIndex = -1; + let targetIndex = -1; + let children = parentDiv.children; + for (let i2 = 1; i2 < children.length; i2++) { + children[i2].style.borderTop = ""; + children[i2].style.borderBottom = ""; + if (children[i2] == this.dragLayerEle) { + sourceIndex = i2; + } else if (e.target.parentElement == children[i2]) { + targetIndex = i2; + } + } + if (sourceIndex != -1 && targetIndex != -1) { + this.sourceLayerIndex = sourceIndex - 1; + if (targetIndex == children.length - 1) { + let pos = DDeiUtil.getDomAbsPosition(children[targetIndex]); + let halfPos = pos.top + children[targetIndex].offsetHeight / 2; + if (halfPos <= e.clientY && e.clientY <= pos.top + children[targetIndex].offsetHeight) { + this.changeLayerIndex = targetIndex; + children[targetIndex].style.borderBottom = "2px solid #017fff"; + } else { + this.changeLayerIndex = targetIndex - 1; + children[targetIndex].style.borderTop = "2px solid #017fff"; + } + } else { + this.changeLayerIndex = targetIndex - 1; + children[targetIndex].style.borderTop = "2px solid #017fff"; + } + } + e.preventDefault(); + } + }, + /** + * 拖拽layer放开 + */ + layerDragDrop(e) { + var _a3; + if ((this.sourceLayerIndex || this.sourceLayerIndex == 0) && (this.changeLayerIndex || this.changeLayerIndex == 0)) { + let layers = this.currentStage.layers; + let sourceLayer = this.currentStage.layers[this.sourceLayerIndex]; + let currentLayer = this.currentStage.layers[this.currentStage.layerIndex]; + layers[this.sourceLayerIndex] = null; + layers.splice(this.changeLayerIndex, 0, sourceLayer); + for (let j2 = layers.length; j2 >= 0; j2--) { + if (layers[j2] == null) { + layers.splice(j2, 1); + } + } + for (let j2 = layers.length; j2 >= 0; j2--) { + if (currentLayer == layers[j2]) { + this.currentStage.layerIndex = j2; + } + } + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + let children = this.dragLayerEle.parentElement.children; + for (let i2 = 1; i2 < children.length; i2++) { + children[i2].style.borderTop = ""; + children[i2].style.borderBottom = ""; + } + this.dragLayerEle = null; + this.sourceLayerIndex = null; + this.changeLayerIndex = null; + }, + /** + * 拖拽layer离开 + */ + layerDragCancel(e) { + if (this.dragLayerEle) { + let children = this.dragLayerEle.parentElement.children; + for (let i2 = 1; i2 < children.length; i2++) { + children[i2].style.borderTop = ""; + children[i2].style.borderBottom = ""; + } + this.sourceLayerIndex = null; + this.changeLayerIndex = null; + } + }, + //创建新图层 + createNewLayer(index) { + var _a3; + if (this.allowAddLayer) { + let newLayer = this.currentStage.addLayer(null, index); + newLayer.initRender(); + this.editor.bus.push( + DDeiEnumBusCommandType.CancelCurLevelSelectedModels + ); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + }, + //移除图层 + removeLayer(index) { + var _a3; + this.currentStage.removeLayer(index); + this.editor.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + //设置图层显示或隐藏 + displayOrShowLayer(layer2) { + var _a3; + if (layer2.display == 0) { + layer2.display = 1; + } else { + layer2.display = 0; + } + this.editor.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + //设置图层锁定和解锁 + lockOrUnLockLayer(layer2) { + layer2.lock = !layer2.lock; + }, + //设置图层打印或不打印 + printOrNoPrintLayer(layer2) { + layer2.print = !layer2.print; + }, + //切换当前图层 + changeLayer(index, evt) { + var _a3; + this.currentStage.changeLayer(index); + this.currentStage.displayLayer(null, true); + if (evt.target.className == "not_temp_display") { + this.currentStage.layers[index].tempDisplay = true; + } else { + this.currentStage.layers[index].tempDisplay = false; + } + this.editor.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + (_a3 = this.editor.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + this.editor.changeState(DDeiEditorState.DESIGNING); + }, + /** + * 开始修改图层名称 + */ + startChangeLayerName(layer2, evt) { + let ele = evt.target; + let domPos = DDeiUtil.getDomAbsPosition(ele); + let editor = DDeiEditor.ACTIVE_INSTANCE; + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let input = document.getElementById(editor.id + "_change_layer_name_input"); + this.currentChangeLayer = layer2; + if (!input) { + input = document.createElement("input"); + input.setAttribute("id", editor.id + "_change_layer_name_input"); + input.style.position = "absolute"; + input.style.fontSize = "14px"; + input.style.zIndex = 999; + editorEle.appendChild(input); + const that = this; + input.onblur = () => { + var _a3; + if (input.value) { + let editor2 = this.editor; + if (input.value != that.currentChangeLayer.name) { + that.currentChangeLayer.name = input.value; + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.executeAll(); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } + }; + input.onkeydown = (e) => { + var _a3; + if (e.keyCode == 13) { + let editor2 = this.editor; + if (input.value != that.currentChangeLayer.name) { + that.currentChangeLayer.name = input.value; + (_a3 = editor2.editorViewer) == null ? void 0 : _a3.changeFileModifyDirty(); + editor2.bus.push(DDeiEditorEnumBusCommandType.AddFileHistroy); + editor2.bus.executeAll(); + } + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } else if (e.keyCode == 27) { + input.style.display = "none"; + input.style.left = "0px"; + input.style.top = "0px"; + input.value = ""; + } + }; + } + input.style.width = ele.offsetWidth + "px"; + input.style.height = ele.offsetHeight + "px"; + input.style.left = domPos.left - editorDomPos.left + "px"; + input.style.top = domPos.top - editorDomPos.top + "px"; + input.style.outline = "1px solid #017fff"; + input.style.border = "none"; + input.style.borderRadius = "1px"; + input.value = layer2.name; + input.style.display = "block"; + input.selectionStart = 0; + input.selectionEnd = input.value.length; + input.style.background = "var(--background)"; + input.style.color = "var(--text)"; + input.focus(); + this.editor.changeState(DDeiEditorState.PROPERTY_EDITING); + } + } + }; + const ManageLayersDialog_vue_vue_type_style_index_0_scoped_f8156347_lang = ""; + const _hoisted_1$B = ["id"]; + const _hoisted_2$t = { class: "content" }; + const _hoisted_3$q = { class: "title" }; + const _hoisted_4$j = { class: "group" }; + const _hoisted_5$h = { class: "group_content" }; + const _hoisted_6$d = { style: { "grid-column": "1/8" } }; + const _hoisted_7$c = ["draggable", "onDragstart"]; + const _hoisted_8$9 = ["onDblclick"]; + const _hoisted_9$9 = ["onClick"]; + const _hoisted_10$4 = { style: { "grid-column": "1/4", "font-weight": "normal" } }; + const _hoisted_11$4 = ["onClick"]; + const _hoisted_12$3 = ["onClick"]; + const _hoisted_13$3 = { + key: 0, + "xlink:href": "#icon-close-eye" + }; + const _hoisted_14$2 = { + key: 1, + "xlink:href": "#icon-open-eye" + }; + const _hoisted_15$1 = ["onClick"]; + const _hoisted_16$1 = { + key: 0, + "xlink:href": "#icon-lock" + }; + const _hoisted_17$1 = { + key: 1, + "xlink:href": "#icon-unlock" + }; + const _hoisted_18$1 = ["value", "onMousedown", "checked"]; + const _hoisted_19$1 = ["onClick"]; + const _hoisted_20$1 = { + key: 0, + "xlink:href": "#icon-print-disabled" + }; + const _hoisted_21$1 = { + key: 1, + "xlink:href": "#icon-print" + }; + function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2; + return _ctx.forceRefresh && $data.allowOpenMultLayers ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-managerlayers" + }, [ + vue.createElementVNode("div", _hoisted_2$t, [ + vue.createElementVNode("div", _hoisted_3$q, vue.toDisplayString(_ctx.editor.i18n("ddei.layerName")), 1), + vue.createElementVNode("div", _hoisted_4$j, [ + vue.createElementVNode("div", _hoisted_5$h, [ + vue.withDirectives(vue.createElementVNode("div", { + class: "item", + onClick: _cache[0] || (_cache[0] = ($event) => $options.createNewLayer(0)) + }, [ + vue.createElementVNode("span", _hoisted_6$d, vue.toDisplayString(_ctx.editor.i18n("ddei.newLayer")), 1), + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon extbtn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-add-layer" }) + ], -1)) + ], 512), [ + [vue.vShow, $data.allowAddLayer] + ]), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b2 = $data.currentStage) == null ? void 0 : _b2.layers, (layer2, index) => { + var _a4, _b3; + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "current": ((_a4 = $data.currentStage) == null ? void 0 : _a4.layerIndex) === index }), + draggable: $data.allowEditLayes, + onDragstart: ($event) => $options.layerDragStart(index, $event), + onDragover: _cache[1] || (_cache[1] = ($event) => $options.layerDragOver($event)), + onDrop: _cache[2] || (_cache[2] = ($event) => $options.layerDragDrop($event)), + onDragleave: _cache[3] || (_cache[3] = ($event) => $options.layerDragCancel($event)) + }, [ + vue.createElementVNode("span", { + style: { "grid-column": "1/8" }, + onDblclick: ($event) => $data.allowEditLayes && $options.startChangeLayerName(layer2, $event) + }, vue.toDisplayString(layer2.name ? layer2.name : _ctx.editor.i18n("ddei.layerName")), 41, _hoisted_8$9), + vue.withDirectives((vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + "aria-hidden": "true", + onClick: ($event) => $options.removeLayer(index) + }, _cache[5] || (_cache[5] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-remove" }, null, -1) + ]), 8, _hoisted_9$9)), [ + [vue.vShow, $data.allowEditLayes] + ]), + vue.createElementVNode("span", _hoisted_10$4, vue.toDisplayString(_ctx.editor.i18n("ddei.shapes")) + ":" + vue.toDisplayString(layer2.modelNumber), 1), + vue.withDirectives((vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + "aria-hidden": "true", + onClick: ($event) => $options.createNewLayer(index) + }, _cache[6] || (_cache[6] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-add-layer" }, null, -1) + ]), 8, _hoisted_11$4)), [ + [vue.vShow, $data.allowAddLayer] + ]), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + onClick: ($event) => $options.displayOrShowLayer(layer2) + }, [ + layer2.display == 0 && !layer2.tempDisplay ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_13$3)) : vue.createCommentVNode("", true), + !(layer2.display == 0 && !layer2.tempDisplay) ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_14$2)) : vue.createCommentVNode("", true) + ], 8, _hoisted_12$3)), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + onClick: ($event) => $options.lockOrUnLockLayer(layer2) + }, [ + layer2.lock ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_16$1)) : vue.createCommentVNode("", true), + !layer2.lock ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_17$1)) : vue.createCommentVNode("", true) + ], 8, _hoisted_15$1)), + vue.createElementVNode("input", { + type: "radio", + class: vue.normalizeClass({ "not_temp_display": !layer2.tempDisplay }), + name: "rdo_layers", + value: layer2.id, + onMousedown: ($event) => $options.changeLayer(index, $event), + checked: ((_b3 = $data.currentStage) == null ? void 0 : _b3.layerIndex) === index, + autocomplete: "off" + }, null, 42, _hoisted_18$1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon", + onClick: ($event) => $options.printOrNoPrintLayer(layer2) + }, [ + !layer2.print ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_20$1)) : vue.createCommentVNode("", true), + layer2.print ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_21$1)) : vue.createCommentVNode("", true) + ], 8, _hoisted_19$1)) + ], 42, _hoisted_7$c); + }), 256)) + ]) + ]) + ]) + ], 8, _hoisted_1$B)) : vue.createCommentVNode("", true); + } + const ManageLayersDialog = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["render", _sfc_render$B], ["__scopeId", "data-v-f8156347"]]); + const _DDeiCoreManageLayersDialog = class _DDeiCoreManageLayersDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ManageLayersDialog.name); + __publicField3(this, "plugins", [ManageLayersDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ManageLayersDialog.name]) { + for (let i2 in options[ManageLayersDialog.name]) { + newOptions[i2] = options[ManageLayersDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreManageLayersDialog(newOptions); + return panels; + } + } + return _DDeiCoreManageLayersDialog; + } + static modify(fn) { + return _DDeiCoreManageLayersDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreManageLayersDialog, "defaultIns", new _DDeiCoreManageLayersDialog(null)); + let DDeiCoreManageLayersDialog = _DDeiCoreManageLayersDialog; + const _sfc_main$A = { + name: "ddei-core-dialog-mergecompose", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-mergecompose" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + //是否可以取消组合 + canCancelMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 0) { + let models = Array.from(stage2 == null ? void 0 : stage2.selectedModels.values()); + if (models[0].baseModelType == "DDeiContainer" && models[0].layout == "compose") { + return true; + } + } + return false; + }, + //是否可以组合 + canMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 1) { + return true; + } + return false; + }, + /** + * 执行组合 + */ + doMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 1) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelMerge); + this.editor.bus.executeAll(); + } + }, + /** + * 执行取消组合 + */ + doCancelMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 0) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelCancelMerge); + this.editor.bus.executeAll(); + } + } + } + }; + const MergeComposeDialog_vue_vue_type_style_index_0_scoped_eb54102e_lang = ""; + const _hoisted_1$A = ["id"]; + const _hoisted_2$s = { class: "content" }; + const _hoisted_3$p = { class: "title" }; + const _hoisted_4$i = { class: "group" }; + const _hoisted_5$g = { class: "group_content" }; + const _hoisted_6$c = { class: "text" }; + const _hoisted_7$b = { class: "text" }; + function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-mergecompose" + }, [ + vue.createElementVNode("div", _hoisted_2$s, [ + vue.createElementVNode("div", _hoisted_3$p, vue.toDisplayString(_ctx.editor.i18n("ddei.combina")), 1), + vue.createElementVNode("div", _hoisted_4$i, [ + vue.createElementVNode("div", _hoisted_5$g, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canMerge(), "item": $options.canMerge() }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.canMerge() && $options.doMerge()) + }, [ + _cache[2] || (_cache[2] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-merge" }) + ], -1)), + vue.createElementVNode("div", _hoisted_6$c, vue.toDisplayString(_ctx.editor.i18n("ddei.combina")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canCancelMerge(), "item": $options.canCancelMerge() }), + onClick: _cache[1] || (_cache[1] = ($event) => $options.canCancelMerge() && $options.doCancelMerge()) + }, [ + _cache[3] || (_cache[3] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-cancel-merge" }) + ], -1)), + vue.createElementVNode("div", _hoisted_7$b, vue.toDisplayString(_ctx.editor.i18n("ddei.cancelCombina")), 1) + ], 2) + ]) + ]) + ]) + ], 8, _hoisted_1$A)) : vue.createCommentVNode("", true); + } + const MergeComposeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$A], ["__scopeId", "data-v-eb54102e"]]); + const _DDeiCoreMergeComposeDialog = class _DDeiCoreMergeComposeDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", MergeComposeDialog.name); + __publicField3(this, "plugins", [MergeComposeDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[MergeComposeDialog.name]) { + for (let i2 in options[MergeComposeDialog.name]) { + newOptions[i2] = options[MergeComposeDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreMergeComposeDialog(newOptions); + return panels; + } + } + return _DDeiCoreMergeComposeDialog; + } + static modify(fn) { + return _DDeiCoreMergeComposeDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreMergeComposeDialog, "defaultIns", new _DDeiCoreMergeComposeDialog(null)); + let DDeiCoreMergeComposeDialog = _DDeiCoreMergeComposeDialog; + const _sfc_main$z = { + name: "ddei-core-dialog-changeposition", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-changeposition" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + //是否置于上层 + canPush(type) { + return true; + }, + //修改图形层次 + doPush(v) { + var _a3; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + let stageRender = stage2 == null ? void 0 : stage2.render; + let optContainer = stageRender == null ? void 0 : stageRender.currentOperateContainer; + if (optContainer) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelPush, { + container: optContainer, + type: v + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + } + }; + const PositionDialog_vue_vue_type_style_index_0_scoped_70a473a4_lang = ""; + const _hoisted_1$z = ["id"]; + const _hoisted_2$r = { class: "content" }; + const _hoisted_3$o = { class: "title" }; + const _hoisted_4$h = { class: "group" }; + const _hoisted_5$f = { class: "group_content" }; + const _hoisted_6$b = { class: "text" }; + const _hoisted_7$a = { class: "text" }; + const _hoisted_8$8 = { class: "text" }; + const _hoisted_9$8 = { class: "text" }; + function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-changeposition" + }, [ + vue.createElementVNode("div", _hoisted_2$r, [ + vue.createElementVNode("div", _hoisted_3$o, vue.toDisplayString(_ctx.editor.i18n("ddei.position")), 1), + vue.createElementVNode("div", _hoisted_4$h, [ + vue.createElementVNode("div", _hoisted_5$f, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canPush("top"), "item": $options.canPush("top") }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.canPush("top") && $options.doPush("top")) + }, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-top" }) + ], -1)), + vue.createElementVNode("div", _hoisted_6$b, vue.toDisplayString(_ctx.editor.i18n("ddei.pushTop")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canPush("bottom"), "item": $options.canPush("bottom") }), + onClick: _cache[1] || (_cache[1] = ($event) => $options.canPush("top") && $options.doPush("bottom")) + }, [ + _cache[5] || (_cache[5] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-bottom" }) + ], -1)), + vue.createElementVNode("div", _hoisted_7$a, vue.toDisplayString(_ctx.editor.i18n("ddei.pushBottom")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canPush("up"), "item": $options.canPush("up") }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.canPush("up") && $options.doPush("up")) + }, [ + _cache[6] || (_cache[6] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-up" }) + ], -1)), + vue.createElementVNode("div", _hoisted_8$8, vue.toDisplayString(_ctx.editor.i18n("ddei.pushUp")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item_disabled": !$options.canPush("down"), "item": $options.canPush("down") }), + onClick: _cache[3] || (_cache[3] = ($event) => $options.canPush("down") && $options.doPush("down")) + }, [ + _cache[7] || (_cache[7] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-down" }) + ], -1)), + vue.createElementVNode("div", _hoisted_9$8, vue.toDisplayString(_ctx.editor.i18n("ddei.pushDown")), 1) + ], 2) + ]) + ]) + ]) + ], 8, _hoisted_1$z)) : vue.createCommentVNode("", true); + } + const PositionDialog = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$z], ["__scopeId", "data-v-70a473a4"]]); + const _DDeiCorePositionDialog = class _DDeiCorePositionDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", PositionDialog.name); + __publicField3(this, "plugins", [PositionDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[PositionDialog.name]) { + for (let i2 in options[PositionDialog.name]) { + newOptions[i2] = options[PositionDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCorePositionDialog(newOptions); + return panels; + } + } + return _DDeiCorePositionDialog; + } + static modify(fn) { + return _DDeiCorePositionDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePositionDialog, "defaultIns", new _DDeiCorePositionDialog(null)); + let DDeiCorePositionDialog = _DDeiCorePositionDialog; + const _sfc_main$y = { + name: "ddei-core-dialog-publishfile", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-publishfile" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-publishfile"); + }, + cancel() { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.cancel) { + this.editor.tempDialogData[this.dialogId].callback.cancel(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-publishfile"); + } + } + }; + const PublishFileConfirmDialog_vue_vue_type_style_index_0_scoped_251feafa_lang = ""; + const _hoisted_1$y = ["id"]; + const _hoisted_2$q = { class: "content" }; + const _hoisted_3$n = { class: "header" }; + const _hoisted_4$g = { class: "tail" }; + function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-publishfile" + }, [ + vue.createElementVNode("div", _hoisted_2$q, [ + vue.createElementVNode("div", _hoisted_3$n, [ + _cache[4] || (_cache[4] = vue.createElementVNode("svg", { + class: "icon warn", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-publish" }) + ], -1)), + vue.createElementVNode("span", null, vue.toDisplayString(_ctx.editor.i18n("ddei.publish")) + vue.toDisplayString(_ctx.editor.i18n("ddei.file")), 1), + _cache[5] || (_cache[5] = vue.createElementVNode("div", { style: { "flex": "1" } }, null, -1)), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon close", + "aria-hidden": "true", + onClick: _cache[0] || (_cache[0] = (...args) => $options.cancel && $options.cancel(...args)) + }, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }, null, -1) + ]))) + ]), + _cache[6] || (_cache[6] = vue.createElementVNode("div", { class: "msg" }, null, -1)), + vue.createElementVNode("div", _hoisted_4$g, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[1] || (_cache[1] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.publish")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[2] || (_cache[2] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$y)) : vue.createCommentVNode("", true); + } + const PublishFileConfirmDialog = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$y], ["__scopeId", "data-v-251feafa"]]); + const _DDeiCorePublishFileConfirmDialog = class _DDeiCorePublishFileConfirmDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", PublishFileConfirmDialog.name); + __publicField3(this, "plugins", [PublishFileConfirmDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[PublishFileConfirmDialog.name]) { + for (let i2 in options[PublishFileConfirmDialog.name]) { + newOptions[i2] = options[PublishFileConfirmDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCorePublishFileConfirmDialog(newOptions); + return panels; + } + } + return _DDeiCorePublishFileConfirmDialog; + } + static modify(fn) { + return _DDeiCorePublishFileConfirmDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePublishFileConfirmDialog, "defaultIns", new _DDeiCorePublishFileConfirmDialog(null)); + let DDeiCorePublishFileConfirmDialog = _DDeiCorePublishFileConfirmDialog; + const _sfc_main$x = { + name: "ddei-core-dialog-qcview", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-qcview", + dataSource: null, + //强制刷新控制变量 + forceRefresh: false + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.dataSource)) { + this.dataSource = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.dataSource; + } + }, + ok(item) { + var _a3, _b2, _c2, _d2, _e2, _f; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(item); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-qcview"); + }, + cancel() { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.cancel) { + this.editor.tempDialogData[this.dialogId].callback.cancel(); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-qcview"); + } + } + }; + const QCViewDialog_vue_vue_type_style_index_0_scoped_6bab58c9_lang = ""; + const _hoisted_1$x = ["id"]; + const _hoisted_2$p = { class: "items" }; + const _hoisted_3$m = ["title", "onClick"]; + const _hoisted_4$f = { + class: "icon", + "aria-hidden": "true" + }; + const _hoisted_5$e = ["xlink:href"]; + function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-qcview" + }, [ + vue.createElementVNode("div", _hoisted_2$p, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "item", + title: item.text, + onClick: ($event) => $options.ok(item) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_4$f, [ + vue.createElementVNode("use", { + "xlink:href": item.img + }, null, 8, _hoisted_5$e) + ])), + vue.createElementVNode("div", null, vue.toDisplayString(item.text), 1) + ], 8, _hoisted_3$m); + }), 256)) + ]) + ], 8, _hoisted_1$x)) : vue.createCommentVNode("", true); + } + const QCViewDialog = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$x], ["__scopeId", "data-v-6bab58c9"]]); + const _DDeiCoreQCViewDialog = class _DDeiCoreQCViewDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QCViewDialog.name); + __publicField3(this, "plugins", [QCViewDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QCViewDialog.name]) { + for (let i2 in options[QCViewDialog.name]) { + newOptions[i2] = options[QCViewDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreQCViewDialog(newOptions); + return panels; + } + } + return _DDeiCoreQCViewDialog; + } + static modify(fn) { + return _DDeiCoreQCViewDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreQCViewDialog, "defaultIns", new _DDeiCoreQCViewDialog(null)); + let DDeiCoreQCViewDialog = _DDeiCoreQCViewDialog; + const _sfc_main$w = { + name: "ddei-core-dialog-setstyle", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-setstyle", + ds: [ + { border: DDeiUtil.rgb2hex("rgb(78,215,197)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(70,125,254)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(66,185,198)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(255,126,121)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(255,204,83)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(78,215,197)"), fill: DDeiUtil.rgb2hex("rgb(233,248,245)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(70,125,254)"), fill: DDeiUtil.rgb2hex("rgb(233,236,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(66,185,198)"), fill: DDeiUtil.rgb2hex("rgb(232,233,245)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(255,126,121)"), fill: DDeiUtil.rgb2hex("rgb(255,236,236)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(255,204,83)"), fill: DDeiUtil.rgb2hex("rgb(255,246,233)"), round: 4 }, + { fill: DDeiUtil.rgb2hex("rgb(233,248,245)"), round: 4 }, + { fill: DDeiUtil.rgb2hex("rgb(233,236,255)"), round: 4 }, + { fill: DDeiUtil.rgb2hex("rgb(232,233,245)"), round: 4 }, + { fill: DDeiUtil.rgb2hex("rgb(255,236,236)"), round: 4 }, + { fill: DDeiUtil.rgb2hex("rgb(255,246,233)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(68,189,173)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(61,109,224)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(66,74,174)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(225,110,106)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 }, + { border: DDeiUtil.rgb2hex("rgb(225,179,72)"), fill: DDeiUtil.rgb2hex("rgb(255,255,255)"), round: 4 } + ] + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + /** + * 修改样式 + */ + select(data) { + if (this.editor.currentControlDefine) { + let controlDefine = this.editor.currentControlDefine; + if (controlDefine) { + let selectedModels = this.editor.ddInstance.stage.selectedModels; + selectedModels == null ? void 0 : selectedModels.forEach((model) => { + if (data.border) { + let borderType = controlDefine.attrDefineMap.get("border.type"); + borderType.value = 1; + let borderColor = controlDefine.attrDefineMap.get("border.color"); + borderColor.value = data.border; + let paths2 = ["border.color"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: data.border }, + null, + true + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: ["border.type"], value: 1 }, + null, + true + ); + } else { + let borderType = controlDefine.attrDefineMap.get("border.type"); + borderType.value = 0; + let paths2 = ["border.type"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: 0 }, + null, + true + ); + } + if (data.fill) { + let fillType = controlDefine.attrDefineMap.get("fill.type"); + fillType.value = 1; + let fillColor = controlDefine.attrDefineMap.get("fill.color"); + fillColor.value = data.fill; + let paths2 = ["fill.color"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: data.fill }, + null, + true + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: ["fill.type"], value: 1 }, + null, + true + ); + } else { + let fillType = controlDefine.attrDefineMap.get("fill.type"); + fillType.value = 0; + let paths2 = ["fill.type"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: 0 }, + null, + true + ); + } + if (data.round) { + let borderRound = controlDefine.attrDefineMap.get("borderRound"); + borderRound.value = data.round; + let paths2 = ["border.round"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: data.round }, + null, + true + ); + } else { + let borderRound = controlDefine.attrDefineMap.get("borderRound"); + borderRound.value = 0; + let paths2 = ["border.round"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths: paths2, value: 0 }, + null, + true + ); + } + let fontColor = "black"; + if (data.color) { + fontColor = data.color; + } + let fontColorDefine = controlDefine.attrDefineMap.get("font.color"); + fontColorDefine.value = fontColor; + let paths = ["font.color"]; + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { mids: [model.id], paths, value: data.round }, + null, + true + ); + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + }, + /** + * 修改文本对齐方式 + */ + ok(data) { + this.select(data); + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-setstyle"); + } + } + }; + const QuickSetStyleDialog_vue_vue_type_style_index_0_scoped_a2a1cbf5_lang = ""; + const _hoisted_1$w = ["id"]; + const _hoisted_2$o = { class: "content" }; + const _hoisted_3$l = { class: "title" }; + const _hoisted_4$e = { class: "group" }; + const _hoisted_5$d = { class: "group_content" }; + const _hoisted_6$a = ["onClick", "onDblclick"]; + function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-setstyle" + }, [ + vue.createElementVNode("div", _hoisted_2$o, [ + vue.createElementVNode("div", _hoisted_3$l, vue.toDisplayString(_ctx.editor.i18n("ddei.style")), 1), + vue.createElementVNode("div", _hoisted_4$e, [ + vue.createElementVNode("div", _hoisted_5$d, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.ds, (data) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "item", + style: vue.normalizeStyle({ "color": data.text ? data.text : "black", "border-radius": data.round ? data.round + "px" : "", "border-color": data.border ? data.border : "transparent", "background-color": data.fill ? data.fill : "transparent" }), + onClick: ($event) => $options.select(data), + onDblclick: ($event) => $options.ok(data) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.text")), 45, _hoisted_6$a); + }), 256)) + ]) + ]) + ]) + ], 8, _hoisted_1$w)) : vue.createCommentVNode("", true); + } + const QuickSetStyleDialog = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$w], ["__scopeId", "data-v-a2a1cbf5"]]); + const _DDeiCoreQuickSetStyleDialog = class _DDeiCoreQuickSetStyleDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QuickSetStyleDialog.name); + __publicField3(this, "plugins", [QuickSetStyleDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QuickSetStyleDialog.name]) { + for (let i2 in options[QuickSetStyleDialog.name]) { + newOptions[i2] = options[QuickSetStyleDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreQuickSetStyleDialog(newOptions); + return panels; + } + } + return _DDeiCoreQuickSetStyleDialog; + } + static modify(fn) { + return _DDeiCoreQuickSetStyleDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreQuickSetStyleDialog, "defaultIns", new _DDeiCoreQuickSetStyleDialog(null)); + let DDeiCoreQuickSetStyleDialog = _DDeiCoreQuickSetStyleDialog; + const _sfc_main$v = { + name: "ddei-core-dialog-changerotate", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-changerotate" + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + }, + methods: { + //是否可以镜像 + canMirror() { + var _a3, _b2, _c2; + let models = null; + if (((_b2 = (_a3 = this.editor.ddInstance.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + models = Array.from((_c2 = this.editor.ddInstance.stage) == null ? void 0 : _c2.selectedModels.values()); + } + let canMirror = DDei.beforeOperateValid(DDeiEnumOperateType.MIRROR, { models }, this.editor.ddInstance, null); + if (!(canMirror == 0 || canMirror == 1)) { + return true; + } else { + return false; + } + }, + canRotate() { + var _a3, _b2, _c2; + let models = null; + if (((_b2 = (_a3 = this.editor.ddInstance.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) > 0) { + models = Array.from((_c2 = this.editor.ddInstance.stage) == null ? void 0 : _c2.selectedModels.values()); + } + let canRotate = DDei.beforeOperateValid(DDeiEnumOperateType.ROTATE, { models }, this.editor.ddInstance, null); + if (!(canRotate == 0 || canRotate == 1)) { + return true; + } else { + return false; + } + }, + doRotate(rotate2) { + var _a3; + let file = this.editor.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_a3 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + stage2.selectedModels.forEach((model) => { + var _a4; + let oldRotate = model.rotate ? model.rotate : 0; + let newRotate = (oldRotate ? oldRotate : 0) + rotate2; + if (rotate2 == -1) { + newRotate = 0; + } + if (oldRotate != newRotate) { + let m12 = new Matrix3(); + let move1Matrix = new Matrix3( + 1, + 0, + -model.cpv.x, + 0, + 1, + -model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move1Matrix); + if (oldRotate) { + let angle2 = (oldRotate * DDeiConfig.ROTATE_UNIT).toFixed(4); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotateMatrix); + } + if (newRotate != 0) { + let angle1 = (-newRotate * DDeiConfig.ROTATE_UNIT).toFixed(4); + let rotate1Matrix = new Matrix3( + Math.cos(angle1), + Math.sin(angle1), + 0, + -Math.sin(angle1), + Math.cos(angle1), + 0, + 0, + 0, + 1 + ); + m12.premultiply(rotate1Matrix); + } + let move2Matrix = new Matrix3( + 1, + 0, + model.cpv.x, + 0, + 1, + model.cpv.y, + 0, + 0, + 1 + ); + m12.premultiply(move2Matrix); + model.transVectors(m12); + } + (_a4 = model.render) == null ? void 0 : _a4.enableRefreshShape(); + }); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.NodifyChange); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + }, + doMirror(mirrorType) { + var _a3; + let file = this.editor.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_a3 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + stage2.selectedModels.forEach((model) => { + var _a4; + if (mirrorType == 1) { + if (!model.mirrorX) { + model.mirrorX = true; + } else { + delete model.mirrorX; + } + } else if (mirrorType == 2) { + if (!model.mirrorY) { + model.mirrorY = true; + } else { + delete model.mirrorY; + } + } + (_a4 = model.render) == null ? void 0 : _a4.enableRefreshShape(); + }); + this.editor.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + this.editor.bus.push(DDeiEnumBusCommandType.NodifyChange); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + } + }; + const RotateDialog_vue_vue_type_style_index_0_scoped_2fcc5441_lang = ""; + const _hoisted_1$v = ["id"]; + const _hoisted_2$n = { class: "content" }; + const _hoisted_3$k = { class: "title" }; + const _hoisted_4$d = { class: "group" }; + const _hoisted_5$c = { class: "title" }; + const _hoisted_6$9 = { class: "group_content" }; + const _hoisted_7$9 = { class: "group" }; + const _hoisted_8$7 = { class: "title" }; + const _hoisted_9$7 = { class: "group_content" }; + function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-changerotate" + }, [ + vue.createElementVNode("div", _hoisted_2$n, [ + vue.createElementVNode("div", _hoisted_3$k, vue.toDisplayString(_ctx.editor.i18n("ddei.flip")), 1), + vue.createElementVNode("div", _hoisted_4$d, [ + vue.createElementVNode("div", _hoisted_5$c, vue.toDisplayString(_ctx.editor.i18n("ddei.mirror")) + ":", 1), + vue.createElementVNode("div", _hoisted_6$9, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": $options.canMirror(), "item_disabled": !$options.canMirror() }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.canMirror() && $options.doMirror(1)) + }, _cache[5] || (_cache[5] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-mirror-v" }) + ], -1) + ]), 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": $options.canMirror(), "item_disabled": !$options.canMirror() }), + onClick: _cache[1] || (_cache[1] = ($event) => $options.canMirror() && $options.doMirror(2)) + }, _cache[6] || (_cache[6] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-mirror-h" }) + ], -1) + ]), 2) + ]) + ]), + vue.createElementVNode("div", _hoisted_7$9, [ + vue.createElementVNode("div", _hoisted_8$7, vue.toDisplayString(_ctx.editor.i18n("ddei.rotate")) + ":", 1), + vue.createElementVNode("div", _hoisted_9$7, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": $options.canRotate(), "item_disabled": !$options.canRotate() }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.canRotate() && $options.doRotate(90)) + }, _cache[7] || (_cache[7] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-rotate-90" }) + ], -1) + ]), 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": $options.canRotate(), "item_disabled": !$options.canRotate() }), + onClick: _cache[3] || (_cache[3] = ($event) => $options.canRotate() && $options.doRotate(-90)) + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-rotate-270" }) + ], -1) + ]), 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": $options.canRotate(), "item_disabled": !$options.canRotate() }), + onClick: _cache[4] || (_cache[4] = ($event) => $options.canRotate() && $options.doRotate(-1)) + }, _cache[9] || (_cache[9] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-rotate-0" }) + ], -1) + ]), 2) + ]) + ]) + ]) + ], 8, _hoisted_1$v)) : vue.createCommentVNode("", true); + } + const RotateDialog = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$v], ["__scopeId", "data-v-2fcc5441"]]); + const _DDeiCoreRotateDialog = class _DDeiCoreRotateDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", RotateDialog.name); + __publicField3(this, "plugins", [RotateDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[RotateDialog.name]) { + for (let i2 in options[RotateDialog.name]) { + newOptions[i2] = options[RotateDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreRotateDialog(newOptions); + return panels; + } + } + return _DDeiCoreRotateDialog; + } + static modify(fn) { + return _DDeiCoreRotateDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreRotateDialog, "defaultIns", new _DDeiCoreRotateDialog(null)); + let DDeiCoreRotateDialog = _DDeiCoreRotateDialog; + const _sfc_main$u = { + name: "ddei-core-dialog-selectborderdash", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-selectborderdash", + value: [], + //最近使用的颜色 + dataSource: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.value)) { + this.value = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].value; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.dataSource)) { + this.dataSource = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].dataSource; + } + }, + select(value) { + this.value = value; + }, + selectAndConfirm(value) { + this.value = value; + this.ok(); + }, + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.value) { + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectborderdash"); + }, + cancel() { + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectborderdash"); + } + } + }; + const SelectBorderDashDialog_vue_vue_type_style_index_0_scoped_143dc703_lang = ""; + const _hoisted_1$u = ["id"]; + const _hoisted_2$m = { class: "content" }; + const _hoisted_3$j = { class: "group" }; + const _hoisted_4$c = { class: "title" }; + const _hoisted_5$b = { class: "group_content" }; + const _hoisted_6$8 = ["onClick", "onDblclick"]; + const _hoisted_7$8 = { class: "div_input" }; + const _hoisted_8$6 = ["stroke-dasharray"]; + const _hoisted_9$6 = { class: "tail" }; + function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-selectborderdash" + }, [ + vue.createElementVNode("div", _hoisted_2$m, [ + vue.createElementVNode("div", _hoisted_3$j, [ + vue.createElementVNode("div", _hoisted_4$c, vue.toDisplayString(_ctx.editor.i18n("ddei.lineDash")), 1), + vue.createElementVNode("div", _hoisted_5$b, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (data) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": JSON.stringify($data.value) == JSON.stringify(data.value) }), + onClick: ($event) => $options.select(data.value), + onDblclick: ($event) => $options.selectAndConfirm(data.value) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$8, [ + vue.createElementVNode("line", { + x1: "0", + y1: "0", + x2: "100%", + y2: "0", + "stroke-width": "3", + "stroke-dasharray": data.value + }, null, 8, _hoisted_8$6) + ])) + ], 42, _hoisted_6$8); + }), 256)) + ]) + ]), + vue.createElementVNode("div", _hoisted_9$6, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[0] || (_cache[0] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.confirm")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[1] || (_cache[1] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$u)) : vue.createCommentVNode("", true); + } + const SelectBorderDashDialog = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$u], ["__scopeId", "data-v-143dc703"]]); + const _DDeiCoreSelectBorderDashDialog = class _DDeiCoreSelectBorderDashDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SelectBorderDashDialog.name); + __publicField3(this, "plugins", [SelectBorderDashDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SelectBorderDashDialog.name]) { + for (let i2 in options[SelectBorderDashDialog.name]) { + newOptions[i2] = options[SelectBorderDashDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSelectBorderDashDialog(newOptions); + return panels; + } + } + return _DDeiCoreSelectBorderDashDialog; + } + static modify(fn) { + return _DDeiCoreSelectBorderDashDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSelectBorderDashDialog, "defaultIns", new _DDeiCoreSelectBorderDashDialog(null)); + let DDeiCoreSelectBorderDashDialog = _DDeiCoreSelectBorderDashDialog; + const _sfc_main$t = { + name: "ddei-core-dialog-selectboderweight", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-selectboderweight", + value: [], + //最近使用的颜色 + dataSource: null, + dash: [] + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.value)) { + this.value = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].value; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.dataSource)) { + this.dataSource = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].dataSource; + } + if (((_i = this.editor) == null ? void 0 : _i.tempDialogData) && ((_k = (_j = this.editor) == null ? void 0 : _j.tempDialogData[this.dialogId]) == null ? void 0 : _k.dash)) { + this.dash = (_l = this.editor) == null ? void 0 : _l.tempDialogData[this.dialogId].dash; + } + }, + select(value) { + this.value = value; + }, + selectAndConfirm(value) { + this.value = value; + this.ok(); + }, + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.value) { + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectboderweight"); + }, + cancel() { + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectboderweight"); + } + } + }; + const SelectBorderWeightDialog_vue_vue_type_style_index_0_scoped_b939438e_lang = ""; + const _hoisted_1$t = ["id"]; + const _hoisted_2$l = { class: "content" }; + const _hoisted_3$i = { class: "group" }; + const _hoisted_4$b = { class: "title" }; + const _hoisted_5$a = { class: "group_content" }; + const _hoisted_6$7 = ["onClick", "onDblclick"]; + const _hoisted_7$7 = { class: "div_input" }; + const _hoisted_8$5 = ["stroke-width", "stroke-dasharray"]; + const _hoisted_9$5 = { class: "tail" }; + function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-selectboderweight" + }, [ + vue.createElementVNode("div", _hoisted_2$l, [ + vue.createElementVNode("div", _hoisted_3$i, [ + vue.createElementVNode("div", _hoisted_4$b, vue.toDisplayString(_ctx.editor.i18n("ddei.lineWeight")), 1), + vue.createElementVNode("div", _hoisted_5$a, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (data) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": JSON.stringify($data.value) == JSON.stringify(data.value) }), + onClick: ($event) => $options.select(data.value), + onDblclick: ($event) => $options.selectAndConfirm(data.value) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$7, [ + vue.createElementVNode("line", { + x1: "0", + y1: "50%", + x2: "100%", + y2: "50%", + "stroke-width": data.value, + "stroke-dasharray": $data.dash + }, null, 8, _hoisted_8$5) + ])) + ], 42, _hoisted_6$7); + }), 256)) + ]) + ]), + vue.createElementVNode("div", _hoisted_9$5, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[0] || (_cache[0] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.confirm")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[1] || (_cache[1] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$t)) : vue.createCommentVNode("", true); + } + const SelectBorderWeightDialog = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render$t], ["__scopeId", "data-v-b939438e"]]); + const _DDeiCoreSelectBorderWeightDialog = class _DDeiCoreSelectBorderWeightDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SelectBorderWeightDialog.name); + __publicField3(this, "plugins", [SelectBorderWeightDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SelectBorderWeightDialog.name]) { + for (let i2 in options[SelectBorderWeightDialog.name]) { + newOptions[i2] = options[SelectBorderWeightDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSelectBorderWeightDialog(newOptions); + return panels; + } + } + return _DDeiCoreSelectBorderWeightDialog; + } + static modify(fn) { + return _DDeiCoreSelectBorderWeightDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSelectBorderWeightDialog, "defaultIns", new _DDeiCoreSelectBorderWeightDialog(null)); + let DDeiCoreSelectBorderWeightDialog = _DDeiCoreSelectBorderWeightDialog; + const _sfc_main$s = { + name: "ddei-core-dialog-selectcolor", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-selectcolor", + dataSource: null, + value: "#000000", + //最近使用的颜色 + ds1: [ + DDeiUtil.rgb2hex("rgb(255,255,255)"), + "#000000", + DDeiUtil.rgb2hex("rgb(78,215,197)"), + DDeiUtil.rgb2hex("rgb(70,125,254)"), + DDeiUtil.rgb2hex("rgb(66,185,198)"), + DDeiUtil.rgb2hex("rgb(255,126,121)"), + DDeiUtil.rgb2hex("rgb(255,204,83)"), + DDeiUtil.rgb2hex("rgb(141,192,255)"), + DDeiUtil.rgb2hex("rgb(121,145,255)"), + DDeiUtil.rgb2hex("rgb(254,157,23)") + ], + //备选色 + ds2: [ + DDeiUtil.rgb2hex("rgb(255,255,255)"), + "#000000", + DDeiUtil.rgb2hex("rgb(78,215,197)"), + DDeiUtil.rgb2hex("rgb(70,125,254)"), + DDeiUtil.rgb2hex("rgb(66,185,198)"), + DDeiUtil.rgb2hex("rgb(255,126,121)"), + DDeiUtil.rgb2hex("rgb(255,204,83)"), + DDeiUtil.rgb2hex("rgb(141,192,255)"), + DDeiUtil.rgb2hex("rgb(121,145,255)"), + DDeiUtil.rgb2hex("rgb(254,157,23)"), + DDeiUtil.rgb2hex("rgb(235,235,235)"), + DDeiUtil.rgb2hex("rgb(126,126,126)"), + DDeiUtil.rgb2hex("rgb(233,248,245)"), + DDeiUtil.rgb2hex("rgb(233,236,255)"), + DDeiUtil.rgb2hex("rgb(232,233,245)"), + DDeiUtil.rgb2hex("rgb(255,236,236)"), + DDeiUtil.rgb2hex("rgb(255,246,233)"), + DDeiUtil.rgb2hex("rgb(238,244,255)"), + DDeiUtil.rgb2hex("rgb(236,238,255)"), + DDeiUtil.rgb2hex("rgb(255,240,231)"), + DDeiUtil.rgb2hex("rgb(215,215,215)"), + DDeiUtil.rgb2hex("rgb(105,105,105)"), + DDeiUtil.rgb2hex("rgb(208,240,234)"), + DDeiUtil.rgb2hex("rgb(207,215,255)"), + DDeiUtil.rgb2hex("rgb(207,209,234)"), + DDeiUtil.rgb2hex("rgb(255,216,215)"), + DDeiUtil.rgb2hex("rgb(255,236,209)"), + DDeiUtil.rgb2hex("rgb(219,232,255)"), + DDeiUtil.rgb2hex("rgb(215,220,255)"), + DDeiUtil.rgb2hex("rgb(255,223,204)"), + DDeiUtil.rgb2hex("rgb(195,195,195)"), + DDeiUtil.rgb2hex("rgb(89,89,89)"), + DDeiUtil.rgb2hex("rgb(178,232,223)"), + DDeiUtil.rgb2hex("rgb(176,191,254)"), + DDeiUtil.rgb2hex("rgb(176,180,223)"), + DDeiUtil.rgb2hex("rgb(255,192,190)"), + DDeiUtil.rgb2hex("rgb(255,226,179)"), + DDeiUtil.rgb2hex("rgb(197,220,255)"), + DDeiUtil.rgb2hex("rgb(190,199,255)"), + DDeiUtil.rgb2hex("rgb(254,204,171)"), + DDeiUtil.rgb2hex("rgb(175,175,175)"), + DDeiUtil.rgb2hex("rgb(69,69,69)"), + DDeiUtil.rgb2hex("rgb(140,224,210)"), + DDeiUtil.rgb2hex("rgb(137,163,254)"), + DDeiUtil.rgb2hex("rgb(135,143,211)"), + DDeiUtil.rgb2hex("rgb(255,163,160)"), + DDeiUtil.rgb2hex("rgb(255,215,142)"), + DDeiUtil.rgb2hex("rgb(172,207,255)"), + DDeiUtil.rgb2hex("rgb(160,175,255)"), + DDeiUtil.rgb2hex("rgb(254,182,106)"), + DDeiUtil.rgb2hex("rgb(155,155,155)"), + DDeiUtil.rgb2hex("rgb(48,48,48)"), + DDeiUtil.rgb2hex("rgb(68,189,173)"), + DDeiUtil.rgb2hex("rgb(61,109,224)"), + DDeiUtil.rgb2hex("rgb(66,74,174)"), + DDeiUtil.rgb2hex("rgb(225,110,106)"), + DDeiUtil.rgb2hex("rgb(225,179,72)"), + DDeiUtil.rgb2hex("rgb(123,169,225)"), + DDeiUtil.rgb2hex("rgb(106,127,225)"), + DDeiUtil.rgb2hex("rgb(224,138,19)"), + DDeiUtil.rgb2hex("rgb(135,135,135)"), + DDeiUtil.rgb2hex("rgb(25,25,25)"), + DDeiUtil.rgb2hex("rgb(55,158,144)"), + DDeiUtil.rgb2hex("rgb(49,90,187)"), + DDeiUtil.rgb2hex("rgb(45,60,145)"), + DDeiUtil.rgb2hex("rgb(188,91,87)"), + DDeiUtil.rgb2hex("rgb(188,149,59)"), + DDeiUtil.rgb2hex("rgb(102,140,188)"), + DDeiUtil.rgb2hex("rgb(87,105,188)"), + DDeiUtil.rgb2hex("rgb(187,114,14)") + ], + //常用标准色 + ds3: [ + DDeiUtil.rgb2hex("rgb(192,0,0)"), + DDeiUtil.rgb2hex("rgb(255,0,0)"), + DDeiUtil.rgb2hex("rgb(255,192,0)"), + DDeiUtil.rgb2hex("rgb(255,255,0)"), + DDeiUtil.rgb2hex("rgb(146,208,80)"), + DDeiUtil.rgb2hex("rgb(0,176,80)"), + DDeiUtil.rgb2hex("rgb(0,146,240)"), + DDeiUtil.rgb2hex("rgb(0,112,192)"), + DDeiUtil.rgb2hex("rgb(0,32,96)"), + DDeiUtil.rgb2hex("rgb(112,48,160)") + ] + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.dataSource)) { + this.dataSource = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].dataSource; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.value)) { + this.value = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].value; + } + DDeiUtil.readRecentlyChooseColors(); + for (let i2 = (_i = DDeiUtil.recentlyChooseColors) == null ? void 0 : _i.length; i2 >= 0; i2--) { + this.ds1.splice(0, 0, DDeiUtil.recentlyChooseColors[i2]); + if (this.ds1.length > 10) { + this.ds1.splice(10, 1); + } + } + }, + selectColor(evt) { + let srcElement = evt.currentTarget; + this.value = DDeiUtil.rgb2hex(srcElement.style.backgroundColor); + }, + selectConfirmColor(evt) { + let srcElement = evt.currentTarget; + this.value = DDeiUtil.rgb2hex(srcElement.style.backgroundColor); + this.ok(); + }, + ok() { + var _a3, _b2, _c2, _d2, _e2, _f; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + if (this.value) { + DDeiUtil.whiteRecentlyChooseColors(this.value); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectcolor"); + }, + clear() { + this.value = null; + }, + cancel() { + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectcolor"); + } + } + }; + const SelectColorDialog_vue_vue_type_style_index_0_scoped_cd291105_lang = ""; + const _hoisted_1$s = ["id"]; + const _hoisted_2$k = { class: "content" }; + const _hoisted_3$h = { class: "group" }; + const _hoisted_4$a = { class: "title" }; + const _hoisted_5$9 = { class: "group_content color1" }; + const _hoisted_6$6 = { class: "group" }; + const _hoisted_7$6 = { class: "group_content color2" }; + const _hoisted_8$4 = { class: "group" }; + const _hoisted_9$4 = { class: "title" }; + const _hoisted_10$3 = { class: "group_content color1" }; + const _hoisted_11$3 = { class: "group" }; + const _hoisted_12$2 = { class: "title" }; + const _hoisted_13$2 = { class: ".group_content color3" }; + const _hoisted_14$1 = { class: "tail" }; + function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-selectcolor" + }, [ + vue.createElementVNode("div", _hoisted_2$k, [ + vue.createElementVNode("div", _hoisted_3$h, [ + vue.createElementVNode("div", _hoisted_4$a, vue.toDisplayString(_ctx.editor.i18n("ddei.selectColor.recently")), 1), + vue.createElementVNode("div", _hoisted_5$9, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.ds1, (color) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": color == $data.value }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.selectColor($event)), + style: vue.normalizeStyle({ "background": color }), + onDblclick: _cache[1] || (_cache[1] = ($event) => $options.selectConfirmColor($event)) + }, null, 38); + }), 256)) + ]) + ]), + vue.createElementVNode("div", _hoisted_6$6, [ + vue.createElementVNode("div", _hoisted_7$6, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.ds2, (color) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": color == $data.value }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.selectColor($event)), + style: vue.normalizeStyle({ "background": color }), + onDblclick: _cache[3] || (_cache[3] = ($event) => $options.selectConfirmColor($event)) + }, null, 38); + }), 256)) + ]) + ]), + vue.createElementVNode("div", _hoisted_8$4, [ + vue.createElementVNode("div", _hoisted_9$4, vue.toDisplayString(_ctx.editor.i18n("ddei.selectColor.standard")), 1), + vue.createElementVNode("div", _hoisted_10$3, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.ds3, (color) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item-selected": color == $data.value }), + onClick: _cache[4] || (_cache[4] = ($event) => $options.selectColor($event)), + style: vue.normalizeStyle({ "background": color }), + onDblclick: _cache[5] || (_cache[5] = ($event) => $options.selectConfirmColor($event)) + }, null, 38); + }), 256)) + ]) + ]), + vue.createElementVNode("div", _hoisted_11$3, [ + vue.createElementVNode("div", _hoisted_12$2, vue.toDisplayString(_ctx.editor.i18n("ddei.selectColor.choosed")), 1), + vue.createElementVNode("div", _hoisted_13$2, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "color", + "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $data.value = $event), + class: "colorinput", + autocomplete: "off" + }, null, 512), [ + [vue.vModelText, $data.value] + ]), + vue.withDirectives(vue.createElementVNode("input", { + type: "text", + "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $data.value = $event), + autocomplete: "off" + }, null, 512), [ + [vue.vModelText, $data.value] + ]), + vue.createElementVNode("div", { + class: "button button-small", + onClick: _cache[8] || (_cache[8] = (...args) => $options.clear && $options.clear(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.clear")), 1) + ]) + ]), + vue.createElementVNode("div", _hoisted_14$1, [ + vue.createElementVNode("div", { + class: "button button-main", + onClick: _cache[9] || (_cache[9] = (...args) => $options.ok && $options.ok(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.confirm")), 1), + vue.createElementVNode("div", { + class: "button", + onClick: _cache[10] || (_cache[10] = (...args) => $options.cancel && $options.cancel(...args)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.cancel")), 1) + ]) + ]) + ], 8, _hoisted_1$s)) : vue.createCommentVNode("", true); + } + const SelectColorDialog = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$s], ["__scopeId", "data-v-cd291105"]]); + const _DDeiCoreSelectColorDialog = class _DDeiCoreSelectColorDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SelectColorDialog.name); + __publicField3(this, "plugins", [SelectColorDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SelectColorDialog.name]) { + for (let i2 in options[SelectColorDialog.name]) { + newOptions[i2] = options[SelectColorDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSelectColorDialog(newOptions); + return panels; + } + } + return _DDeiCoreSelectColorDialog; + } + static modify(fn) { + return _DDeiCoreSelectColorDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSelectColorDialog, "defaultIns", new _DDeiCoreSelectColorDialog(null)); + let DDeiCoreSelectColorDialog = _DDeiCoreSelectColorDialog; + const _sfc_main$r = { + name: "ddei-core-dialog-selectfont", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-selectfont", + dataSource: null, + value: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.dataSource)) { + this.dataSource = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].dataSource; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.value)) { + this.value = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].value; + } + }, + ok(data) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = data; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(data); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectfont"); + }, + select(data) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = data; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(data); + } + } + } + }; + const SelectFontDialog_vue_vue_type_style_index_0_scoped_64fcb708_lang = ""; + const _hoisted_1$r = ["id"]; + const _hoisted_2$j = { class: "content" }; + const _hoisted_3$g = { class: "group" }; + const _hoisted_4$9 = { class: "group_content" }; + const _hoisted_5$8 = ["onDblclick", "onClick", "title"]; + function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-selectfont" + }, [ + vue.createElementVNode("div", _hoisted_2$j, [ + vue.createElementVNode("div", _hoisted_3$g, [ + vue.createElementVNode("div", _hoisted_4$9, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "item": true, "item_selected": item.value == $data.value, "item_deleted": item.deleted, "item_disabled": item.disabled, "item_underline": item.underline, "item_bold": item.bold }), + onDblclick: ($event) => !item.disabled && $options.ok(item.value), + onClick: ($event) => !item.disabled && $options.select(item.value), + title: item.desc + }, [ + item.text ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "text", + style: vue.normalizeStyle({ "font-family": item.fontFamily }) + }, vue.toDisplayString(item.text), 5)) : vue.createCommentVNode("", true) + ], 42, _hoisted_5$8); + }), 256)) + ]) + ]) + ]) + ], 8, _hoisted_1$r)) : vue.createCommentVNode("", true); + } + const SelectFontDialog = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$r], ["__scopeId", "data-v-64fcb708"]]); + const _DDeiCoreSelectFontDialog = class _DDeiCoreSelectFontDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SelectFontDialog.name); + __publicField3(this, "plugins", [SelectFontDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SelectFontDialog.name]) { + for (let i2 in options[SelectFontDialog.name]) { + newOptions[i2] = options[SelectFontDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSelectFontDialog(newOptions); + return panels; + } + } + return _DDeiCoreSelectFontDialog; + } + static modify(fn) { + return _DDeiCoreSelectFontDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSelectFontDialog, "defaultIns", new _DDeiCoreSelectFontDialog(null)); + let DDeiCoreSelectFontDialog = _DDeiCoreSelectFontDialog; + const _sfc_main$q = { + name: "ddei-core-dialog-selectfontsize", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-selectfontsize", + dataSource: null, + value: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId]) == null ? void 0 : _c2.dataSource)) { + this.dataSource = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].dataSource; + } + if (((_e2 = this.editor) == null ? void 0 : _e2.tempDialogData) && ((_g = (_f = this.editor) == null ? void 0 : _f.tempDialogData[this.dialogId]) == null ? void 0 : _g.value)) { + this.value = (_h = this.editor) == null ? void 0 : _h.tempDialogData[this.dialogId].value; + } + }, + ok(data) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = data; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(data); + } + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-selectfontsize"); + }, + select(data) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = data; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(data); + } + } + } + }; + const SelectFontSizeDialog_vue_vue_type_style_index_0_scoped_9fc02a16_lang = ""; + const _hoisted_1$q = ["id"]; + const _hoisted_2$i = { class: "content" }; + const _hoisted_3$f = { class: "group" }; + const _hoisted_4$8 = { class: "group_content" }; + const _hoisted_5$7 = ["onDblclick", "onClick", "title"]; + function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-selectfontsize" + }, [ + vue.createElementVNode("div", _hoisted_2$i, [ + vue.createElementVNode("div", _hoisted_3$f, [ + vue.createElementVNode("div", _hoisted_4$8, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "itembox": true, "itembox_selected": item.value == $data.value, "itembox_deleted": item.deleted, "itembox_disabled": item.disabled, "itembox_underline": item.underline, "itembox_bold": item.bold }), + onDblclick: ($event) => !item.disabled && $options.ok(item.value), + onClick: ($event) => !item.disabled && $options.select(item.value), + title: item.desc + }, [ + item.text ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: "itembox_text", + style: vue.normalizeStyle({ "font-family": item.fontFamily }) + }, vue.toDisplayString(item.text), 5)) : vue.createCommentVNode("", true) + ], 42, _hoisted_5$7); + }), 256)) + ]) + ]) + ]) + ], 8, _hoisted_1$q)) : vue.createCommentVNode("", true); + } + const SelectFontSizeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$q], ["__scopeId", "data-v-9fc02a16"]]); + const _DDeiCoreSelectFontSizeDialog = class _DDeiCoreSelectFontSizeDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SelectFontSizeDialog.name); + __publicField3(this, "plugins", [SelectFontSizeDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SelectFontSizeDialog.name]) { + for (let i2 in options[SelectFontSizeDialog.name]) { + newOptions[i2] = options[SelectFontSizeDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreSelectFontSizeDialog(newOptions); + return panels; + } + } + return _DDeiCoreSelectFontSizeDialog; + } + static modify(fn) { + return _DDeiCoreSelectFontSizeDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSelectFontSizeDialog, "defaultIns", new _DDeiCoreSelectFontSizeDialog(null)); + let DDeiCoreSelectFontSizeDialog = _DDeiCoreSelectFontSizeDialog; + const _sfc_main$p = { + name: "ddei-core-dialog-textalign", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-textalign", + value: 5 + //当前选中值 + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2; + let align = 2; + let valign = 2; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempDialogData) && ((_b2 = this.editor) == null ? void 0 : _b2.tempDialogData[this.dialogId])) { + align = (_c2 = this.editor) == null ? void 0 : _c2.tempDialogData[this.dialogId].align; + valign = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId].valign; + } + let value = 5; + switch (align) { + case 1: + switch (valign) { + case 1: + value = 1; + break; + case 2: + value = 4; + break; + case 3: + value = 7; + break; + } + break; + case 2: + switch (valign) { + case 1: + value = 2; + break; + case 2: + value = 5; + break; + case 3: + value = 8; + break; + } + break; + case 3: + switch (valign) { + case 1: + value = 3; + break; + case 2: + value = 6; + break; + case 3: + value = 9; + break; + } + break; + } + this.value = value; + }, + /** + * 修改文本对齐方式 + */ + changeAlign(v) { + var _a3, _b2, _c2, _d2, _e2, _f; + this.value = v; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempDialogData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempDialogData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.value); + } + }, + /** + * 修改文本对齐方式 + */ + ok(v) { + this.changeAlign(v); + DDeiEditorUtil.closeDialog(this.editor, "ddei-core-dialog-textalign"); + } + } + }; + const TextAlignDialog_vue_vue_type_style_index_0_scoped_fe33bdea_lang = ""; + const _hoisted_1$p = ["id"]; + const _hoisted_2$h = { class: "content" }; + const _hoisted_3$e = { class: "title" }; + const _hoisted_4$7 = { class: "group" }; + const _hoisted_5$6 = { class: "group_content" }; + function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-textalign" + }, [ + vue.createElementVNode("div", _hoisted_2$h, [ + vue.createElementVNode("div", _hoisted_3$e, vue.toDisplayString(_ctx.editor.i18n("ddei.align")), 1), + vue.createElementVNode("div", _hoisted_4$7, [ + vue.createElementVNode("div", _hoisted_5$6, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 1 }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.changeAlign(1)), + onDblclick: _cache[1] || (_cache[1] = ($event) => $options.ok(1)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos1")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 2 }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.changeAlign(2)), + onDblclick: _cache[3] || (_cache[3] = ($event) => $options.ok(2)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos2")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 3 }), + onClick: _cache[4] || (_cache[4] = ($event) => $options.changeAlign(3)), + onDblclick: _cache[5] || (_cache[5] = ($event) => $options.ok(3)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos3")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 4 }), + onClick: _cache[6] || (_cache[6] = ($event) => $options.changeAlign(4)), + onDblclick: _cache[7] || (_cache[7] = ($event) => $options.ok(4)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos4")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 5 }), + onClick: _cache[8] || (_cache[8] = ($event) => $options.changeAlign(5)), + onDblclick: _cache[9] || (_cache[9] = ($event) => $options.ok(5)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos5")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 6 }), + onClick: _cache[10] || (_cache[10] = ($event) => $options.changeAlign(6)), + onDblclick: _cache[11] || (_cache[11] = ($event) => $options.ok(6)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos6")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 7 }), + onClick: _cache[12] || (_cache[12] = ($event) => $options.changeAlign(7)), + onDblclick: _cache[13] || (_cache[13] = ($event) => $options.ok(7)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos7")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 8 }), + onClick: _cache[14] || (_cache[14] = ($event) => $options.changeAlign(8)), + onDblclick: _cache[15] || (_cache[15] = ($event) => $options.ok(8)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos8")), 35), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "item": true, "selected": $data.value == 9 }), + onClick: _cache[16] || (_cache[16] = ($event) => $options.changeAlign(9)), + onDblclick: _cache[17] || (_cache[17] = ($event) => $options.ok(9)) + }, vue.toDisplayString(_ctx.editor.i18n("ddei.property.ds.pos9")), 35) + ]) + ]) + ]) + ], 8, _hoisted_1$p)) : vue.createCommentVNode("", true); + } + const TextAlignDialog = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$p], ["__scopeId", "data-v-fe33bdea"]]); + const _DDeiCoreTextAlignDialog = class _DDeiCoreTextAlignDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", TextAlignDialog.name); + __publicField3(this, "plugins", [TextAlignDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[TextAlignDialog.name]) { + for (let i2 in options[TextAlignDialog.name]) { + newOptions[i2] = options[TextAlignDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreTextAlignDialog(newOptions); + return panels; + } + } + return _DDeiCoreTextAlignDialog; + } + static modify(fn) { + return _DDeiCoreTextAlignDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTextAlignDialog, "defaultIns", new _DDeiCoreTextAlignDialog(null)); + let DDeiCoreTextAlignDialog = _DDeiCoreTextAlignDialog; + const _sfc_main$o = { + name: "ddei-core-dialog-choosecontrol", + extends: null, + mixins: [DialogBase$2], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-choosecontrol", + group: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2; + if (((_a3 = this.editor) == null ? void 0 : _a3.tempPopData) && ((_c2 = (_b2 = this.editor) == null ? void 0 : _b2.tempPopData[this.dialogId]) == null ? void 0 : _c2.controlGroup)) { + this.group = (_d2 = this.editor) == null ? void 0 : _d2.tempPopData[this.dialogId].controlGroup; + } + }, + ok(control, evt) { + var _a3, _b2, _c2, _d2, _e2, _f; + delete this.isDrag; + delete this.dragControl; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempPopData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.ok) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempPopData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.ok(this.group, control, evt); + } + }, + prepareDrag(control, evt) { + var _a3, _b2, _c2; + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempPopData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.drag) { + this.isDrag = true; + this.dragControl = control; + } + }, + dragMove(evt) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (this.isDrag) { + if ((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.tempPopData[this.dialogId]) == null ? void 0 : _b2.callback) == null ? void 0 : _c2.drag) { + (_f = (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.tempPopData[this.dialogId]) == null ? void 0 : _e2.callback) == null ? void 0 : _f.drag(this.group, this.dragControl, evt); + delete this.isDrag; + delete this.dragControl; + } + } + } + } + }; + const ChooseControlDialog_vue_vue_type_style_index_0_scoped_5962d4b2_lang = ""; + const _hoisted_1$o = ["id"]; + const _hoisted_2$g = { class: "ddei-core-dialog-choosecontrol-content" }; + const _hoisted_3$d = { + key: 0, + class: "ddei-core-dialog-choosecontrol-content-itempanel" + }; + const _hoisted_4$6 = ["onClick", "onMousedown", "title"]; + const _hoisted_5$5 = ["src"]; + const _hoisted_6$5 = ["innerHTML"]; + const _hoisted_7$5 = { class: "text" }; + function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-core-dialog-choosecontrol" + }, [ + vue.createElementVNode("div", _hoisted_2$g, [ + $data.group ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$d, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.group.controls, (control) => { + var _a4; + return vue.openBlock(), vue.createElementBlock("div", { + onClick: ($event) => $options.ok(control, $event), + onMousedown: ($event) => $options.prepareDrag(control, $event), + onMousemove: _cache[0] || (_cache[0] = ($event) => $options.dragMove($event)), + class: vue.normalizeClass({ "ddei-core-dialog-choosecontrol-content-itempanel-item": true }), + title: control.desc + }, [ + !control.icon ? (vue.openBlock(), vue.createElementBlock("img", { + key: 0, + class: "icon", + src: (_a4 = _ctx.editor) == null ? void 0 : _a4.icons[control.id] + }, null, 8, _hoisted_5$5)) : vue.createCommentVNode("", true), + control.icon ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: "icon-html", + innerHTML: control.icon + }, null, 8, _hoisted_6$5)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_7$5, vue.toDisplayString(_ctx.editor.i18n(control.name)), 1) + ], 40, _hoisted_4$6); + }), 256)) + ])) : vue.createCommentVNode("", true) + ]) + ], 8, _hoisted_1$o)) : vue.createCommentVNode("", true); + } + const ChooseControlDialog = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$o], ["__scopeId", "data-v-5962d4b2"]]); + const _DDeiCoreChooseControlDialog = class _DDeiCoreChooseControlDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", ChooseControlDialog.name); + __publicField3(this, "plugins", [ChooseControlDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChooseControlDialog.name]) { + for (let i2 in options[ChooseControlDialog.name]) { + newOptions[i2] = options[ChooseControlDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreChooseControlDialog(newOptions); + return panels; + } + } + return _DDeiCoreChooseControlDialog; + } + static modify(fn) { + return _DDeiCoreChooseControlDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreChooseControlDialog, "defaultIns", new _DDeiCoreChooseControlDialog(null)); + let DDeiCoreChooseControlDialog = _DDeiCoreChooseControlDialog; + const _DDeiCoreDialogs = class _DDeiCoreDialogs extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreAlignDialog, + DDeiCoreChangeRatioDialog, + DDeiCoreChooseControlGroupDialog, + DDeiCoreCloseFileConfirmDialog, + DDeiCoreCollFileConfirmDialog, + DDeiCoreLinePointTypeDialog, + DDeiCoreLineTypeDialog, + DDeiCoreManageLayersDialog, + DDeiCoreMergeComposeDialog, + DDeiCorePositionDialog, + DDeiCorePublishFileConfirmDialog, + DDeiCoreQCViewDialog, + DDeiCoreQuickSetStyleDialog, + DDeiCoreRotateDialog, + DDeiCoreSelectBorderDashDialog, + DDeiCoreSelectBorderWeightDialog, + DDeiCoreSelectColorDialog, + DDeiCoreSelectFontDialog, + DDeiCoreSelectFontSizeDialog, + DDeiCoreTextAlignDialog, + DDeiCoreChooseControlDialog + ]); + } + getDialogs(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getDialogs(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getDialogs(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiCoreDialogs(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiCoreDialogs; + } + static modify(fn) { + return _DDeiCoreDialogs.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreDialogs, "defaultIns", new _DDeiCoreDialogs(null)); + let DDeiCoreDialogs = _DDeiCoreDialogs; + const _sfc_main$n = { + name: "pv-text", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVTextEditor_vue_vue_type_style_index_0_scoped_48447048_lang = ""; + const _hoisted_1$n = ["type", "disabled", "placeholder"]; + function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2; + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-text": true, "ddei-pv-editor-text--disabled": $props.attrDefine.readonly }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: ((_b2 = (_a3 = $props.attrDefine) == null ? void 0 : _a3.itemStyle) == null ? void 0 : _b2.type) ? (_d2 = (_c2 = $props.attrDefine) == null ? void 0 : _c2.itemStyle) == null ? void 0 : _d2.type : "input", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + placeholder: $props.editor.i18n($props.attrDefine.defaultValue), + autocomplete: "off" + }, null, 8, _hoisted_1$n), [ + [vue.vModelDynamic, $props.attrDefine.value] + ]) + ], 2); + } + const PVTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$n], ["__scopeId", "data-v-48447048"]]); + const _DDeiCoreTextPropEditor = class _DDeiCoreTextPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", PVTextEditor.name); + __publicField3(this, "type", "plugin"); + __publicField3(this, "plugins", [PVTextEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreTextPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVTextEditor.name]) { + for (let i2 in options[PVTextEditor.name]) { + newOptions[i2] = options[PVTextEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreTextPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreTextPropEditor; + } + static modify(fn) { + return _DDeiCoreTextPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTextPropEditor, "defaultIns", new _DDeiCoreTextPropEditor(null)); + let DDeiCoreTextPropEditor = _DDeiCoreTextPropEditor; + const _sfc_main$m = { + name: "pv-basecombox", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + canSearch: { + type: Boolean, + default: false + }, + searchMethod: { + type: Function, + defaut: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //是否展开 + expanded: false, + //值 + value: null, + //文本 + text: null, + //图片 + img: null, + defaultText: "" + }; + }, + computed: {}, + watch: {}, + created() { + this.search = debounce(this.search, 200); + }, + mounted() { + this.destroyDialog(); + }, + methods: { + getShowDialogId(id) { + return "ddei_attr_editor_dialog_" + id; + }, + getEditorId(id) { + return "ddei_attr_editor_" + id; + }, + search(evt) { + if (this.searchMethod) { + this.searchMethod(this.text, evt); + } + }, + //打开弹出框 + showDialog(show = false, evt) { + var _a3; + if (!((_a3 = this.editor) == null ? void 0 : _a3.containerid)) { + return; + } + let dialogId = this.getShowDialogId(this.attrDefine.code); + let dialog = document.getElementById(dialogId); + let haveElement = false; + let ele = document.getElementById(this.editor.containerid); + for (let i2 = 0; i2 < ele.children.length; i2++) { + if (ele.children[i2] == dialog) { + haveElement = true; + } + } + if (!haveElement) { + let ele2 = document.getElementById(this.editor.containerid); + ele2.appendChild(dialog); + } + if (!this.expanded || haveElement) { + dialog.style.display = "block"; + let attrEditor = document.getElementById( + this.getEditorId(this.attrDefine.code) + ); + let position = DDeiUtil.getDomAbsPosition(attrEditor, this.editor); + let tabPanelEles = this.editor.htmlElement.getElementsByClassName("propertyview-subgroup-tabpanel"); + let tabPanelTop = 0; + if ((tabPanelEles == null ? void 0 : tabPanelEles.length) > 0) { + tabPanelTop = tabPanelEles[0].scrollTop; + } + dialog.style.left = position.left - dialog.offsetWidth + attrEditor.offsetWidth - 9.5 + "px"; + dialog.style.top = position.top + attrEditor.offsetHeight - tabPanelTop + "px"; + this.expanded = true; + if (!DDeiEditor.ACTIVE_INSTANCE.tempDialogData) { + DDeiEditor.ACTIVE_INSTANCE.tempDialogData = {}; + } + DDeiEditor.ACTIVE_INSTANCE.tempDialogData[dialogId] = { group: "property-dialog" }; + } else { + dialog.style.display = "none"; + this.expanded = false; + if (DDeiEditor.ACTIVE_INSTANCE.tempDialogData) { + DDeiEditor.ACTIVE_INSTANCE.tempDialogData[dialogId] = null; + } + } + }, + //移除弹出框 + destroyDialog() { + var _a3; + if ((_a3 = this.editor) == null ? void 0 : _a3.containerid) { + let dialogs = []; + let ele = document.getElementById(this.editor.containerid); + for (let i2 = 0; i2 < ele.children.length; i2++) { + if (ele.children[i2].className == "ddei-combox-show-dialog") { + dialogs.push(ele.children[i2]); + } + } + dialogs.forEach((dialog) => { + dialog.remove(); + }); + } + }, + closeDialog(evt) { + this.expanded = false; + let dialog = document.getElementById( + this.getShowDialogId(this.attrDefine.code) + ); + dialog.style.display = "none"; + } + } + }; + const PVBaseCombox_vue_vue_type_style_index_0_scoped_b36dc5e7_lang = ""; + const _hoisted_1$m = ["id"]; + const _hoisted_2$f = ["readonly", "placeholder"]; + const _hoisted_3$c = ["id"]; + const _hoisted_4$5 = { class: "ddei-combox-show-dialog-content" }; + function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p; + return vue.openBlock(), vue.createElementBlock("div", { + id: $options.getEditorId((_a3 = $props.attrDefine) == null ? void 0 : _a3.code), + class: vue.normalizeClass({ "ddei-pv-base-combox": true, "ddei-pv-base-combox--disabled": !$props.attrDefine || $props.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "textinput": true, "textinput_expanded": $data.expanded, "display_img": $data.img && ((_c2 = (_b2 = $props.attrDefine) == null ? void 0 : _b2.itemStyle) == null ? void 0 : _c2.display) == "img", "display_img_text": $data.img && ((_e2 = (_d2 = $props.attrDefine) == null ? void 0 : _d2.itemStyle) == null ? void 0 : _e2.display) == "img-text" }) + }, [ + $data.img && (((_g = (_f = $props.attrDefine) == null ? void 0 : _f.itemStyle) == null ? void 0 : _g.display) == "img-text" || ((_i = (_h = $props.attrDefine) == null ? void 0 : _h.itemStyle) == null ? void 0 : _i.display) == "img") ? (vue.openBlock(), vue.createElementBlock("span", { + key: 0, + class: vue.normalizeClass($data.img), + onClick: _cache[0] || (_cache[0] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && !$props.canSearch && $options.showDialog()) + }, null, 2)) : vue.createCommentVNode("", true), + !((_k = (_j = $props.attrDefine) == null ? void 0 : _j.itemStyle) == null ? void 0 : _k.display) || ((_m = (_l = $props.attrDefine) == null ? void 0 : _l.itemStyle) == null ? void 0 : _m.display) == "img-text" || ((_o = (_n = $props.attrDefine) == null ? void 0 : _n.itemStyle) == null ? void 0 : _o.display) == "text" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { + key: 1, + type: "text", + autocomplete: "off", + readonly: $props.attrDefine && ($props.attrDefine.readonly || !$props.canSearch), + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.text = $event), + placeholder: $data.defaultText, + onClick: _cache[2] || (_cache[2] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && !$props.canSearch && $options.showDialog()), + onKeydown: _cache[3] || (_cache[3] = ($event) => $options.search($event)) + }, null, 40, _hoisted_2$f)), [ + [vue.vModelText, $data.text] + ]) : vue.createCommentVNode("", true), + vue.createElementVNode("div", { + style: { "display": "flex", "justify-content": "center", "align-items": "center" }, + onClick: _cache[4] || (_cache[4] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && $options.showDialog()) + }, _cache[5] || (_cache[5] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ], -1) + ])) + ], 2), + vue.createElementVNode("div", { + id: $options.getShowDialogId((_p = $props.attrDefine) == null ? void 0 : _p.code), + class: vue.normalizeClass({ "ddei-combox-show-dialog": true }) + }, [ + vue.createElementVNode("div", _hoisted_4$5, [ + vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) + ]) + ], 8, _hoisted_3$c) + ], 10, _hoisted_1$m); + } + const PVBaseCombox = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$m], ["__scopeId", "data-v-b36dc5e7"]]); + const _sfc_main$l = { + name: "pv-align-type", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //临时选择的值 + value: null + }; + }, + computed: {}, + components: { + PVBaseCombox + }, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n; + let type = this.getTypeValue(); + let text2 = this.getTypeText(type.value); + if (!type.isDefault) { + this.attrDefine.value = type.value; + } + this.$refs.combox.text = text2; + this.$refs.combox.value = type.value; + this.value = type.value; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + let mds = []; + if (((_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.size) > 0) { + mds = Array.from( + (_l = (_k = (_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage) == null ? void 0 : _k.selectedModels) == null ? void 0 : _l.values() + ); + } + if (((_m = this.attrDefine) == null ? void 0 : _m.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_n = this.attrDefine) == null ? void 0 : _n.code }, this.editor.ddInstance, null); + this.attrDefine.readonly = rsState == -1; + } + }, + methods: { + getTypeText(type) { + return this.editor.i18n("ddei.property.ds.pos" + type); + }, + getTypeValue() { + let align = DDeiUtil.getDataByPathList( + this.attrDefine.model, + "textStyle.align" + ); + let valign = DDeiUtil.getDataByPathList( + this.attrDefine.model, + "textStyle.valign" + ); + if (align == 1 && valign == 1) { + return { value: 1 }; + } else if (align == 2 && valign == 1) { + return { value: 2 }; + } else if (align == 3 && valign == 1) { + return { value: 3 }; + } else if (align == 1 && valign == 2) { + return { value: 4 }; + } else if (align == 2 && valign == 2) { + return { value: 5 }; + } else if (align == 3 && valign == 2) { + return { value: 6 }; + } else if (align == 1 && valign == 3) { + return { value: 7 }; + } else if (align == 2 && valign == 3) { + return { value: 8 }; + } else if (align == 3 && valign == 3) { + return { value: 9 }; + } + return { isDefault: true, value: 5 }; + }, + valueChange(type, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let align = 2; + let valign = 2; + switch (type) { + case 1: + align = 1; + valign = 1; + break; + case 2: + align = 2; + valign = 1; + break; + case 3: + align = 3; + valign = 1; + break; + case 4: + align = 1; + valign = 2; + break; + case 5: + align = 2; + valign = 2; + break; + case 6: + align = 3; + valign = 2; + break; + case 7: + align = 1; + valign = 3; + break; + case 8: + align = 2; + valign = 3; + break; + case 9: + align = 3; + valign = 3; + break; + } + this.attrDefine.value = type; + let text2 = this.getTypeText(type); + this.$refs.combox.text = text2; + this.$refs.combox.value = type; + this.value = type; + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let alignValue = parser.parseValue(align); + let valignValue = parser.parseValue(valign); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, this.value); + this.attrDefine.doCascadeDisplayByValue(); + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: this.value, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, this.value); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths: ["textStyle.align"], + value: alignValue, + attrDefine: this.attrDefine + }, + evt, + true + ); + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths: ["textStyle.valign"], + value: valignValue, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath( + this.attrDefine.model, + ["textStyle.align"], + alignValue + ); + DDeiUtil.setAttrValueByPath( + this.attrDefine.model, + ["textStyle.valign"], + valignValue + ); + }); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVAlignTypeEditor_vue_vue_type_style_index_0_scoped_135fda87_lang = ""; + const _hoisted_1$l = { class: "ddei-pv-editor-aligntype" }; + const _hoisted_2$e = { class: "ddei-pv-editor-aligntype-items" }; + const _hoisted_3$b = { style: { "vertical-align": "top" } }; + const _hoisted_4$4 = { style: { "vertical-align": "top" } }; + const _hoisted_5$4 = { style: { "vertical-align": "top" } }; + const _hoisted_6$4 = { style: { "vertical-align": "middle" } }; + const _hoisted_7$4 = { style: { "vertical-align": "middle" } }; + const _hoisted_8$3 = { style: { "vertical-align": "middle" } }; + const _hoisted_9$3 = { style: { "vertical-align": "bottom" } }; + const _hoisted_10$2 = { style: { "vertical-align": "bottom" } }; + const _hoisted_11$2 = { style: { "vertical-align": "bottom" } }; + function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) { + const _component_PVBaseCombox = vue.resolveComponent("PVBaseCombox"); + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [ + vue.createVNode(_component_PVBaseCombox, { + editor: $props.editor, + controlDefine: $props.controlDefine, + attrDefine: $props.attrDefine, + ref: "combox", + canSearch: false + }, { + default: vue.withCtx(() => [ + vue.createElementVNode("div", _hoisted_2$e, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 1 }), + style: { "text-align": "left" }, + onClick: _cache[0] || (_cache[0] = ($event) => $options.valueChange(1, $event)) + }, [ + vue.createElementVNode("div", _hoisted_3$b, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos1")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 2 }), + style: { "text-align": "center" }, + onClick: _cache[1] || (_cache[1] = ($event) => $options.valueChange(2, $event)) + }, [ + vue.createElementVNode("div", _hoisted_4$4, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos2")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 3 }), + style: { "text-align": "right" }, + onClick: _cache[2] || (_cache[2] = ($event) => $options.valueChange(3, $event)) + }, [ + vue.createElementVNode("div", _hoisted_5$4, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos3")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 4 }), + style: { "text-align": "left" }, + onClick: _cache[3] || (_cache[3] = ($event) => $options.valueChange(4, $event)) + }, [ + vue.createElementVNode("div", _hoisted_6$4, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos4")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 5 }), + style: { "text-align": "center" }, + onClick: _cache[4] || (_cache[4] = ($event) => $options.valueChange(5, $event)) + }, [ + vue.createElementVNode("div", _hoisted_7$4, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos5")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 6 }), + style: { "text-align": "right" }, + onClick: _cache[5] || (_cache[5] = ($event) => $options.valueChange(6, $event)) + }, [ + vue.createElementVNode("div", _hoisted_8$3, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos6")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 7 }), + style: { "text-align": "left" }, + onClick: _cache[6] || (_cache[6] = ($event) => $options.valueChange(7, $event)) + }, [ + vue.createElementVNode("div", _hoisted_9$3, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos7")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 8 }), + style: { "text-align": "center" }, + onClick: _cache[7] || (_cache[7] = ($event) => $options.valueChange(8, $event)) + }, [ + vue.createElementVNode("div", _hoisted_10$2, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos8")), 1) + ], 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-pv-editor-aligntype-item": true, "ddei-pv-editor-aligntype-item--selected": $data.value == 9 }), + style: { "text-align": "right" }, + onClick: _cache[8] || (_cache[8] = ($event) => $options.valueChange(9, $event)) + }, [ + vue.createElementVNode("div", _hoisted_11$2, vue.toDisplayString($props.editor.i18n("ddei.property.ds.pos9")), 1) + ], 2) + ]) + ]), + _: 1 + }, 8, ["editor", "controlDefine", "attrDefine"]) + ]); + } + const PVAlignTypeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$l], ["__scopeId", "data-v-135fda87"]]); + const _DDeiCoreAlignTypePropEditor = class _DDeiCoreAlignTypePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVAlignTypeEditor.name); + __publicField3(this, "plugins", [PVAlignTypeEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreAlignTypePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVAlignTypeEditor.name]) { + for (let i2 in options[PVAlignTypeEditor.name]) { + newOptions[i2] = options[PVAlignTypeEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreAlignTypePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreAlignTypePropEditor; + } + static modify(fn) { + return _DDeiCoreAlignTypePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreAlignTypePropEditor, "defaultIns", new _DDeiCoreAlignTypePropEditor(null)); + let DDeiCoreAlignTypePropEditor = _DDeiCoreAlignTypePropEditor; + const _sfc_main$k = { + name: "pv-border-dash", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //值 + value: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + getEditorId(id) { + return "ddei_attr_editor_" + id; + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectborderdash", { + value: this.attrDefine.value, + dataSource: this.attrDefine.dataSource, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement); + }, + valueChange(value) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + this.attrDefine.getParser(); + this.attrDefine.value = value; + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, value); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + null, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + null, + true + ); + }); + } + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVBorderDashComboEditor_vue_vue_type_style_index_0_scoped_2e01e102_lang = ""; + const _hoisted_1$k = ["id"]; + const _hoisted_2$d = { class: "div_input" }; + const _hoisted_3$a = ["stroke-dasharray"]; + function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return vue.openBlock(), vue.createElementBlock("div", { + id: $options.getEditorId((_a3 = $props.attrDefine) == null ? void 0 : _a3.code), + class: vue.normalizeClass({ "ddei-pv-border-dash-combox": true, "ddei-pv-border-dash-combox--disabled": !$props.attrDefine || $props.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: "textinput", + onClick: _cache[0] || (_cache[0] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && $options.showDialog($event)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$d, [ + vue.createElementVNode("line", { + x1: "0", + y1: "0", + x2: "100%", + y2: "0", + "stroke-width": "3", + "stroke-dasharray": $props.attrDefine.value + }, null, 8, _hoisted_3$a) + ])), + _cache[1] || (_cache[1] = vue.createElementVNode("div", { style: { "display": "flex", "justify-content": "center", "align-items": "center" } }, [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ]) + ], -1)) + ]) + ], 10, _hoisted_1$k); + } + const PVBorderDashComboEditor = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$k], ["__scopeId", "data-v-2e01e102"]]); + const _DDeiCoreBorderDashComboPropEditor = class _DDeiCoreBorderDashComboPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVBorderDashComboEditor.name); + __publicField3(this, "plugins", [PVBorderDashComboEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreBorderDashComboPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVBorderDashComboEditor.name]) { + for (let i2 in options[PVBorderDashComboEditor.name]) { + newOptions[i2] = options[PVBorderDashComboEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreBorderDashComboPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreBorderDashComboPropEditor; + } + static modify(fn) { + return _DDeiCoreBorderDashComboPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBorderDashComboPropEditor, "defaultIns", new _DDeiCoreBorderDashComboPropEditor(null)); + let DDeiCoreBorderDashComboPropEditor = _DDeiCoreBorderDashComboPropEditor; + const _sfc_main$j = { + name: "pv-border-type", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dataSource: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + this.getDataSource(this.attrDefine); + let type = this.getTypeValue(); + if (type) { + this.attrDefine.value = type.value; + this.showOrHiddenOtherAttrs(this.attrDefine.value); + } + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + if (this.dataSource[i2].value.toString() == value.toString()) { + return this.dataSource[i2]; + } + } + } + return { text: "" }; + }, + /** + * 选中radio + */ + checkRadioValue(attrDefine, evt) { + let targetElement = evt.target; + if (targetElement.tagName == "DIV" && targetElement.className == "itembox") { + targetElement = targetElement.children[0]; + } else if (targetElement.tagName == "DIV") { + targetElement = targetElement.parentElement.children[0]; + } + if (attrDefine.value == targetElement.value) { + attrDefine.value = null; + } else { + attrDefine.value = targetElement.value; + } + this.valueChange(); + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource(this.editor, this.attrDefine); + this.dataSource = dataSources; + return this.dataSource; + }, + showOrHiddenOtherAttrs(value) { + if (value == "0") { + this.controlDefine.groups.forEach((group2) => { + DDeiEditorArrtibute.hiddenAttributesByCode( + group2, + "border.color", + "borderOpacity", + "borderWidth", + "borderDash", + "borderRound" + ); + }); + } else if (value == "1") { + this.controlDefine.groups.forEach((group2) => { + DDeiEditorArrtibute.showAttributesByCode( + group2, + "border.color", + "borderOpacity", + "borderWidth", + "borderDash", + "borderRound" + ); + }); + } + }, + getTypeValue() { + var _a3, _b2; + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.exmapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = DDeiUtil.getDataByPathList(this.attrDefine.model, paths); + if (!value) { + return { value: "1" }; + } else if (value == "true" || value == true) { + return { value: "0" }; + } + return { + isDefault: true, + value: this.attrDefine.getParser().getDefaultValue() + }; + }, + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.exmapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + this.showOrHiddenOtherAttrs(value); + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + if (value == "0") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: true, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, true); + } else if (value == "1") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: false, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, false); + } + }); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVBorderTypeEditor_vue_vue_type_style_index_0_scoped_ea9f8fdd_lang = ""; + const _hoisted_1$j = ["disabled", "name", "value"]; + function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei_pv_editor_bordertype": true, "ddei_pv_editor_bordertype_disabled": $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "itembox", + onClick: _cache[1] || (_cache[1] = ($event) => $options.checkRadioValue($props.attrDefine, $event)) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "radio", + disabled: $props.attrDefine.readonly, + name: $props.attrDefine.id, + value: item.value, + autocomplete: "off", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event) + }, null, 8, _hoisted_1$j), [ + [vue.vModelRadio, $props.attrDefine.value] + ]), + vue.createElementVNode("div", null, vue.toDisplayString(item.text), 1) + ]); + }), 256)) + ], 6); + } + const PVBorderTypeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$j], ["__scopeId", "data-v-ea9f8fdd"]]); + const _DDeiCoreBorderTypePropEditor = class _DDeiCoreBorderTypePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVBorderTypeEditor.name); + __publicField3(this, "plugins", [PVBorderTypeEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreBorderTypePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVBorderTypeEditor.name]) { + for (let i2 in options[PVBorderTypeEditor.name]) { + newOptions[i2] = options[PVBorderTypeEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreBorderTypePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreBorderTypePropEditor; + } + static modify(fn) { + return _DDeiCoreBorderTypePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreBorderTypePropEditor, "defaultIns", new _DDeiCoreBorderTypePropEditor(null)); + let DDeiCoreBorderTypePropEditor = _DDeiCoreBorderTypePropEditor; + const _sfc_main$i = { + name: "pv-color-combo", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //值 + value: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + getEditorId(id) { + return "ddei_attr_editor_" + id; + }, + //打开弹出框 + showDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-selectcolor", { + value: this.attrDefine.value, + callback: { + ok: this.valueChange + }, + group: "property-dialog" + }, { type: 5 }, srcElement); + }, + valueChange(value) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + this.attrDefine.getParser(); + this.attrDefine.value = value; + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, value); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + null, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + null, + true + ); + }); + } + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVColorComboEditor_vue_vue_type_style_index_0_scoped_22680f1e_lang = ""; + const _hoisted_1$i = ["id"]; + const _hoisted_2$c = ["readonly"]; + function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return vue.openBlock(), vue.createElementBlock("div", { + id: $options.getEditorId((_a3 = $props.attrDefine) == null ? void 0 : _a3.code), + class: vue.normalizeClass({ "ddei-pv-color-combox": true, "ddei-pv-color-combox--disabled": !$props.attrDefine || $props.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", { + class: "textinput", + onClick: _cache[1] || (_cache[1] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && $options.showDialog($event)) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "color", + readonly: $props.attrDefine && $props.attrDefine.readonly, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + autocomplete: "off" + }, null, 8, _hoisted_2$c), [ + [vue.vModelText, $props.attrDefine.value] + ]), + _cache[2] || (_cache[2] = vue.createElementVNode("div", { style: { "display": "flex", "justify-content": "center", "align-items": "center" } }, [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-btn-down" }) + ]) + ], -1)) + ]) + ], 10, _hoisted_1$i); + } + const PVColorComboEditor = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$i], ["__scopeId", "data-v-22680f1e"]]); + const _DDeiCoreColorComboPropEditor = class _DDeiCoreColorComboPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVColorComboEditor.name); + __publicField3(this, "plugins", [PVColorComboEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreColorComboPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVColorComboEditor.name]) { + for (let i2 in options[PVColorComboEditor.name]) { + newOptions[i2] = options[PVColorComboEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreColorComboPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreColorComboPropEditor; + } + static modify(fn) { + return _DDeiCoreColorComboPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreColorComboPropEditor, "defaultIns", new _DDeiCoreColorComboPropEditor(null)); + let DDeiCoreColorComboPropEditor = _DDeiCoreColorComboPropEditor; + const _sfc_main$h = { + name: "pv-color", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.valueChange = throttle(this.valueChange, 40); + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, value); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVColorEditor_vue_vue_type_style_index_0_scoped_ec0fa5a7_lang = ""; + const _hoisted_1$h = ["step", "disabled"]; + const _hoisted_2$b = { class: "textinput" }; + const _hoisted_3$9 = ["disabled", "placeholder"]; + function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-color": true, "ddei-pv-editor-color--disabled": $props.attrDefine.readonly }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "color", + step: $props.attrDefine.step, + class: "color", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + autocomplete: "off", + disabled: $props.attrDefine.readonly + }, null, 8, _hoisted_1$h), [ + [vue.vModelText, $props.attrDefine.value] + ]), + vue.createElementVNode("div", _hoisted_2$b, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "text", + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + autocomplete: "off", + placeholder: $props.attrDefine.defaultValue + }, null, 8, _hoisted_3$9), [ + [vue.vModelText, $props.attrDefine.value] + ]) + ]) + ], 2); + } + const PVColorEditor = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$h], ["__scopeId", "data-v-ec0fa5a7"]]); + const _DDeiCoreColorPropEditor = class _DDeiCoreColorPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVColorEditor.name); + __publicField3(this, "plugins", [PVColorEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreColorPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVColorEditor.name]) { + for (let i2 in options[PVColorEditor.name]) { + newOptions[i2] = options[PVColorEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreColorPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreColorPropEditor; + } + static modify(fn) { + return _DDeiCoreColorPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreColorPropEditor, "defaultIns", new _DDeiCoreColorPropEditor(null)); + let DDeiCoreColorPropEditor = _DDeiCoreColorPropEditor; + const _sfc_main$g = { + name: "pv-combox", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //临时选择的值 + value: null, + //已加载的数据源 + dataSource: null, + width: 0, + height: 0, + col: 1, + gridTemplateColumns: "1fr", + gridTemplateRows: "", + searchText: "" + }; + }, + computed: {}, + components: { + PVBaseCombox + }, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B; + let itemWidth = ((_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.itemStyle) == null ? void 0 : _b2.width) ? (_d2 = (_c2 = this.attrDefine) == null ? void 0 : _c2.itemStyle) == null ? void 0 : _d2.width : 100; + let itemCols = ((_f = (_e2 = this.attrDefine) == null ? void 0 : _e2.itemStyle) == null ? void 0 : _f.col) ? (_h = (_g = this.attrDefine) == null ? void 0 : _g.itemStyle) == null ? void 0 : _h.col : 1; + let itemHeight = ((_j = (_i = this.attrDefine) == null ? void 0 : _i.itemStyle) == null ? void 0 : _j.height) ? (_l = (_k = this.attrDefine) == null ? void 0 : _k.itemStyle) == null ? void 0 : _l.height : 30; + let itemRows = ((_n = (_m = this.attrDefine) == null ? void 0 : _m.itemStyle) == null ? void 0 : _n.row) ? (_p = (_o = this.attrDefine) == null ? void 0 : _o.itemStyle) == null ? void 0 : _p.row : 0; + this.width = (itemWidth + 5) * itemCols + 10; + this.col = itemCols; + this.height = (itemHeight + 5) * itemRows; + let gridTemplateColumns = this.gridTemplateColumns; + if (this.col > 1) { + for (let i2 = 2; i2 <= this.col; i2++) { + gridTemplateColumns += " 1fr"; + } + this.gridTemplateColumns = gridTemplateColumns; + } + if (itemRows) { + let gridTemplateRows = ""; + for (let i2 = 1; i2 <= itemRows; i2++) { + gridTemplateRows += itemHeight + "px "; + } + this.gridTemplateRows = gridTemplateRows; + } + this.getDataSource(this.attrDefine); + let type = this.getDataValue(); + let define2 = this.getDataDefine(type.value); + if (!type.isDefault) { + this.attrDefine.value = type.value; + this.$refs.combox.text = define2.text; + if (define2.img) { + this.$refs.combox.img = define2.img; + } + } else { + this.$refs.combox.defaultText = define2.text; + this.$refs.combox.img = define2.img; + } + this.$refs.combox.value = type.value; + this.value = type.value; + this.attrDefine.doCascadeDisplayByValue(); + let mds; + if (((_t = (_s = (_r = (_q = this.editor) == null ? void 0 : _q.ddInstance) == null ? void 0 : _r.stage) == null ? void 0 : _s.selectedModels) == null ? void 0 : _t.size) > 0) { + mds = Array.from( + (_x = (_w = (_v = (_u = this.editor) == null ? void 0 : _u.ddInstance) == null ? void 0 : _v.stage) == null ? void 0 : _w.selectedModels) == null ? void 0 : _x.values() + ); + } else { + mds = [(_z = (_y = this.editor) == null ? void 0 : _y.ddInstance) == null ? void 0 : _z.stage]; + } + if (((_A = this.attrDefine) == null ? void 0 : _A.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_B = this.attrDefine) == null ? void 0 : _B.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + if (this.dataSource[i2].value.toString() == value.toString()) { + return this.dataSource[i2]; + } + } + } + return { text: "" }; + }, + doSearch(text2, evt) { + this.searchText = text2; + this.getDataSource(this.attrDefine); + this.$refs.combox.showDialog(true, evt); + }, + //获取数据值 + getDataValue() { + var _a3; + if (this.attrDefine) { + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList( + this.attrDefine.model, + this.attrDefine.code, + this.attrDefine.mapping + ); + } + if (dataValue) { + return { value: dataValue }; + } + } + return { + isDefault: true, + value: (_a3 = this.attrDefine) == null ? void 0 : _a3.getParser().getDefaultValue() + }; + }, + valueChange(value, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + this.attrDefine.value = value; + let itemDefine = this.getDataDefine(value); + let text2 = itemDefine.text; + this.$refs.combox.text = text2; + if (itemDefine.img) { + this.$refs.combox.img = itemDefine.img; + } + this.$refs.combox.value = value; + this.value = value; + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(value); + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, value); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, parsedValue); + this.attrDefine.doCascadeDisplayByValue(); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + (_o = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _o.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: parsedValue, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_p = this.attrDefine) == null ? void 0 : _p.code }, this.editor.ddInstance, null); + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + if (this.attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource( + this.editor, + this.attrDefine, + this.searchText + ); + this.dataSource = dataSources; + return this.dataSource; + } + } + } + }; + const PVComboxEditor_vue_vue_type_style_index_0_scoped_e318138d_lang = ""; + const _hoisted_1$g = ["onClick", "title"]; + const _hoisted_2$a = { + key: 0, + class: "itembox_img" + }; + const _hoisted_3$8 = ["src"]; + function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + const _component_PVBaseCombox = vue.resolveComponent("PVBaseCombox"); + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-combox": true, "ddei-pv-editor-combox--disabled": !$props.attrDefine || $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + vue.createVNode(_component_PVBaseCombox, { + editor: $props.editor, + controlDefine: $props.controlDefine, + attrDefine: $props.attrDefine, + searchMethod: $options.doSearch, + ref: "combox", + canSearch: (_a3 = $props.attrDefine) == null ? void 0 : _a3.canSearch + }, { + default: vue.withCtx(() => [ + vue.createElementVNode("div", { + class: "itemboxs", + style: vue.normalizeStyle({ width: $data.width ? $data.width + "px" : "", height: $data.height ? $data.height + "px" : "", "grid-template-columns": $data.gridTemplateColumns, "grid-template-rows": $data.gridTemplateRows }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + var _a4, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n; + return vue.openBlock(), vue.createElementBlock("div", { + style: vue.normalizeStyle({ width: ((_b2 = (_a4 = $props.attrDefine) == null ? void 0 : _a4.itemStyle) == null ? void 0 : _b2.width) + "px", height: ((_d2 = (_c2 = $props.attrDefine) == null ? void 0 : _c2.itemStyle) == null ? void 0 : _d2.height) + "px" }), + class: vue.normalizeClass({ "itembox": true, "itembox--selected": item.value == $props.attrDefine.value, "itembox--deleted": item.deleted, "itembox--disabled": item.disabled, "itembox--underline": item.underline, "itembox--bold": item.bold }), + onClick: ($event) => !item.disabled && $options.valueChange(item.value, $event), + title: item.desc + }, [ + item.img ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$a, [ + vue.createElementVNode("img", { + style: vue.normalizeStyle({ width: ((_f = (_e2 = $props.attrDefine) == null ? void 0 : _e2.itemStyle) == null ? void 0 : _f.imgWidth) + "px", height: ((_h = (_g = $props.attrDefine) == null ? void 0 : _g.itemStyle) == null ? void 0 : _h.imgHeight) + "px" }), + src: item.img + }, null, 12, _hoisted_3$8) + ])) : vue.createCommentVNode("", true), + item.text ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: "itembox_text", + style: vue.normalizeStyle({ "font-family": item.fontFamily, "text-align": (_j = (_i = $props.attrDefine) == null ? void 0 : _i.itemStyle) == null ? void 0 : _j.align, "padding-left": (_l = (_k = $props.attrDefine) == null ? void 0 : _k.itemStyle) == null ? void 0 : _l.paddingLeft }) + }, vue.toDisplayString(item.text), 5)) : vue.createCommentVNode("", true), + item.desc ? (vue.openBlock(), vue.createElementBlock("div", { + key: 2, + class: "itembox_desc", + style: vue.normalizeStyle({ "font-family": item.fontFamily, "text-align": (_n = (_m = $props.attrDefine) == null ? void 0 : _m.itemStyle) == null ? void 0 : _n.align }) + }, vue.toDisplayString(item.desc), 5)) : vue.createCommentVNode("", true) + ], 14, _hoisted_1$g); + }), 256)) + ], 4) + ]), + _: 1 + }, 8, ["editor", "controlDefine", "attrDefine", "searchMethod", "canSearch"]) + ], 6); + } + const PVComboxEditor = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$g], ["__scopeId", "data-v-e318138d"]]); + const _DDeiCoreComboxPropEditor = class _DDeiCoreComboxPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVComboxEditor.name); + __publicField3(this, "plugins", [PVComboxEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreComboxPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVComboxEditor.name]) { + for (let i2 in options[PVComboxEditor.name]) { + newOptions[i2] = options[PVComboxEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreComboxPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreComboxPropEditor; + } + static modify(fn) { + return _DDeiCoreComboxPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreComboxPropEditor, "defaultIns", new _DDeiCoreComboxPropEditor(null)); + let DDeiCoreComboxPropEditor = _DDeiCoreComboxPropEditor; + const _sfc_main$f = { + name: "pv-excheckbox", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + //临时选择的值 + value: null, + //已加载的数据源 + dataSource: null, + width: 0, + height: 0, + col: 1, + gridTemplateColumns: "1fr", + gridTemplateRows: "", + searchText: "" + }; + }, + computed: {}, + components: { + PVBaseCombox + }, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B; + let itemWidth = ((_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.itemStyle) == null ? void 0 : _b2.width) ? (_d2 = (_c2 = this.attrDefine) == null ? void 0 : _c2.itemStyle) == null ? void 0 : _d2.width : 100; + let itemCols = ((_f = (_e2 = this.attrDefine) == null ? void 0 : _e2.itemStyle) == null ? void 0 : _f.col) ? (_h = (_g = this.attrDefine) == null ? void 0 : _g.itemStyle) == null ? void 0 : _h.col : 1; + let itemHeight = ((_j = (_i = this.attrDefine) == null ? void 0 : _i.itemStyle) == null ? void 0 : _j.height) ? (_l = (_k = this.attrDefine) == null ? void 0 : _k.itemStyle) == null ? void 0 : _l.height : 30; + let itemRows = ((_n = (_m = this.attrDefine) == null ? void 0 : _m.itemStyle) == null ? void 0 : _n.row) ? (_p = (_o = this.attrDefine) == null ? void 0 : _o.itemStyle) == null ? void 0 : _p.row : 0; + this.width = (itemWidth + 5) * itemCols + 10; + this.col = itemCols; + this.height = (itemHeight + 5) * itemRows; + let gridTemplateColumns = this.gridTemplateColumns; + if (this.col > 1) { + for (let i2 = 2; i2 <= this.col; i2++) { + gridTemplateColumns += " 1fr"; + } + this.gridTemplateColumns = gridTemplateColumns; + } + if (itemRows) { + let gridTemplateRows = ""; + for (let i2 = 1; i2 <= itemRows; i2++) { + gridTemplateRows += itemHeight + "px "; + } + this.gridTemplateRows = gridTemplateRows; + } + this.getDataSource(this.attrDefine); + let type = this.getDataValue(); + let itemDefine = this.getDataDefine(type.value); + if ((itemDefine == null ? void 0 : itemDefine.length) > 0) { + let text2 = itemDefine[0].text; + for (let x2 = 1; x2 < itemDefine.length; x2++) { + text2 += "," + itemDefine[x2].text; + } + this.$refs.combox.text = text2; + if (itemDefine.img) { + this.$refs.combox.img = itemDefine[0].img; + } + this.$refs.combox.value = itemDefine[0].value; + this.attrDefine.value = type.value; + this.value = type.value; + } + this.attrDefine.doCascadeDisplayByValue(); + let mds; + if (((_t = (_s = (_r = (_q = this.editor) == null ? void 0 : _q.ddInstance) == null ? void 0 : _r.stage) == null ? void 0 : _s.selectedModels) == null ? void 0 : _t.size) > 0) { + mds = Array.from( + (_x = (_w = (_v = (_u = this.editor) == null ? void 0 : _u.ddInstance) == null ? void 0 : _v.stage) == null ? void 0 : _w.selectedModels) == null ? void 0 : _x.values() + ); + } else { + mds = [(_z = (_y = this.editor) == null ? void 0 : _y.ddInstance) == null ? void 0 : _z.stage]; + } + if (((_A = this.attrDefine) == null ? void 0 : _A.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_B = this.attrDefine) == null ? void 0 : _B.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + let returnList = []; + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + for (let j2 = 0; j2 < value.length; j2++) { + if (this.dataSource[i2].value.toString() == value[j2].toString()) { + if (returnList.indexOf(this.getDataSource[i2]) == -1) { + returnList.push(this.dataSource[i2]); + } + } + } + } + } + return returnList; + }, + doSearch(text2, evt) { + this.searchText = text2; + this.getDataSource(this.attrDefine); + this.$refs.combox.showDialog(true, evt); + }, + //获取数据值 + getDataValue() { + let dataValue = this.attrDefine.value; + if (!dataValue) { + dataValue = DDeiUtil.getDataByPathList( + this.attrDefine.model, + this.attrDefine.code, + this.attrDefine.mapping + ); + } + if (dataValue) { + return { value: dataValue }; + } + return { + isDefault: true, + value: this.attrDefine.getParser().getDefaultValue() + }; + }, + valueChange(value, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + if (this.attrDefine.dataType.toLocaleLowerCase() == "integer" || this.attrDefine.dataType.toLocaleLowerCase() == "float" || this.attrDefine.dataType.toLocaleLowerCase() == "number") { + if (!value && value != 0) { + return; + } + } else if (!value) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + if (!this.value) { + this.value = []; + } + let strValue = value; + if (this.value.indexOf(strValue) == -1) { + this.value.push(strValue); + } else { + let index = this.value.indexOf(strValue); + if (index != -1) { + this.value.splice(index, 1); + } + } + this.attrDefine.value = this.value; + let itemDefine = this.getDataDefine(this.value); + if ((itemDefine == null ? void 0 : itemDefine.length) > 0) { + let text2 = itemDefine[0].text; + for (let x2 = 1; x2 < itemDefine.length; x2++) { + text2 += "," + itemDefine[x2].text; + } + this.$refs.combox.text = text2; + if (itemDefine.img) { + this.$refs.combox.img = itemDefine[0].img; + } + this.$refs.combox.value = itemDefine[0].value; + } else { + this.$refs.combox.text = null; + this.$refs.combox.value = null; + this.$refs.combox.img = null; + } + let parser = this.attrDefine.getParser(); + let parsedValue = parser.parseValue(this.value); + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, parsedValue); + this.attrDefine.doCascadeDisplayByValue(); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: parsedValue, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource( + this.editor, + this.attrDefine, + this.searchText + ); + this.dataSource = dataSources; + return this.dataSource; + } + } + }; + const PVExCheckboxEditor_vue_vue_type_style_index_0_scoped_4960d25a_lang = ""; + const _hoisted_1$f = ["onClick", "title"]; + const _hoisted_2$9 = { + key: 0, + class: "itembox_img" + }; + const _hoisted_3$7 = ["src"]; + function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) { + const _component_PVBaseCombox = vue.resolveComponent("PVBaseCombox"); + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-excheckbox": true, "ddei-pv-editor-excheckbox--disabled": $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + vue.createVNode(_component_PVBaseCombox, { + editor: $props.editor, + controlDefine: $props.controlDefine, + attrDefine: $props.attrDefine, + searchMethod: $options.doSearch, + ref: "combox", + canSearch: $props.attrDefine.canSearch + }, { + default: vue.withCtx(() => [ + vue.createElementVNode("div", { + class: "itemboxs", + style: vue.normalizeStyle({ width: $data.width ? $data.width + "px" : "", height: $data.height ? $data.height + "px" : "", "grid-template-columns": $data.gridTemplateColumns, "grid-template-rows": $data.gridTemplateRows }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s; + return vue.openBlock(), vue.createElementBlock("div", { + style: vue.normalizeStyle({ width: ((_b2 = (_a3 = $props.attrDefine) == null ? void 0 : _a3.itemStyle) == null ? void 0 : _b2.width) + "px", height: ((_d2 = (_c2 = $props.attrDefine) == null ? void 0 : _c2.itemStyle) == null ? void 0 : _d2.height) + "px" }), + class: vue.normalizeClass({ "itembox": true, "itembox--selected": ((_e2 = $props.attrDefine) == null ? void 0 : _e2.value) && ((_g = (_f = $props.attrDefine) == null ? void 0 : _f.value) == null ? void 0 : _g.indexOf(item.value)) != -1, "itembox--deleted": item.deleted, "itembox--disabled": item.disabled || ((_i = (_h = $props.attrDefine) == null ? void 0 : _h.itemStyle) == null ? void 0 : _i.maxSelect) && ((_k = (_j = $props.attrDefine) == null ? void 0 : _j.itemStyle) == null ? void 0 : _k.maxSelect) <= ((_m = (_l = $props.attrDefine) == null ? void 0 : _l.value) == null ? void 0 : _m.length) && ((_o = (_n = $props.attrDefine) == null ? void 0 : _n.value) == null ? void 0 : _o.indexOf(item.value)) == -1, "itembox--underline": item.underline, "itembox--bold": item.bold }), + onClick: ($event) => { + var _a4, _b3, _c3, _d3, _e3, _f2, _g2, _h2; + return !item.disabled && (!((_b3 = (_a4 = $props.attrDefine) == null ? void 0 : _a4.itemStyle) == null ? void 0 : _b3.maxSelect) || ((_d3 = (_c3 = $props.attrDefine) == null ? void 0 : _c3.itemStyle) == null ? void 0 : _d3.maxSelect) > ((_f2 = (_e3 = $props.attrDefine) == null ? void 0 : _e3.value) == null ? void 0 : _f2.length) || ((_h2 = (_g2 = $props.attrDefine) == null ? void 0 : _g2.value) == null ? void 0 : _h2.indexOf(item.value)) != -1) && $options.valueChange(item.value, $event); + }, + title: item.desc + }, [ + item.img ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$9, [ + vue.createElementVNode("img", { + style: vue.normalizeStyle({ width: ((_q = (_p = $props.attrDefine) == null ? void 0 : _p.itemStyle) == null ? void 0 : _q.imgWidth) + "px", height: ((_s = (_r = $props.attrDefine) == null ? void 0 : _r.itemStyle) == null ? void 0 : _s.imgHeight) + "px" }), + src: item.img + }, null, 12, _hoisted_3$7) + ])) : vue.createCommentVNode("", true), + item.text ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: "itembox_text", + style: vue.normalizeStyle({ "font-family": item.fontFamily }) + }, vue.toDisplayString(item.text), 5)) : vue.createCommentVNode("", true) + ], 14, _hoisted_1$f); + }), 256)) + ], 4) + ]), + _: 1 + }, 8, ["editor", "controlDefine", "attrDefine", "searchMethod", "canSearch"]) + ], 6); + } + const PVExCheckboxEditor = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$f], ["__scopeId", "data-v-4960d25a"]]); + const _DDeiCoreExCheckboxPropEditor = class _DDeiCoreExCheckboxPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVExCheckboxEditor.name); + __publicField3(this, "plugins", [PVExCheckboxEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreExCheckboxPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVExCheckboxEditor.name]) { + for (let i2 in options[PVExCheckboxEditor.name]) { + newOptions[i2] = options[PVExCheckboxEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreExCheckboxPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreExCheckboxPropEditor; + } + static modify(fn) { + return _DDeiCoreExCheckboxPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreExCheckboxPropEditor, "defaultIns", new _DDeiCoreExCheckboxPropEditor(null)); + let DDeiCoreExCheckboxPropEditor = _DDeiCoreExCheckboxPropEditor; + const _sfc_main$e = { + name: "pv-fill-type", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dataSource: null + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + this.getDataSource(this.attrDefine); + let type = this.getTypeValue(); + if (type) { + this.attrDefine.value = type.value; + } + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + /** + * 根据值获取选项定义 + * @param value 值 + */ + getDataDefine(value) { + if (this.dataSource && value) { + for (let i2 = 0; i2 < this.dataSource.length; i2++) { + if (this.dataSource[i2].value.toString() == value.toString()) { + return this.dataSource[i2]; + } + } + } + return { text: "" }; + }, + /** + * 选中radio + */ + checkRadioValue(attrDefine, evt) { + let targetElement = evt.target; + if (targetElement.tagName == "DIV" && targetElement.className == "itembox") { + targetElement = targetElement.children[0]; + } else if (targetElement.tagName == "DIV") { + targetElement = targetElement.parentElement.children[0]; + } + if (attrDefine.value == targetElement.value) { + attrDefine.value = null; + } else { + attrDefine.value = targetElement.value; + } + this.valueChange(); + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource(this.editor, this.attrDefine); + this.dataSource = dataSources; + return this.dataSource; + }, + getTypeValue() { + var _a3, _b2; + let paths = []; + (_b2 = (_a3 = this.attrDefine) == null ? void 0 : _a3.exmapping) == null ? void 0 : _b2.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let value = DDeiUtil.getDataByPathList(this.attrDefine.model, paths); + if (!value) { + return { value: "1" }; + } else if (value == "true" || value == true) { + return { value: "0" }; + } + return { + isDefault: true, + value: this.attrDefine.getParser().getDefaultValue() + }; + }, + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.exmapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + if (value == "0") { + DDeiEditorArrtibute.hiddenAttributesByCode( + this.controlDefine.styles, + "fill.color", + "fill.opacity" + ); + if (this.controlDefine.subStyles) { + DDeiEditorArrtibute.hiddenAttributesByCode( + this.controlDefine.subStyles, + "fill.color", + "fill.opacity" + ); + } + } else if (value == "1") { + DDeiEditorArrtibute.showAttributesByCode( + this.controlDefine.styles, + "fill.color", + "fill.opacity" + ); + if (this.controlDefine.subStyles) { + DDeiEditorArrtibute.showAttributesByCode( + this.controlDefine.subStyles, + "fill.color", + "fill.opacity" + ); + } + } + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + if (value == "0") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: true, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, true); + } else if (value == "1") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: false, + attrDefine: this.attrDefine + }, + evt, + true + ); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, false); + } + }); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVFillTypeEditor_vue_vue_type_style_index_0_scoped_64114ba5_lang = ""; + const _hoisted_1$e = ["disabled", "name", "value"]; + function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-filltype": true, "ddei-pv-editor-filltype--disabled": $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "itembox", + onClick: _cache[1] || (_cache[1] = ($event) => $options.checkRadioValue($props.attrDefine, $event)) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "radio", + disabled: $props.attrDefine.readonly, + name: $props.attrDefine.id, + value: item.value, + autocomplete: "off", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event) + }, null, 8, _hoisted_1$e), [ + [vue.vModelRadio, $props.attrDefine.value] + ]), + vue.createElementVNode("div", null, vue.toDisplayString(item.text), 1) + ]); + }), 256)) + ], 6); + } + const PVFillTypeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$e], ["__scopeId", "data-v-64114ba5"]]); + const _DDeiCoreFillTypePropEditor = class _DDeiCoreFillTypePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVFillTypeEditor.name); + __publicField3(this, "plugins", [PVFillTypeEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreFillTypePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVFillTypeEditor.name]) { + for (let i2 in options[PVFillTypeEditor.name]) { + newOptions[i2] = options[PVFillTypeEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreFillTypePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreFillTypePropEditor; + } + static modify(fn) { + return _DDeiCoreFillTypePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreFillTypePropEditor, "defaultIns", new _DDeiCoreFillTypePropEditor(null)); + let DDeiCoreFillTypePropEditor = _DDeiCoreFillTypePropEditor; + const _sfc_main$d = { + name: "pv-font-size", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + value = isNaN(value) || value <= 0 ? null : value; + value = value > 300 ? 300 : value; + let hasEditSetted = false; + if (this.editor.ddInstance.stage.render.operateState == DDeiEnumOperateState.QUICK_EDITING) { + let shadowControl = this.editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + if (curSIdx != -1 && curEIdx != -1 && curSIdx <= curSIdx) { + shadowControl.setSptStyle(curSIdx, curEIdx, paths, value); + hasEditSetted = true; + } + } + } + if (!hasEditSetted) { + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVFontSizeEditor_vue_vue_type_style_index_0_scoped_b2ded6b2_lang = ""; + const _hoisted_1$d = ["step", "min", "max", "disabled"]; + const _hoisted_2$8 = { class: "textinput" }; + const _hoisted_3$6 = ["step", "min", "max", "disabled", "placeholder"]; + function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-fontsize": true, "ddei-pv-editor-fontsize--disabled": $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "range", + step: $props.attrDefine.step, + class: "range", + min: $props.attrDefine.min, + max: $props.attrDefine.max, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + autocomplete: "off" + }, null, 8, _hoisted_1$d), [ + [vue.vModelText, $props.attrDefine.value] + ]), + vue.createElementVNode("div", _hoisted_2$8, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "number", + step: $props.attrDefine.step, + min: $props.attrDefine.min, + max: $props.attrDefine.max, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + placeholder: $props.attrDefine.defaultValue, + autocomplete: "off" + }, null, 8, _hoisted_3$6), [ + [vue.vModelText, $props.attrDefine.value] + ]), + _cache[2] || (_cache[2] = vue.createElementVNode("div", { style: { "float": "left" } }, "px", -1)) + ]) + ], 6); + } + const PVFontSizeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$d], ["__scopeId", "data-v-b2ded6b2"]]); + const _DDeiCoreFontSizePropEditor = class _DDeiCoreFontSizePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVFontSizeEditor.name); + __publicField3(this, "plugins", [PVFontSizeEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreFontSizePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVFontSizeEditor.name]) { + for (let i2 in options[PVFontSizeEditor.name]) { + newOptions[i2] = options[PVFontSizeEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreFontSizePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreFontSizePropEditor; + } + static modify(fn) { + return _DDeiCoreFontSizePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreFontSizePropEditor, "defaultIns", new _DDeiCoreFontSizePropEditor(null)); + let DDeiCoreFontSizePropEditor = _DDeiCoreFontSizePropEditor; + const _sfc_main$c = { + name: "pv-image", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + async chooseFile() { + const arrFileHandle = await showOpenFilePicker({ + types: [{ + accept: { + "image/*": [".png", ".gif", ".jpeg", ".jpg", ".webp"] + } + }] + }); + let file = await arrFileHandle[0].getFile(); + let read = new FileReader(); + read.readAsDataURL(file); + read.onload = () => { + let result = read.result; + if (result.indexOf("data:image") != -1) { + this.attrDefine.value = result; + } + }; + }, + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + if (element.render) { + element.render.imgObj = null; + } + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVImageEditor_vue_vue_type_style_index_0_scoped_d7cc496a_lang = ""; + const _hoisted_1$c = { class: "textinput" }; + const _hoisted_2$7 = ["disabled", "placeholder", "name"]; + function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-image": true, "ddei-pv-editor-image--disabled": $props.attrDefine.readonly }) + }, [ + vue.createElementVNode("div", _hoisted_1$c, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "text", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + placeholder: $props.attrDefine.defaultValue, + name: "ddei-pv-editor-image-" + $props.attrDefine.code, + autocomplete: "off" + }, null, 8, _hoisted_2$7), [ + [vue.vModelText, $props.attrDefine.value] + ]), + (vue.openBlock(), vue.createElementBlock("svg", { + onClick: _cache[1] || (_cache[1] = ($event) => $props.attrDefine && !$props.attrDefine.readonly && $options.chooseFile()), + class: "icon", + "aria-hidden": "true" + }, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-link" }, null, -1) + ]))) + ]) + ], 2); + } + const PVImageEditor = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$c], ["__scopeId", "data-v-d7cc496a"]]); + const _DDeiCoreImagePropEditor = class _DDeiCoreImagePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVImageEditor.name); + __publicField3(this, "plugins", [PVImageEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreImagePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVImageEditor.name]) { + for (let i2 in options[PVImageEditor.name]) { + newOptions[i2] = options[PVImageEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreImagePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreImagePropEditor; + } + static modify(fn) { + return _DDeiCoreImagePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreImagePropEditor, "defaultIns", new _DDeiCoreImagePropEditor(null)); + let DDeiCoreImagePropEditor = _DDeiCoreImagePropEditor; + const _sfc_main$b = { + name: "pv-radio", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dataSource: null, + editBefore: null, + editAfter: null + }; + }, + computed: {}, + watch: {}, + created() { + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + this.getDataSource(this.attrDefine); + this.attrDefine.doCascadeDisplayByValue(); + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + /** + * 选中radio + */ + checkRadioValue(attrDefine, evt) { + let targetElement = evt.target; + if (targetElement.tagName == "DIV" && targetElement.className == "itembox") { + targetElement = targetElement.children[0]; + } else if (targetElement.tagName == "DIV") { + targetElement = targetElement.parentElement.children[0]; + } + if (attrDefine.value == targetElement.value) { + attrDefine.value = null; + } else { + attrDefine.value = targetElement.value; + } + }, + /** + * 获取数据源数据 + */ + getDataSource(attrDefine) { + let dataSources = DDeiEditorUtil.getDataSource(this.editor, this.attrDefine); + this.dataSource = dataSources; + return this.dataSource; + }, + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + this.attrDefine.doCascadeDisplayByValue(); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVRadioEditor_vue_vue_type_style_index_0_scoped_d06209f3_lang = ""; + const _hoisted_1$b = ["disabled", "name", "value"]; + function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-radio": true, "ddei-pv-editor-radio--disabled": $props.attrDefine.readonly }), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.dataSource, (item) => { + return vue.openBlock(), vue.createElementBlock("div", { + class: "itembox", + onClick: _cache[1] || (_cache[1] = ($event) => $options.checkRadioValue($props.attrDefine, $event)) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "radio", + disabled: $props.attrDefine.readonly, + name: $props.attrDefine.id, + value: item.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + autocomplete: "off" + }, null, 8, _hoisted_1$b), [ + [vue.vModelRadio, $props.attrDefine.value] + ]), + vue.createElementVNode("div", null, vue.toDisplayString(item.text), 1) + ]); + }), 256)) + ], 6); + } + const PVRadioEditor = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__scopeId", "data-v-d06209f3"]]); + const _DDeiCoreRadioPropEditor = class _DDeiCoreRadioPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVRadioEditor.name); + __publicField3(this, "plugins", [PVRadioEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreRadioPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVRadioEditor.name]) { + for (let i2 in options[PVRadioEditor.name]) { + newOptions[i2] = options[PVRadioEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreRadioPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreRadioPropEditor; + } + static modify(fn) { + return _DDeiCoreRadioPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreRadioPropEditor, "defaultIns", new _DDeiCoreRadioPropEditor(null)); + let DDeiCoreRadioPropEditor = _DDeiCoreRadioPropEditor; + const _sfc_main$a = { + name: "pv-range", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.valueChange = throttle(this.valueChange, 50); + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from((_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values()); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVRangeEditor_vue_vue_type_style_index_0_scoped_713ecc9b_lang = ""; + const _hoisted_1$a = ["step", "min", "max", "disabled"]; + const _hoisted_2$6 = { class: "textinput" }; + const _hoisted_3$5 = ["step", "min", "max", "disabled", "placeholder", "name"]; + function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-range": true, "ddei-pv-editor-range--disabled": $props.attrDefine.readonly }) + }, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "range", + step: $props.attrDefine.step, + class: "range", + min: $props.attrDefine.min, + max: $props.attrDefine.max, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly + }, null, 8, _hoisted_1$a), [ + [vue.vModelText, $props.attrDefine.value] + ]), + vue.createElementVNode("div", _hoisted_2$6, [ + vue.withDirectives(vue.createElementVNode("input", { + type: "number", + step: $props.attrDefine.step, + min: $props.attrDefine.min, + max: $props.attrDefine.max, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + placeholder: $props.attrDefine.defaultValue, + name: "ddei-pv-editor-range-" + $props.attrDefine.code, + autocomplete: "off" + }, null, 8, _hoisted_3$5), [ + [vue.vModelText, $props.attrDefine.value] + ]) + ]) + ], 2); + } + const PVRangeEditor = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__scopeId", "data-v-713ecc9b"]]); + const _DDeiCoreRangePropEditor = class _DDeiCoreRangePropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVRangeEditor.name); + __publicField3(this, "plugins", [PVRangeEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreRangePropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVRangeEditor.name]) { + for (let i2 in options[PVRangeEditor.name]) { + newOptions[i2] = options[PVRangeEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreRangePropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreRangePropEditor; + } + static modify(fn) { + return _DDeiCoreRangePropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreRangePropEditor, "defaultIns", new _DDeiCoreRangePropEditor(null)); + let DDeiCoreRangePropEditor = _DDeiCoreRangePropEditor; + const _sfc_main$9 = { + name: "pv-switch-checkbox", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + this.attrDefine.doCascadeDisplayByValue(); + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + doCheck(attrDefine, evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if (attrDefine == null ? void 0 : attrDefine.readonly) { + return; + } + let mds = []; + if (((_e2 = (_d2 = (_c2 = (_b2 = this.editor) == null ? void 0 : _b2.ddInstance) == null ? void 0 : _c2.stage) == null ? void 0 : _d2.selectedModels) == null ? void 0 : _e2.size) > 0) { + mds = Array.from( + (_i = (_h = (_g = (_f = this.editor) == null ? void 0 : _f.ddInstance) == null ? void 0 : _g.stage) == null ? void 0 : _h.selectedModels) == null ? void 0 : _i.values() + ); + } + if (((_j = this.attrDefine) == null ? void 0 : _j.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_k = this.attrDefine) == null ? void 0 : _k.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_m = (_l = this.attrDefine) == null ? void 0 : _l.mapping) == null ? void 0 : _m.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + if (attrDefine.value == null) { + if (attrDefine.defaultValue == 1) { + attrDefine.value = 0; + } else { + attrDefine.value = 1; + } + } else if (!attrDefine.value) { + attrDefine.value = 1; + } else { + attrDefine.value = 0; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + this.attrDefine.doCascadeDisplayByValue(); + (_n = this.editor.ddInstance.stage.selectedModels) == null ? void 0 : _n.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVSwitchCheckboxEditor_vue_vue_type_style_index_0_scoped_5a394c0d_lang = ""; + const _hoisted_1$9 = { class: "title" }; + function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-switch-excheckbox": true, "ddei-pv-editor-switch-excheckbox--disabled": $props.attrDefine.readonly }), + onClick: _cache[0] || (_cache[0] = ($event) => $options.doCheck($props.attrDefine, $event)), + style: vue.normalizeStyle({ "pointer-events": $props.attrDefine.readonly ? "none" : "" }) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": $props.attrDefine.value != 1, "chk_state_checked": $props.attrDefine.value == 1 || $props.attrDefine.value == null && $props.attrDefine.defaultValue == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString($props.attrDefine.value == 1 || $props.attrDefine.value == null && $props.attrDefine.defaultValue == 1 ? "✓" : ""), 1) + ], 2), + vue.createElementVNode("div", _hoisted_1$9, vue.toDisplayString($props.editor.i18n($props.attrDefine.name)), 1) + ], 6); + } + const PVSwitchCheckboxEditor = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__scopeId", "data-v-5a394c0d"]]); + const _DDeiCoreSwitchCheckboxPropEditor = class _DDeiCoreSwitchCheckboxPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "plugin"); + __publicField3(this, "name", PVSwitchCheckboxEditor.name); + __publicField3(this, "plugins", [PVSwitchCheckboxEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreSwitchCheckboxPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVSwitchCheckboxEditor.name]) { + for (let i2 in options[PVSwitchCheckboxEditor.name]) { + newOptions[i2] = options[PVSwitchCheckboxEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreSwitchCheckboxPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreSwitchCheckboxPropEditor; + } + static modify(fn) { + return _DDeiCoreSwitchCheckboxPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreSwitchCheckboxPropEditor, "defaultIns", new _DDeiCoreSwitchCheckboxPropEditor(null)); + let DDeiCoreSwitchCheckboxPropEditor = _DDeiCoreSwitchCheckboxPropEditor; + const _sfc_main$8 = { + name: "pv-textarea", + extends: null, + mixins: [], + props: { + //当前属性定义 + attrDefine: { + type: DDeiEditorArrtibute, + default: null + }, + //当前控件定义 + controlDefine: { + type: Object, + default: null + }, + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return {}; + }, + computed: {}, + watch: {}, + created() { + this.$watch("attrDefine.value", function(newVal, oldVal) { + this.valueChange(); + }); + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l; + let mds; + if (((_d2 = (_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.selectedModels) == null ? void 0 : _d2.size) > 0) { + mds = Array.from( + (_h = (_g = (_f = (_e2 = this.editor) == null ? void 0 : _e2.ddInstance) == null ? void 0 : _f.stage) == null ? void 0 : _g.selectedModels) == null ? void 0 : _h.values() + ); + } else { + mds = [(_j = (_i = this.editor) == null ? void 0 : _i.ddInstance) == null ? void 0 : _j.stage]; + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: mds, propName: (_l = this.attrDefine) == null ? void 0 : _l.code }, this.editor.ddInstance); + this.attrDefine.readonly = rsState == -1; + }, + methods: { + valueChange(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + if (!((_a3 = this.attrDefine) == null ? void 0 : _a3.model)) { + return; + } + if ((_b2 = this.attrDefine) == null ? void 0 : _b2.readonly) { + return; + } + let mds = []; + if (((_f = (_e2 = (_d2 = (_c2 = this.editor) == null ? void 0 : _c2.ddInstance) == null ? void 0 : _d2.stage) == null ? void 0 : _e2.selectedModels) == null ? void 0 : _f.size) > 0) { + mds = Array.from( + (_j = (_i = (_h = (_g = this.editor) == null ? void 0 : _g.ddInstance) == null ? void 0 : _h.stage) == null ? void 0 : _i.selectedModels) == null ? void 0 : _j.values() + ); + } + if (((_k = this.attrDefine) == null ? void 0 : _k.model) && mds.indexOf(this.attrDefine.model) == -1) { + mds.push(this.attrDefine.model); + } + if (this.editBefore && !this.editBefore( + DDeiEnumOperateType.EDIT, + mds, + (_l = this.attrDefine) == null ? void 0 : _l.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = []; + (_n = (_m = this.attrDefine) == null ? void 0 : _m.mapping) == null ? void 0 : _n.forEach((element) => { + paths.push(element); + }); + if (!((paths == null ? void 0 : paths.length) > 0)) { + paths = [this.attrDefine.code]; + } + let parser = this.attrDefine.getParser(); + let value = parser.parseValue(this.attrDefine.value); + DDeiUtil.setAttrValueByPath(this.attrDefine.model, paths, value); + if (this.attrDefine.model.modelType == "DDeiStage" || this.attrDefine.model.modelType == "DDeiLayer") { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [this.attrDefine.model.modelType], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + } else { + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value, + attrDefine: this.attrDefine + }, + evt, + true + ); + }); + } + this.editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", DDeiEnumOperateType.EDIT, { models: mds, propName: (_o = this.attrDefine) == null ? void 0 : _o.code }, this.editor.ddInstance, null); + } + } + }; + const PVTextAreaEditor_vue_vue_type_style_index_0_scoped_ac742ab1_lang = ""; + const _hoisted_1$8 = ["disabled", "placeholder"]; + function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", { + class: vue.normalizeClass({ "ddei-pv-editor-textarea": true, "ddei-pv-editor-textarea--disabled": $props.attrDefine.readonly }) + }, [ + vue.withDirectives(vue.createElementVNode("textarea", { + ref: "pvTextArea", + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $props.attrDefine.value = $event), + disabled: $props.attrDefine.readonly, + placeholder: $props.attrDefine.defaultValue + }, null, 8, _hoisted_1$8), [ + [vue.vModelText, $props.attrDefine.value] + ]) + ], 2); + } + const PVTextAreaEditor = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__scopeId", "data-v-ac742ab1"]]); + const _DDeiCoreTextAreaPropEditor = class _DDeiCoreTextAreaPropEditor extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", PVTextAreaEditor.name); + __publicField3(this, "plugins", [PVTextAreaEditor]); + } + getPropEditors(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = Object.assign({}, {}, _DDeiCoreTextAreaPropEditor.defaultIns.options); + if (fullConfig) { + if (fullConfig) { + if (options[PVTextAreaEditor.name]) { + for (let i2 in options[PVTextAreaEditor.name]) { + newOptions[i2] = options[PVTextAreaEditor.name][i2]; + } + } + } + } else { + for (let i2 in options) { + newOptions[i2] = options[i2]; + } + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let layouts = new _DDeiCoreTextAreaPropEditor(newOptions); + return layouts; + } + } + return _DDeiCoreTextAreaPropEditor; + } + static modify(fn) { + return _DDeiCoreTextAreaPropEditor.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTextAreaPropEditor, "defaultIns", new _DDeiCoreTextAreaPropEditor(null)); + let DDeiCoreTextAreaPropEditor = _DDeiCoreTextAreaPropEditor; + const _DDeiCorePVEditors = class _DDeiCorePVEditors extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiCoreTextPropEditor, + DDeiCoreAlignTypePropEditor, + DDeiCoreBorderDashComboPropEditor, + DDeiCoreBorderTypePropEditor, + DDeiCoreColorComboPropEditor, + DDeiCoreColorPropEditor, + DDeiCoreComboxPropEditor, + DDeiCoreExCheckboxPropEditor, + DDeiCoreFillTypePropEditor, + DDeiCoreFontSizePropEditor, + DDeiCoreImagePropEditor, + DDeiCoreRadioPropEditor, + DDeiCoreRangePropEditor, + DDeiCoreSwitchCheckboxPropEditor, + DDeiCoreTextAreaPropEditor + ]); + } + getPropEditors(editor) { + var _a3; + let pves = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getPropEditors(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getPropEditors(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + pves = pves.concat(ls); + } + }); + return pves; + } + static configuration(options) { + var _a3; + if (options) { + let pves = new _DDeiCorePVEditors(options); + for (let i2 = 0; i2 < ((_a3 = pves.plugins) == null ? void 0 : _a3.length); i2++) { + pves.plugins[i2] = pves.plugins[i2].configuration(options, true); + } + return pves; + } + return _DDeiCorePVEditors; + } + static modify(fn) { + return _DDeiCorePVEditors.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCorePVEditors, "defaultIns", new _DDeiCorePVEditors(null)); + let DDeiCorePVEditors = _DDeiCorePVEditors; + const _DDeiKeyActionAllSelect = class _DDeiKeyActionAllSelect extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-all-select"); + __publicField3(this, "defaultOptions", { + "keys": [ + { + ctrl: 1, + keys: "65", + editorState: DDeiEditorState.DESIGNING + } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionAllSelect.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionAllSelect.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionAllSelect.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionAllSelect(newOptions); + return panels; + } + } + return _DDeiKeyActionAllSelect; + } + static modify(fn) { + return _DDeiKeyActionAllSelect.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + let models = []; + if (((_a3 = ddInstance.stage.selectedModels) == null ? void 0 : _a3.size) > 0) { + models = Array.from((_b2 = ddInstance.stage.selectedModels) == null ? void 0 : _b2.values()); + } + if ((models == null ? void 0 : models.length) == 1 && models[0].baseModelType == "DDeiTable" && models[0].curRow != -1 && models[0].curCol != -1) { + for (let i2 = 0; i2 < models[0].rows.length; i2++) { + let rowObj = models[0].rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + rowObj[j2].setState(DDeiEnumControlState.SELECTED); + } + } + } else { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_SELECT_BEFORE", DDeiEnumOperateType.SELECT, { models: Array.from(layer2.models.values()) }, ddInstance, evt); + if (rsState == 0 || rsState == 1) { + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.push(DDeiEnumBusCommandType.ModelChangeSelect, { models: layer2.models, value: DDeiEnumControlState.SELECTED }, evt); + (_d2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _d2.push(DDeiEnumBusCommandType.StageChangeSelectModels, {}, evt); + } + } + (_e2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_f = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _f.executeAll(); + return true; + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionAllSelect, "defaultIns", new _DDeiKeyActionAllSelect()); + let DDeiKeyActionAllSelect = _DDeiKeyActionAllSelect; + const _DDeiKeyActionBrushData = class _DDeiKeyActionBrushData extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-brush-data"); + __publicField3(this, "defaultOptions", { + "keys": [ + { + ctrl: 1, + shift: 1, + keys: "67", + editorState: DDeiEditorState.DESIGNING + } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionBrushData.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionBrushData.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionBrushData.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionBrushData(newOptions); + return panels; + } + } + return _DDeiKeyActionBrushData; + } + static modify(fn) { + return _DDeiKeyActionBrushData.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + let stage2 = ddInstance.stage; + let editor = DDeiEditor.ACTIVE_INSTANCE; + let models = Array.from((_a3 = ddInstance.stage.selectedModels) == null ? void 0 : _a3.values()); + stage2.brushData = null; + if ((models == null ? void 0 : models.length) == 1) { + if (models[0].baseModelType == "DDeiTable") { + let table2 = models[0]; + let selectedCells = table2.getSelectedCells(); + let minMaxColRow = table2.getMinMaxRowAndCol(selectedCells); + stage2.brushData = []; + for (let i2 = minMaxColRow.minRow; i2 <= minMaxColRow.maxRow; i2++) { + let rowObj = table2.rows[i2]; + let rowData = []; + for (let j2 = minMaxColRow.minCol; j2 <= minMaxColRow.maxCol; j2++) { + let cellObj = rowObj[j2]; + rowData.push(cellObj); + } + stage2.brushData.push(rowData); + } + if (stage2.brushData.length > 0) { + editor.changeState(DDeiEditorState.DESIGNING); + editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + editor.bus.executeAll(); + } + } else { + if (editor.state == DDeiEditorState.QUICK_EDITING) { + let shadowControl = editor.ddInstance.stage.render.editorShadowControl; + if (shadowControl == null ? void 0 : shadowControl.render.isEditoring) { + let editorText = DDeiUtil.getEditorText(); + let curSIdx = -1; + let curEIdx = -1; + if (editorText) { + curSIdx = editorText.selectionStart; + curEIdx = editorText.selectionEnd; + } + stage2.brushDataText = cloneDeep(shadowControl.getSptAllStyles(curSIdx, curEIdx)); + } + delete stage2.brushData; + (_b2 = editor.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.ChangeCursor, { image: "cursor-brush" }); + (_c2 = editor.bus) == null ? void 0 : _c2.executeAll(); + } else { + let model = models[0]; + stage2.brushData = [model]; + delete stage2.brushDataText; + editor.changeState(DDeiEditorState.DESIGNING); + (_d2 = editor.bus) == null ? void 0 : _d2.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + (_e2 = editor.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.ChangeCursor, { image: "cursor-brush" }); + (_f = editor.bus) == null ? void 0 : _f.executeAll(); + } + return true; + } + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionBrushData, "defaultIns", new _DDeiKeyActionBrushData()); + let DDeiKeyActionBrushData = _DDeiKeyActionBrushData; + const _DDeiKeyActionCancelCompose = class _DDeiKeyActionCancelCompose extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-cancel-compose"); + __publicField3(this, "defaultOptions", { + "keys": [ + { + keys: "71", + ctrl: 1, + shift: 1, + editorState: DDeiEditorState.DESIGNING + } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelCompose.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCancelCompose.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCancelCompose.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelCompose(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelCompose; + } + static modify(fn) { + return _DDeiKeyActionCancelCompose.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + if (ddInstance && ddInstance.stage) { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + let selectedModels = layer2.getSelectedModels(); + if ((selectedModels == null ? void 0 : selectedModels.size) > 0) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelCancelMerge); + ddInstance.bus.executeAll(); + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCancelCompose, "defaultIns", new _DDeiKeyActionCancelCompose()); + let DDeiKeyActionCancelCompose = _DDeiKeyActionCancelCompose; + const _DDeiKeyActionCancelControlCreate = class _DDeiKeyActionCancelControlCreate extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-cancel-control-create"); + __publicField3(this, "defaultOptions", { + "keys": [ + { + keys: "27", + editorState: DDeiEditorState.CONTROL_CREATING + } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelControlCreate.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCancelControlCreate.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCancelControlCreate.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelControlCreate(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelControlCreate; + } + static modify(fn) { + return _DDeiKeyActionCancelControlCreate.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + var _a3; + if (editor.state == DDeiEditorState.CONTROL_CREATING) { + if (editor.creatingControls) { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + layer2.removeModels(editor.creatingControls); + editor.creatingControls = null; + layer2.opPoints = []; + if ((_a3 = layer2.opLine) == null ? void 0 : _a3.render) { + layer2.opLine.render.enableRefreshShape(); + } + delete layer2.opLine; + editor.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCancelControlCreate, "defaultIns", new _DDeiKeyActionCancelControlCreate()); + let DDeiKeyActionCancelControlCreate = _DDeiKeyActionCancelControlCreate; + const _DDeiKeyActionCancelCurrentAction = class _DDeiKeyActionCancelCurrentAction extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-cancel-current-action"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "27", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelCurrentAction.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCancelCurrentAction.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCancelCurrentAction.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelCurrentAction(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelCurrentAction; + } + static modify(fn) { + return _DDeiKeyActionCancelCurrentAction.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + var _a3, _b2; + if (editor.state == DDeiEditorState.DESIGNING) { + let stage2 = ddInstance.stage; + let layer2 = stage2.layers[stage2 == null ? void 0 : stage2.layerIndex]; + if (layer2) { + layer2.opPoints = []; + if ((_a3 = layer2.opLine) == null ? void 0 : _a3.render) { + layer2.opLine.render.enableRefreshShape(); + } + delete layer2.opLine; + (_b2 = layer2.shadowControls) == null ? void 0 : _b2.forEach((c) => { + c.destroyed(); + }); + layer2.shadowControls = []; + stage2.render.operateState = DDeiEnumOperateState.NONE; + ddInstance.bus.push(DDeiEnumBusCommandType.ClearTemplateVars, null, evt); + ddInstance.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds, null, evt); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + ddInstance.bus.executeAll(); + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCancelCurrentAction, "defaultIns", new _DDeiKeyActionCancelCurrentAction()); + let DDeiKeyActionCancelCurrentAction = _DDeiKeyActionCancelCurrentAction; + const _DDeiKeyActionCancelQuickEdit = class _DDeiKeyActionCancelQuickEdit extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-quickedit-cancel"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "27", editorState: DDeiEditorState.QUICK_EDITING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelQuickEdit.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCancelQuickEdit.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCancelQuickEdit.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelQuickEdit(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelQuickEdit; + } + static modify(fn) { + return _DDeiKeyActionCancelQuickEdit.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3; + if (ddInstance.stage.brushDataText) { + delete ddInstance.stage.brushDataText; + } else { + let editor = DDeiEditor.ACTIVE_INSTANCE; + let inputEle = editor.quickEditorInput; + inputEle.value = ""; + if ((_a3 = ddInstance.stage.render.editorShadowControl) == null ? void 0 : _a3.isShadowControl) { + ddInstance.stage.render.editorShadowControl.destroyed(); + } + ddInstance.stage.render.editorShadowControl = null; + editor.quickEditorModel = null; + delete ddInstance.stage.brushDataText; + editor.changeState(DDeiEditorState.DESIGNING); + editor.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["topmenu"] }); + editor.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCancelQuickEdit, "defaultIns", new _DDeiKeyActionCancelQuickEdit()); + let DDeiKeyActionCancelQuickEdit = _DDeiKeyActionCancelQuickEdit; + const _DDeiKeyActionCancelSelect = class _DDeiKeyActionCancelSelect extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-cancel-select"); + __publicField3(this, "defaultOptions", { + "keys": [ + //取消全选,500毫秒内,连续按两下esc键 + { keys: "27", times: 2, interval: 500, editorState: DDeiEditorState.DESIGNING, operateState: DDeiEnumOperateState.NONE } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelSelect.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCancelSelect.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCancelSelect.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelSelect(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelSelect; + } + static modify(fn) { + return _DDeiKeyActionCancelSelect.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3, _b2, _c2, _d2, _e2, _f; + if (ddInstance && ddInstance.stage) { + let models = Array.from((_a3 = ddInstance.stage.selectedModels) == null ? void 0 : _a3.values()); + if ((models == null ? void 0 : models.length) == 1 && models[0].baseModelType == "DDeiTable" && models[0].curRow != -1 && models[0].curCol != -1) { + for (let i2 = 0; i2 < models[0].rows.length; i2++) { + let rowObj = models[0].rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + rowObj[j2].setState(DDeiEnumControlState.DEFAULT); + } + } + models[0].curRow = -1; + models[0].curCol = -1; + models[0].tempDragCell = null; + } else { + let layer2 = ddInstance.stage.layers[ddInstance.stage.layerIndex]; + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, { container: layer2, curLevel: true }, evt); + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.push(DDeiEnumBusCommandType.StageChangeSelectModels, {}, evt); + (_d2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _d2.push(DDeiEnumBusCommandType.UpdateSelectorBounds, null, evt); + } + (_e2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_f = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _f.executeAll(); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCancelSelect, "defaultIns", new _DDeiKeyActionCancelSelect()); + let DDeiKeyActionCancelSelect = _DDeiKeyActionCancelSelect; + const _DDeiKeyActionClearBrushData = class _DDeiKeyActionClearBrushData extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-clear-brushdata"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "27", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionClearBrushData.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionClearBrushData.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionClearBrushData.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionClearBrushData(newOptions); + return panels; + } + } + return _DDeiKeyActionClearBrushData; + } + static modify(fn) { + return _DDeiKeyActionClearBrushData.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3, _b2; + if (ddInstance && ddInstance.stage) { + let stage2 = ddInstance.stage; + if (stage2) { + stage2.brushData = null; + (_a3 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _a3.push(DDeiEnumBusCommandType.ChangeCursor, { cursor: "default" }); + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionClearBrushData, "defaultIns", new _DDeiKeyActionClearBrushData()); + let DDeiKeyActionClearBrushData = _DDeiKeyActionClearBrushData; + const _DDeiKeyActionCloseDialog = class _DDeiKeyActionCloseDialog extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-close-dialog"); + __publicField3(this, "defaultOptions", { + "keys": [ + //ESC关闭弹出框 + { keys: "27", editorState: DDeiEditorState.PROPERTY_EDITING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCloseDialog.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCloseDialog.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCloseDialog.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCloseDialog(newOptions); + return panels; + } + } + return _DDeiKeyActionCloseDialog; + } + static modify(fn) { + return _DDeiKeyActionCloseDialog.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + DDeiEditorUtil.closeDialogs(DDeiEditorUtil.getEditorInsByDDei(ddInstance), ["bottom-dialog", "property-dialog", "top-dialog", "toolbox-dialog"]); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCloseDialog, "defaultIns", new _DDeiKeyActionCloseDialog()); + let DDeiKeyActionCloseDialog = _DDeiKeyActionCloseDialog; + const _DDeiKeyActionCompose = class _DDeiKeyActionCompose extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-compose"); + __publicField3(this, "defaultOptions", { + "keys": [ + //组合 + { keys: "71", ctrl: 1, editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCompose.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCompose.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCompose.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCompose(newOptions); + return panels; + } + } + return _DDeiKeyActionCompose; + } + static modify(fn) { + return _DDeiKeyActionCompose.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + if (ddInstance) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelMerge, null, evt); + ddInstance.bus.executeAll(); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCompose, "defaultIns", new _DDeiKeyActionCompose()); + let DDeiKeyActionCompose = _DDeiKeyActionCompose; + const _DDeiKeyActionCopy = class _DDeiKeyActionCopy extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-copy"); + __publicField3(this, "defaultOptions", { + "keys": [ + { ctrl: 1, keys: "67", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCopy.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCopy.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCopy.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCopy(newOptions); + return panels; + } + } + return _DDeiKeyActionCopy; + } + static modify(fn) { + return _DDeiKeyActionCopy.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + async action(evt, ddInstance, editor) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance.stage && this.isActive(document.activeElement)) { + let selectedControls = ddInstance.stage.selectedModels; + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_COPY_BEFORE", "COPY", { models: selectedControls }, ddInstance); + if (rsState == 0 || rsState == 1) { + if ((selectedControls == null ? void 0 : selectedControls.size) > 0) { + let models = Array.from(selectedControls.values()); + let sortedModels = []; + let modelLines = []; + let selectedSubAllModels = /* @__PURE__ */ new Map(); + models[0].pModel.midList.forEach((mid) => { + models.forEach((item) => { + if (item.id == mid) { + sortedModels.push(item); + if (item.baseModelType == "DDeiContainer") { + let subLines = item.getModelsByBaseType("DDeiLine"); + let subModels = item.getSubModels(null, 100); + if ((subModels == null ? void 0 : subModels.length) > 0) { + subModels.forEach((element) => { + selectedSubAllModels.set(element.id, element); + }); + } + if ((subLines == null ? void 0 : subLines.length) > 0) { + modelLines.push(...subLines); + } + } else if (item.baseModelType == "DDeiLine") { + modelLines.push(item); + } + } + }); + }); + let copyHtml = ""; + copyHtml += ''; + let jsonStr = "["; + let jsonLinksStr = "["; + let innerHTML = ""; + sortedModels == null ? void 0 : sortedModels.forEach((model, key) => { + var _a4; + if ((selectedControls == null ? void 0 : selectedControls.size) == 1) { + if (model.baseModelType == "DDeiTable") { + if (model.curRow == -1 && model.curCol == -1) { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + let html = model.render.getHTML(); + if (html) { + innerHTML += html; + } + } else { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + } else { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + (_a4 = model.linkModels) == null ? void 0 : _a4.forEach((lineLM) => { + if (lineLM.dm) { + if (!selectedControls.has(lineLM.dm.id) && !selectedSubAllModels.has(lineLM.dm.id)) { + let json = lineLM.dm.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + } + }); + }); + modelLines.forEach((line2) => { + var _a4; + let distModelLinks = (_a4 = ddInstance.stage) == null ? void 0 : _a4.getDistModelLinks(line2.id); + distModelLinks == null ? void 0 : distModelLinks.forEach((link2) => { + var _a5, _b3; + if ((selectedControls == null ? void 0 : selectedControls.has((_a5 = link2 == null ? void 0 : link2.sm) == null ? void 0 : _a5.id)) || (selectedSubAllModels == null ? void 0 : selectedSubAllModels.has((_b3 = link2 == null ? void 0 : link2.sm) == null ? void 0 : _b3.id))) { + jsonLinksStr += JSON.stringify(link2) + ","; + } + }); + }); + if (jsonStr.length > 1) { + jsonStr = jsonStr.substring(0, jsonStr.length - 1); + jsonStr += "]"; + ddInstance.stage.copyMode = "copy"; + jsonStr = '{"mode":"copy","data":' + jsonStr; + if (jsonLinksStr.length > 1) { + jsonLinksStr = jsonLinksStr.substring(0, jsonLinksStr.length - 1); + jsonLinksStr += "]"; + jsonStr += ' , "links":' + jsonLinksStr; + } + let ruleDisplay; + let ruleInit; + if (((_a3 = ddInstance.stage.ruler) == null ? void 0 : _a3.display) || ((_b2 = ddInstance.stage.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = ddInstance.stage.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = ddInstance.stage.ruler.display; + } else if (ddInstance.ruler != null && ddInstance.ruler != void 0) { + if (typeof ddInstance.ruler == "boolean") { + ruleDisplay = ddInstance.ruler ? 1 : 0; + } else { + ruleInit = ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(ddInstance.stage, "ruler.display", true); + } + if (ruleDisplay) { + let unit = DDeiModelArrtibuteValue.getAttrValueByState(ddInstance.stage, "ruler.unit", true, ruleInit); + jsonStr += ',"unit":"' + unit + '"'; + } + jsonStr += "}"; + } else { + jsonStr = ""; + } + copyHtml += jsonStr + ''; + copyHtml += "" + innerHTML + ""; + let blob = new Blob([copyHtml], { + type: "text/html" + }); + if (DDeiConfig.ALLOW_CLIPBOARD || DDeiConfig.ALLOW_CLIPBOARD == void 0) { + try { + let writeDatas = []; + writeDatas.push(new ClipboardItem({ "text/html": blob })); + let cbData = navigator.clipboard; + cbData.write(writeDatas).then(function() { + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + editor.bus.executeAll(); + editor.changeState(DDeiEditorState.DESIGNING); + }, function(e) { + console.error("复制失败" + e); + }); + } catch (e) { + DDeiConfig.ALLOW_CLIPBOARD = false; + } + } + if (!DDeiConfig.ALLOW_CLIPBOARD) { + window.DDEI_CLIPBOARD = blob; + } + return true; + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCopy, "defaultIns", new _DDeiKeyActionCopy()); + let DDeiKeyActionCopy = _DDeiKeyActionCopy; + const _DDeiKeyActionCopyImage = class _DDeiKeyActionCopyImage extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-copy-image"); + __publicField3(this, "defaultOptions", { + "keys": [ + { ctrl: 1, keys: "73", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCopyImage.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCopyImage.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCopyImage.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCopyImage(newOptions); + return panels; + } + } + return _DDeiKeyActionCopyImage; + } + static modify(fn) { + return _DDeiKeyActionCopyImage.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + if (DDeiConfig.ALLOW_CLIPBOARD || DDeiConfig.ALLOW_CLIPBOARD == void 0) { + if (ddInstance && ddInstance.stage) { + let selectedControls = ddInstance.stage.selectedModels; + let models = null; + if ((selectedControls == null ? void 0 : selectedControls.size) > 0) { + models = Array.from(selectedControls == null ? void 0 : selectedControls.values()); + } + this.copyToImage(editor, ddInstance, models); + } + } + } + copyToImage(editor, ddInstance, models) { + try { + let dataURL = ddInstance.stage.toImageDataUrl(models); + let blob = DDeiUtil.dataURLtoBlob(dataURL); + let cbData = navigator.clipboard; + let writeDatas = [new ClipboardItem({ [blob.type]: blob })]; + cbData.write(writeDatas).then(function() { + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + editor.bus.executeAll(); + editor.changeState(DDeiEditorState.DESIGNING); + }); + } catch (e) { + console.error(e); + DDeiConfig.ALLOW_CLIPBOARD = false; + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCopyImage, "defaultIns", new _DDeiKeyActionCopyImage()); + let DDeiKeyActionCopyImage = _DDeiKeyActionCopyImage; + const _DDeiKeyActionCut = class _DDeiKeyActionCut extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-cut"); + __publicField3(this, "defaultOptions", { + "keys": [ + { ctrl: 1, keys: "88", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCut.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionCut.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionCut.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCut(newOptions); + return panels; + } + } + return _DDeiKeyActionCut; + } + static modify(fn) { + return _DDeiKeyActionCut.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + async action(evt, ddInstance, editor) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance.stage) { + let selectedControls = ddInstance.stage.selectedModels; + if ((selectedControls == null ? void 0 : selectedControls.size) > 0) { + let models = Array.from(selectedControls.values()); + let sortedModels = []; + let modelLines = []; + let selectedSubAllModels = /* @__PURE__ */ new Map(); + models[0].pModel.midList.forEach((mid) => { + models.forEach((item) => { + if (item.id == mid) { + sortedModels.push(item); + if (item.baseModelType == "DDeiContainer") { + let subLines = item.getModelsByBaseType("DDeiLine"); + let subModels = item.getSubModels(null, 100); + if ((subModels == null ? void 0 : subModels.length) > 0) { + subModels.forEach((element) => { + selectedSubAllModels.set(element.id, element); + }); + } + if ((subLines == null ? void 0 : subLines.length) > 0) { + modelLines.push(...subLines); + } + } else if (item.baseModelType == "DDeiLine") { + modelLines.push(item); + } + } + }); + }); + let copyHtml = ""; + copyHtml += ''; + let jsonStr = "["; + let jsonLinksStr = "["; + let innerHTML = ""; + sortedModels == null ? void 0 : sortedModels.forEach((model, key) => { + if ((selectedControls == null ? void 0 : selectedControls.size) == 1) { + if (model.baseModelType == "DDeiTable") { + if (model.curRow == -1 && model.curCol == -1) { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + let html = model.render.getHTML(); + if (html) { + innerHTML += html; + } + } else { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + } else { + let json = model.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + }); + modelLines.forEach((line2) => { + var _a4, _b3; + let distModelLinks = (_a4 = ddInstance.stage) == null ? void 0 : _a4.getDistModelLinks(line2.id); + distModelLinks == null ? void 0 : distModelLinks.forEach((link2) => { + var _a5, _b4; + if ((selectedControls == null ? void 0 : selectedControls.has((_a5 = link2 == null ? void 0 : link2.sm) == null ? void 0 : _a5.id)) || (selectedSubAllModels == null ? void 0 : selectedSubAllModels.has((_b4 = link2 == null ? void 0 : link2.sm) == null ? void 0 : _b4.id))) { + jsonLinksStr += JSON.stringify(link2) + ","; + } + }); + (_b3 = line2.linkModels) == null ? void 0 : _b3.forEach((lineLM) => { + if (lineLM.dm) { + if (!selectedControls.has(lineLM.dm.id) && !selectedSubAllModels.has(lineLM.dm.id)) { + let json = lineLM.dm.toJSON(); + jsonStr += JSON.stringify(json) + ","; + } + } + }); + }); + if (jsonStr.length > 1) { + jsonStr = jsonStr.substring(0, jsonStr.length - 1); + jsonStr += "]"; + ddInstance.stage.copyMode = "cut"; + jsonStr = '{"mode":"cut","data":' + jsonStr; + if (jsonLinksStr.length > 1) { + jsonLinksStr = jsonLinksStr.substring(0, jsonLinksStr.length - 1); + jsonLinksStr += "]"; + jsonStr += ' , "links":' + jsonLinksStr; + } + let ruleDisplay; + let ruleInit; + if (((_a3 = ddInstance.stage.ruler) == null ? void 0 : _a3.display) || ((_b2 = ddInstance.stage.ruler) == null ? void 0 : _b2.display) == 0 || ((_c2 = ddInstance.stage.ruler) == null ? void 0 : _c2.display) == false) { + ruleDisplay = ddInstance.stage.ruler.display; + } else if (ddInstance.ruler != null && ddInstance.ruler != void 0) { + if (typeof ddInstance.ruler == "boolean") { + ruleDisplay = ddInstance.ruler ? 1 : 0; + } else { + ruleInit = ddInstance.ruler; + ruleDisplay = ruleInit.display; + } + } else { + ruleDisplay = DDeiModelArrtibuteValue.getAttrValueByState(ddInstance.stage, "ruler.display", true); + } + if (ruleDisplay) { + let unit = DDeiModelArrtibuteValue.getAttrValueByState(ddInstance.stage, "ruler.unit", true, ruleInit); + jsonStr += ',"unit":"' + unit + '"'; + } + jsonStr += "}"; + } else { + jsonStr = ""; + } + copyHtml += jsonStr + ''; + copyHtml += "" + innerHTML + ""; + let blob = new Blob([copyHtml], { + type: "text/html" + }); + if (DDeiConfig.ALLOW_CLIPBOARD || DDeiConfig.ALLOW_CLIPBOARD == void 0) { + try { + let writeDatas = []; + writeDatas.push(new ClipboardItem({ "text/html": blob })); + let cbData = navigator.clipboard; + cbData.write(writeDatas).then(function() { + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + editor.bus.executeAll(); + editor.changeState(DDeiEditorState.DESIGNING); + }, function(e) { + console.error("复制失败" + e); + }); + } catch (e) { + DDeiConfig.ALLOW_CLIPBOARD = false; + } + } + if (!DDeiConfig.ALLOW_CLIPBOARD) { + window.DDEI_CLIPBOARD = blob; + } + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionCut, "defaultIns", new _DDeiKeyActionCut()); + let DDeiKeyActionCut = _DDeiKeyActionCut; + const _DDeiKeyActionEnterQuickEdit = class _DDeiKeyActionEnterQuickEdit extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-quickedit-enter"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "13", shift: 1, editorState: DDeiEditorState.QUICK_EDITING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionEnterQuickEdit.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionEnterQuickEdit.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionEnterQuickEdit.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionEnterQuickEdit(newOptions); + return panels; + } + } + return _DDeiKeyActionEnterQuickEdit; + } + static modify(fn) { + return _DDeiKeyActionEnterQuickEdit.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3; + let editor = DDeiEditor.ACTIVE_INSTANCE; + (_a3 = editor.quickEditorInput) == null ? void 0 : _a3.enterValue(); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionEnterQuickEdit, "defaultIns", new _DDeiKeyActionEnterQuickEdit()); + let DDeiKeyActionEnterQuickEdit = _DDeiKeyActionEnterQuickEdit; + const _DDeiKeyActionMoveModels = class _DDeiKeyActionMoveModels extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-move-models"); + __publicField3(this, "defaultOptions", { + "keys": [ + //上 + { shift: 2, keys: "38", editorState: DDeiEditorState.DESIGNING }, + //下 + { shift: 2, keys: "40", editorState: DDeiEditorState.DESIGNING }, + //左 + { shift: 2, keys: "37", editorState: DDeiEditorState.DESIGNING }, + //右 + { shift: 2, keys: "39", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionMoveModels.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionMoveModels.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionMoveModels.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionMoveModels(newOptions); + return panels; + } + } + return _DDeiKeyActionMoveModels; + } + static modify(fn) { + return _DDeiKeyActionMoveModels.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance, editor) { + var _a3; + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + let selectedModels = ddInstance.stage.selectedModels; + let models = Array.from(selectedModels.values()); + if (models.length == 1 && models[0].baseModelType == "DDeiTable" && models[0].curRow != -1 && models[0].curCol != -1) { + if (evt.keyCode == 38) { + if (models[0].curRow > 0) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curRow--; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } else if (evt.keyCode == 40) { + if (models[0].curRow < models[0].rows.length - 1) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curRow++; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } else if (evt.keyCode == 37) { + if (models[0].curCol > 0) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curCol--; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } else if (evt.keyCode == 39) { + if (models[0].curCol < models[0].cols.length - 1) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curCol++; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } + } else if (editor.GLOBAL_KEYBOARD_ALIGN_ENABLE) { + let moveSize = 1; + let isShift = DDei.KEY_DOWN_STATE.get("shift"); + if (!isShift) { + moveSize = 10; + } + let moveOriginLines = []; + models.forEach((md) => { + if (md.baseModelType == "DDeiLine") { + moveOriginLines.push(md.id); + } + }); + let outRect = DDeiAbstractShape.getOutRectByPV(models); + let deltaX, deltaY; + if (evt.keyCode == 38) { + let mod = 0; + if (!isShift) { + if (outRect.y % moveSize > 0) { + mod = moveSize - outRect.y % moveSize; + } + } + deltaY = -moveSize + mod; + } else if (evt.keyCode == 40) { + let mod = 0; + if (!isShift) { + mod = Math.round(outRect.y) % moveSize; + } + deltaY = moveSize - mod; + } else if (evt.keyCode == 37) { + let mod = 0; + if (!isShift) { + if (outRect.x % moveSize > 0) { + mod = moveSize - outRect.x % moveSize; + } + } + deltaX = -moveSize + mod; + } else if (evt.keyCode == 39) { + let mod = 0; + if (!isShift) { + mod = Math.round(outRect.x) % moveSize; + } + deltaX = moveSize - mod; + } + let stage2 = ddInstance.stage; + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_CONTROL_DRAG_BEFORE", DDeiEnumOperateType.DRAG, { models }, ddInstance, evt); + if (rsState == 0 || rsState == 1) { + DDeiAbstractShape.moveModels(models, deltaX, deltaY, moveOriginLines); + stage2.layers[stage2.layerIndex].opPoints = []; + if ((_a3 = stage2.layers[stage2.layerIndex].opLine) == null ? void 0 : _a3.render) { + stage2.layers[stage2.layerIndex].opLine.render.enableRefreshShape(); + } + delete stage2.layers[stage2.layerIndex].opLine; + stage2.render.refreshJumpLine = false; + ddInstance.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + ddInstance.bus.push(DDeiEnumBusCommandType.ClearTemplateVars); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + ddInstance.bus.executeAll(); + DDeiEditorUtil.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.DRAG, { models }, ddInstance, evt); + } + return true; + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionMoveModels, "defaultIns", new _DDeiKeyActionMoveModels()); + let DDeiKeyActionMoveModels = _DDeiKeyActionMoveModels; + const _DDeiKeyActionPaste = class _DDeiKeyActionPaste extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-paste"); + __publicField3(this, "defaultOptions", { + "keys": [ + { ctrl: 1, keys: "86", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionPaste.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionPaste.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionPaste.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionPaste(newOptions); + return panels; + } + } + return _DDeiKeyActionPaste; + } + static modify(fn) { + return _DDeiKeyActionPaste.defaultIns.modify(fn); + } + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + if (ddInstance && ddInstance.stage && this.isActive(document.activeElement)) { + let modeName = DDeiUtil.getConfigValue("MODE_NAME", ddInstance); + let accessCreate = DDeiUtil.isAccess( + DDeiEnumOperateType.CREATE, + null, + null, + modeName, + ddInstance + ); + if (accessCreate) { + this.doPaste(evt, ddInstance); + return true; + } + } + return false; + } + /** + * 执行粘贴 + */ + async doPaste(evt, ddInstance) { + let blobData = null; + let type = null; + if (DDeiConfig.ALLOW_CLIPBOARD || DDeiConfig.ALLOW_CLIPBOARD == void 0) { + try { + let items = await navigator.clipboard.read(); + items[0].types.forEach((t) => { + if (!type) { + type = t; + } else if (t = "text/html") { + type = t; + } + }); + blobData = await items[0].getType(type); + DDeiConfig.ALLOW_CLIPBOARD = true; + } catch (e) { + DDeiConfig.ALLOW_CLIPBOARD = false; + } + } + if (!DDeiConfig.ALLOW_CLIPBOARD) { + type = "text/html"; + blobData = window.DDEI_CLIPBOARD; + } + if (blobData) { + switch (type) { + case "text/plain": { + let dataText = await new Response(blobData).text(); + this.textPaste(evt, ddInstance.stage, dataText); + break; + } + case "image/png": { + this.imagePaste(evt, ddInstance.stage, blobData); + break; + } + case "text/html": { + let dataText = await new Response(blobData).text(); + this.htmlPaste(evt, ddInstance.stage, dataText); + } + } + } + } + /** + * 粘贴图片 + */ + imagePaste(evt, stage2, blobData) { + let that = this; + let reader = new FileReader(); + reader.onload = function(e) { + let image = new Image(); + image.onload = function() { + var _a3, _b2, _c2, _d2, _e2; + let imgBase64 = e.target.result; + let layer2 = stage2.layers[stage2.layerIndex]; + let offsetX = stage2.ddInstance.render.inAreaX; + let offsetY = stage2.ddInstance.render.inAreaY; + let createControl = true; + let hasChange = false; + if (((_a3 = stage2.selectedModels) == null ? void 0 : _a3.size) == 1) { + let table2 = Array.from(stage2.selectedModels.values())[0]; + if (table2.baseModelType == "DDeiTable") { + let cells = table2.getSelectedCells(); + if (cells.length > 0) { + cells.forEach((cell) => { + cell.setImgBase64(imgBase64); + }); + hasChange = true; + createControl = false; + } + } else { + if (!table2.fill) { + table2.fill = { type: 2 }; + } + table2.fill.type = 2; + table2.fill.image = imgBase64; + hasChange = true; + createControl = false; + } + } else if (((_b2 = stage2.selectedModels) == null ? void 0 : _b2.size) > 1) { + let isSimpleControl = true; + (_c2 = stage2.selectedModels) == null ? void 0 : _c2.forEach((item) => { + if (isSimpleControl && (item.baseModelType == "DDeiTable" || item.baseModelType == "DDeiContainer")) { + isSimpleControl = false; + } + }); + if (isSimpleControl) { + createControl = false; + (_d2 = stage2.selectedModels) == null ? void 0 : _d2.forEach((item) => { + if (!item.fill) { + item.fill = { type: 2 }; + } + item.fill.type = 2; + item.fill.image = imgBase64; + }); + hasChange = true; + } + } + if (createControl) { + that.createNewImage(image, imgBase64, offsetX, offsetY, stage2, layer2, evt); + hasChange = true; + } + if (hasChange) { + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + } + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_e2 = stage2.ddInstance.bus) == null ? void 0 : _e2.executeAll(); + }; + image.src = e.target.result; + }; + reader.readAsDataURL(blobData); + } + /** + * 粘贴文本 + */ + textPaste(evt, stage2, textData) { + var _a3, _b2, _c2, _d2, _e2, _f; + let layer2 = stage2.layers[stage2.layerIndex]; + let offsetX = stage2.ddInstance.render.inAreaX; + let offsetY = stage2.ddInstance.render.inAreaY; + let createControl = true; + let hasChange = false; + if (((_a3 = stage2.selectedModels) == null ? void 0 : _a3.size) == 1) { + let table2 = Array.from(stage2.selectedModels.values())[0]; + if (table2.baseModelType == "DDeiTable") { + let cells = table2.getSelectedCells(); + if (cells.length > 0) { + cells.forEach((cell) => { + cell.text = textData; + }); + hasChange = true; + createControl = false; + } + } else if (table2.baseModelType != "DDeiContainer") { + table2.text = textData; + hasChange = true; + createControl = false; + } + } else if (((_b2 = stage2.selectedModels) == null ? void 0 : _b2.size) > 1) { + let isSimpleControl = true; + (_c2 = stage2.selectedModels) == null ? void 0 : _c2.forEach((item) => { + if (isSimpleControl && (item.baseModelType == "DDeiTable" || item.baseModelType == "DDeiContainer")) { + isSimpleControl = false; + } + }); + if (isSimpleControl) { + createControl = false; + (_d2 = stage2.selectedModels) == null ? void 0 : _d2.forEach((item) => { + item.text = textData; + }); + hasChange = true; + } + } + if (createControl) { + stage2.idIdx++; + hasChange = true; + let searchPaths = [ + "font.size", + "font.family" + ]; + let configAtrs = DDeiUtil.getAttrValueByConfig( + { modelCode: "100002" }, + searchPaths + ); + let size = DDeiUtil.measureTextSize(stage2.ddInstance, textData, configAtrs.get("font.family").data, configAtrs.get("font.size").data + 1); + let dataJson = { + id: "rect_" + stage2.idIdx, + modelCode: "100002" + }; + let ccDefine = DDeiUtil.getControlDefine(dataJson); + searchPaths.forEach((key) => { + if (configAtrs.get(key)) { + dataJson[key] = configAtrs.get(key).data; + } + if (ccDefine[key] != void 0 && ccDefine[key] != null) { + dataJson[key] = ccDefine[key]; + } + }); + for (let i2 in ccDefine == null ? void 0 : ccDefine.define) { + dataJson[i2] = cloneDeep(ccDefine == null ? void 0 : ccDefine.define[i2]); + } + dataJson.text = textData; + dataJson.border = { type: 0 }; + dataJson.fill = { type: 0 }; + dataJson.width = size.width; + dataJson.height = size.height; + delete dataJson.ovs; + delete dataJson.font; + let model = DDeiPolygon.initByJSON( + dataJson, + { currentStage: stage2 } + ); + model.initPVS(); + let moveMatrix2 = new Matrix3( + 1, + 0, + offsetX, + 0, + 1, + offsetY, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: layer2, models: [model] }, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + (_e2 = stage2.ddInstance.bus) == null ? void 0 : _e2.push(DDeiEnumBusCommandType.ModelChangeSelect, { models: [model], value: DDeiEnumControlState.SELECTED }, evt); + } + if (hasChange) { + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels, {}, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds, {}, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + } + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_f = stage2.ddInstance.bus) == null ? void 0 : _f.executeAll(); + } + /** + * 粘贴HTML + */ + htmlPaste(evt, stage2, textData) { + var _a3, _b2, _c2, _d2; + let layer2 = stage2.layers[stage2.layerIndex]; + let offsetX = stage2.ddInstance.render.inAreaX; + let offsetY = stage2.ddInstance.render.inAreaY; + let ddeiJson = null; + try { + let searchText = ''; + if (textData.indexOf(searchText) != -1) { + let startIndex = textData.indexOf(searchText) + searchText.length; + let endIndex = textData.indexOf(''); + let ddeiJsonStr = textData.substring(startIndex, endIndex); + if (ddeiJsonStr) { + ddeiJson = JSON.parse(ddeiJsonStr); + } + } + } catch (e) { + console.error(e); + } + let hasChange = false; + if (ddeiJson) { + let mode = ddeiJson.mode; + let jsonArray = ddeiJson.data; + let jsonLinkArray = ddeiJson.links; + if (!Array.isArray(jsonArray)) { + jsonArray = [jsonArray]; + } + let unit = ddeiJson.unit; + if (unit && unit != "px") { + jsonArray.forEach((model) => { + DDeiUtil.convertChildrenJsonUnit(model, stage2, unit); + }); + } + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(stage2.ddInstance, null, jsonArray); + if (!controlInitJSON) { + return; + } + let createControl = true; + if (((_a3 = stage2.selectedModels) == null ? void 0 : _a3.size) == 1) { + let model = Array.from(stage2.selectedModels.values())[0]; + if (model.baseModelType == "DDeiTable") { + let cells = model.getSelectedCells(); + if (cells.length > 0) { + cells.forEach((cell) => { + this.createControl(controlInitJSON, jsonLinkArray, offsetX, offsetY, stage2, cell, mode, evt); + }); + hasChange = true; + createControl = false; + } + } else if (model.baseModelType == "DDeiContainer") { + this.createControl(controlInitJSON, jsonLinkArray, offsetX, offsetY, stage2, model, mode, evt); + createControl = false; + hasChange = true; + } + } + if (createControl) { + this.createControl(controlInitJSON, jsonLinkArray, offsetX, offsetY, stage2, layer2, mode, evt); + hasChange = true; + } + if (hasChange) { + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.UpdatePaperArea); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels, {}, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds, {}, evt); + } + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_b2 = stage2.ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } else { + let tableJson = this.parseDomToJson(textData); + let createControl = true; + if (((_c2 = stage2.selectedModels) == null ? void 0 : _c2.size) == 1) { + let model = Array.from(stage2.selectedModels.values())[0]; + if (model.baseModelType == "DDeiTable") { + this.copyTableToTableCell(model, tableJson); + createControl = false; + hasChange = true; + } else if (model.baseModelType == "DDeiContainer") { + this.createTable(tableJson, offsetX, offsetY, stage2, model, evt); + createControl = false; + hasChange = true; + } + } + if (createControl) { + this.createTable(tableJson, offsetX, offsetY, stage2, layer2, evt); + hasChange = true; + } + if (hasChange) { + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + } + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_d2 = stage2.ddInstance.bus) == null ? void 0 : _d2.executeAll(); + } + } + /** + * 复制表格内容到另外一个表格的单元格中 + * @param table 表格 + * @param tableJson 表格单元格 + */ + copyTableToTableCell(table2, tableJson) { + var _a3, _b2; + let distCells = table2.getSelectedCells(); + if (distCells && distCells.length > 0 && tableJson) { + let sourceTable = tableJson; + let distTable = table2; + let sourceMinMaxRow = { minRow: 0, minCol: 0, maxRow: sourceTable.rows.length - 1, maxCol: sourceTable.rows[0].length - 1 }; + let distMinMaxRow = distTable.getMinMaxRowAndCol(distCells); + let distAreaAllSelected = distTable.isAllSelected(distMinMaxRow.minRow, distMinMaxRow.minCol, distMinMaxRow.maxRow, distMinMaxRow.maxCol); + if (!distAreaAllSelected) { + console.log("表格粘贴目标不是一个有效的连续区域"); + return; + } + let rowNum = 1; + let colNum = 1; + let sourceRowNum = sourceMinMaxRow.maxRow - sourceMinMaxRow.minRow + 1; + let distRowNum = distMinMaxRow.maxRow - distMinMaxRow.minRow + 1; + let sourceColNum = sourceMinMaxRow.maxCol - sourceMinMaxRow.minCol + 1; + let distColNum = distMinMaxRow.maxCol - distMinMaxRow.minCol + 1; + if (distRowNum == sourceRowNum) { + rowNum = sourceRowNum; + } else if (distRowNum > sourceRowNum) { + rowNum = distRowNum - distRowNum % sourceRowNum; + } else if (distRowNum < sourceRowNum) { + rowNum = sourceRowNum; + } + if (distColNum == sourceColNum) { + colNum = sourceColNum; + } else if (distColNum > sourceColNum) { + colNum = distColNum - distColNum % sourceColNum; + } else if (distColNum < sourceColNum) { + colNum = sourceColNum; + } + if (distTable.hasMergeCell(distMinMaxRow.minRow, distMinMaxRow.minCol, distMinMaxRow.minRow + rowNum - 1, distMinMaxRow.minCol + colNum - 1)) { + console.log("表格粘贴区域存在合并单元格"); + return; + } + if (distTable.rows.length <= distMinMaxRow.minRow + rowNum - 1 || distTable.cols.length <= distMinMaxRow.minCol + colNum - 1) { + console.log("表格粘贴区域超出表格所在最大区域"); + return; + } + let mergeCells = []; + for (let i2 = 0; i2 < rowNum && distMinMaxRow.minRow + i2 < distTable.rows.length; i2++) { + let offsetI = i2 % sourceRowNum; + for (let j2 = 0; j2 < colNum && distMinMaxRow.minCol + j2 < distTable.cols.length; j2++) { + let offsetJ = j2 % sourceColNum; + let sourceCell = sourceTable.rows[sourceMinMaxRow.minRow + offsetI][sourceMinMaxRow.minCol + offsetJ]; + let targetCell = distTable.rows[distMinMaxRow.minRow + i2][distMinMaxRow.minCol + j2]; + targetCell.text = sourceCell.text; + targetCell.textStyle = sourceCell.textStyle; + targetCell.font = sourceCell.font; + targetCell.border = sourceCell.border; + if (sourceCell.mergeRowNum > 1 || sourceCell.mergeColNum > 1) { + targetCell.mergeRowNum = sourceCell.mergeRowNum; + targetCell.mergeColNum = sourceCell.mergeColNum; + mergeCells[mergeCells.length] = targetCell; + } + (_b2 = (_a3 = targetCell.render) == null ? void 0 : _a3.renderCacheData) == null ? void 0 : _b2.clear(); + } + } + for (let i2 = 0; i2 < mergeCells.length; i2++) { + let mc = mergeCells[i2]; + let cells = distTable.getCellsByRect(mc.row, mc.col, mc.row + mc.mergeRowNum - 1, mc.col + mc.mergeColNum - 1); + distTable.mergeCells(cells); + } + } + } + /** + * 解析dom文本到json + * @param textData 文本 + * @returns json + */ + parseDomToJson(textData) { + let tableJson = { rows: [], modelCode: "100301" }; + let parser = new DOMParser(); + let doc = parser.parseFromString(textData, "text/html"); + if (doc) { + let tableEle = doc.body.children[0]; + let tableHeight = 0; + tableJson.id = "copytable"; + let tableWidth = 0; + let eleRows = tableEle.rows; + let mergeAreas = []; + let colSize = {}; + let rowSize = {}; + for (let i2 = 0; i2 < eleRows.length; i2++) { + let eleCells = eleRows[i2].cells; + if (!tableJson.rows[i2]) { + tableJson.rows[i2] = []; + } + let rowJson = tableJson.rows[i2]; + for (let j2 = 0; j2 < eleCells.length; j2++) { + let cellEle = eleCells[j2]; + let cellJson = { modelCode: "100302", row: i2, col: j2, text: cellEle.innerText, domRow: i2, domCol: j2 }; + rowJson.push(cellJson); + if (cellEle.rowSpan > 1) { + cellJson.mergeRowNum = parseInt(cellEle.rowSpan); + } + if (cellEle.colSpan > 1) { + cellJson.mergeColNum = parseInt(cellEle.colSpan); + } + if (cellJson.mergeRowNum > 1 || cellJson.mergeColNum > 1) { + if (!cellJson.mergeRowNum) { + cellJson.mergeRowNum = 1; + } + if (!cellJson.mergeColNum) { + cellJson.mergeColNum = 1; + } + mergeAreas.push(cellJson); + } + cellJson.font = {}; + if (cellEle.style.fontSize) { + cellJson.font.size = parseFloat(cellEle.style.fontSize); + } + if (cellEle.style.color) { + cellJson.font.color = DDeiUtil.getColor(cellEle.style.color); + } + if (cellEle.style.fontFamily) { + cellJson.font.family = cellEle.style.fontFamily; + } + cellJson.border = {}; + cellJson.border.top = {}; + cellJson.border.bottom = {}; + cellJson.border.left = {}; + cellJson.border.right = {}; + if (cellEle.style.borderTopColor) { + cellJson.border.top.color = cellEle.style.borderTopColor; + if (cellJson.border.top.color == "initial") { + delete cellJson.border.top.color; + } + } + if (cellEle.style.borderTopWidth) { + cellJson.border.top.width = parseFloat(cellEle.style.borderTopWidth); + if (isNaN(cellJson.border.top.width) || cellJson.border.top.width == "initial") { + delete cellJson.border.top.width; + } + } + if (cellEle.style.borderTopStyle) { + cellJson.border.top.style = cellEle.style.borderTopStyle; + } + if (cellEle.style.borderBottomColor) { + cellJson.border.bottom.color = cellEle.style.borderBottomColor; + if (cellJson.border.bottom.color == "initial") { + delete cellJson.border.bottom.color; + } + } + if (cellEle.style.borderBottomWidth) { + cellJson.border.bottom.width = parseFloat(cellEle.style.borderBottomWidth); + if (isNaN(cellJson.border.bottom.width) || cellJson.border.bottom.width == "initial") { + delete cellJson.border.bottom.width; + } + } + if (cellEle.style.borderBottomStyle) { + cellJson.border.bottom.style = cellEle.style.borderBottomStyle; + } + if (cellEle.style.borderLeftColor) { + cellJson.border.left.color = cellEle.style.borderLeftColor; + if (cellJson.border.left.color == "initial") { + delete cellJson.border.left.color; + } + } + if (cellEle.style.borderLeftWidth) { + cellJson.border.left.width = parseFloat(cellEle.style.borderLeftWidth); + if (isNaN(cellJson.border.left.width) || cellJson.border.left.width == "initial") { + delete cellJson.border.left.width; + } + } + if (cellEle.style.borderLeftStyle) { + cellJson.border.left.style = cellEle.style.borderLeftStyle; + } + if (cellEle.style.borderRightColor) { + cellJson.border.right.color = cellEle.style.borderRightColor; + if (cellJson.border.right.color == "initial") { + delete cellJson.border.right.color; + } + } + if (cellEle.style.borderRightWidth) { + cellJson.border.right.width = parseFloat(cellEle.style.borderRightWidth); + if (isNaN(cellJson.border.right.width) || cellJson.border.right.width == "initial") { + delete cellJson.border.right.width; + } + } + if (cellEle.style.borderRightStyle) { + cellJson.border.right.style = cellEle.style.borderRightStyle; + } + cellJson.fill = {}; + if (cellEle.style.backgroundColor) { + cellJson.fill.color = cellEle.style.backgroundColor; + } + cellJson.textStyle = {}; + if (cellEle.style.textAlign) { + if (cellEle.style.textAlign == "left") { + cellJson.textStyle.align = 1; + } else if (cellEle.style.textAlign == "center") { + cellJson.textStyle.align = 2; + } else if (cellEle.style.textAlign == "right") { + cellJson.textStyle.align = 3; + } + } + if (cellEle.style.verticalAlign) { + if (cellEle.style.verticalAlign == "top") { + cellJson.textStyle.valign = 1; + } else if (cellEle.style.verticalAlign == "middle") { + cellJson.textStyle.valign = 2; + } else if (cellEle.style.verticalAlign == "bottom") { + cellJson.textStyle.valign = 3; + } + } + if (cellEle.style.textDecoration == "underline") { + cellJson.textStyle.underline = "1"; + } + if (cellEle.style.textDecoration == "line-through") { + cellJson.textStyle.deleteline = "1"; + } + if (cellEle.style.whiteSpace == "nowrap") { + cellJson.textStyle.feed = "0"; + } else { + cellJson.textStyle.feed = "1"; + } + if (cellEle.style.fontStyle == "italic") { + cellJson.textStyle.italic = "1"; + } + if (cellEle.style.fontWeight) { + if (cellEle.style.fontWeight == "bold") { + cellJson.textStyle.bold = "1"; + } else if (parseInt(cellEle.style.fontWeight) > 400) + cellJson.textStyle.bold = "1"; + } + } + } + mergeAreas.forEach((mergeCell) => { + for (let i2 = 1; i2 <= mergeCell.mergeRowNum; i2++) { + for (let j2 = 1; j2 <= mergeCell.mergeColNum; j2++) { + if (!(i2 == 1 && j2 == 1)) { + tableJson.rows[mergeCell.row + i2 - 1].splice(mergeCell.col + j2 - 1, 0, { width: 0, height: 0, modelCode: "100302", mCell: mergeCell }); + for (let k = 0; k < tableJson.rows.length; k++) { + let rowObj = tableJson.rows[k]; + for (let l = 0; l < rowObj.length; l++) { + rowObj[l].row = k; + rowObj[l].col = l; + } + } + } + } + } + }); + for (let k = 0; k < tableJson.rows.length; k++) { + let rowObj = tableJson.rows[k]; + for (let l = 0; l < rowObj.length; l++) { + if ((rowObj[l].domRow || rowObj[l].domRow == 0) && (!rowObj[l].mergeRowNum || rowObj[l].mergeRowNum <= 1) && (!rowObj[l].mergeColNum <= 1 || rowObj[l].mergeColNum <= 1)) { + let rowHeight = null; + let domRowEle = tableEle.rows[rowObj[l].domRow]; + let domCellEle = tableEle.rows[rowObj[l].domRow].cells[rowObj[l].domCol]; + if (!rowSize["" + k]) { + if (domRowEle.style.height) { + rowHeight = parseFloat(domRowEle.style.height); + } else { + rowHeight = parseFloat(domRowEle.getAttribute("height")); + } + if (!isNaN(rowHeight)) { + rowSize["" + k] = rowHeight; + } + } + let colWidth = null; + if (!colSize["" + l]) { + if (domCellEle.style.width) { + colWidth = parseFloat(domCellEle.style.width); + } else { + colWidth = parseFloat(domCellEle.getAttribute("width")); + } + if (!isNaN(colWidth)) { + colSize["" + l] = colWidth; + } + } + } + } + } + for (let k = 0; k < tableJson.rows.length; k++) { + if (!rowSize[k]) { + let mCell = null; + let rowObj = tableJson.rows[k]; + for (let l = 0; l < rowObj.length; l++) { + if (rowObj[l].domRow || rowObj[l].domRow == 0) { + let domCellEle = tableEle.rows[rowObj[l].domRow].cells[rowObj[l].domCol]; + if (rowObj[l].mergeRowNum > 1 || rowObj[l].mergeColNum > 1) { + mCell = rowObj[l]; + } else if (!mCell && rowObj[l].mCell) { + mCell = rowObj[l].mCell; + } else if (!rowObj[l].mCell) { + let rowHeight = 0; + if (domCellEle.style.height) { + rowHeight = parseFloat(domCellEle.style.height); + } else { + rowHeight = parseFloat(domCellEle.getAttribute("height")); + } + if (!isNaN(rowHeight)) { + rowSize["" + k] = rowHeight; + } + break; + } + } + } + if (!rowSize[k] && mCell) { + let domCellEle = tableEle.rows[mCell.domRow].cells[mCell.domCol]; + let rowHeight = 0; + if (domCellEle.style.height) { + rowHeight = parseFloat(domCellEle.style.height); + } else { + rowHeight = parseFloat(domCellEle.getAttribute("height")); + } + if (!isNaN(rowHeight)) { + rowSize[k] = rowHeight / mCell.mergeRowNum; + } + } + } + } + for (let l = 0; l < tableJson.rows[0].length; l++) { + if (!colSize[l]) { + let mCell = null; + for (let k = 0; k < tableJson.rows.length; k++) { + if (tableJson.rows[k][l].domRow || tableJson.rows[k][l].domRow == 0) { + let domCellEle = tableEle.rows[tableJson.rows[k][l].domRow].cells[tableJson.rows[k][l].domCol]; + if (tableJson.rows[k][l].mergeRowNum > 1 || tableJson.rows[k][l].mergeColNum > 1) { + mCell = tableJson.rows[k][l]; + } else if (!mCell && tableJson.rows[k][l].mCell) { + mCell = tableJson.rows[k][l].mCell; + } else if (!tableJson.rows[k][l].mCell) { + let colWidth = 0; + if (domCellEle.style.width) { + colWidth = parseFloat(domCellEle.style.width); + } else { + colWidth = parseFloat(domCellEle.getAttribute("width")); + } + if (!isNaN(colWidth)) { + colSize["" + l] = colWidth; + } + break; + } + } + } + if (!colSize[l] && mCell) { + let domCellEle = tableEle.rows[mCell.domRow].cells[mCell.domCol]; + let colWidth = 0; + if (domCellEle.style.width) { + colWidth = parseFloat(domCellEle.style.width); + } else { + colWidth = parseFloat(domCellEle.getAttribute("width")); + } + if (!isNaN(colWidth)) { + colSize[l] = colWidth / mCell.mergeColNum; + } + } + } + } + for (let k = 0; k < tableJson.rows.length; k++) { + let rowObj = tableJson.rows[k]; + for (let l = 0; l < rowObj.length; l++) { + if (k == 0) { + if (isNaN(colSize["" + l])) { + colSize["" + l] = 40; + } + tableWidth += colSize["" + l]; + } + if (l == 0) { + if (isNaN(rowSize["" + k])) { + rowSize["" + k] = 20; + } + tableHeight += rowSize["" + k]; + } + if (rowObj[l].mergeRowNum > 1 || rowObj[l].mergeColNum > 1) { + let mHeight = 0; + let mWidth = 0; + for (let ki = 1; ki <= rowObj[l].mergeRowNum; ki++) { + if (isNaN(rowSize["" + (k + ki - 1)])) { + rowSize["" + (k + ki - 1)] = 20; + } + mHeight += rowSize["" + (k + ki - 1)]; + } + for (let ki = 1; ki <= rowObj[l].mergeColNum; ki++) { + if (isNaN(colSize["" + (l + ki - 1)])) { + colSize["" + (l + ki - 1)] = 40; + } + mWidth += colSize["" + (l + ki - 1)]; + } + rowObj[l].height = mHeight; + rowObj[l].width = mWidth; + rowObj[l].originWidth = colSize["" + l]; + rowObj[l].originHeight = rowSize["" + k]; + delete rowObj[l].domRow; + delete rowObj[l].domCol; + } else if (rowObj[l].mCell) { + rowObj[l].originWidth = colSize["" + l]; + rowObj[l].originHeight = rowSize["" + k]; + delete rowObj[l].mCell; + delete rowObj[l].domRow; + delete rowObj[l].domCol; + } else { + rowObj[l].width = colSize["" + l]; + rowObj[l].height = rowSize["" + k]; + delete rowObj[l].domRow; + delete rowObj[l].domCol; + } + } + } + tableJson.height = tableHeight; + tableJson.width = tableWidth; + return tableJson; + } + } + //创建新的表格 + createTable(tableJson, x2, y2, stage2, container2, evt) { + let layer2 = stage2.layers[stage2.layerIndex]; + let tableModel = DDeiTable.loadFromJSON(tableJson, { currentDdInstance: stage2.ddInstance, currentStage: stage2, currentLayer: layer2, currentContainer: container2 }); + stage2.idIdx++; + let newId = "table_" + stage2.idIdx; + tableModel.id = newId; + tableModel.x = x2 - tableModel.width / 2; + tableModel.y = y2 - tableModel.height / 2; + tableModel.resetCellData(); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: container2, models: [tableModel] }, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeSelect, { models: [tableModel], value: DDeiEnumControlState.SELECTED }, evt); + } + //创建新的控件 + createControl(jsonArray, jsonLinkArray = [], x2, y2, stage2, container2, mode, evt) { + let layer2 = stage2.layers[stage2.layerIndex]; + let models = []; + let oldIdMap = {}; + jsonArray.forEach((json) => { + if (mode == "copy") { + let copyModel = stage2.ddInstance.controlModelClasses[json.modelType].loadFromJSON(json, { currentDdInstance: stage2.ddInstance, currentStage: stage2, currentLayer: layer2, currentContainer: container2 }); + models.push(copyModel); + this.loadJsonModelToMap(copyModel, stage2, mode, oldIdMap); + this.changeModelId(stage2, copyModel); + } else if (mode == "cut") { + let model = stage2.getModelById(json.id); + models.push(model); + this.loadJsonModelToMap(model, stage2, mode, oldIdMap); + } + }); + let rsState = -1; + if (mode == "copy") { + rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_CREATE_BEFORE", DDeiEnumOperateType.CREATE, { models, links: jsonLinkArray }, stage2.ddInstance); + } else if (mode == "cut") { + rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_DRAG_BEFORE", DDeiEnumOperateType.DRAG, { models, links: jsonLinkArray }, stage2.ddInstance); + } + if (rsState != -1) { + let outRect = DDeiAbstractShape.getOutRectByPV(models); + outRect = { x: outRect.x + outRect.width / 2, y: outRect.y + outRect.height / 2 }; + if (mode == "copy") { + let appendExPvs = {}; + jsonLinkArray == null ? void 0 : jsonLinkArray.forEach((lk) => { + if (!lk.disabled) { + let sm = lk.sm; + let dm = lk.dm; + if (!sm && lk.smid) { + sm = oldIdMap[lk.smid]; + } + if (!dm && lk.dmid) { + dm = oldIdMap[lk.dmid]; + } + if (lk.smpath) { + let sourcePV = DDeiUtil.getDataByPathList(sm, lk.smpath); + let newId = "_" + DDeiUtil.getUniqueCode(); + sourcePV.id = newId; + if (!appendExPvs[sm.id]) { + appendExPvs[sm.id] = {}; + } + appendExPvs[sm.id][newId] = sourcePV; + lk.smpath = "exPvs." + newId; + } + let link2 = new DDeiLink({ + group: lk.group, + smpath: lk.smpath, + dmpath: lk.dmpath, + stage: stage2, + sm, + dm + }); + stage2.links.push(link2); + } + }); + for (let m in oldIdMap) { + let item = oldIdMap[m]; + item.exPvs = {}; + if (appendExPvs[item.id]) { + item.exPvs = appendExPvs[item.id]; + } + if (item.linkModels) { + let linkModels = /* @__PURE__ */ new Map(); + for (let key in item.linkModels) { + let lkItem = item.linkModels[key]; + if (lkItem == null ? void 0 : lkItem.dmid) { + let dm = oldIdMap[lkItem.dmid]; + if (dm) { + lkItem.dm = dm; + lkItem.depModel = item; + dm.depModel = item; + let lm = new DDeiModelLink(lkItem); + linkModels.set(dm.id, lm); + } + } + } + item.linkModels = linkModels; + } + } + stage2.refreshLinkCache(); + } + models.forEach((item) => { + let cpx = item.cpv.x; + let cpy = item.cpv.y; + let dx = outRect.x - cpx; + let dy = outRect.y - cpy; + let moveMatrix2 = new Matrix3( + 1, + 0, + x2 - dx - cpx, + 0, + 1, + y2 - dy - cpy, + 0, + 0, + 1 + ); + item.transVectors(moveMatrix2); + }); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: container2, models }, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeSelect, { models, value: DDeiEnumControlState.SELECTED }, evt); + if (mode == "copy") { + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyControlCreated, { + models + }); + } else if (mode == "cut") { + DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_DRAG_AFTER", DDeiEnumOperateType.DRAG, { models }, stage2.ddInstance, evt); + } + } + } + /** + * 修改模型ID + * @param stage 舞台 + * @param item 控件 + * @return 新的ID + */ + changeModelId(stage2, item) { + let newId = ""; + while (true) { + stage2.idIdx++; + if (item.id.indexOf("_") != -1) { + newId = item.id.substring(0, item.id.lastIndexOf("_")) + "_" + stage2.idIdx; + } else { + newId = item.id + "_cp_" + stage2.idIdx; + } + if (!stage2.getModelById(newId)) { + break; + } + } + item.oldId = item.id; + item.id = newId; + item.unicode = DDeiUtil.getUniqueCode(); + let accuContainer = item.getAccuContainer(); + if ((accuContainer == null ? void 0 : accuContainer.baseModelType) == "DDeiContainer") { + let midList = []; + let models = /* @__PURE__ */ new Map(); + accuContainer.midList.forEach((mid) => { + let model = accuContainer.models.get(mid); + let modelNewId = this.changeModelId(stage2, model); + models.set(modelNewId, model); + midList.push(modelNewId); + }); + accuContainer.models = models; + accuContainer.midList = midList; + } else if ((accuContainer == null ? void 0 : accuContainer.baseModelType) == "DDeiTable") { + for (let i2 = 0; i2 < accuContainer.rows; i2++) { + let rowObj = accuContainer.rows[i2]; + for (let j2 = 0; j2 < rowObj.length; j2++) { + let accuContainer2 = rowObj[j2].getAccuContainer(); + let midList = []; + let models = /* @__PURE__ */ new Map(); + accuContainer2.midList.forEach((mid) => { + let model = accuContainer2.models.get(mid); + let modelNewId = this.changeModelId(stage2, model); + models.set(modelNewId, model); + midList.push(modelNewId); + }); + accuContainer2.models = models; + accuContainer2.midList = midList; + } + } + } + return newId; + } + //创建新的图片控件 + createNewImage(image, imgBase64, x2, y2, stage2, container2, evt) { + stage2.idIdx++; + let rat1 = stage2.ddInstance.render.ratio; + let stageRatio2 = stage2.getStageRatio(); + let dataJson = { + id: "img_" + stage2.idIdx, + modelCode: "100002" + }; + let ccDefine = DDeiUtil.getControlDefine(dataJson); + for (let i2 in ccDefine == null ? void 0 : ccDefine.define) { + dataJson[i2] = cloneDeep(ccDefine == null ? void 0 : ccDefine.define[i2]); + } + dataJson.text = ""; + dataJson.border = { type: 0 }; + dataJson.fill = { type: 2 }; + dataJson.fill.image = imgBase64; + dataJson.width = image.width / rat1 / stageRatio2; + dataJson.height = image.height / rat1 / stageRatio2; + delete dataJson.ovs; + let model = DDeiPolygon.initByJSON( + dataJson, + { currentStage: stage2 } + ); + model.initPVS(); + let moveMatrix2 = new Matrix3( + 1, + 0, + x2, + 0, + 1, + y2, + 0, + 0, + 1 + ); + model.transVectors(moveMatrix2); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeContainer, { newContainer: container2, models: [model] }, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.CancelCurLevelSelectedModels, null, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.ModelChangeSelect, { models: [model], value: DDeiEnumControlState.SELECTED }, evt); + stage2.ddInstance.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + } + loadJsonModelToMap(json, stage2, mode, map) { + map[json.id] = json; + if (json.baseModelType == "DDeiContainer") { + json.models.forEach((item) => { + this.loadJsonModelToMap(item, stage2, mode, map); + }); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionPaste, "defaultIns", new _DDeiKeyActionPaste()); + let DDeiKeyActionPaste = _DDeiKeyActionPaste; + const _DDeiKeyActionPushModels = class _DDeiKeyActionPushModels extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-push-models"); + __publicField3(this, "defaultOptions", { + "keys": [ + //置于上层 + { ctrl: 1, keys: "38", editorState: DDeiEditorState.DESIGNING }, + //置于下层 + { ctrl: 1, keys: "40", editorState: DDeiEditorState.DESIGNING }, + //置于顶层 + { ctrl: 1, shift: 1, keys: "38", editorState: DDeiEditorState.DESIGNING }, + //置于底层 + { ctrl: 1, shift: 1, keys: "40", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionPushModels.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionPushModels.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionPushModels.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionPushModels(newOptions); + return panels; + } + } + return _DDeiKeyActionPushModels; + } + static modify(fn) { + return _DDeiKeyActionPushModels.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + let stageRender = ddInstance.stage.render; + let optContainer = stageRender.currentOperateContainer; + if (optContainer) { + let isCtrl = DDei.KEY_DOWN_STATE.get("ctrl"); + let isShift = DDei.KEY_DOWN_STATE.get("shift"); + if (isCtrl && isShift) { + if (evt.keyCode == 38) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelPush, { container: optContainer, type: "top" }, evt); + } else if (evt.keyCode == 40) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelPush, { container: optContainer, type: "bottom" }, evt); + } + } else if (isCtrl) { + if (evt.keyCode == 38) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelPush, { container: optContainer, type: "up" }, evt); + } else if (evt.keyCode == 40) { + ddInstance.bus.push(DDeiEnumBusCommandType.ModelPush, { container: optContainer, type: "down" }, evt); + } + } + } + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + ddInstance.bus.executeAll(); + return true; + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionPushModels, "defaultIns", new _DDeiKeyActionPushModels()); + let DDeiKeyActionPushModels = _DDeiKeyActionPushModels; + const _DDeiKeyActionNewRowQuickEdit = class _DDeiKeyActionNewRowQuickEdit extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-quickedit-newrow"); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionNewRowQuickEdit.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionNewRowQuickEdit.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionNewRowQuickEdit.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionNewRowQuickEdit(newOptions); + return panels; + } + } + return _DDeiKeyActionNewRowQuickEdit; + } + static modify(fn) { + return _DDeiKeyActionNewRowQuickEdit.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + let editor = DDeiEditor.ACTIVE_INSTANCE; + editor.quickEditorInput.value += "\n"; + editor.quickEditorInput.selectionEnd = editor.quickEditorInput.value.length; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionNewRowQuickEdit, "defaultIns", new _DDeiKeyActionNewRowQuickEdit()); + let DDeiKeyActionNewRowQuickEdit = _DDeiKeyActionNewRowQuickEdit; + const _DDeiKeyActionRemoveModels = class _DDeiKeyActionRemoveModels extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-remove-models"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "8", editorState: DDeiEditorState.DESIGNING }, + { keys: "46", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionRemoveModels.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionRemoveModels.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionRemoveModels.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionRemoveModels(newOptions); + return panels; + } + } + return _DDeiKeyActionRemoveModels; + } + static modify(fn) { + return _DDeiKeyActionRemoveModels.defaultIns.modify(fn); + } + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3; + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + let stageRender = ddInstance.stage.render; + let optContainer = stageRender.currentOperateContainer; + if (optContainer) { + let selectedModels = optContainer.getSelectedModels(); + let rsState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_DEL_BEFORE", DDeiEnumOperateType.DEL, { models: Array.from(selectedModels.values()) }, ddInstance, evt); + if (rsState == 0 || rsState == 1) { + let models = Array.from(selectedModels.values()); + models[0].layer.opPoints = []; + if ((_a3 = models[0].layer.opLine) == null ? void 0 : _a3.render) { + models[0].layer.opLine.render.enableRefreshShape(); + } + delete models[0].layer.opLine; + optContainer.removeModels(models, true); + optContainer.cascadeRemoveSelf(); + ddInstance.bus.push(DDeiEnumBusCommandType.UpdatePaperArea); + ddInstance.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + ddInstance.bus.push(DDeiEnumBusCommandType.UpdateSelectorBounds); + ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy); + ddInstance.bus.push(DDeiEnumBusCommandType.ChangeStageWPV, { + dragObj: { dx: 0, dy: 0 }, + x: 0, + y: 0 + }); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + return true; + } + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionRemoveModels, "defaultIns", new _DDeiKeyActionRemoveModels()); + let DDeiKeyActionRemoveModels = _DDeiKeyActionRemoveModels; + const _DDeiKeyActionReRevoke = class _DDeiKeyActionReRevoke extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-re-revoke"); + __publicField3(this, "defaultOptions", { + "keys": [ + //反撤销 + { ctrl: 1, keys: "89", editorState: DDeiEditorState.DESIGNING }, + { ctrl: 1, shift: 1, keys: "90", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionReRevoke.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionReRevoke.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionReRevoke.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionReRevoke(newOptions); + return panels; + } + } + return _DDeiKeyActionReRevoke; + } + static modify(fn) { + return _DDeiKeyActionReRevoke.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + let editor = DDeiEditor.ACTIVE_INSTANCE; + if (this.isActive(document.activeElement)) { + let histype = DDeiEditorUtil.getConfigValue("HISTROY_LEVEL", editor); + if (histype == "file") { + if ((editor == null ? void 0 : editor.files.length) > 0 && (editor.currentFileIndex == 0 || editor.currentFileIndex)) { + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if ((file == null ? void 0 : file.active) == DDeiActiveType.ACTIVE) { + let hisData = file.reRevokeHistroyData(); + if (hisData == null ? void 0 : hisData.data) { + let jsonData = JSON.parse(hisData == null ? void 0 : hisData.data); + if (jsonData) { + let ddInstance2 = editor == null ? void 0 : editor.ddInstance; + ddInstance2.stage.destroyRender(); + let hisFile = DDeiFile.loadFromJSON(jsonData, { + currentDdInstance: ddInstance2 + }); + if (hisData.isNew == true) { + file.state = DDeiFileState.NONE; + } else { + file.state = DDeiFileState.MODIFY; + } + file.name = hisFile == null ? void 0 : hisFile.name; + file.desc = hisFile == null ? void 0 : hisFile.desc; + file.lastUpdateTime = hisFile == null ? void 0 : hisFile.lastUpdateTime; + file.sheets = hisFile == null ? void 0 : hisFile.sheets; + if (file && file.sheets && ddInstance2) { + file.changeSheet(hisFile.currentSheetIndex); + let stage2 = file.sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance2; + ddInstance2.stage = stage2; + stage2.initRender(); + ddInstance2.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts); + ddInstance2.bus.executeAll(); + return true; + } + } + } + } + } + } else if (histype == "stage") { + if (ddInstance && ddInstance.stage) { + let hisData = ddInstance.stage.reRevokeHistroyData(); + if (hisData == null ? void 0 : hisData.data) { + let jsonData = JSON.parse(hisData == null ? void 0 : hisData.data); + if (jsonData) { + ddInstance.stage.destroyRender(); + let tempData = { "currentDdInstance": ddInstance, "currentStage": ddInstance.stage }; + tempData[ddInstance.stage.id] = ddInstance.stage; + let layers = []; + jsonData.layers.forEach((layer2) => { + let model = DDeiLayer.loadFromJSON(layer2, tempData); + layers.push(model); + }); + ddInstance.stage.idIdx = jsonData.idIdx; + ddInstance.stage.layers = layers; + ddInstance.stage.initRender(); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts); + ddInstance.bus.executeAll(); + return true; + } + } + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionReRevoke, "defaultIns", new _DDeiKeyActionReRevoke()); + let DDeiKeyActionReRevoke = _DDeiKeyActionReRevoke; + const _DDeiKeyActionRevoke = class _DDeiKeyActionRevoke extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-revoke"); + __publicField3(this, "defaultOptions", { + "keys": [ + //撤销 + { ctrl: 1, keys: "90", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionRevoke.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionRevoke.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionRevoke.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionRevoke(newOptions); + return panels; + } + } + return _DDeiKeyActionRevoke; + } + static modify(fn) { + return _DDeiKeyActionRevoke.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + let editor = DDeiEditor.ACTIVE_INSTANCE; + if (this.isActive(document.activeElement)) { + let histype = DDeiEditorUtil.getConfigValue("HISTROY_LEVEL", editor); + if (histype == "file") { + let editor2 = DDeiEditor.ACTIVE_INSTANCE; + if ((editor2 == null ? void 0 : editor2.files.length) > 0 && (editor2.currentFileIndex == 0 || editor2.currentFileIndex)) { + let file = editor2 == null ? void 0 : editor2.files[editor2.currentFileIndex]; + if ((file == null ? void 0 : file.active) == DDeiActiveType.ACTIVE) { + let hisData = file.revokeHistroyData(); + if (hisData == null ? void 0 : hisData.data) { + let jsonData = JSON.parse(hisData == null ? void 0 : hisData.data); + if (jsonData) { + let ddInstance2 = editor2 == null ? void 0 : editor2.ddInstance; + ddInstance2.stage.destroyRender(); + let hisFile = DDeiFile.loadFromJSON(jsonData, { + currentDdInstance: ddInstance2 + }); + if (hisData.isNew == true) { + file.state = DDeiFileState.NONE; + } else { + file.state = DDeiFileState.MODIFY; + } + file.name = hisFile == null ? void 0 : hisFile.name; + file.desc = hisFile == null ? void 0 : hisFile.desc; + file.lastUpdateTime = hisFile == null ? void 0 : hisFile.lastUpdateTime; + file.sheets = hisFile == null ? void 0 : hisFile.sheets; + if (file && file.sheets && ddInstance2) { + file.changeSheet(hisFile.currentSheetIndex); + let stage2 = file.sheets[file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance2; + ddInstance2.stage = stage2; + stage2.initRender(); + ddInstance2.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance2.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts); + ddInstance2.bus.executeAll(); + return true; + } + } + } + } + } + } else if (histype == "stage") { + if (ddInstance && ddInstance.stage) { + let hisData = ddInstance.stage.revokeHistroyData(); + if (hisData == null ? void 0 : hisData.data) { + let jsonData = JSON.parse(hisData == null ? void 0 : hisData.data); + if (jsonData) { + ddInstance.stage.destroyRender(); + let tempData = { "currentDdInstance": ddInstance, "currentStage": ddInstance.stage }; + tempData[ddInstance.stage.id] = ddInstance.stage; + let layers = []; + jsonData.layers.forEach((layer2) => { + let model = DDeiLayer.loadFromJSON(layer2, tempData); + layers.push(model); + }); + ddInstance.stage.idIdx = jsonData.idIdx; + ddInstance.stage.layers = layers; + ddInstance.stage.initRender(); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts); + ddInstance.bus.executeAll(); + return true; + } + } + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionRevoke, "defaultIns", new _DDeiKeyActionRevoke()); + let DDeiKeyActionRevoke = _DDeiKeyActionRevoke; + const _DDeiKeyActionSaveFile = class _DDeiKeyActionSaveFile extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-save-file"); + __publicField3(this, "defaultOptions", { + "keys": [ + //保存 + { ctrl: 1, keys: "83" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionSaveFile.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionSaveFile.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionSaveFile.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionSaveFile(newOptions); + return panels; + } + } + return _DDeiKeyActionSaveFile; + } + static modify(fn) { + return _DDeiKeyActionSaveFile.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3, _b2; + (_a3 = ddInstance.bus) == null ? void 0 : _a3.push(DDeiEditorEnumBusCommandType.SaveFile, {}, evt); + (_b2 = ddInstance.bus) == null ? void 0 : _b2.executeAll(); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionSaveFile, "defaultIns", new _DDeiKeyActionSaveFile()); + let DDeiKeyActionSaveFile = _DDeiKeyActionSaveFile; + const _DDeiKeyActionStartQuickEdit = class _DDeiKeyActionStartQuickEdit extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-quickedit-start"); + __publicField3(this, "defaultOptions", { + "keys": [ + //F2快捷编辑 + { keys: "113", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionStartQuickEdit.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionStartQuickEdit.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionStartQuickEdit.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionStartQuickEdit(newOptions); + return panels; + } + } + return _DDeiKeyActionStartQuickEdit; + } + static modify(fn) { + return _DDeiKeyActionStartQuickEdit.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + isActive(element) { + if (!element) { + return true; + } + if (element.tagName == "BODY" || element.tagName == "HEAD" || element.tagName == "HTML") { + return true; + } + return false; + } + action(evt, ddInstance) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + if (ddInstance && ddInstance.stage) { + if (this.isActive(document.activeElement)) { + if (((_b2 = (_a3 = ddInstance.stage) == null ? void 0 : _a3.selectedModels) == null ? void 0 : _b2.size) == 1) { + let model = Array.from((_c2 = ddInstance.stage) == null ? void 0 : _c2.selectedModels.values())[0]; + let editor = DDeiEditor.ACTIVE_INSTANCE; + if (editor.state == DDeiEditorState.DESIGNING) { + let rsState1 = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_VIEW", DDeiEnumOperateType.VIEW, { models: [model] }, ddInstance, null); + if (rsState1 == 0 || rsState1 == 1) { + let editState = DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_BEFORE", DDeiEnumOperateType.EDIT, { models: [model] }, ddInstance, null); + if (editState == 0 || editState == 1) { + let stage2 = ddInstance.stage; + let stageRatio2 = stage2.getStageRatio(); + if (model == null ? void 0 : model.render) { + let ex = -1; + let ey = -1; + if (evt.offsetX || evt.offsetY) { + ex = evt.offsetX; + ey = evt.offsetY; + ex /= window.remRatio; + ey /= window.remRatio; + ex -= stage2.wpv.x; + ey -= stage2.wpv.y; + ex = ex / stageRatio2; + ey = ey / stageRatio2; + } + let realModel = null; + let posPoint = null; + let posType; + let isCreateRealModel = false; + let isLineLM = false; + if (model.baseModelType == "DDeiLine") { + posType = 3; + if (evt.offsetX || evt.offsetY) { + let cdist = DDeiUtil.getPointDistance(model.pvs[0].x, model.pvs[1].y, model.pvs[model.pvs.length - 1].x, model.pvs[model.pvs.length - 1].y); + let sdist = DDeiUtil.getPointDistance(ex, ey, model.pvs[0].x, model.pvs[0].y); + let edist = DDeiUtil.getPointDistance(ex, ey, model.pvs[model.pvs.length - 1].x, model.pvs[model.pvs.length - 1].y); + if (sdist < cdist / 5) { + posType = 1; + } else if (edist < cdist / 5) { + posType = 2; + } + } + if (posType == 1) { + posPoint = model.startPoint; + } else if (posType == 2) { + posPoint = model.endPoint; + } else if (posType == 3) { + let pi = Math.floor(model.pvs.length / 2); + if (model.pvs.length % 3 == 0) { + posPoint = model.pvs[pi]; + } else { + posPoint = { + x: (model.pvs[pi - 1].x + model.pvs[pi].x) / 2, + y: (model.pvs[pi - 1].y + model.pvs[pi].y) / 2 + }; + } + } + model.linkModels.forEach((lm) => { + if (lm.type == posType) { + realModel = lm.dm; + } + }); + if (!realModel) { + isCreateRealModel = true; + isLineLM = true; + } + } else { + model.linkModels.forEach((lm) => { + posType = lm.type; + realModel = lm.dm; + }); + if (!realModel) { + let modelDefine = DDeiEditorUtil.getControlDefine(model); + if ((_e2 = (_d2 = modelDefine == null ? void 0 : modelDefine.define) == null ? void 0 : _d2.sample) == null ? void 0 : _e2.depPos) { + let depPos = modelDefine.define.sample.depPos; + let essBounds = model.essBounds; + let dmEssBounds = { width: 80, height: 18 }; + posType = depPos.type; + if (depPos.type == 5) { + posPoint = model.cpv; + } else if (depPos.type == 6) { + posPoint = { + x: model.cpv.x, + y: essBounds.y - dmEssBounds.height / 2 + }; + } else if (depPos.type == 7) { + posPoint = { + x: essBounds.x1 + dmEssBounds.width / 2, + y: model.cpv.y + }; + } else if (depPos.type == 8) { + posPoint = { + x: model.cpv.x, + y: essBounds.y1 + dmEssBounds.height / 2 + }; + } else if (depPos.type == 9) { + posPoint = { + x: essBounds.x - dmEssBounds.width / 2, + y: model.cpv.y + }; + } + isCreateRealModel = true; + } + } + } + if (isCreateRealModel) { + let dataJson = { + modelCode: "100200" + }; + let controlDefine = DDeiUtil.getControlDefine(dataJson); + for (let i2 in controlDefine == null ? void 0 : controlDefine.define) { + dataJson[i2] = cloneDeep(controlDefine.define[i2]); + } + dataJson["id"] = "lsm_" + stage2.idIdx++; + dataJson["width"] = 80; + dataJson["height"] = 28; + dataJson["font"] = { size: 12 }; + dataJson["textStyle"] = { paddingWeight: 0 }; + if (isLineLM) { + dataJson["fill"] = { type: 1, color: "white" }; + } + for (let i2 in dataJson) { + let value = dataJson[i2]; + if (typeof value == "string") { + dataJson[i2] = editor.i18n(value); + } + } + (_f = dataJson.composes) == null ? void 0 : _f.forEach((compose) => { + for (let i2 in compose) { + let value = compose[i2]; + if (typeof value == "string") { + compose[i2] = editor.i18n(value); + } + } + }); + realModel = ddInstance.controlModelClasses["DDeiPolygon"].initByJSON( + dataJson, + { currentStage: stage2, currentDdInstance: ddInstance, currentContainer: model.pModel } + ); + let move1Matrix = new Matrix3( + 1, + 0, + posPoint.x, + 0, + 1, + posPoint.y, + 0, + 0, + 1 + ); + realModel.transVectors(move1Matrix); + model.layer.addModel(realModel, false); + realModel.initRender(); + let lineLink = new DDeiModelLink({ + depModel: model, + type: posType, + dm: realModel, + dx: 0, + dy: 0 + }); + realModel.depModel = model; + model.linkModels.set(realModel.id, lineLink); + } + if (realModel) { + model = realModel; + editor.quickEditorModel = model; + } + model = DDeiAbstractShape.findBottomComponseByArea(model, ex, ey); + let fillArea = model.textArea; + if ((fillArea == null ? void 0 : fillArea.length) > 0) { + editor.quickEditorModel = model; + let canvasPos = DDeiUtil.getDomAbsPosition(ddInstance.render.canvas); + let inputEle = DDeiUtil.getEditorText(); + let rotate2 = model.rotate; + let stageRatio22 = ddInstance.stage.getStageRatio(); + let pos = new Vector3(model.pvs[0].x, model.pvs[0].y, 1); + if (rotate2 != 0) { + let pvc = new Vector3(model.cpv.x, model.cpv.y, 1); + let angle2 = (rotate2 * DDeiConfig.ROTATE_UNIT).toFixed(4); + let move1Matrix = new Matrix3( + 1, + 0, + -pvc.x, + 0, + 1, + -pvc.y, + 0, + 0, + 1 + ); + let rotateMatrix = new Matrix3( + Math.cos(angle2), + Math.sin(angle2), + 0, + -Math.sin(angle2), + Math.cos(angle2), + 0, + 0, + 0, + 1 + ); + let move2Matrix = new Matrix3( + 1, + 0, + pvc.x, + 0, + 1, + pvc.y, + 0, + 0, + 1 + ); + let m12 = new Matrix3().premultiply(move1Matrix).premultiply(rotateMatrix).premultiply(move2Matrix); + pos.applyMatrix3(m12); + } + inputEle.value = model.text ? model.text : ""; + inputEle.style.fontSize = model.render.getCachedValue("font.size") * stageRatio22 + "px"; + inputEle.style.color = DDeiUtil.getColor(model.render.getCachedValue("font.color")); + inputEle.style.width = fillArea.width * stageRatio22 + "px"; + inputEle.style.height = fillArea.height * stageRatio22 + "px"; + inputEle.style.left = canvasPos.left + pos.x + ddInstance.stage.wpv.x + 1 + "px"; + inputEle.style.top = canvasPos.top + pos.y + ddInstance.stage.wpv.y + 10 + "px"; + inputEle.style.display = "block"; + let textAreaRect = DDeiAbstractShape.pvsToOutRect(model.textArea); + inputEle.style.width = textAreaRect.width + "px"; + inputEle.style.height = textAreaRect.height + "px"; + ddInstance.stage.render.editorShadowControl = DDeiUtil.getShadowControl(model); + model.layer.opPoints = []; + if ((_g = model.layer.opLine) == null ? void 0 : _g.render) { + model.layer.opLine.render.enableRefreshShape(); + } + delete model.layer.opLine; + ddInstance.stage.render.editorShadowControl.render.isEditoring = true; + inputEle.focus(); + inputEle.selectionStart = 0; + inputEle.selectionEnd = inputEle.value.length; + editor.changeState(DDeiEditorState.QUICK_EDITING); + delete ddInstance.stage.brushData; + delete ddInstance.stage.brushDataText; + ddInstance.stage.render.operateState = DDeiEnumOperateState.QUICK_EDITING; + editor.bus.push(DDeiEnumBusCommandType.StageChangeSelectModels); + editor.bus.push(DDeiEnumBusCommandType.TextEditorChangeSelectPos); + editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + editor.bus.executeAll(); + return true; + } + } + } + } + } + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionStartQuickEdit, "defaultIns", new _DDeiKeyActionStartQuickEdit()); + let DDeiKeyActionStartQuickEdit = _DDeiKeyActionStartQuickEdit; + const _DDeiKeyActionTableNextCol = class _DDeiKeyActionTableNextCol extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-table-next-col"); + __publicField3(this, "defaultOptions", { + "keys": [ + //表格内部tab,往下一列 + { keys: "9", modelType: "DDeiTable", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionTableNextCol.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionTableNextCol.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionTableNextCol.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionTableNextCol(newOptions); + return panels; + } + } + return _DDeiKeyActionTableNextCol; + } + static modify(fn) { + return _DDeiKeyActionTableNextCol.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance.stage) { + let models = Array.from((_a3 = ddInstance.stage.selectedModels) == null ? void 0 : _a3.values()); + if ((models == null ? void 0 : models.length) == 1 && models[0].baseModelType == "DDeiTable" && models[0].curRow != -1 && models[0].curCol != -1) { + if (models[0].curCol < models[0].cols.length - 1) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curCol++; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.executeAll(); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionTableNextCol, "defaultIns", new _DDeiKeyActionTableNextCol()); + let DDeiKeyActionTableNextCol = _DDeiKeyActionTableNextCol; + const _DDeiKeyActionTableNextRow = class _DDeiKeyActionTableNextRow extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-table-next-row"); + __publicField3(this, "defaultOptions", { + "keys": [ + //表格内部回车,往下一行 + { keys: "13", modelType: "DDeiTable", editorState: DDeiEditorState.DESIGNING } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionTableNextRow.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionTableNextRow.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionTableNextRow.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionTableNextRow(newOptions); + return panels; + } + } + return _DDeiKeyActionTableNextRow; + } + static modify(fn) { + return _DDeiKeyActionTableNextRow.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance.stage) { + let models = Array.from((_a3 = ddInstance.stage.selectedModels) == null ? void 0 : _a3.values()); + if ((models == null ? void 0 : models.length) == 1 && models[0].baseModelType == "DDeiTable" && models[0].curRow != -1 && models[0].curCol != -1) { + if (models[0].curRow < models[0].rows.length - 1) { + if (models[0].tempDragCell) { + models[0].tempDragCell.setState(DDeiEnumControlState.DEFAULT); + } + models[0].curRow++; + models[0].tempDragCell = models[0].rows[models[0].curRow][models[0].curCol]; + models[0].tempDragCell.setState(DDeiEnumControlState.SELECTED); + } + } + (_b2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b2.push(DDeiEnumBusCommandType.RefreshShape, null, evt); + (_c2 = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c2.executeAll(); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionTableNextRow, "defaultIns", new _DDeiKeyActionTableNextRow()); + let DDeiKeyActionTableNextRow = _DDeiKeyActionTableNextRow; + const _DDeiCoreHotkeys = class _DDeiCoreHotkeys extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiKeyActionAllSelect, + DDeiKeyActionBrushData, + DDeiKeyActionCancelCompose, + DDeiKeyActionCancelControlCreate, + DDeiKeyActionCancelCurrentAction, + DDeiKeyActionCancelQuickEdit, + DDeiKeyActionCancelSelect, + DDeiKeyActionClearBrushData, + DDeiKeyActionCloseDialog, + DDeiKeyActionCompose, + DDeiKeyActionCopy, + DDeiKeyActionCopyImage, + DDeiKeyActionCut, + DDeiKeyActionEnterQuickEdit, + DDeiKeyActionMoveModels, + DDeiKeyActionReRevoke, + DDeiKeyActionRevoke, + DDeiKeyActionSaveFile, + DDeiKeyActionStartQuickEdit, + DDeiKeyActionTableNextCol, + DDeiKeyActionTableNextRow, + DDeiKeyActionPaste, + DDeiKeyActionPushModels, + DDeiKeyActionNewRowQuickEdit, + DDeiKeyActionRemoveModels + ]); + } + getHotKeys(editor) { + var _a3; + let hotkeys = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getHotKeys(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getHotKeys(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + hotkeys = hotkeys.concat(ls); + } + }); + return hotkeys; + } + static configuration(options) { + var _a3; + let hotkeys = new _DDeiCoreHotkeys(options); + for (let i2 = 0; i2 < ((_a3 = hotkeys.plugins) == null ? void 0 : _a3.length); i2++) { + hotkeys.plugins[i2] = hotkeys.plugins[i2].configuration(options, true); + } + return hotkeys; + } + static modify(fn) { + return _DDeiCoreHotkeys.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreHotkeys, "defaultIns", new _DDeiCoreHotkeys(null)); + let DDeiCoreHotkeys = _DDeiCoreHotkeys; + const composeContainer = { + "id": "100202", + "name": "组合容器", + "code": "comp", + "desc": "用于组合关系的容器", + "type": "DDeiPolygonContainer", + "from": "100201", + "define": { + ext: { + groups: [] + } + } + }; + const __vite_glob_0_0$5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: composeContainer + }, Symbol.toStringTag, { value: "Module" })); + const container = { + "id": "100201", + "name": "矩形容器", + "code": "rectange_container", + "desc": "矩形形状的容器,能够包含其他容器", + "type": "DDeiPolygonContainer", + "from": "100008", + "define": { + poly: 2 + }, + /** + * 定义组件属性 + * 样式属性会影响图形的显示,修改样式属性也会刷新图形 + * 数据属性一般用于业务计算,数据属性一般不会刷新图形,除非数据属性和样式属性产生联动关系 + * 事件属性一般用来作为扩展用 + * 属性采用三层结构:组---子分组---属性,在基础json中先定义而后使用(可以复写) + * 特殊属性: + * code属性编码在统一个组中,code唯一 + * mapping建立与模型中属性的映射关系,为null时为默认,采用code指向的属性映射;mapping为[]时交由控件编辑器处理值映射 + * hiddenTitle隐藏标题,为true时不会显示属性标题,默认false不隐藏标题 + * display控件显示模式,有row(横向排列)和column(纵向排列)两个选项,默认row + */ + attrs: [ + { + "code": "layout", + "name": "布局", + "desc": "文本的字体名称", + "controlType": "radio", + "dataSource": [ + { "text": "自由布局", "value": "free" }, + { "text": "完全填充", "value": "full" }, + { "text": "九宫格", "value": "nine" }, + { "text": "表格", "value": "table" }, + { "text": "圆心", "value": "cc" } + ], + "defaultValue": null, + "hiddenTitle": true, + "display": "column", + "dataType": "string" + }, + { + "code": "width", + "name": "ddei.property.width", + "desc": "控件的宽度", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "150" + }, + { + "code": "height", + "name": "ddei.property.height", + "desc": "控件的高度", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "150" + }, + { + "id": "100500003", + "code": "border.type", + "name": "ddei.property.borderType", + "desc": "用来快速选择边框的类型,以便于套用相关的样式", + "controlType": "border-type", + "dataSource": [{ "text": "ddei.property.ds.none", "value": 0 }, { "text": "ddei.property.ds.line", "value": 1 }], + "dataType": "string", + "defaultValue": "1", + "hiddenTitle": true, + "display": "column" + }, + { + "id": "100500004", + "code": "border.color", + "name": "ddei.property.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "borderOpacity", + "name": "ddei.property.opacity", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "mapping": ["border.opacity"], + "dataType": "float", + "defaultValue": 1, + "display": "column" + }, + { + "code": "borderWidth", + "name": "ddei.property.width", + "desc": "图形的边框的粗细,0为无边框", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "mapping": ["border.width"], + "dataType": "integer", + "defaultValue": 1 + }, + { + "code": "borderDash", + "name": "ddei.property.dash", + "desc": "图形的边框的是否为虚线样式,虚线由长短不一的线段构成", + "controlType": "border-dash", + "dataSource": [ + { "text": "1", "value": [] }, + { "text": "2", "value": [10, 5] }, + { "text": "3", "value": [5, 5] }, + { "text": "4", "value": [10, 4, 2, 4] }, + { "text": "5", "value": [10, 4, 2, 4, 2, 4] }, + { "text": "6", "value": [10, 4, 10, 4, 2, 4] }, + { "text": "7", "value": [20, 5, 10, 5] }, + { "text": "8", "value": [20, 5, 10, 5, 10, 5] }, + { "text": "9", "value": [3, 3] }, + { "text": "10", "value": [2, 2] }, + { "text": "11", "value": [3, 2, 2, 2] }, + { "text": "13", "value": [20, 10] } + ], + "mapping": ["border.dash"], + "dataType": "integer", + "defaultValue": [], + "isArray": true + }, + { + "code": "borderRound", + "name": "ddei.property.round", + "desc": "图形的边框的是否为为圆角的弧度", + "controlType": "range", + "mapping": ["border.round"], + "min": 0, + "max": 30, + "step": 1, + "defaultValue": 0, + "dataType": "integer" + }, + { + "code": "fill.type", + "name": "ddei.property.fillType", + "desc": "图形填充的类型快速设置", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.none", "value": 0 }, { "text": "ddei.property.ds.color", "value": 1 }, { "text": "ddei.property.ds.image", "value": 2 }], + "defaultValue": 1, + "type": 1, + "orderNo": 2, + "cascadeDisplay": { 1: { show: ["fill.color", "fill.opacity"], hidden: ["fill.image"] }, 2: { show: ["fill.image", "fill.opacity"], hidden: ["fill.color"] }, default: { show: ["fill.color", "fill.opacity"], hidden: ["fill.image"] }, empty: { hidden: ["fill.color", "fill.image", "fill.opacity"] } }, + "hiddenTitle": true, + "display": "column" + }, + { + "code": "fill.color", + "name": "ddei.property.color", + "desc": "图形的填充颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "white" + }, + { + "code": "fill.image", + "name": "ddei.property.image", + "desc": "图形的填充图片", + "controlType": "text", + "dataType": "string", + "defaultValue": "", + "type": 1 + }, + { + "code": "fill.opacity", + "name": "ddei.property.opacity", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "defaultValue": 1, + "dataType": "float", + "display": "column" + }, + { + "code": "font.family", + "name": "ddei.property.font", + "desc": "文本的字体名称", + "controlType": "combox", + "dataType": "string", + "dataSource": { + "type": "config", + "data": "fonts", + "text": "ch", + "value": "en", + "bold": "isSystemDefault", + "fontFamily": "en" + }, + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 }, + "canSearch": true, + "defaultValue": "Microsoft YaHei" + }, + { + "code": "font.size", + "name": "ddei.property.size", + "desc": "文本的字体大小", + "max": 50, + "min": 5, + "step": 0.5, + "controlType": "font-size", + "dataType": "float", + "defaultValue": 14 + }, + { + "code": "font.color", + "name": "ddei.property.color", + "desc": "文本的颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "#252525" + }, + { + "code": "fontAlign", + "name": "ddei.property.align", + "desc": "文本的对齐,采用九宫格式设置", + "controlType": "align-type", + "mapping": [], + "dataType": "string" + }, + { + "code": "textStyle.feed", + "name": "ddei.property.feed", + "desc": "自动换行", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.scale", + "name": "ddei.property.outSize", + "desc": "文本的自动缩小字体填充", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.hollow", + "name": "ddei.property.hollow", + "desc": "文本的镂空显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.bold", + "name": "ddei.property.bold", + "desc": "文本的加粗显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.italic", + "name": "ddei.property.italic", + "desc": "文本的斜体显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.underline", + "name": "ddei.property.underline", + "desc": "文本的下划线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.deleteline", + "name": "ddei.property.deleteline", + "desc": "文本的删除线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.topline", + "name": "ddei.property.topline", + "desc": "文本的删除线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.bgcolor", + "name": "ddei.property.textbg", + "desc": "文本的背景颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "textStyle.subtype", + "name": "ddei.property.subtype", + "desc": "文本的标注类型", + "controlType": "radio", + "dataType": "integer", + "dataSource": [{ "text": "ddei.property.ds.subType", "value": 0 }, { "text": "ddei.property.ds.subType1", "value": 1 }, { "text": "ddei.property.ds.subType2", "value": 2 }, { "text": "ddei.property.ds.subType3", "value": 3 }], + "defaultValue": 0 + }, + { + "code": "textStyle.align", + "name": "ddei.property.textAlign", + "desc": "文本的水平对齐", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2 + }, + { + "code": "textStyle.valign", + "name": "ddei.property.textValign", + "desc": "文本的垂直对齐", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2 + }, + { + "code": "textStyle.hspace", + "name": "ddei.property.hspace", + "desc": "文本之间的水平间距", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "dataType": "float", + "defaultValue": 0.5 + }, + { + "code": "textStyle.vspace", + "name": "ddei.property.vspace", + "desc": "文本之间的垂直间距", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "dataType": "float", + "defaultValue": 0.5 + }, + { + "code": "borderCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["border.creating.top.opacity", "border.creating.right.opacity", "border.creating.bottom.opacity", "border.creating.left.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "fillCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["fill.creating.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "imageCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的填充图片的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["fill.creating.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "id", + "name": "ddei.property.id", + "desc": "控件在画布的全局唯一ID", + "controlType": "text", + "dataType": "string", + "readonly": true + }, + { + "code": "code", + "name": "ddei.property.code", + "desc": "控件在业务上的唯一编码,缺省和控件ID一致", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.property.code001" + }, + { + "code": "text", + "name": "ddei.property.text", + "desc": "控件的主体显示文本", + "controlType": "textarea", + "defaultValue": "", + "dataType": "string", + "type": [1, 2], + //类别,1图形,2业务,3事件 + "readonly": true + }, + { + "code": "fmt.type", + "name": "ddei.format", + "desc": "文本的显示格式", + "controlType": "radio", + "dataType": "integer", + "dataSource": [{ "text": "ddei.property.ds.text", "value": 0 }, { "text": "ddei.property.ds.decimal", "value": 1 }, { "text": "ddei.property.ds.money", "value": 2 }, { "text": "ddei.property.ds.time", "value": 3 }], + "defaultValue": 0, + "type": [1, 2], + "cascadeDisplay": { 1: { show: ["fmt.nscale", "fmt.tmark"], hidden: ["fmt.mmark", "fmt.munit", "fmt.dtype", "fmt.format", "fmt.mrmb"] }, 2: { show: ["fmt.nscale", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.mrmb"], hidden: ["fmt.dtype", "fmt.format"] }, 3: { show: ["fmt.dtype", "fmt.format"], hidden: ["fmt.mrmb", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale"] }, default: { hidden: ["fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale", "fmt.dtype", "fmt.format", "fmt.mrmb"] }, empty: { hidden: ["fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale", "fmt.dtype", "fmt.format", "fmt.mrmb"] } } + }, + { + "code": "fmt.nscale", + "name": "ddei.property.nscale", + "desc": "格式化小数位数", + "controlType": "range", + "min": 0, + "max": 5, + "dataType": "integer", + "defaultValue": 0, + "type": [1, 2] + }, + { + "code": "fmt.tmark", + "name": "ddei.property.tmark", + "desc": "显示逗号千分符", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "fmt.mmark", + "name": "ddei.property.mmark", + "desc": "显示货币符号", + "controlType": "combox", + "dataSource": [{ "text": "ddei.property.ds.none", "value": "" }, { "text": "ddei.property.ds.money1", "value": "¥" }, { "text": "ddei.property.ds.money2", "value": "$" }, { "text": "ddei.property.ds.money3", "value": "€" }, { "text": "ddei.property.ds.money4", "value": "£" }, { "text": "ddei.property.ds.money5", "value": "¥" }, { "text": "ddei.property.ds.money6", "value": "₽" }, { "text": "ddei.property.ds.money7", "value": "€" }], + "defaultValue": "", + "dataType": "string", + "type": [1, 2], + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 } + }, + { + "code": "fmt.munit", + "name": "ddei.property.moneyUnit", + "desc": "显示在后方的货币单位", + "controlType": "text", + "defaultValue": "", + "dataType": "string", + "type": [1, 2] + }, + { + "code": "fmt.mrmb", + "name": "ddei.property.moneyUpCase", + "desc": "显示为人民币大写", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "fmt.dtype", + "name": "ddei.property.dateType", + "desc": "日期和时间的格式化类型", + "controlType": "radio", + "dataSource": [{ "text": "2023-01-01", "value": 1 }, { "text": "23:59:59", "value": 2 }, { "text": "2023-01-01 23:59:59", "value": 3 }, { "text": "ddei.property.ds.custom", "value": 99 }], + "dataType": "integer", + "defaultValue": 1, + "hiddenTitle": true, + "display": "column", + "cascadeDisplay": { 1: { show: [], hidden: ["fmt.format"] }, 2: { show: [], hidden: ["fmt.format"] }, 3: { show: [], hidden: ["fmt.format"] }, 99: { hidden: [], show: ["fmt.format"] }, default: { hidden: ["fmt.format"] }, empty: { hidden: ["fmt.format"] } } + }, + { + "code": "fmt.format", + "name": "ddei.property.format", + "desc": "自定义格式化字符串", + "controlType": "text", + "dataType": "string" + } + ], + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.layout", + attrs: ["layout"] + }, + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + }; + const __vite_glob_0_1$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: container + }, Symbol.toStringTag, { value: "Module" })); + const line = { + "id": "100401", + "name": "ddei.control.line", + "code": "line", + "desc": "直线、折线、曲线三种连接线", + "type": "DDeiLine", + /** + * 定义组件属性 + * 样式属性会影响图形的显示,修改样式属性也会刷新图形 + * 数据属性一般用于业务计算,数据属性一般不会刷新图形,除非数据属性和样式属性产生联动关系 + * 事件属性一般用来作为扩展用 + * 属性采用三层结构:组---子分组---属性,在基础json中先定义而后使用(可以复写) + * 特殊属性: + * code属性编码在统一个组中,code唯一 + * mapping建立与模型中属性的映射关系,为null时为默认,采用code指向的属性映射;mapping为[]时交由控件编辑器处理值映射 + * hiddenTitle隐藏标题,为true时不会显示属性标题,默认false不隐藏标题 + * display控件显示模式,有row(横向排列)和column(纵向排列)两个选项,默认row + */ + attrs: [ + { + "code": "type", + "name": "ddei.lineType", + "desc": "用来快速连线类型,以便于套用相关的样式", + "controlType": "radio", + "dataSource": [{ "text": "ddei.property.ds.lineType1", "value": 1 }, { "text": "ddei.property.ds.lineType2", "value": 2 }, { "text": "ddei.property.ds.lineType3", "value": 3 }], + "dataType": "integer", + "defaultValue": 1, + "cascadeDisplay": { 2: { show: ["round"], hidden: [] }, default: { show: [], hidden: ["round"] }, notempty: { hidden: ["round"] } }, + "mapping": [], + "type": 1 + }, + { + "code": "weight", + "name": "ddei.property.weight", + "desc": "控件的宽度", + "controlType": "range", + "min": 0.1, + "max": 10, + "step": 0.1, + "dataType": "float", + "defaultValue": 1 + }, + { + "code": "color", + "name": "ddei.property.color", + "desc": "线段的边框显示颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "fill.weight", + "name": "ddei.fill", + "desc": "填充的大小", + "controlType": "range", + "min": 0, + "max": 30, + "step": 1, + "defaultValue": 0, + "dataType": "integer" + }, + { + "code": "fill.color", + "name": "ddei.property.color", + "desc": "线段的边框显示颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "dash", + "name": "ddei.property.dash", + "desc": "图形的边框的是否为虚线样式,虚线由长短不一的线段构成", + "controlType": "border-dash", + "dataSource": [ + { "text": "1", "value": [] }, + { "text": "2", "value": [10, 5] }, + { "text": "3", "value": [5, 5] }, + { "text": "4", "value": [10, 4, 2, 4] }, + { "text": "5", "value": [10, 4, 2, 4, 2, 4] }, + { "text": "6", "value": [10, 4, 10, 4, 2, 4] }, + { "text": "7", "value": [20, 5, 10, 5] }, + { "text": "8", "value": [20, 5, 10, 5, 10, 5] }, + { "text": "9", "value": [3, 3] }, + { "text": "10", "value": [2, 2] }, + { "text": "11", "value": [3, 2, 2, 2] }, + { "text": "13", "value": [20, 10] } + ], + "dataType": "integer", + "defaultValue": [], + "isArray": true + }, + { + "code": "opacity", + "name": "ddei.property.opacity", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "dataType": "float", + "defaultValue": 1, + "display": "column" + }, + { + "code": "sp.type", + "name": "ddei.property.startPointType", + "desc": "起点的样式样式", + "controlType": "combox", + "dataSource": [ + { "text": "ddei.property.ds.none", "value": -1 }, + { "text": "ddei.property.ds.pointType1", "value": 1 }, + { "text": "ddei.property.ds.pointType2", "value": 2 }, + { "text": "ddei.property.ds.pointType21", "value": 21 }, + { "text": "ddei.property.ds.pointType3", "value": 3 }, + { "text": "ddei.property.ds.pointType31", "value": 31 }, + { "text": "ddei.property.ds.pointType4", "value": 4 }, + { "text": "ddei.property.ds.pointType41", "value": 41 }, + { "text": "ddei.property.ds.pointType5", "value": 5 }, + { "text": "ddei.property.ds.pointType51", "value": 51 }, + { "text": "ddei.property.ds.pointType6", "value": 6 }, + { "text": "ddei.property.ds.pointType61", "value": 61 } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 6 }, + "dataType": "integer", + "cascadeDisplay": { "-1": { hidden: ["startWeidht"] }, empty: { hidden: ["startWeidht"] }, notempty: { show: ["startWeidht"] } }, + "defaultValue": -1 + }, + { + "code": "sp.weight", + "name": "ddei.property.weight", + "desc": "起点的箭头的宽度", + "controlType": "range", + "min": 1, + "max": 30, + "step": 1, + "defaultValue": 6, + "dataType": "integer" + }, + { + "code": "ep.type", + "name": "ddei.property.endPointType", + "desc": "终点的样式样式", + "controlType": "combox", + "dataSource": [ + { "text": "ddei.property.ds.none", "value": -1 }, + { "text": "ddei.property.ds.pointType1", "value": 1 }, + { "text": "ddei.property.ds.pointType2", "value": 2 }, + { "text": "ddei.property.ds.pointType21", "value": 21 }, + { "text": "ddei.property.ds.pointType3", "value": 3 }, + { "text": "ddei.property.ds.pointType31", "value": 31 }, + { "text": "ddei.property.ds.pointType4", "value": 4 }, + { "text": "ddei.property.ds.pointType41", "value": 41 }, + { "text": "ddei.property.ds.pointType5", "value": 5 }, + { "text": "ddei.property.ds.pointType51", "value": 51 }, + { "text": "ddei.property.ds.pointType6", "value": 6 }, + { "text": "ddei.property.ds.pointType61", "value": 61 } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 6 }, + "dataType": "integer", + "cascadeDisplay": { "-1": { hidden: ["endWeidht"] }, empty: { hidden: ["endWeidht"] }, notempty: { show: ["endWeidht"] } }, + "defaultValue": 5 + }, + { + "code": "ep.weight", + "name": "ddei.property.weight", + "desc": "终点的箭头的宽度", + "controlType": "range", + "min": 1, + "max": 30, + "step": 1, + "defaultValue": 6, + "dataType": "integer" + }, + { + "code": "round", + "name": "ddei.property.round", + "desc": "图形的边框的是否为为圆角的弧度", + "controlType": "range", + "min": 0, + "max": 30, + "step": 1, + "defaultValue": 0, + "dataType": "integer" + }, + { + "code": "jumpline", + "name": "ddei.jumpline", + "desc": "用来控制当前线段的跳线类型", + "controlType": "radio", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": 1 }, { "text": "ddei.property.ds.no", "value": 2 }, { "text": "ddei.property.ds.global", "value": 0 }], + "dataType": "integer", + "defaultValue": 0, + "type": 1 + }, + { + "code": "id", + "name": "ddei.property.id", + "desc": "控件在画布的全局唯一ID", + "controlType": "text", + "dataType": "string", + "readonly": true + }, + { + "code": "code", + "name": "ddei.property.code", + "desc": "控件在业务上的唯一编码,缺省和控件ID一致", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.property.code001" + } + ], + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: [ + "type", + "weight", + "color", + "fill.weight", + "fill.color", + "dash", + "opacity", + "sp.type", + "sp.weight", + "ep.type", + "ep.weight", + "round", + "jumpline" + ] + } + ] + }, + { + name: "ddei.propertyName", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.propertyName", + attrs: ["code"] + } + ] + } + ], + icon: ``, + filters: { + LINE_OBI_FILTER: (model, params) => { + return false; + } + } + }; + const __vite_glob_0_2$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: line + }, Symbol.toStringTag, { value: "Module" })); + const polygonContainer = { + "id": "100203", + "name": "多边形容器", + "code": "polygon_container", + "desc": "基于点采样的的容器", + "type": "DDeiPolygonContainer", + "from": "100201", + "define": { + width: 300, + height: 200, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0,op2close = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + op2close = 1 + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,op2close:op2close,align:1,stroke:1,fill:1}); + }` + ] + } + } + }; + const __vite_glob_0_3$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: polygonContainer + }, Symbol.toStringTag, { value: "Module" })); + const polygon = { + "id": "100500", + "name": "ddei.control.polygon", + "code": "polygon", + "desc": "多个3-N边构成的多边形", + "type": "DDeiPolygon", + /** + * 定义组件属性 + * 样式属性会影响图形的显示,修改样式属性也会刷新图形 + * 数据属性一般用于业务计算,数据属性一般不会刷新图形,除非数据属性和样式属性产生联动关系 + * 事件属性一般用来作为扩展用 + * 属性采用三层结构:组---子分组---属性,在基础json中先定义而后使用(可以复写) + * 特殊属性: + * code属性编码在统一个组中,code唯一 + * mapping建立与模型中属性的映射关系,为null时为默认,采用code指向的属性映射;mapping为[]时交由控件编辑器处理值映射 + * hiddenTitle隐藏标题,为true时不会显示属性标题,默认false不隐藏标题 + * display控件显示模式,有row(横向排列)和column(纵向排列)两个选项,默认row + */ + attrs: [ + { + "code": "width", + "name": "ddei.property.width", + "desc": "控件的宽度", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "150" + }, + { + "code": "height", + "name": "ddei.property.height", + "desc": "控件的高度", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "150" + }, + { + "code": "border.type", + "name": "ddei.property.borderType", + "desc": "用来快速选择边框的类型,以便于套用相关的样式", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.none", "value": 0 }, { "text": "ddei.property.ds.line", "value": 1 }], + "defaultValue": 1, + "hiddenTitle": true, + "display": "column", + "cascadeDisplay": { 1: { show: ["border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"], hidden: [] }, default: { show: ["border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"], hidden: [] }, empty: { hidden: ["border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] } } + }, + { + "code": "border.color", + "name": "ddei.property.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "borderOpacity", + "name": "ddei.property.opacity", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "mapping": ["border.opacity"], + "dataType": "float", + "defaultValue": 1, + "display": "column" + }, + { + "code": "borderWidth", + "name": "ddei.property.width", + "desc": "图形的边框的粗细,0为无边框", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "mapping": ["border.width"], + "dataType": "integer", + "defaultValue": 1 + }, + { + "code": "borderDash", + "name": "ddei.property.dash", + "desc": "图形的边框的是否为虚线样式,虚线由长短不一的线段构成", + "controlType": "border-dash", + "dataSource": [ + { "text": "1", "value": [] }, + { "text": "2", "value": [10, 5] }, + { "text": "3", "value": [5, 5] }, + { "text": "4", "value": [10, 4, 2, 4] }, + { "text": "5", "value": [10, 4, 2, 4, 2, 4] }, + { "text": "6", "value": [10, 4, 10, 4, 2, 4] }, + { "text": "7", "value": [20, 5, 10, 5] }, + { "text": "8", "value": [20, 5, 10, 5, 10, 5] }, + { "text": "9", "value": [3, 3] }, + { "text": "10", "value": [2, 2] }, + { "text": "11", "value": [3, 2, 2, 2] }, + { "text": "13", "value": [20, 10] } + ], + "mapping": ["border.dash"], + "dataType": "integer", + "defaultValue": [], + "isArray": true + }, + { + "code": "borderRound", + "name": "ddei.property.round", + "desc": "图形的边框的是否为为圆角的弧度", + "controlType": "range", + "mapping": ["border.round"], + "min": 0, + "max": 30, + "step": 1, + "defaultValue": 0, + "dataType": "integer" + }, + { + "code": "fill.type", + "name": "ddei.property.fillType", + "desc": "图形填充的类型快速设置", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.none", "value": 0 }, { "text": "ddei.property.ds.color", "value": 1 }, { "text": "ddei.property.ds.image", "value": 2 }], + "defaultValue": 1, + "type": 1, + "orderNo": 2, + "cascadeDisplay": { 1: { show: ["fill.color", "fill.opacity"], hidden: ["fill.image"] }, 2: { show: ["fill.image", "fill.opacity"], hidden: ["fill.color"] }, default: { show: ["fill.color", "fill.opacity"], hidden: ["fill.image"] }, empty: { hidden: ["fill.color", "fill.image", "fill.opacity"] } }, + "hiddenTitle": true, + "display": "column" + }, + { + "code": "fill.color", + "name": "ddei.property.color", + "desc": "图形的填充颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "fill.image", + "name": "ddei.property.image", + "desc": "图形的填充图片", + "controlType": "image", + "dataType": "string", + "defaultValue": "", + "type": 1 + }, + { + "code": "fill.opacity", + "name": "ddei.property.opacity", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "defaultValue": 1, + "dataType": "float", + "display": "column" + }, + { + "code": "font.family", + "name": "ddei.property.font", + "desc": "文本的字体名称", + "controlType": "combox", + "dataType": "string", + "dataSource": { + "type": "config", + "data": "fonts", + "text": "ch", + "value": "en", + "bold": "isSystemDefault", + "fontFamily": "en" + }, + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 }, + "canSearch": true, + "defaultValue": "Microsoft YaHei" + }, + { + "code": "font.size", + "name": "ddei.property.size", + "desc": "文本的字体大小", + "max": 50, + "min": 5, + "step": 0.5, + "controlType": "font-size", + "dataType": "float", + "defaultValue": 14 + }, + { + "code": "font.color", + "name": "ddei.property.color", + "desc": "文本的颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "fontAlign", + "name": "ddei.property.align", + "desc": "文本的对齐,采用九宫格式设置", + "controlType": "align-type", + "mapping": [], + "dataType": "string" + }, + { + "code": "textStyle.feed", + "name": "ddei.property.feed", + "desc": "自动换行", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "1" + }, + { + "code": "textStyle.scale", + "name": "ddei.property.outSize", + "desc": "文本的超出范围后的策略", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.hidden", "value": "0" }, { "text": "ddei.property.ds.ellipsis", "value": "2" }, { "text": "ddei.property.ds.narrow", "value": "1" }, { "text": "ddei.property.ds.ext", "value": "3" }], + "defaultValue": "0", + "cascadeDisplay": { 3: { show: ["textStyle.lockWidth", "textStyle.paddingWeight"], hidden: [] }, default: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, empty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, notempty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] } } + }, + { + "code": "textStyle.lockWidth", + "name": "ddei.property.lockWidth", + "desc": "超范围自动扩展的情况下锁定宽度", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "textStyle.paddingWeight", + "name": "ddei.property.paddingWeight", + "desc": "超范围自动扩展的情况下保留的宽度", + "controlType": "text", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "textStyle.hollow", + "name": "ddei.property.hollow", + "desc": "文本的镂空显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.bold", + "name": "ddei.property.bold", + "desc": "文本的加粗显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.italic", + "name": "ddei.property.italic", + "desc": "文本的斜体显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.underline", + "name": "ddei.property.underline", + "desc": "文本的下划线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.deleteline", + "name": "ddei.property.deleteline", + "desc": "文本的删除线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.topline", + "name": "ddei.property.topline", + "desc": "文本的删除线显示", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0" + }, + { + "code": "textStyle.bgcolor", + "name": "ddei.property.textbg", + "desc": "文本的背景颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "" + }, + { + "code": "textStyle.subtype", + "name": "ddei.property.subtype", + "desc": "文本的标注类型", + "controlType": "radio", + "dataType": "integer", + "dataSource": [{ "text": "ddei.property.ds.subType", "value": 0 }, { "text": "ddei.property.ds.subType1", "value": 1 }, { "text": "ddei.property.ds.subType2", "value": 2 }, { "text": "ddei.property.ds.subType3", "value": 3 }], + "defaultValue": 0 + }, + { + "code": "textStyle.align", + "name": "ddei.property.textAlign", + "desc": "文本的水平对齐", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2 + }, + { + "code": "textStyle.valign", + "name": "ddei.property.textValign", + "desc": "文本的垂直对齐", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2 + }, + { + "code": "textStyle.hspace", + "name": "ddei.property.hspace", + "desc": "文本之间的水平间距", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "dataType": "float", + "defaultValue": 0.5 + }, + { + "code": "textStyle.vspace", + "name": "ddei.property.vspace", + "desc": "文本之间的垂直间距", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "dataType": "float", + "defaultValue": 0.5 + }, + { + "code": "borderCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["border.creating.top.opacity", "border.creating.right.opacity", "border.creating.bottom.opacity", "border.creating.left.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "fillCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["fill.creating.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "imageCreatingOpacity", + "name": "ddei.property.opacity", + "desc": "图形的填充图片的透明度,0完全透明~1完全不透明", + "controlType": "text", + "mapping": ["fill.creating.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column" + }, + { + "code": "id", + "name": "ddei.property.id", + "desc": "控件在画布的全局唯一ID", + "controlType": "text", + "dataType": "string", + "readonly": true + }, + { + "code": "code", + "name": "ddei.property.code", + "desc": "控件在业务上的唯一编码,缺省和控件ID一致", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.property.code001" + }, + { + "code": "text", + "name": "ddei.property.text", + "desc": "控件的主体显示文本", + "controlType": "textarea", + "defaultValue": "", + "dataType": "string", + "type": [1, 2], + //类别,1图形,2业务,3事件 + "readonly": true + }, + { + "code": "fmt.type", + "name": "ddei.format", + "desc": "文本的显示格式", + "controlType": "radio", + "dataType": "integer", + "dataSource": [{ "text": "ddei.property.ds.text", "value": 0 }, { "text": "ddei.property.ds.decimal", "value": 1 }, { "text": "ddei.property.ds.money", "value": 2 }, { "text": "ddei.property.ds.time", "value": 3 }], + "defaultValue": 0, + "type": [1, 2], + "cascadeDisplay": { 1: { show: ["fmt.nscale", "fmt.tmark"], hidden: ["fmt.mmark", "fmt.munit", "fmt.dtype", "fmt.format", "fmt.mrmb"] }, 2: { show: ["fmt.nscale", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.mrmb"], hidden: ["fmt.dtype", "fmt.format"] }, 3: { show: ["fmt.dtype", "fmt.format"], hidden: ["fmt.mrmb", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale"] }, default: { hidden: ["fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale", "fmt.dtype", "fmt.format", "fmt.mrmb"] }, empty: { hidden: ["fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.nscale", "fmt.dtype", "fmt.format", "fmt.mrmb"] } } + }, + { + "code": "fmt.nscale", + "name": "ddei.property.nscale", + "desc": "格式化小数位数", + "controlType": "range", + "min": 0, + "max": 5, + "dataType": "integer", + "defaultValue": 0, + "type": [1, 2] + }, + { + "code": "fmt.tmark", + "name": "ddei.property.tmark", + "desc": "显示逗号千分符", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "fmt.mmark", + "name": "ddei.property.mmark", + "desc": "显示货币符号", + "controlType": "combox", + "dataSource": [{ "text": "ddei.property.ds.none", "value": "" }, { "text": "ddei.property.ds.money1", "value": "¥" }, { "text": "ddei.property.ds.money2", "value": "$" }, { "text": "ddei.property.ds.money3", "value": "€" }, { "text": "ddei.property.ds.money4", "value": "£" }, { "text": "ddei.property.ds.money5", "value": "¥" }, { "text": "ddei.property.ds.money6", "value": "₽" }, { "text": "ddei.property.ds.money7", "value": "€" }], + "defaultValue": "", + "dataType": "string", + "type": [1, 2], + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 } + }, + { + "code": "fmt.munit", + "name": "ddei.property.moneyUnit", + "desc": "显示在后方的货币单位", + "controlType": "text", + "defaultValue": "", + "dataType": "string", + "type": [1, 2] + }, + { + "code": "fmt.mrmb", + "name": "ddei.property.moneyUpCase", + "desc": "显示为人民币大写", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "fmt.dtype", + "name": "ddei.property.dateType", + "desc": "日期和时间的格式化类型", + "controlType": "radio", + "dataSource": [{ "text": "2023-01-01", "value": 1 }, { "text": "23:59:59", "value": 2 }, { "text": "2023-01-01 23:59:59", "value": 3 }, { "text": "ddei.property.ds.custom", "value": 99 }], + "dataType": "integer", + "defaultValue": 1, + "hiddenTitle": true, + "display": "column", + "cascadeDisplay": { 1: { show: [], hidden: ["fmt.format"] }, 2: { show: [], hidden: ["fmt.format"] }, 3: { show: [], hidden: ["fmt.format"] }, 99: { hidden: [], show: ["fmt.format"] }, default: { hidden: ["fmt.format"] }, empty: { hidden: ["fmt.format"] } } + }, + { + "code": "fmt.format", + "name": "ddei.property.format", + "desc": "自定义格式化字符串", + "controlType": "text", + "dataType": "string" + } + ], + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.border", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "ddei.text", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.lockWidth", + "textStyle.paddingWeight", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text", "fmt.type", "fmt.nscale", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.mrmb", "fmt.dtype", "fmt.format"] + } + ] + } + ] + }; + const __vite_glob_0_4$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: polygon + }, Symbol.toStringTag, { value: "Module" })); + const tableCell = { + "id": "100302", + "name": "单元格", + "code": "table-cell", + "desc": "表格的单元格", + "type": "DDeiTableCell" + }; + const styles$1 = { + "name": "样式", + "children": [ + { + "id": "100302001", + "code": "width", + "name": "宽度", + "desc": "控件的宽度", + "group": "布局", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "160", + "orderNo": 1, + "visiable": false + }, + { + "id": "100302002", + "code": "height", + "name": "高度", + "desc": "控件的高度", + "group": "布局", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "80", + "orderNo": 2, + "visiable": false + }, + { + "id": "100302003", + "code": "border.type", + "name": "边框类型", + "desc": "用来快速选择边框的类型,以便于套用相关的样式", + "group": "边框", + "controlType": "border-type", + "dataSource": [{ "text": "无线条", "value": "0" }, { "text": "实线", "value": "1" }], + "dataType": "string", + "defaultValue": "1", + "hiddenTitle": true, + "display": "column", + "exmapping": ["border.top.disabled", "border.right.disabled", "border.bottom.disabled", "border.left.disabled"], + "orderNo": 1, + "visiable": true + }, + { + "id": "100302004", + "code": "border.color", + "name": "颜色", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "group": "边框", + "controlType": "color-combo", + "mapping": ["border.top.color", "border.right.color", "border.bottom.color", "border.left.color"], + "dataType": "string", + "defaultValue": "rgb(219,219,233)", + "orderNo": 2, + "visiable": true + }, + { + "id": "100302005", + "code": "borderOpacity", + "name": "透明度", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "group": "边框", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "mapping": ["border.top.opacity", "border.right.opacity", "border.bottom.opacity", "border.left.opacity"], + "dataType": "float", + "defaultValue": 1, + "display": "column", + "orderNo": 3, + "visiable": true + }, + { + "id": "100302006", + "code": "borderWidth", + "name": "粗细", + "desc": "图形的边框的粗细,0为无边框", + "group": "边框", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "mapping": ["border.top.width", "border.right.width", "border.bottom.width", "border.left.width"], + "dataType": "integer", + "defaultValue": 1, + "orderNo": 4, + "visiable": true + }, + { + "id": "100302007", + "code": "borderDash", + "name": "虚线", + "desc": "图形的边框的是否为虚线样式,虚线由长短不一的线段构成", + "group": "边框", + "controlType": "combox", + "dataSource": [ + { "img": "icon-line-00", "text": "1", "value": [] }, + { "img": "icon-line-00", "text": "2", "value": [10, 5] }, + { "img": "icon-line-00", "text": "3", "value": [5, 5] }, + { "img": "icon-line-00", "text": "4", "value": [10, 4, 2, 4] }, + { "img": "icon-line-00", "text": "5", "value": [10, 4, 2, 4, 2, 4] }, + { "img": "icon-line-00", "text": "6", "value": [10, 4, 10, 4, 2, 4] }, + { "img": "icon-line-00", "text": "7", "value": [20, 5, 10, 5] }, + { "img": "icon-line-00", "text": "8", "value": [20, 5, 10, 5, 10, 5] }, + { "img": "icon-line-00", "text": "9", "value": [3, 3] }, + { "img": "icon-line-00", "text": "10", "value": [2, 2] }, + { "img": "icon-line-00", "text": "11", "value": [3, 2, 2, 2] }, + { "img": "icon-line-00", "text": "12", "value": [3, 2, 2, 2, 2, 2] } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 6, imgWidth: 60, imgHeight: 20, display: "img-text" }, + "mapping": ["border.top.dash", "border.right.dash", "border.bottom.dash", "border.left.dash"], + "dataType": "integer", + "defaultValue": [], + "isArray": true, + "orderNo": 5, + "visiable": true + }, + { + "id": "100302008", + "code": "borderRound", + "name": "圆角", + "desc": "图形的边框的是否为为圆角的弧度", + "group": "边框", + "controlType": "range", + "mapping": ["border.top.round", "border.right.round", "border.bottom.round", "border.left.round"], + "min": 0, + "max": 100, + "step": 1, + "defaultValue": 0, + "dataType": "integer", + "orderNo": 6, + "visiable": true + }, + { + "id": "100302101", + "code": "fillType", + "name": "填充类型", + "desc": "图形填充的类型快速设置", + "group": "填充", + "controlType": "fill-type", + "dataSource": [{ "text": "无填充", "value": "0" }, { "text": "单色填充", "value": "1" }], + "exmapping": ["fill.disabled"], + "dataType": "string", + "defaultValue": "1", + "hiddenTitle": true, + "display": "column", + "orderNo": 1, + "visiable": true + }, + { + "id": "100302102", + "code": "fill.color", + "name": "颜色", + "desc": "图形的填充颜色", + "group": "填充", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "white", + "orderNo": 2, + "visiable": true + }, + { + "id": "100302103", + "code": "fill.opacity", + "name": "透明度", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "group": "填充", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "defaultValue": 1, + "dataType": "float", + "display": "column", + "orderNo": 3, + "visiable": true + }, + { + "id": "100302201", + "code": "font.family", + "name": "字体", + "desc": "文本的字体名称", + "group": "文本", + "controlType": "combox", + "dataType": "string", + "dataSource": { + "type": "config", + "data": "fonts", + "text": "ch", + "value": "en", + "bold": "isSystemDefault", + "fontFamily": "en" + }, + "itemStyle": { width: 80, height: 25, col: 2, row: 0, imgWidth: 20, imgHeight: 20 }, + "canSearch": true, + "defaultValue": "Microsoft YaHei", + "orderNo": 1, + "visiable": true + }, + { + "id": "100302202", + "code": "font.size", + "name": "大小", + "desc": "文本的字体大小", + "group": "文本", + "max": 50, + "min": 5, + "step": 0.5, + "controlType": "font-size", + "dataType": "float", + "defaultValue": 14, + "orderNo": 2, + "visiable": true + }, + { + "id": "100302203", + "code": "font.color", + "name": "颜色", + "desc": "文本的颜色", + "group": "文本", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "#252525", + "orderNo": 3, + "visiable": true + }, + { + "id": "100302204", + "code": "fontAlign", + "name": "对齐", + "desc": "文本的对齐,采用九宫格式设置", + "group": "文本", + "controlType": "align-type", + "mapping": [], + "dataType": "string", + "orderNo": 4, + "visiable": true + }, + { + "id": "100302205", + "code": "textStyle.feed", + "name": "换行", + "desc": "自动换行", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 10, + "visiable": true + }, + { + "id": "100302206", + "code": "textStyle.scale", + "name": "ddei.property.outSize", + "desc": "文本的自动缩小字体填充", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 11, + "visiable": true + }, + { + "id": "100302207", + "code": "textStyle.hollow", + "name": "ddei.property.hollow", + "desc": "文本的镂空显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 9, + "visiable": true + }, + { + "id": "100302208", + "code": "textStyle.bold", + "name": "ddei.property.bold", + "desc": "文本的加粗显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 5, + "visiable": true + }, + { + "id": "100302209", + "code": "textStyle.italic", + "name": "ddei.property.italic", + "desc": "文本的斜体显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 6, + "visiable": true + }, + { + "id": "100302210", + "code": "textStyle.underline", + "name": "ddei.property.underline", + "desc": "文本的下划线显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 7, + "visiable": true + }, + { + "id": "100302211", + "code": "textStyle.deleteline", + "name": "ddei.property.deleteline", + "desc": "文本的删除线显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 8, + "visiable": true + }, + { + "id": "100302212", + "code": "textStyle.topline", + "name": "ddei.property.topline", + "desc": "文本的删除线显示", + "group": "文本", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.yes", "value": "1" }, { "text": "ddei.property.ds.no", "value": "0" }], + "defaultValue": "0", + "orderNo": 8, + "visiable": true + }, + { + "id": "100302303", + "code": "textStyle.align", + "name": "ddei.property.textAlign", + "desc": "文本的水平对齐", + "group": "文本", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2, + "visiable": false + }, + { + "id": "100302304", + "code": "textStyle.valign", + "name": "ddei.property.textValign", + "desc": "文本的垂直对齐", + "group": "文本", + "controlType": "text", + "dataType": "integer", + "defaultValue": 2, + "visiable": false + } + ], + "visiable": false, + "order": 1 + }; + const datas$1 = { + "name": "数据", + "children": [ + { + "id": "100302401", + "code": "id", + "name": "ddei.property.id", + "desc": "控件在画布的全局唯一ID", + "group": "布局与文本", + "controlType": "text", + "dataType": "string", + "readonly": true, + "orderNo": 1, + "visiable": false + }, + { + "id": "100302403", + "code": "text", + "name": "ddei.property.text", + "desc": "控件的主体显示文本", + "group": "布局与文本", + "controlType": "textarea", + "defaultValue": "ddei.property.text", + "hiddenTitle": false, + "display": "column", + "dataType": "string", + "type": [1, 2], + //类别,1图形,2业务,3事件 + "orderNo": 3, + "visiable": true + }, + { + "id": "100302404", + "code": "layout", + "name": "布局", + "desc": "文本的字体名称", + "group": "布局与文本", + "controlType": "radio", + "dataSource": [ + { "text": "自由布局", "value": "free" }, + { "text": "完全填充", "value": "full" }, + { "text": "九宫格", "value": "nine" }, + { "text": "表格", "value": "table" }, + { "text": "圆心", "value": "cc" } + ], + "defaultValue": "full", + "hiddenTitle": false, + "display": "column", + "dataType": "string", + "orderNo": 2, + "visiable": true + } + ], + "visiable": true, + "order": 2 + }; + const events$1 = { + "name": "事件", + "children": [], + "visiable": false, + "order": 3 + }; + const __vite_glob_0_5$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + datas: datas$1, + default: tableCell, + events: events$1, + styles: styles$1 + }, Symbol.toStringTag, { value: "Module" })); + const table = { + "id": "100301", + "name": "表格", + "code": "table", + "desc": "表格控件,可以通过插入、移动、合并单元格完成复杂的布局", + "type": "DDeiTable", + "icon": "icon-table", + "subcontrol": "100302" + }; + const styles = { + "name": "样式", + "children": [ + { + "id": "100301001", + "code": "width", + "name": "宽度", + "desc": "控件的宽度", + "group": "布局", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "600", + "orderNo": 1, + "visiable": false + }, + { + "id": "100301002", + "code": "height", + "name": "高度", + "desc": "控件的高度", + "group": "布局", + "controlType": "text", + "dataSource": null, + "dataType": "integer", + "defaultValue": "200", + "orderNo": 2, + "visiable": false + }, + { + "id": "100301003", + "code": "border.type", + "name": "边框类型", + "desc": "用来快速选择边框的类型,以便于套用相关的样式", + "group": "边框", + "controlType": "border-type", + "dataSource": [{ "text": "无线条", "value": "0" }, { "text": "实线", "value": "1" }], + "dataType": "string", + "defaultValue": "1", + "hiddenTitle": true, + "display": "column", + "exmapping": ["border.top.disabled", "border.right.disabled", "border.bottom.disabled", "border.left.disabled"], + "orderNo": 1, + "visiable": true + }, + { + "id": "100301004", + "code": "border.color", + "name": "颜色", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "group": "边框", + "controlType": "color-combo", + "mapping": ["border.top.color", "border.right.color", "border.bottom.color", "border.left.color"], + "dataType": "string", + "defaultValue": "black", + "orderNo": 2, + "visiable": true + }, + { + "id": "100301005", + "code": "borderOpacity", + "name": "透明度", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "group": "边框", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "mapping": ["border.top.opacity", "border.right.opacity", "border.bottom.opacity", "border.left.opacity"], + "dataType": "float", + "defaultValue": 1, + "display": "column", + "orderNo": 3, + "visiable": true + }, + { + "id": "100301006", + "code": "borderWidth", + "name": "粗细", + "desc": "图形的边框的粗细,0为无边框", + "group": "边框", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "mapping": ["border.top.width", "border.right.width", "border.bottom.width", "border.left.width"], + "dataType": "integer", + "defaultValue": 1, + "orderNo": 4, + "visiable": true + }, + { + "id": "100301007", + "code": "borderDash", + "name": "虚线", + "desc": "图形的边框的是否为虚线样式,虚线由长短不一的线段构成", + "group": "边框", + "controlType": "combox", + "dataSource": [ + { "img": "icon-line-00", "text": "1", "value": [] }, + { "img": "icon-line-00", "text": "2", "value": [10, 5] }, + { "img": "icon-line-00", "text": "3", "value": [5, 5] }, + { "img": "icon-line-00", "text": "4", "value": [10, 4, 2, 4] }, + { "img": "icon-line-00", "text": "5", "value": [10, 4, 2, 4, 2, 4] }, + { "img": "icon-line-00", "text": "6", "value": [10, 4, 10, 4, 2, 4] }, + { "img": "icon-line-00", "text": "7", "value": [20, 5, 10, 5] }, + { "img": "icon-line-00", "text": "8", "value": [20, 5, 10, 5, 10, 5] }, + { "img": "icon-line-00", "text": "9", "value": [3, 3] }, + { "img": "icon-line-00", "text": "10", "value": [2, 2] }, + { "img": "icon-line-00", "text": "11", "value": [3, 2, 2, 2] }, + { "img": "icon-line-00", "text": "12", "value": [3, 2, 2, 2, 2, 2] } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 6, imgWidth: 60, imgHeight: 20, display: "img-text" }, + "mapping": ["border.top.dash", "border.right.dash", "border.bottom.dash", "border.left.dash"], + "dataType": "integer", + "defaultValue": [], + "isArray": true, + "orderNo": 5, + "visiable": true + }, + { + "id": "100301008", + "code": "borderRound", + "name": "圆角", + "desc": "图形的边框的是否为为圆角的弧度", + "group": "边框", + "controlType": "range", + "mapping": ["border.top.round", "border.right.round", "border.bottom.round", "border.left.round"], + "min": 0, + "max": 100, + "step": 1, + "defaultValue": 0, + "dataType": "integer", + "orderNo": 6, + "visiable": true + }, + { + "id": "100301305", + "code": "borderCreatingOpacity", + "name": "透明度", + "desc": "图形的边框的透明度,0完全透明~1完全不透明", + "group": "边框", + "controlType": "text", + "mapping": ["border.creating.top.opacity", "border.creating.right.opacity", "border.creating.bottom.opacity", "border.creating.left.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column", + "orderNo": 3, + "visiable": false + }, + { + "id": "100301306", + "code": "fillCreatingOpacity", + "name": "透明度", + "desc": "图形的填充的透明度,0完全透明~1完全不透明", + "group": "填充", + "controlType": "text", + "mapping": ["fill.creating.opacity"], + "dataType": "float", + "defaultValue": 0.5, + "display": "column", + "orderNo": 3, + "visiable": false + } + ], + "visiable": false, + "order": 1 + }; + const datas = { + "name": "数据", + "children": [ + { + "id": "100301401", + "code": "id", + "name": "ddei.property.id", + "desc": "控件在画布的全局唯一ID", + "group": "基础信息", + "controlType": "text", + "dataType": "string", + "readonly": true, + "orderNo": 1, + "visiable": false + }, + { + "id": "100301402", + "code": "code", + "name": "ddei.property.code", + "desc": "控件在业务上的唯一编码,缺省和控件ID一致", + "group": "基础信息", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.property.code001", + "orderNo": 2, + "visiable": true + } + ], + "visiable": true, + "order": 1 + }; + const events = { + "name": "事件", + "children": [], + "visiable": false, + "order": 3 + }; + const menus = [ + { + "code": "insert-row", + "name": "插入行", + "icon": "icon-insert-row" + }, + { + "code": "insert-col", + "name": "插入列", + "icon": "icon-insert-col" + }, + { + "code": "remove-row", + "name": "删除行", + "icon": "icon-delete-row" + }, + { + "code": "remove-col", + "name": "删除列", + "icon": "icon-delete-column" + }, + { + "code": "split" + }, + { + "code": "merge-cell", + "name": "合并单元格", + "icon": "icon-merge-cells" + }, + { + "code": "cancel-merge-cell", + "name": "取消合并单元格", + "icon": "icon-merge-cells" + } + ]; + const __vite_glob_0_6$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + datas, + default: table, + events, + menus, + styles + }, Symbol.toStringTag, { value: "Module" })); + const circleSplit = { + "id": "100104", + "name": "圆形-切割", + "code": "circle", + "desc": "由圆形,从中间横向/纵向切割开", + "from": "100103", + "define": { + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + direct: 1, + //1横向切割,2纵向切割 + pvalue: 0, + //切割的坐标,横向切割时为纵坐标,纵向切割时为横坐标 + rules: [ + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(sample.direct == 1){ + pvs.push({x:-50,y:sample.pvalue,stroke:1,type:1}); + pvs.push({x:50,y:sample.pvalue,stroke:1,type:1}); + }else{ + pvs.push({x:sample.pvalue,y:-50,stroke:1,type:1}); + pvs.push({x:sample.pvalue,y:50,stroke:1,type:1}); + } + } + }` + ] + } + } + } + }; + const __vite_glob_0_7$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: circleSplit + }, Symbol.toStringTag, { value: "Module" })); + const circleText = { + "id": "100003", + "name": "ddei.control.circle", + "code": "circle", + "desc": "由极坐标系构造的圆形,带有text", + "from": "100103", + "define": { + ext: { + //采样信息 + sample: { + //采样的规则,多组采样返回多组规则 + rules: [ + //文本区域 + `(i, sample, pvs, model, ovs){ + pvs.push({x:sample.x,y:sample.y,r:sample.r,text:1}); + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_8$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: circleText + }, Symbol.toStringTag, { value: "Module" })); + const circle = { + "id": "100103", + "name": "ddei.control.circle", + "code": "circle", + "desc": "由极坐标系构造的圆形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,clip:1,begin:1,end:1}); + } + }` + ] + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_9$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: circle + }, Symbol.toStringTag, { value: "Module" })); + const cube = { + "id": "100501", + "name": "ddei.control.cube", + "code": "cube", + "desc": "正方体", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //只采样一次 + loop: 1, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //允许文本输入 + textInput: 1, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,stroke:1,select:1,oppoint:2,fill:1}); + pvs.push({x:-50,y:50,stroke:1,select:1,oppoint:2,fill:1}); + pvs.push({x:-50,y:-50,stroke:1,select:1,oppoint:2,fill:1}); + pvs.push({x:-45,y:-60,stroke:1,select:1,oppoint:1,fill:1}); + pvs.push({x:55,y:-60,stroke:1,select:1,oppoint:1,fill:1}); + pvs.push({end:1,x:55,y:40,stroke:1,select:1,oppoint:1,fill:1}); + }`, + //内部连线 + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:-50,y:-50,stroke:1}); + pvs.push({x:50,y:-50,stroke:1,oppoint:2,op2close:1}); + pvs.push({x:55,y:-60,stroke:1}); + pvs.push({x:-50,y:-50,type:3}); + pvs.push({x:50,y:-50,stroke:1}); + pvs.push({x:50,y:50,stroke:1}); + pvs.push({x:-50,y:-50,type:3}); + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + pvs.push({x:-48,y:48,text:sample.textInput}); + pvs.push({x:-48,y:-48,text:sample.textInput}); + pvs.push({x:48,y:-48,text:sample.textInput}); + pvs.push({x:48,y:48,text:sample.textInput}); + }` + ] + } + } + }; + const __vite_glob_0_10$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: cube + }, Symbol.toStringTag, { value: "Module" })); + const diamondRound = { + "id": "100041", + "name": "ddei.control.diamond", + "code": "diamond", + "desc": "圆角的菱形", + "from": "100040", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_11$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: diamondRound + }, Symbol.toStringTag, { value: "Module" })); + const diamond = { + "id": "100040", + "name": "ddei.control.diamond", + "code": "diamond", + "desc": "标准的菱形", + "from": "100500", + "define": { + width: 160, + height: 80, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + pvs.push({begin:i==0,end:i==3,x:sample.x,y:sample.y,select:1,oppoint:1,stroke:1,fill:1,clip:1}); + }`, + `(i, sample, pvs, model, ovs){ + let er = sample.r * Math.cos(45) + let x = er * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = er * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({begin:i==0,end:i==3,x:x,y:y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_12$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: diamond + }, Symbol.toStringTag, { value: "Module" })); + const ellipse = { + "id": "100006", + "name": "ddei.control.ellipse", + "code": "ellipse", + "desc": "由极坐标系构造的椭圆形", + "from": "100500", + "define": { + width: 160, + height: 80, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,clip:1,begin:1,end:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + pvs.push({x:sample.x,y:sample.y,r:sample.r,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_13$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: ellipse + }, Symbol.toStringTag, { value: "Module" })); + const fivestar = { + "id": "100070", + "name": "ddei.control.fivestar", + "code": "fivestar", + "desc": "由极坐标系构造的五角星", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈10次采样 + loop: 10, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model,ovs){ + let er = i % 2 == 0 ? sample.r : sample.r / 2.7+(ovs[0].x-ovs[0].ovi.x) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({ begin:i==0,end:i==9,x: x, y: y ,fill:1,select:1,stroke:1,clip:1,oppoint:1}); + }`, + `(i, sample, pvs, model,ovs){ + if (i == 0) { + let er = sample.r / 3+(ovs[0].x-ovs[0].ovi.x) + let x = er * Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let y = er * Math.sin(45 * DDeiConfig.ROTATE_UNIT) + pvs.push({ begin:1,x: x, y: y, text:1 }); + x = er * Math.cos(135 * DDeiConfig.ROTATE_UNIT) + y = er * Math.sin(135 * DDeiConfig.ROTATE_UNIT) + pvs.push({ x: x, y: y, text:1 }); + x = er * Math.cos(225 * DDeiConfig.ROTATE_UNIT) + y = er * Math.sin(225 * DDeiConfig.ROTATE_UNIT) + pvs.push({ x: x, y: y, text:1 }); + x = er * Math.cos(315 * DDeiConfig.ROTATE_UNIT) + y = er * Math.sin(315 * DDeiConfig.ROTATE_UNIT) + pvs.push({ end:1,x: x, y: y, text:1 }); + } + }` + ] + }, + //操作点定义 + ovs: [ + { + x: 10, + y: 0, + ix: 10, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 2, + //矩形范围 + x0: 0, + x1: 30, + y0: 0, + y1: 0 + } + } + ] + } + }; + const __vite_glob_0_14$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: fivestar + }, Symbol.toStringTag, { value: "Module" })); + const halfCircle = { + "id": "100110", + "name": "ddei.control.half-circle", + "code": "hcircle", + "desc": "由极坐标系构造的半圆形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //方向,上右下左1,2,3,4 + direct: 2, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let deltaRotate = 0 + switch(sample.direct){ + case 1: + deltaRotate = -90 + break; + case 3: + deltaRotate = -270 + break; + case 4: + deltaRotate = -180 + break; + } + let rad1 = (90+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad2 = (-90+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad0 = (deltaRotate) * DDeiConfig.ROTATE_UNIT + let x0 = sample.r * Math.cos(rad0) + let y0 = sample.r * Math.sin(rad0) + let x1 = sample.r * Math.cos(rad1) + let y1 = sample.r * Math.sin(rad1) + let x2 = sample.r * Math.cos(rad2) + let y2 = sample.r * Math.sin(rad2) + pvs.push({begin:1,x:x2,y:y2,r:sample.r,rad:rad2,stroke:1,type:2,direct:1}); + pvs.push({x:x2,y:y2,r:sample.r,rad:rad1,stroke:1,type:2,direct:1}); + pvs.push({x:x2,y:y2}); + pvs.push({end:1,x:0,y:0}); + pvs.push({x:x1,y:y1,type:0,oppoint:1}); + pvs.push({x:x2,y:y2,type:0,oppoint:1}); + + pvs.push({x:x0,y:0,type:0,oppoint:1}); + pvs.push({x:x2,y:0,type:0,oppoint:1}); + pvs.push({x:x0,y:y2,type:0}); + pvs.push({x:x0,y:y1,type:0}); + } + }`, + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }` + ] + }, + iconPos: { + dx: -50 + } + } + }; + const __vite_glob_0_15$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: halfCircle + }, Symbol.toStringTag, { value: "Module" })); + const hexagonRound = { + "id": "100031", + "name": "ddei.control.hexagon", + "code": "hexagon", + "desc": "由六个点构成的六边形", + "from": "100030", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_16$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: hexagonRound + }, Symbol.toStringTag, { value: "Module" })); + const hexagon = { + "id": "100030", + "name": "ddei.control.hexagon", + "code": "hexagon", + "desc": "由六个点构成的六边形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 6, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i == 0,end:i == 5,op2close:i == 5 ? 1 :0,oppoint:2,x:x,y:y,select:1,clip:1,stroke:1,fill:1}); + }`, + `(i, sample, pvs, model, ovs){ + + switch(i){ + case 0:; + case 2:; + case 3:; + case 5: + let er = sample.r / Math.cos(30 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+30) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + pvs.push({begin:i == 0,end:i == 5,x:x,y:y,text:1}); + ; + } + }` + ] + } + } + }; + const __vite_glob_0_17$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: hexagon + }, Symbol.toStringTag, { value: "Module" })); + const hexstar = { + "id": "100075", + "name": "ddei.control.hexstar", + "code": "hexstar", + "desc": "由极坐标系构造的六芒星", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈6次采样 + loop: 12, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let er = i%2 == 0 ? sample.r : sample.r * 0.58 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i==0,end:i==11, x: x, y: y, oppoint:1,select:1,clip:1,stroke:1,fill:1 }); + }`, + `(i, sample, pvs, model, ovs){ + if(i % 2 == 1){ + let er = sample.r * 0.58 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i==1,end:i==11, x: x, y: y,stroke:1,fill:1 }); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i % 2 == 0 && i != 6 && i !=0){ + let er = sample.r * 0.5 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i==2,end:i==10, x: x, y: y,text:1 }); + } + }` + ] + }, + textArea: [ + { x: -2.5, y: 32.5, z: 1 }, + { x: 102.5, y: 32.5, z: 1 }, + { x: 102.5, y: 142.5, z: 1 }, + { x: -2.5, y: 142.5, z: 1 } + ] + } + }; + const __vite_glob_0_18$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: hexstar + }, Symbol.toStringTag, { value: "Module" })); + const hexstar1 = { + "id": "100076", + "name": "ddei.control.hexstar", + "code": "hexstar", + "desc": "由极坐标系构造的六角星", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈6次采样 + loop: 12, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let er = i%2 == 0 ? sample.r : sample.r * 0.58 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i==0,end:i==11, x: x, y: y,select:1,clip:1,stroke:1,fill:1,oppoint:1 }); + }`, + `(i, sample, pvs, model, ovs){ + if(i % 2 == 0 && i != 6 && i !=0){ + let x = sample.x * 0.5 + let y = sample.y * 0.5 + pvs.push({begin:i==2,end:i==10, x: x, y: y,text:1 }); + } + }` + ] + } + } + }; + const __vite_glob_0_19$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: hexstar1 + }, Symbol.toStringTag, { value: "Module" })); + const hexstar2 = { + "id": "100077", + "name": "ddei.control.hexstar", + "code": "hexstar", + "desc": "由极坐标系构造的六芒星", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈6次采样 + loop: 12, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选择范围 + `(i, sample, pvs, model, ovs){ + if(i % 3 == 0){ + let er = (sample.r+5) / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = er * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({ begin:i==0,end:i==9,x: x, y: y,select:1 }); + } + }`, + //第一层圈 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let er = sample.r+5 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:1,end:1, x: x, y: y,r:er,clip:1,stroke:1,fill:1 }); + } + }`, + //第二层圈 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,end:1, x: sample.x, y: sample.y,r:sample.r,stroke:1,fill:1 }); + } + }`, + //六边形外围 + `(i, sample, pvs, model, ovs){ + let er = i%2 == 0 ? sample.r : sample.r * 0.58 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({ begin:i==0,end:i==11,x: x, y: y,oppoint:1,stroke:1,fill:1 }); + }`, + //内部五边形 + `(i, sample, pvs, model, ovs){ + if(i % 2 == 1){ + let x = sample.x * 0.58 + let y = sample.y * 0.58 + pvs.push({ begin:i==1,end:i==11,x: x, y: y,stroke:1,fill:1 }); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i % 2 == 0 && i != 6 && i !=0){ + let x = sample.x*0.5 + let y = sample.y*0.5 + pvs.push({ begin:i==2,end:i==10,x: x, y: y,text:1 }); + } + }` + ] + } + } + }; + const __vite_glob_0_20$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: hexstar2 + }, Symbol.toStringTag, { value: "Module" })); + const leftArrow = { + "id": "100121", + "name": "ddei.control.arrow-left", + "code": "arr-l", + "desc": "指向左边的箭头", + "from": "100120", + "define": { + //采样信息 + ext: { + sample: { + angle: 180 + } + } + } + }; + const __vite_glob_0_21$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: leftArrow + }, Symbol.toStringTag, { value: "Module" })); + const parallelogramRound = { + "id": "100051", + "name": "ddei.control.paralgram", + "code": "paralgram", + "desc": "由4个点组成的平行四边形", + "from": "100050", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_22$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: parallelogramRound + }, Symbol.toStringTag, { value: "Module" })); + const parallelogram = { + "id": "100050", + "name": "ddei.control.paralgram", + "code": "paralgram", + "desc": "由4个点组成的平行四边形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model,ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,stroke:1,fill:1}); + break; + case 1: + pvs.push({x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,stroke:1,fill:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,stroke:1,fill:1}); + break; + case 3: + pvs.push({end:1,x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,op2close:1,stroke:1,fill:1}); + pvs[0].y = pvs[1].y + pvs[1].x = pvs[2].x + pvs[2].y = pvs[3].y + pvs[3].x = pvs[0].x+(ovs[0].x-ovs[0].ovi.x) + pvs[2].x = pvs[2].x+(ovs[0].x-ovs[0].ovi.x) + pvs[0].x = pvs[0].x-(ovs[0].x-ovs[0].ovi.x) + pvs[1].x = pvs[1].x-(ovs[0].x-ovs[0].ovi.x) + break; + } + }`, + //文本区域 + `(i, sample, pvs, model,ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,text:1}); + break; + case 1: + pvs.push({x:sample.x,y:sample.y,text:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y,text:1}); + break; + case 3: + pvs.push({end:1,x:sample.x,y:sample.y,text:1}); + pvs[0].y = pvs[1].y + pvs[1].x = pvs[2].x + pvs[2].y = pvs[3].y + pvs[3].x = pvs[0].x+(ovs[0].x-ovs[0].ovi.x) + pvs[2].x = pvs[2].x+(ovs[0].x-ovs[0].ovi.x) + pvs[0].x = pvs[0].x-(ovs[0].x-ovs[0].ovi.x) + pvs[1].x = pvs[1].x-(ovs[0].x-ovs[0].ovi.x) + + let x0 = Math.max(pvs[1].x,pvs[2].x) + let x1 = Math.min(pvs[3].x,pvs[0].x) + pvs[0].x = x1 + pvs[3].x = x1 + pvs[1].x = x0 + pvs[2].x = x0 + + break; + } + }` + ] + }, + //操作点定义 + ovs: [ + { + x: 25, + y: -50, + ix: 0, + iy: -50, + //约束,控制点的移动路径和位置 + constraint: { + type: 2, + //矩形范围 + x0: -100, + x1: 100, + y0: -50, + y1: -50 + } + } + ] + } + }; + const __vite_glob_0_23$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: parallelogram + }, Symbol.toStringTag, { value: "Module" })); + const pentagonRound = { + "id": "100021", + "name": "ddei.control.pentagon", + "code": "pentagon", + "desc": "由五个点构成的五边形", + "from": "100020", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_24$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: pentagonRound + }, Symbol.toStringTag, { value: "Module" })); + const pentagon = { + "id": "100020", + "name": "ddei.control.pentagon", + "code": "pentagon", + "desc": "由五个点构成的五边形", + "from": "100500", + "define": { + width: 154, + height: 154, + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈5次采样 + loop: 5, + //初始次采样的开始角度 + angle: 198, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 4: + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1,clip:1,oppoint:2,op2close:i == 4?1:0,stroke:1,fill:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:28,y:35,text:1}); + pvs.push({x:-28,y:35,text:1}); + pvs.push({x:-28,y:-28,text:1}); + pvs.push({end:1,x:28,y:-28,text:1}); + } + }` + ] + } + } + }; + const __vite_glob_0_25$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: pentagon + }, Symbol.toStringTag, { value: "Module" })); + const rectangleBorder = { + "id": "100007", + "name": "ddei.control.rectangle", + "code": "rect", + "desc": "带边框的矩形", + "from": "100002", + "define": { + width: 160, + height: 80, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let er = sample.r * 1.25 + let x = er * sample.cos + let y = er * sample.sin + let begin = 0,end = 0,op2close = 0 + switch(i){ + case 0: + begin = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + op2close = 1 + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:begin,end:end,x:x,y:y,r:er,select:1,clip:1,oppoint:2,op2close:op2close}); + }`, + `(i, sample, pvs, model, ovs){ + let er = sample.r + let x = sample.x + let y = sample.y + let begin = 0,end = 0 + switch(i){ + case 0: + begin = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:begin,end:end,x:x,y:y,r:er,stroke:1,fill:1,text:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 200, + height: 100, + id: "100002", + cIndex: 1 + } + ] + } + }; + const __vite_glob_0_26$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rectangleBorder + }, Symbol.toStringTag, { value: "Module" })); + const rectangleRound = { + "id": "100005", + "name": "ddei.control.rectangle", + "code": "rect", + "desc": "由4个点组成的矩形", + "from": "100002", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_27$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rectangleRound + }, Symbol.toStringTag, { value: "Module" })); + const rectangleSplit = { + "id": "100009", + "name": "ddei.control.rectangle-split", + "code": "rect", + "desc": "由4个点组成的长方形,从中间横向/纵向切割开", + "from": "100008", + "define": { + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + direct: 1, + //1横向切割,2纵向切割 + pvalue: -10, + //切割的坐标,横向切割时为纵坐标,纵向切割时为横坐标 + rules: [ + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(sample.direct == 1){ + pvs.push({x:-50,y:sample.pvalue,stroke:1,type:1}); + pvs.push({x:50,y:sample.pvalue,stroke:1,type:1}); + }else{ + pvs.push({x:sample.pvalue,y:-50,stroke:1,type:1}); + pvs.push({x:sample.pvalue,y:50,stroke:1,type:1}); + } + } + }` + ] + } + } + } + }; + const __vite_glob_0_28$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rectangleSplit + }, Symbol.toStringTag, { value: "Module" })); + const rectangleText = { + "id": "100002", + "name": "ddei.control.rectangle", + "code": "rect", + "desc": "由4个点组成的长方形", + "from": "100008", + "define": { + ext: { + sample: { + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,text:1}); + }` + ] + } + } + } + }; + const __vite_glob_0_29$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rectangleText + }, Symbol.toStringTag, { value: "Module" })); + const rectangle = { + "id": "100008", + "name": "ddei.control.rectangle", + "code": "rect", + "desc": "由4个点组成的长方形", + "from": "100000", + "define": { + width: 160, + height: 80, + ext: { + //采样信息 + sample: { + eqrat: false + } + } + } + }; + const __vite_glob_0_30$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rectangle + }, Symbol.toStringTag, { value: "Module" })); + const rightArrow = { + "id": "100120", + "name": "ddei.control.arrow-right", + "code": "arr-r", + "desc": "指向右边的箭头", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈12次采样 + loop: 12, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + if(i % 4 == 0){ + let op2close = 0 + if(i == 8){ + op2close = 1 + } + pvs.push({begin:i == 0,end:i == 8,x:sample.x,y:sample.y,select:1,clip:1,oppoint:2,op2close:op2close,stroke:1,fill:1}); + } + }` + ] + } + } + }; + const __vite_glob_0_31$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: rightArrow + }, Symbol.toStringTag, { value: "Module" })); + const squareRound = { + "id": "100004", + "name": "ddei.control.square", + "code": "square", + "desc": "由4个点组成的正方形", + "from": "100001", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_32$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: squareRound + }, Symbol.toStringTag, { value: "Module" })); + const squareText = { + "id": "100001", + "name": "ddei.control.square", + "code": "square", + "desc": "由4个点组成的正方形", + "from": "100000", + "define": { + ext: { + sample: { + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,text:1}); + }` + ] + } + } + } + }; + const __vite_glob_0_33$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: squareText + }, Symbol.toStringTag, { value: "Module" })); + const square = { + "id": "100000", + "name": "ddei.control.square", + "code": "square", + "desc": "由4个点组成的正方形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0,op2close = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + op2close = 1 + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,oppoint:2,op2close:op2close,align:1,stroke:1,fill:1}); + }` + ] + } + } + }; + const __vite_glob_0_34$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: square + }, Symbol.toStringTag, { value: "Module" })); + const text = { + "id": "100200", + "name": "ddei.control.text", + "code": "text", + "desc": "跟随内容变化大小的文本", + "from": "100002", + "define": { + borderType: 0, + border: { + type: 0, + selected: { + type: 1, + dash: [5, 5], + width: 1 + } + }, + fill: { + type: 0 + }, + text: "ddei.property.text", + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.text", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.lockWidth", + "textStyle.paddingWeight", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + }, + { + name: "ddei.border", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text", "fmt.type", "fmt.nscale", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.mrmb", "fmt.dtype", "fmt.format"] + } + ] + } + ], + attrs: [ + { + "code": "textStyle.paddingWeight", + "name": "ddei.property.paddingWeight", + "desc": "超范围自动扩展的情况下保留的宽度", + "controlType": "text", + "dataType": "integer", + "defaultValue": 10, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "textStyle.scale", + "name": "ddei.property.outSize", + "desc": "文本的超出范围后的策略", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.hidden", "value": "0" }, { "text": "ddei.property.ds.ellipsis", "value": "2" }, { "text": "ddei.property.ds.narrow", "value": "1" }, { "text": "ddei.property.ds.ext", "value": "3" }], + "defaultValue": 3, + "cascadeDisplay": { 3: { show: ["textStyle.lockWidth", "textStyle.paddingWeight"], hidden: [] }, default: { show: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, empty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, notempty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] } } + } + ] + } + } + }; + const __vite_glob_0_35$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: text + }, Symbol.toStringTag, { value: "Module" })); + const trapezoidRound = { + "id": "100061", + "name": "ddei.control.trapezoid", + "code": "trapezoid", + "desc": "由4个点组成的梯形", + "from": "100060", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_36$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: trapezoidRound + }, Symbol.toStringTag, { value: "Module" })); + const trapezoid = { + "id": "100060", + "name": "ddei.control.trapezoid", + "code": "trapezoid", + "desc": "由4个点组成的梯形", + "from": "100500", + "define": { + width: 160, + height: 80, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0,op2close = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + sample.x+=20 + break; + case 3: + op2close = 1 + pvs[2].y=sample.y + sample.x = pvs[0].x-20 + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:op2close,select:1,clip:1,stroke:1,fill:1}); + }`, + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + sample.x -= 20 + break; + case 1: + pvs[0].y=sample.y + sample.x += 20 + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_37$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: trapezoid + }, Symbol.toStringTag, { value: "Module" })); + const triangleLeft90Round = { + "id": "100014", + "name": "ddei.control.triangle-left-90", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100011", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_38$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangleLeft90Round + }, Symbol.toStringTag, { value: "Module" })); + const triangleLeft90 = { + "id": "100011", + "name": "ddei.control.triangle-left-90", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈1次采样 + loop: 1, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,select:1,clip:1}); + pvs.push({x:-50,y:50,select:1,clip:1}); + pvs.push({x:-50,y:-50,select:1,clip:1}); + pvs.push({end:1,x:50,y:-50,select:1,clip:1}); + }`, + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,oppoint:2,align:1,stroke:1,fill:1}); + pvs.push({x:-50,y:50,oppoint:2,align:1,stroke:1,fill:1}); + pvs.push({end:1,x:-50,y:-50,oppoint:2,op2close:1,align:1,stroke:1,fill:1}); + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:50,text:1}); + pvs.push({x:0,y:50,text:1}); + pvs.push({x:0,y:0,text:1}); + pvs.push({end:1,x:-50,y:0,text:1}); + } + }` + ] + } + } + }; + const __vite_glob_0_39$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangleLeft90 + }, Symbol.toStringTag, { value: "Module" })); + const triangleRight90Round = { + "id": "100015", + "name": "ddei.control.triangle-right-90", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100012", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_40$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangleRight90Round + }, Symbol.toStringTag, { value: "Module" })); + const triangleRight90 = { + "id": "100012", + "name": "ddei.control.triangle-right-90", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈1次采样 + loop: 1, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,select:1,clip:1}); + pvs.push({x:-50,y:50,select:1,clip:1}); + pvs.push({x:-50,y:-50,select:1,clip:1}); + pvs.push({end:1,x:50,y:-50,select:1,clip:1}); + }`, + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,oppoint:2,align:1,stroke:1,fill:1}); + pvs.push({x:-50,y:50,oppoint:2,align:1,stroke:1,fill:1}); + pvs.push({end:1,x:50,y:-50,oppoint:2,op2close:1,align:1,stroke:1,fill:1}); + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:50,y:50,text:1}); + pvs.push({x:0,y:50,text:1}); + pvs.push({x:0,y:0,text:1}); + pvs.push({end:1,x:50,y:0,text:1}); + } + }` + ] + } + } + }; + const __vite_glob_0_41$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangleRight90 + }, Symbol.toStringTag, { value: "Module" })); + const triangleRound = { + "id": "100013", + "name": "ddei.control.triangle", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100010", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_42$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangleRound + }, Symbol.toStringTag, { value: "Module" })); + const triangle = { + "id": "100010", + "name": "ddei.control.triangle", + "code": "triangle", + "desc": "由三个点构成的三角形", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈12次采样 + loop: 12, + //初始次采样的开始角度 + angle: -90, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + if(i % 4 == 0){ + let op2close = 0 + if(i == 8){ + op2close = 1 + } + pvs.push({begin:i == 0,end:i == 8,x:sample.x,y:sample.y,clip:1,oppoint:2,op2close:op2close,stroke:1,fill:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i % 3 == 0){ + let er = sample.r/2 + let x = er * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = er * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({begin:i == 0,end:i == 9,x:x,y:y,text:1}); + } + }`, + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let sita = 45; + let rad = sita * DDeiConfig.ROTATE_UNIT + let cos = parseFloat(Math.cos(rad).toFixed(4)) + let sin = parseFloat(Math.sin(rad).toFixed(4)) + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * cos + let y = er * sin + pvs.push({x:x,y:y,r:er,select:1}); + sita = 135; + rad = sita * DDeiConfig.ROTATE_UNIT + cos = parseFloat(Math.cos(rad).toFixed(4)) + sin = parseFloat(Math.sin(rad).toFixed(4)) + er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + x = er * cos + y = er * sin + pvs.push({x:x,y:y,r:er,select:1}); + sita = 225; + rad = sita * DDeiConfig.ROTATE_UNIT + cos = parseFloat(Math.cos(rad).toFixed(4)) + sin = parseFloat(Math.sin(rad).toFixed(4)) + er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + x = er * cos + y = er * sin + pvs.push({x:x,y:y,r:er,select:1}); + sita = 315; + rad = sita * DDeiConfig.ROTATE_UNIT + cos = parseFloat(Math.cos(rad).toFixed(4)) + sin = parseFloat(Math.sin(rad).toFixed(4)) + er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + x = er * cos + y = er * sin + pvs.push({x:x,y:y,r:er,select:1}); + } + }` + ] + }, + iconPos: { + dy: 10 + } + } + }; + const __vite_glob_0_43$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: triangle + }, Symbol.toStringTag, { value: "Module" })); + const flowCardTab = { + "id": "102053", + "name": "ddei.control.card", + "code": "fct", + "desc": "流程的卡片", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let weight = 20 + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 1: + pvs[0].y=sample.y + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs[1].x=sample.x + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 3: + pvs[2].y=sample.y+weight + pvs.push({x:pvs[2].x+weight,y:sample.y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + sample.x = pvs[0].x + + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,stroke:1,fill:1,oppoint:2,op2close:1,end:1}); + + pvs.push({x:sample.x,y:pvs[2].y,text:1,type:0}); + break; + } + + }` + ] + } + } + }; + const __vite_glob_0_44$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowCardTab + }, Symbol.toStringTag, { value: "Module" })); + const flowControlTransfer = { + "id": "102058", + "name": "ddei.control.controltran", + "code": "ctran", + "desc": "控制传递", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + cpv: { + x: 0, + y: 0 + }, + //组合控件 + composes: [ + { + width: 30, + height: 30, + id: "100120", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + } + } + ], + //操作点 + ovs: [ + { + x: 0, + y: 0, + ix: 0, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 1, + //跟随线段 + pvs: ["pvs"] + //当前对象的pvs + // type: 5, //不允许移动,固定路径位置,沿路径方向,固定在等比例或者等长度位置(长度不足则按照0.5比例位置) + // pvs: ["pvs[0]","pvs[1]"],//定义路径 + // rate:0.5, //固定比例 + // len: 0 //固定长度 + }, + //联动,点移动后控制的其它点 + links: [ + { + type: 1, + //1施加矩阵 + // type:2,//同步中心点 + pvs: ["composes[0]"] + } + ] + } + ] + } + }; + const __vite_glob_0_45$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowControlTransfer + }, Symbol.toStringTag, { value: "Module" })); + const flowData = { + "id": "102030", + "name": "ddei.data", + "code": "fdata", + "desc": "流程的数据节点", + "from": "100500", + "define": { + width: 150, + height: 90, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 45, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i,sample, pvs, model){ + let ds = i == 2 || i ==3 ? 5: -5 + let x = sample.x+ds + let y = sample.y + let op2close = i == 3 ? 1 :0 + pvs.push({begin:i==0,end:i==3, x: x, y: y,select:1,clip:1,fill:1,stroke:1,oppoint:2,op2close:op2close }); + }`, + `(i,sample, pvs, model){ + let ds = i == 1 || i ==2 ? 5: -5 + let x = sample.x+ds + let y = sample.y + pvs.push({ begin:i==0,end:i==3, x: x, y: y,text:1 }); + }` + ] + } + } + }; + const __vite_glob_0_46$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowData + }, Symbol.toStringTag, { value: "Module" })); + const flowData1 = { + "id": "102031", + "name": "ddei.data", + "code": "fdata", + "desc": "流程的数据节点", + "from": "102030", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_47$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowData1 + }, Symbol.toStringTag, { value: "Module" })); + const flowData2 = { + "id": "102032", + "name": "ddei.control.store-data", + "code": "fdata", + "desc": "流程的数据节点", + "from": "102030", + "define": { + width: 100, + height: 70, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 1, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let dr = -50/ Math.cos(45 * DDeiConfig.ROTATE_UNIT) + pvs.push({begin:1,x:-dr,y:50,select:1}) + pvs.push({x:dr,y:50,select:1}) + pvs.push({x:dr,y:-50,select:1}) + pvs.push({end:1,x:-dr,y:-50,select:1}) + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let dr = 50/ Math.cos(45 * DDeiConfig.ROTATE_UNIT) + pvs.push({x:100-dr,y:0,oppoint:1}) + pvs.push({x:-dr,y:0,oppoint:1}) + pvs.push({x:0,y:50,oppoint:1}) + pvs.push({x:0,y:-50,oppoint:1}) + }`, + //主体区域 + `(i, sample, pvs, model, ovs){ + let dr = 50/ Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad1 = 135 * DDeiConfig.ROTATE_UNIT + let rad2 = 225 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:50,y:50,stroke:1,fill:1,clip:1}) + pvs.push({x:-50,y:50,r:dr,rad:rad1,stroke:1,fill:1,clip:1}) + pvs.push({x:-50,y:-50,type:2,r:dr,rad:rad2,direct:1,stroke:1,fill:1,clip:1}) + pvs.push({x:50,y:-50,r:dr,rad:rad2,stroke:1,fill:1,clip:1}) + pvs.push({end:1,dx:100,type:2,r:dr,rad:rad1,direct:0,stroke:1,fill:1,clip:1}) + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + let dr = 50/ Math.cos(45 * DDeiConfig.ROTATE_UNIT) + pvs.push({begin:1,x:100-dr,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-50,text:1}) + pvs.push({end:1,x:100-dr,y:-50,text:1}) + }` + ] + }, + iconPos: { + dw: 15 + } + } + }; + const __vite_glob_0_48$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowData2 + }, Symbol.toStringTag, { value: "Module" })); + const flowData3 = { + "id": "102033", + "name": "ddei.control.seq-data", + "code": "sqdata", + "desc": "流程的顺序数据节点", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:50,y:50}); + pvs.push({y:50,x:0,stroke:1,type:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,begin:1,end:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + pvs.push({x:sample.x,y:sample.y,r:sample.r,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_49$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowData3 + }, Symbol.toStringTag, { value: "Module" })); + const flowDefflow = { + "id": "102041", + "name": "ddei.control.defined-flow", + "code": "defflow", + "desc": "流程的子流程节点", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 45, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + pvs.push({ begin:i==0,end:i==3,x: sample.x, y: sample.y,select:1,clip:1,stroke:1,fill:1 }); + }`, + `(i, sample, pvs, model, ovs){ + let er = sample.r + let x = sample.x + let y = sample.y + let op2close = i == 3?1:0 + pvs.push({x:x,y:y,r:er,type:0,oppoint:2,op2close:op2close}); + + }`, + `(i, sample, pvs, model, ovs){ + if(i == 1){ + pvs.push({begin:1, x: sample.x, y: sample.y,stroke:1}); + }else if(i == 2){ + pvs[3] = {end:1, x: sample.x, y: sample.y,stroke:1}; + pvs[1] = { x: sample.x+10, y: sample.y,stroke:1}; + pvs[2] = { x: pvs[0].x+10, y: pvs[0].y,stroke:1}; + } + }`, + `(i, sample, pvs, model, ovs){ + let ds = i == 1 || i ==2 ? 10: -10 + let x = sample.x+ds + let y = sample.y + pvs.push({ begin:i==0,end:i==3,x: x, y: y,text:1,stroke:1 }); + }` + ] + } + } + }; + const __vite_glob_0_50$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowDefflow + }, Symbol.toStringTag, { value: "Module" })); + const flowDelay = { + "id": "102055", + "name": "ddei.control.delay", + "code": "fdy", + "desc": "数据库图标", + "from": "100500", + "define": { + width: 80, + height: 80, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:100,y:50,select:1,clip:1}) + pvs.push({x:-50,y:50,select:1,clip:1}) + pvs.push({x:-50,y:-50,select:1,clip:1}) + pvs.push({end:1,x:100,y:-50,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:100,y:0,oppoint:1}) + pvs.push({x:0,y:50,oppoint:1}) + pvs.push({x:-50,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad90 = 90 * DDeiConfig.ROTATE_UNIT + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,fill:1,stroke:1,r:er,rad:0}); + break; + case 1: + pvs.push({x:x,y:y,fill:1,stroke:1}); + break; + case 2: + + pvs.push({x:x,y:y,fill:1,stroke:1,r:er,rad:rad90}); + break; + case 3: + pvs.push({x:x,y:y,fill:1,stroke:1,r:er,rad:-rad90}); + pvs.push({r:er,dx:50,rad:rad90,stroke:1,type:4,direct:1,end:1}); + pvs.push({r:sample.r}); + pvs.push({r:sample.r}); + break; + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:50,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-50,text:1}) + pvs.push({end:1,x:50,y:-50,text:1}) + } + }` + ] + }, + iconPos: { + dx: -20, + dw: 10 + } + } + }; + const __vite_glob_0_51$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowDelay + }, Symbol.toStringTag, { value: "Module" })); + const flowDisplayContent = { + "id": "102056", + "name": "ddei.control.display", + "code": "fdc", + "desc": "显示内容", + "from": "100500", + "define": { + width: 80, + height: 80, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:135,y:50,select:1,clip:1}) + pvs.push({x:-135,y:50,select:1,clip:1}) + pvs.push({x:-135,y:-50,select:1,clip:1}) + pvs.push({end:1,x:135,y:-50,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:65,y:0,oppoint:1}) + pvs.push({x:0,y:50,oppoint:1}) + pvs.push({x:-135,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad90 = 90 * DDeiConfig.ROTATE_UNIT + switch(i){ + case 0: + pvs.push({begin:1,x:x-10,y:y,fill:1,stroke:1,r:er,rad:0}); + break; + case 1: + pvs.push({x:x,y:y,fill:1,stroke:1}); + break; + case 2: + pvs.push({x:-135,y:0,fill:1,stroke:1}); + pvs.push({x:x,y:y,fill:1,stroke:1}); + break; + case 3: + pvs.push({x:x-10,y:y,fill:1,stroke:1,r:er,rad:-rad90,rd:0}); + pvs.push({r:er,dx:40,rad:rad90,stroke:1,type:4,direct:1,end:1}); + pvs.push({r:25}); + pvs.push({r:sample.r}); + break; + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:50,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-50,text:1}) + pvs.push({end:1,x:50,y:-50,text:1}) + } + }` + ] + }, + iconPos: { + dx: 20, + dw: 10 + }, + border: { + round: 5 + } + } + }; + const __vite_glob_0_52$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowDisplayContent + }, Symbol.toStringTag, { value: "Module" })); + const flowEnd = { + "id": "102090", + "name": "ddei.control.end", + "code": "end", + "desc": "流程的开始节点", + "from": "102001", + "define": { + width: 40, + height: 40, + fill: { + color: "black" + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_53$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowEnd + }, Symbol.toStringTag, { value: "Module" })); + const flowEnd1 = { + "id": "102091", + "name": "ddei.control.end", + "code": "end", + "desc": "流程的开始节点", + "from": "100003", + "define": { + width: 40, + height: 40, + cIndex: 1, + composes: [ + { + id: "102090", + width: 30, + height: 30, + cIndex: 2, + attrLinks: [ + { code: "fill", mapping: ["*"] }, + { code: "border", mapping: ["*"] } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_54$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowEnd1 + }, Symbol.toStringTag, { value: "Module" })); + const flowEnd2 = { + "id": "102092", + "name": "ddei.control.end", + "code": "end", + "desc": "流程的开始节点", + "from": "100003", + "define": { + width: 40, + height: 40, + fill: { + color: "red" + }, + border: { + type: 0 + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_55$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowEnd2 + }, Symbol.toStringTag, { value: "Module" })); + const flowEnd3 = { + "id": "102093", + "name": "ddei.control.end", + "code": "end", + "desc": "流程的开始节点", + "from": "100003", + "define": { + width: 40, + height: 40, + cIndex: 1, + composes: [ + { + id: "102001", + width: 30, + height: 30, + cIndex: 2, + attrLinks: [ + { code: "fill", mapping: ["*"] }, + { code: "border", mapping: ["*"] } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_56$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowEnd3 + }, Symbol.toStringTag, { value: "Module" })); + const flowHandInput = { + "id": "102052", + "name": "ddei.control.manualinput", + "code": "fhi", + "desc": "流程的手动输入节点", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let weight = 20 + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 1: + pvs[0].y=sample.y + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs[1].x=sample.x + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 3: + pvs[2].y=sample.y+weight + + sample.x = pvs[0].x + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,stroke:1,fill:1,oppoint:2,op2close:1,end:1}); + pvs.push({x:sample.x,y:pvs[2].y,text:1,type:0}); + + break; + } + + }` + ] + } + } + }; + const __vite_glob_0_57$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowHandInput + }, Symbol.toStringTag, { value: "Module" })); + const flowLoopArea = { + "id": "102050", + "name": "ddei.control.looparea", + "code": "fla", + "desc": "流程的循环界限", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let weight = 20 + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,select:1,clip:1,text:1,oppoint:2,stroke:1,fill:1}); + break; + case 1: + pvs[0].y=sample.y + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs[1].x=sample.x + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,stroke:1,oppoint:2,fill:1}); + break; + case 3: + pvs[2].y=sample.y+weight + pvs.push({x:pvs[2].x+weight,y:sample.y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + sample.x = pvs[0].x + pvs.push({x:sample.x-weight,y:sample.y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + pvs.push({x:sample.x,y:sample.y+weight,select:1,clip:1,text:1,stroke:1,oppoint:2,op2close:1,fill:1,end:1}); + + break; + } + + }` + ] + } + } + }; + const __vite_glob_0_58$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowLoopArea + }, Symbol.toStringTag, { value: "Module" })); + const flowManualOperate = { + "id": "102057", + "name": "ddei.control.manualoperate", + "code": "fmo", + "desc": "由人工手动完成的节点", + "from": "100500", + "define": { + width: 140, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: true, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + sample.x -= 20 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x = sample.x+20 + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x+20 + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 :0,select:1,clip:1,stroke:1,fill:1}); + }`, + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + sample.x +=20 + pvs[1].x = sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_59$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowManualOperate + }, Symbol.toStringTag, { value: "Module" })); + const flowPageRef = { + "id": "102051", + "name": "ddei.control.pageref", + "code": "fpr", + "desc": "流程的跨页引用", + "from": "100500", + "define": { + width: 70, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:sample.x,y:sample.y,select:1,clip:1,text:1,oppoint:2,stroke:1,fill:1}); + break; + case 1: + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y,select:1,clip:1,text:1,oppoint:2,stroke:1,fill:1}); + break; + case 3: + pvs.push({x:-pvs[0].x,y:sample.y,select:1,clip:1,text:1,oppoint:2,stroke:1,fill:1}); + pvs.push({x:pvs[0].x,y:sample.y,select:1,clip:1,text:1,oppoint:2,op2close:1,stroke:1,fill:1,end:1}); + + break; + } + + }` + ] + } + } + }; + const __vite_glob_0_60$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowPageRef + }, Symbol.toStringTag, { value: "Module" })); + const flowPrepare = { + "id": "102054", + "name": "ddei.control.prepare", + "code": "prepare", + "desc": "流程的准备", + "from": "100030", + "define": { + width: 100, + height: 70 + } + }; + const __vite_glob_0_61$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowPrepare + }, Symbol.toStringTag, { value: "Module" })); + const flowStart = { + "id": "102001", + "name": "ddei.control.start", + "code": "start", + "desc": "流程的开始节点", + "from": "100103", + "define": { + width: 40, + height: 40 + } + }; + const __vite_glob_0_62$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowStart + }, Symbol.toStringTag, { value: "Module" })); + const flowStart1 = { + "id": "102002", + "name": "ddei.control.start", + "code": "start", + "desc": "流程的开始节点", + "from": "102001", + "define": { + width: 100, + height: 50 + } + }; + const __vite_glob_0_63$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowStart1 + }, Symbol.toStringTag, { value: "Module" })); + const flowSubflow = { + "id": "102040", + "name": "ddei.control.subflow", + "code": "subflow", + "desc": "流程的子流程节点", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 45, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + pvs.push({ begin:i==0,end:i==3,x: sample.x, y: sample.y,select:1,clip:1,stroke:1,fill:1 }); + }`, + `(i, sample, pvs, model, ovs){ + let er = sample.r + let x = sample.x + let y = sample.y + pvs.push({x:x,y:y,r:er,type:0,oppoint:2,op2close:i == 3 ? 1: 0}); + + }`, + `(i, sample, pvs, model, ovs){ + let ds = i == 1 || i ==2 ? 10: -10 + let x = sample.x+ds + let y = sample.y + pvs.push({ begin:i==0,end:i==3,x: x, y: y,text:1,stroke:1 }); + }` + ] + } + } + }; + const __vite_glob_0_64$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowSubflow + }, Symbol.toStringTag, { value: "Module" })); + const flowSwitch = { + "id": "102020", + "name": "ddei.control.switch", + "code": "switch", + "desc": "流程的分支节点", + "from": "100040", + "define": { + width: 110, + height: 70 + } + }; + const __vite_glob_0_65$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowSwitch + }, Symbol.toStringTag, { value: "Module" })); + const flowSwitch1 = { + "id": "102021", + "name": "ddei.control.switch", + "code": "switch", + "desc": "流程的分支节点", + "from": "102020", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_66$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowSwitch1 + }, Symbol.toStringTag, { value: "Module" })); + const flowTask = { + "id": "102010", + "name": "ddei.control.task", + "code": "task", + "desc": "流程的任务节点", + "from": "100002", + "define": { + width: 110, + height: 70 + } + }; + const __vite_glob_0_67$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowTask + }, Symbol.toStringTag, { value: "Module" })); + const flowTask1 = { + "id": "102011", + "name": "ddei.control.task", + "code": "task", + "desc": "流程的任务节点", + "from": "102010", + "define": { + border: { + round: 5 + } + } + }; + const __vite_glob_0_68$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowTask1 + }, Symbol.toStringTag, { value: "Module" })); + const flowTask2 = { + "id": "102012", + "name": "ddei.control.start-or-end", + "code": "flowsoe", + "desc": "流程的开始或结束节点", + "from": "102010", + "define": { + height: 60, + width: 100, + border: { + round: 15 + } + } + }; + const __vite_glob_0_69$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: flowTask2 + }, Symbol.toStringTag, { value: "Module" })); + const bidfunnel = { + "id": "103007", + "name": "ddei.control.bindfunnel", + "code": "bidfunnel", + "desc": "双向漏斗", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 6, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i !=0 && i != 3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + pvs.push({begin:i == 1,end:i == 5,x:x,y:y,select:1,clip:1}); + } + }`, + //主体图形 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let x = er * sample.cos + let y = er * sample.sin + switch(i){ + case 1: + pvs.push({begin:1,x:x,y:y,oppoint:2,clip:1,stroke:1,fill:1}); + break; + case 2: + pvs.push({x:x,y:y,oppoint:2,clip:1,stroke:1,fill:1}); + pvs.push({x:0,y:0,oppoint:1,clip:1,stroke:1,fill:1}); + break; + case 4: + pvs.push({end:1,x:x,y:y,oppoint:2,op2close:1,clip:1,stroke:1,fill:1}); + break; + case 5: + pvs.splice(3,0,{x:x,y:y,oppoint:2,clip:1,stroke:1,fill:1}) + break; + } + }` + ] + } + } + }; + const __vite_glob_0_70$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bidfunnel + }, Symbol.toStringTag, { value: "Module" })); + const bracketBigLeftText = { + "id": "104124", + "name": "ddei.control.big-bracket", + "code": "bmt", + "desc": "左大括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104122", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_71$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketBigLeftText + }, Symbol.toStringTag, { value: "Module" })); + const bracketBigLeft = { + "id": "104122", + "name": "ddei.control.big-bracket", + "code": "bb", + "desc": "由极坐标系构造的右大括号,不带任何文本", + "from": "104121", + "define": { + width: 50, + height: 100, + ext: { + //采样信息 + sample: { + direct: 4 + } + } + } + }; + const __vite_glob_0_72$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketBigLeft + }, Symbol.toStringTag, { value: "Module" })); + const bracketBigRightText = { + "id": "104123", + "name": "ddei.control.big-bracket", + "code": "bbt", + "desc": "右大括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104121", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: -5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 3 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_73$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketBigRightText + }, Symbol.toStringTag, { value: "Module" })); + const bracketBigRight = { + "id": "104121", + "name": "ddei.control.big-bracket", + "code": "bb", + "desc": "由极坐标系构造的右大括号,不带任何文本", + "from": "100500", + "define": { + width: 50, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //方向,上右下左1,2,3,4 + direct: 2, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let deltaRotate = 0 + switch(sample.direct){ + case 1: + deltaRotate = -90 + break; + case 3: + deltaRotate = -270 + break; + case 4: + deltaRotate = -180 + break; + } + let rad1 = (72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad2 = (-72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad0 = (deltaRotate) * DDeiConfig.ROTATE_UNIT + let x0 = sample.r * Math.cos(rad0) + let y0 = sample.r * Math.sin(rad0) + let x1 = sample.r * Math.cos(rad1) + let y1 = sample.r * Math.sin(rad1) + let x2 = sample.r * Math.cos(rad2) + let y2 = sample.r * Math.sin(rad2) + switch(sample.direct){ + case 1: + pvs.push({begin:1,x:x2,y:y1+10,type:3}); + pvs.push({x:x2,y:y1+10,type:5,stroke:1}); + pvs.push({x:x2-2,y:y0+10}); + pvs.push({x:(x2+10)/2,y:y0+25}); + pvs.push({x:-10,y:y0+20}); + + pvs.push({x:-10,y:y0+20,type:5,stroke:1}); + pvs.push({x:-3,y:y0+18}); + pvs.push({x:0,y:y0+10}); + pvs.push({x:0,y:y0}); + + pvs.push({x:0,y:y0,stroke:1,type:5}); + pvs.push({x:0,y:y0+10}); + pvs.push({x:3,y:y0+18}); + pvs.push({x:10,y:y0+20}); + + pvs.push({x:10,y:y0+20,stroke:1,type:5}); + pvs.push({x:(x1-10)/2,y:y0+25}); + pvs.push({x:x1+2,y:y0+10}); + pvs.push({x:x1,y:y2+10}); + + + pvs.push({x:x1,y:y1+10,type:0,oppoint:1,select:1}); + pvs.push({x:x2,y:y2+10,type:0,oppoint:1,select:1}); + pvs.push({x:0,y:y0,type:0,oppoint:1}); + pvs.push({x:0,y:y2+10,type:0,oppoint:1}); + pvs.push({x:x2,y:y0,type:0,select:1}); + pvs.push({x:x1,y:y0,type:0,select:1}); + break; + case 2: + //由4段贝塞尔曲线构造 + pvs.push({begin:1,x:x2-10,y:y2,type:3}); + pvs.push({x:x2-10,y:y2,type:5,stroke:1}); + pvs.push({x:x0-10,y:y2-2}); + pvs.push({x:x0-25,y:(y2-10)/2}); + pvs.push({x:x0-20,y:-10}); + + pvs.push({x:x0-20,y:-10,stroke:1,type:5}); + pvs.push({x:x0-18,y:-3}); + pvs.push({x:x0-10,y:0}); + pvs.push({x:x0,y:0}); + + pvs.push({x:x0,y:0,stroke:1,type:5}); + pvs.push({x:x0-10,y:0}); + pvs.push({x:x0-18,y:3}); + pvs.push({x:x0-20,y:10}); + + pvs.push({x:x0-20,y:10,stroke:1,type:5}); + pvs.push({x:x0-25,y:(y1-10)/2}); + pvs.push({x:x0-10,y:y1+2}); + pvs.push({x:x2-10,y:y1}); + + pvs.push({x:x1-10,y:y1,type:0,oppoint:1,select:1}); + pvs.push({x:x2-10,y:y2,type:0,oppoint:1,select:1}); + pvs.push({x:x0,y:0,type:0,oppoint:1}); + pvs.push({x:x2-10,y:0,type:0,oppoint:1}); + pvs.push({x:x0,y:y2,type:0,select:1}); + pvs.push({x:x0,y:y1,type:0,select:1}); + break; + case 3: + //由4段贝塞尔曲线构造 + pvs.push({begin:1,x:x1,y:y1-10,type:3}); + pvs.push({x:x1,y:y1-10,type:5,stroke:1}); + pvs.push({x:x1-2,y:y0-10}); + pvs.push({x:(x1+10)/2,y:y0-25}); + pvs.push({x:-10,y:y0-20}); + + pvs.push({x:-10,y:y0-20,type:5,stroke:1}); + pvs.push({x:-3,y:y0-18}); + pvs.push({x:0,y:y0-10}); + pvs.push({x:0,y:y0}); + + pvs.push({x:0,y:y0,stroke:1,type:5}); + pvs.push({x:0,y:y0-10}); + pvs.push({x:3,y:y0-18}); + pvs.push({x:10,y:y0-20}); + + pvs.push({x:10,y:y0-20,stroke:1,type:5}); + pvs.push({x:(x2-10)/2,y:y0-25}); + pvs.push({x:x2+2,y:y0-10}); + pvs.push({x:x2,y:y2-10}); + + + pvs.push({x:x1,y:y1-10,type:0,oppoint:1,select:1}); + pvs.push({x:x2,y:y2-10,type:0,oppoint:1,select:1}); + pvs.push({x:0,y:y0,type:0,oppoint:1}); + pvs.push({x:0,y:y2-10,type:0,oppoint:1}); + pvs.push({x:x2,y:y0,type:0,select:1}); + pvs.push({x:x1,y:y0,type:0,select:1}); + + break; + case 4: + //由4段贝塞尔曲线构造 + pvs.push({begin:1,x:x2+10,y:y1,type:3}); + pvs.push({x:x2+10,y:y1,type:5,stroke:1}); + pvs.push({x:x0+10,y:y1-2}); + pvs.push({x:x0+25,y:(y1-10)/2}); + pvs.push({x:x0+20,y:-10}); + + pvs.push({x:x0+20,y:-10,stroke:1,type:5}); + pvs.push({x:x0+18,y:-3}); + pvs.push({x:x0+10,y:0}); + pvs.push({x:x0,y:0}); + + pvs.push({x:x0,y:0,stroke:1,type:5}); + pvs.push({x:x0+10,y:0}); + pvs.push({x:x0+18,y:3}); + pvs.push({x:x0+20,y:10}); + + pvs.push({x:x0+20,y:10,stroke:1,type:5}); + pvs.push({x:x0+25,y:(y2-10)/2}); + pvs.push({x:x0+10,y:y2+2}); + pvs.push({x:x2+10,y:y2}); + + pvs.push({x:x1+10,y:y2,type:0,oppoint:1,select:1}); + pvs.push({x:x2+10,y:y1,type:0,oppoint:1,select:1}); + pvs.push({x:x0,y:0,type:0,oppoint:1}); + pvs.push({x:x2+10,y:0,type:0,oppoint:1}); + pvs.push({x:x0,y:y1,type:0,select:1}); + pvs.push({x:x0,y:y2,type:0,select:1}); + break; + } + + + } + }` + ] + }, + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_74$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketBigRight + }, Symbol.toStringTag, { value: "Module" })); + const bracketBigText = { + "id": "104125", + "name": "ddei.control.big-bracket", + "code": "bmt", + "desc": "左右大括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1,oppoint:2,op2close:i == 3 ? 1 : 0,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104122", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 30, + height: 100, + id: "104121", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 140, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_75$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketBigText + }, Symbol.toStringTag, { value: "Module" })); + const bracketMiddleLeftText = { + "id": "104114", + "name": "ddei.control.middle-bracket", + "code": "bmt", + "desc": "左中括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104112", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_76$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketMiddleLeftText + }, Symbol.toStringTag, { value: "Module" })); + const bracketMiddleLeft = { + "id": "104112", + "name": "ddei.control.middle-bracket", + "code": "bm", + "desc": "由极坐标系构造的左中括号,不带任何文本", + "from": "104111", + "define": { + ext: { + sample: { + //方向,上右下左1,2,3,4 + direct: 4 + } + } + } + }; + const __vite_glob_0_77$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketMiddleLeft + }, Symbol.toStringTag, { value: "Module" })); + const bracketMiddleRightText = { + "id": "104113", + "name": "ddei.control.middle-bracket", + "code": "bmt", + "desc": "右中括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104111", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: -5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 3 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_78$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketMiddleRightText + }, Symbol.toStringTag, { value: "Module" })); + const bracketMiddleRight = { + "id": "104111", + "name": "ddei.control.middle-bracket", + "code": "bm", + "desc": "由极坐标系构造的右中括号,不带任何文本", + "from": "100500", + "define": { + width: 50, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //方向,上右下左1,2,3,4 + direct: 2, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let deltaRotate = 0 + switch(sample.direct){ + case 1: + deltaRotate = -90 + break; + case 3: + deltaRotate = -270 + break; + case 4: + deltaRotate = -180 + break; + } + let rad1 = (72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad2 = (-72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad0 = (deltaRotate) * DDeiConfig.ROTATE_UNIT + let x0 = sample.r * Math.cos(rad0) + let y0 = sample.r * Math.sin(rad0) + let x1 = sample.r * Math.cos(rad1) + let y1 = sample.r * Math.sin(rad1) + let x2 = sample.r * Math.cos(rad2) + let y2 = sample.r * Math.sin(rad2) + pvs.push({begin:1,x:x2,y:y2}); + pvs.push({x:x0,y:y2,stroke:1}); + pvs.push({x:x0,y:y1,stroke:1}); + pvs.push({x:x1,y:y1,stroke:1}); + + + pvs.push({x:x1,y:y1,type:0,oppoint:1,select:1}); + pvs.push({x:x2,y:y2,type:0,oppoint:1,select:1}); + + pvs.push({x:x0,y:0,type:0,oppoint:1}); + pvs.push({x:x2,y:0,type:0,oppoint:1}); + pvs.push({x:x0,y:y2,type:0,select:1}); + pvs.push({x:x0,y:y1,type:0,select:1}); + } + }` + ] + }, + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_79$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketMiddleRight + }, Symbol.toStringTag, { value: "Module" })); + const bracketMiddleText = { + "id": "104115", + "name": "ddei.control.middle-bracket", + "code": "bmt", + "desc": "左右中括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1,oppoint:2,op2close:i == 3 ? 1 : 0,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104112", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 30, + height: 100, + id: "104111", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 140, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_80$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketMiddleText + }, Symbol.toStringTag, { value: "Module" })); + const bracketSmallLeftText = { + "id": "104104", + "name": "ddei.control.small-bracket", + "code": "bst", + "desc": "左小括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104102", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_81$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketSmallLeftText + }, Symbol.toStringTag, { value: "Module" })); + const bracketSmallLeft = { + "id": "104102", + "name": "ddei.control.small-bracket", + "code": "bs", + "desc": "由极坐标系构造的左小括号,不带任何文本", + "from": "104101", + "define": { + ext: { + sample: { + //方向,上右下左1,2,3,4 + direct: 4 + } + } + } + }; + const __vite_glob_0_82$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketSmallLeft + }, Symbol.toStringTag, { value: "Module" })); + const bracketSmallRightText = { + "id": "104103", + "name": "ddei.control.small-bracket", + "code": "bst", + "desc": "右小括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,oppoint:2,op2close:i == 3 ? 1 : 0,select:1,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104101", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 150, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: -5, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1, + align: 3 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_83$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketSmallRightText + }, Symbol.toStringTag, { value: "Module" })); + const bracketSmallRight = { + "id": "104101", + "name": "ddei.control.small-bracket", + "code": "bs", + "desc": "由极坐标系构造的右小括号,不带任何文本", + "from": "100500", + "define": { + width: 50, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //方向,上右下左1,2,3,4 + direct: 2, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let deltaRotate = 0 + switch(sample.direct){ + case 1: + deltaRotate = -90 + break; + case 3: + deltaRotate = -270 + break; + case 4: + deltaRotate = -180 + break; + } + let rad1 = (72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad2 = (-72+deltaRotate) * DDeiConfig.ROTATE_UNIT + let rad0 = (deltaRotate) * DDeiConfig.ROTATE_UNIT + let x0 = sample.r * Math.cos(rad0) + let y0 = sample.r * Math.sin(rad0) + let x1 = sample.r * Math.cos(rad1) + let y1 = sample.r * Math.sin(rad1) + let x2 = sample.r * Math.cos(rad2) + let y2 = sample.r * Math.sin(rad2) + pvs.push({begin:1,x:x2,y:y2,r:sample.r,rad:rad2,stroke:1,type:2,direct:1}); + pvs.push({x:x2,y:y2,r:sample.r,rad:rad1,stroke:1,type:2,direct:1}); + pvs.push({x:x2,y:y2}); + pvs.push({end:1,x:0,y:0}); + pvs.push({x:x1,y:y1,type:0,oppoint:1,select:1}); + pvs.push({x:x2,y:y2,type:0,oppoint:1,select:1}); + + pvs.push({x:x0,y:0,type:0,oppoint:1}); + pvs.push({x:x2,y:0,type:0,oppoint:1}); + pvs.push({x:x0,y:y2,type:0,select:1}); + pvs.push({x:x0,y:y1,type:0,select:1}); + } + }` + ] + }, + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_84$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketSmallRight + }, Symbol.toStringTag, { value: "Module" })); + const bracketSmallText = { + "id": "104105", + "name": "ddei.control.small-bracket", + "code": "bst", + "desc": "左右小括号,带文本编辑", + "from": "100500", + "define": { + width: 160, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1,oppoint:2,op2close:i == 3 ? 1 : 0,clip:1}); + }` + ] + }, + //组合控件 + composes: [ + { + width: 30, + height: 100, + id: "104102", + cIndex: 2, + initCPV: { + x: -65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 30, + height: 100, + id: "104101", + cIndex: 2, + initCPV: { + x: 65, + y: 0, + z: 1 + }, + attrLinks: [ + { code: "border", mapping: ["*"] } + ] + }, + { + width: 140, + height: 95, + id: "100002", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + feed: 1, + scale: 1 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_85$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bracketSmallText + }, Symbol.toStringTag, { value: "Module" })); + const comment = { + "id": "103005", + "name": "ddei.control.comment", + "code": "comment", + "desc": "注释备注", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //允许文本输入 + textInput: 1, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let weight = 20 + let x=sample.x,y=sample.y + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,select:1,clip:1,oppoint:2,stroke:1,fill:1}); + break; + case 1: + pvs[0].y=y + pvs.push({x:x,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs[1].x=x + pvs.push({x:x,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + break; + case 3: + pvs[2].y=y + x = pvs[0].x + pvs.push({x:x-weight,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + pvs.push({x:x,y:y+weight,select:1,clip:1,stroke:1,oppoint:2,op2close:1,fill:1,end:1}); + + break; + } + }`, + `(i, sample, pvs, model, ovs){ + if(i==3){ + pvs.push({x:30,y:sample.y,stroke:1,type:1,begin:1}); + pvs.push({x:30,y:sample.y+20,stroke:1,type:1}); + pvs.push({x:50,y:sample.y+20,stroke:1,type:1}); + pvs.push({x:50,y:sample.y+20,end:1}); + } + }`, + //文本 + `(i, sample, pvs, model, ovs){ + if(sample.textInput){ + let weight = 20 + let x=sample.x,y=sample.y + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,text:1}); + break; + case 1: + pvs[0].y=y + pvs.push({x:x,y:y,text:1}); + break; + case 2: + pvs[1].x=x + pvs.push({x:x,y:y,text:1}); + break; + case 3: + pvs[2].y=y+weight + x = pvs[0].x + pvs.push({x:x,y:pvs[2].y,text:1}); + break; + } + } + }` + ] + } + } + }; + const __vite_glob_0_86$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: comment + }, Symbol.toStringTag, { value: "Module" })); + const comment1 = { + "id": "103008", + "name": "ddei.control.comment", + "code": "comment", + "desc": "跟随内容变化大小的注释文本", + "from": "100000", + "define": { + borderType: 0, + border: { + type: 0, + selected: { + type: 1, + dash: [5, 5], + width: 1 + } + }, + fill: { + type: 0 + }, + text: "ddei.control.comment", + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0,op2close = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + op2close = 1 + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,r:sample.r,select:1,clip:1,op2close:op2close,align:1,stroke:1,fill:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({type:0,x:50,y:0,oppoint:1}); + pvs.push({type:0,x:0,y:50,oppoint:1}); + pvs.push({type:0,x:-50,y:0,oppoint:1}); + pvs.push({type:0,x:0,y:-50,oppoint:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(model.exPvs){ + let left + for(let n in model.exPvs){ + let ep = model.exPvs[n] + if(ep.sita == 180){ + left = 1 + break + } + } + if(left){ + pvs.push({begin:1,x:-45,y:-50}); + pvs.push({x:-50,y:-50,stroke:1,forceStroke:1}); + pvs.push({x:-50,y:50,stroke:1,forceStroke:1}); + pvs.push({x:-45,y:50,stroke:1,forceStroke:1}); + pvs.push({end:1,x:-45,y:-50}); + } + } + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(model.exPvs){ + let right + for(let n in model.exPvs){ + let ep = model.exPvs[n] + if(ep.sita == 0){ + right = 1 + break; + } + } + + if(right){ + pvs.push({begin:1,x:45,y:-50}); + pvs.push({x:50,y:-50,stroke:1,forceStroke:1}); + pvs.push({x:50,y:50,stroke:1,forceStroke:1}); + pvs.push({x:45,y:50,stroke:1,forceStroke:1}); + pvs.push({end:1,x:45,y:50}); + } + + } + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(model.exPvs){ + let top + for(let n in model.exPvs){ + let ep = model.exPvs[n] + if(ep.sita == -90){ + top = 1 + break; + } + } + + if(top){ + pvs.push({begin:1,x:-50,y:-45}); + pvs.push({x:-50,y:-50,stroke:1,forceStroke:1}); + pvs.push({x:50,y:-50,stroke:1,forceStroke:1}); + pvs.push({x:50,y:-45,stroke:1,forceStroke:1}); + pvs.push({end:1,x:50,y:-45}); + } + + } + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + if(model.exPvs){ + let bottom + for(let n in model.exPvs){ + let ep = model.exPvs[n] + if(ep.sita == 90){ + bottom = 1 + break; + } + } + + if(bottom){ + pvs.push({begin:1,x:-50,y:45}); + pvs.push({x:-50,y:50,stroke:1,forceStroke:1}); + pvs.push({x:50,y:50,stroke:1,forceStroke:1}); + pvs.push({x:50,y:45,stroke:1,forceStroke:1}); + pvs.push({end:1,x:50,y:45}); + } + } + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,text:1}); + }` + ] + }, + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.paddingWeight", + "textStyle.lockWidth", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + }, + { + name: "ddei.border", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text", "fmt.type", "fmt.nscale", "fmt.tmark", "fmt.mmark", "fmt.munit", "fmt.mrmb", "fmt.dtype", "fmt.format"] + } + ] + } + ], + attrs: [ + { + "code": "textStyle.paddingWeight", + "name": "ddei.property.paddingWeight", + "desc": "超范围自动扩展的情况下保留的宽度", + "controlType": "text", + "dataType": "integer", + "defaultValue": 10, + "hiddenTitle": true, + "display": "column", + "type": [1, 2] + }, + { + "code": "textStyle.scale", + "name": "ddei.property.outSize", + "desc": "文本的超出范围后的策略", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.hidden", "value": "0" }, { "text": "ddei.property.ds.ellipsis", "value": "2" }, { "text": "ddei.property.ds.narrow", "value": "1" }, { "text": "ddei.property.ds.ext", "value": "3" }], + "defaultValue": 3, + "cascadeDisplay": { 3: { show: ["textStyle.lockWidth", "textStyle.paddingWeight"], hidden: [] }, default: { show: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, empty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] }, notempty: { hidden: ["textStyle.lockWidth", "textStyle.paddingWeight"] } } + } + ] + } + } + }; + const __vite_glob_0_87$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: comment1 + }, Symbol.toStringTag, { value: "Module" })); + const database = { + "id": "103010", + "name": "ddei.database", + "code": "database", + "desc": "数据库图标", + "from": "100500", + "define": { + width: 100, + height: 60, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:50+dn,select:1,clip:1}) + pvs.push({x:-50,y:50+dn,select:1,clip:1}) + pvs.push({x:-50,y:-50-dn,select:1,clip:1}) + pvs.push({end:1,x:50,y:-50-dn,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:0,oppoint:1}) + pvs.push({x:0,y:50+dn,oppoint:1}) + pvs.push({x:-50,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50-dn,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad180 = 0 + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,fill:1,r:er,rad:0}); + break; + case 1: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:50,rad:rad180,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({x:pvs[0].x,y:pvs[0].y}); + pvs.push({x:x,y:y}); + break; + case 2: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({x:x,y:y,stroke:1,rad:rad180,r:er}); + break; + case 3: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:-50,rad:0,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({x:pvs[0].x,y:pvs[0].y,stroke:1}); + pvs.push({end:1,x:pvs[0].x,y:pvs[0].y}); + break; + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180}); + break; + case 3: + pvs.push({r:er,dy:-50,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 10; + pvs.push({begin:1,x:50,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-50+dn,text:1}) + pvs.push({end:1,x:50,y:-50+dn,text:1}) + } + }` + ] + } + } + }; + const __vite_glob_0_88$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: database + }, Symbol.toStringTag, { value: "Module" })); + const database1 = { + "id": "103011", + "name": "ddei.database", + "code": "database", + "desc": "数据库图标", + "from": "100500", + "define": { + width: 100, + height: 60, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:50+dn,select:1,clip:1}) + pvs.push({x:-50,y:50+dn,select:1,clip:1}) + pvs.push({x:-50,y:-50-dn,select:1,clip:1}) + pvs.push({end:1,x:50,y:-50-dn,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:0,oppoint:1}) + pvs.push({x:0,y:50+dn,oppoint:1}) + pvs.push({x:-50,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50-dn,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad180 = 0 + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,fill:1,r:er,rad:0}); + break; + case 1: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:50,rad:rad180,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({x:pvs[0].x,y:pvs[0].y}); + pvs.push({x:x,y:y}); + break; + case 2: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({x:x,y:y,stroke:1,rad:rad180,r:er}); + break; + case 3: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:-50,rad:0,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({x:pvs[0].x,y:pvs[0].y,stroke:1}); + pvs.push({end:1,x:pvs[0].x,y:pvs[0].y}); + break; + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180}); + break; + case 3: + pvs.push({r:er,dy:-50,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180}); + break; + case 3: + pvs.push({r:er,dy:-40,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180}); + break; + case 3: + pvs.push({r:er,dy:-30,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:10}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 10; + pvs.push({begin:1,x:50,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-30+dn,text:1}) + pvs.push({end:1,x:50,y:-30+dn,text:1}) + } + }` + ] + } + } + }; + const __vite_glob_0_89$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: database1 + }, Symbol.toStringTag, { value: "Module" })); + const database2 = { + "id": "103012", + "name": "ddei.database", + "code": "database", + "desc": "数据库图标", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:50,select:1,clip:1}) + pvs.push({x:-50,y:50,select:1,clip:1}) + pvs.push({x:-50,y:-50-dn,select:1,clip:1}) + pvs.push({end:1,x:50,y:-50-dn,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50,y:0,oppoint:1}) + pvs.push({x:0,y:56,oppoint:1}) + pvs.push({x:-50,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50-dn,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad180 = 0 + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,fill:1,r:er,rad:0,strokeClear:1}); + break; + case 1: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:35,rad:rad180,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:20}); + pvs.push({x:pvs[0].x,y:pvs[0].y}); + pvs.push({x:x,y:y}); + break; + case 2: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({x:x,y:y,stroke:1,rad:rad180,r:er}); + break; + case 3: + rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({r:er,dy:-40,rad:0,stroke:1,type:4,direct:1}); + pvs.push({r:sample.r}); + pvs.push({r:25}); + pvs.push({end:1,x:pvs[0].x,y:pvs[0].y,stroke:1}); + break; + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180,strokeClear:1}); + break; + case 3: + pvs.push({r:er,dy:-40,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:25}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180,strokeClear:1}); + break; + case 3: + pvs.push({r:er,dy:-12,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:20}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }`, + // 上方的下半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 2 || i ==3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + switch(i){ + case 2: + let rad180 = 180 * DDeiConfig.ROTATE_UNIT + pvs.push({begin:1,x:x,y:y,r:er,rad:rad180,strokeClear:1}); + break; + case 3: + pvs.push({r:er,dy:12,rad:0,stroke:1,type:4,direct:0}); + pvs.push({r:sample.r}); + pvs.push({r:20}); + pvs.push({end:1,x:x,y:y}); + break; + } + } + }` + ] + }, + border: { + width: 10 + }, + fill: { + color: "#017fff" + } + } + }; + const __vite_glob_0_90$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: database2 + }, Symbol.toStringTag, { value: "Module" })); + const database3 = { + "id": "103013", + "name": "ddei.database", + "code": "database", + "desc": "数据库图标", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50+dn,y:50,select:1,clip:1}) + pvs.push({x:-50-dn,y:50,select:1,clip:1}) + pvs.push({x:-50-dn,y:-50,select:1,clip:1}) + pvs.push({end:1,x:50+dn,y:-50,select:1,clip:1}) + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 12; + pvs.push({begin:1,x:50+dn,y:0,oppoint:1}) + pvs.push({x:0,y:50,oppoint:1}) + pvs.push({x:-50-dn,y:0,oppoint:1}) + pvs.push({end:1,x:0,y:-50,oppoint:1}) + } + }`, + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad90 = 90 * DDeiConfig.ROTATE_UNIT + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,fill:1,stroke:1,r:er,rad:0}); + break; + case 1: + pvs.push({x:x,y:y,fill:1,stroke:1,r:er,rad:rad90}); + break; + case 2: + pvs.push({r:er,dx:-50,rad:-rad90,stroke:1,type:4,direct:1}); + pvs.push({r:10}); + pvs.push({r:sample.r}); + + break; + case 3: + pvs.push({x:x,y:y,fill:1,stroke:1,r:er,rad:-rad90}); + pvs.push({r:er,dx:50,rad:rad90,stroke:1,type:4,direct:1,end:1}); + pvs.push({r:10}); + pvs.push({r:sample.r}); + break; + } + }`, + // 右方左半椭圆 + `(i, sample, pvs, model, ovs){ + if(i == 3){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + let rad = (sample.sita+45) * DDeiConfig.ROTATE_UNIT + let x = er * Math.cos(rad) + let y = er * Math.sin(rad) + let rad90 = 90 * DDeiConfig.ROTATE_UNIT + pvs.push({x:x,y:y,fill:1,stroke:1,r:er,rad:-rad90}); + pvs.push({r:er,dx:50,rad:rad90,stroke:1,type:4,direct:0}); + pvs.push({r:10}); + pvs.push({r:sample.r}); + pvs.push({end:1,x:50,y:-50}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let dn = 10; + pvs.push({begin:1,x:50-dn,y:50,text:1}) + pvs.push({x:-50,y:50,text:1}) + pvs.push({x:-50,y:-50,text:1}) + pvs.push({end:1,x:50-dn,y:-50,text:1}) + } + }` + ] + } + } + }; + const __vite_glob_0_91$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: database3 + }, Symbol.toStringTag, { value: "Module" })); + const document$1 = { + "id": "103003", + "name": "ddei.control.document", + "code": "doc", + "desc": "文档", + "from": "100500", + "define": { + width: 100, + height: 60, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + sample.y += 15 + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + break; + case 3: + pvs[2].y=sample.y + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + //从左下,左上,右上,右下,曲线:左下 + pvs.push({begin:1,x:-sample.x,y:sample.x,fill:1,clip:1}); + + pvs.push({x:-sample.x,y:-sample.x,stroke:1,oppoint:2}); + pvs.push({x:sample.x,y:-sample.x,stroke:1,oppoint:2}); + pvs.push({x:sample.x,y:sample.x,stroke:1}); + //贝塞尔曲线,至少需要四个点, + pvs.push({x:50,y:50,stroke:1,type:5}); + pvs.push({x:33,y:30}); + pvs.push({x:16,y:30}); + pvs.push({x:0,y:50}); + + pvs.push({x:0,y:50,type:5,stroke:1,stroke:1,end:1}); + pvs.push({x:-17,y:70}); + pvs.push({x:-34,y:70}); + pvs.push({x:-50,y:50}); + pvs.push({x:-sample.x,y:0,type:0,oppoint:1}); + pvs.push({x:sample.x,y:0,type:0,oppoint:1}); + pvs.push({x:0,y:50,type:0,oppoint:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + //从左下,左上,右上,右下,曲线:左下 + pvs.push({begin:1,x:-sample.x,y:sample.x-15,text:1}); + pvs.push({x:-sample.x,y:-sample.x,text:1}); + pvs.push({x:sample.x,y:-sample.x,text:1}); + pvs.push({x:sample.x,y:sample.x-15,end:1,text:1}); + } + }` + ] + }, + iconPos: { + dh: 5 + } + } + }; + const __vite_glob_0_92$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: document$1 + }, Symbol.toStringTag, { value: "Module" })); + const human = { + "id": "103001", + "name": "ddei.control.human", + "code": "human", + "desc": "人形图标", + "from": "100500", + "define": { + width: 50, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 1, + //采样信息 + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + }, + depProps: { + "8": "text" + //映射属性 + }, + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let x = sample.x + let y = sample.y + switch(i){ + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + break; + } + pvs.push({begin:i==0,end:i==3,x:x,y:y,select:1,clip:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + let x = 0 + let y = -20 + pvs.push({begin:1,x:x,y:y,stroke:1}); + y = 10 + pvs.push({x:x,y:y,stroke:1}); + y += 10 + let y1= y + let x1 = x + pvs.push({x:x,y:y,stroke:1}); + let er = sample.r + x = sample.x + y = sample.y + let y2 = er * Math.sin(90 * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y2,oppoint:1,stroke:1}); + pvs.push({x:x1,y:y1,type:3}); + let x3 = er * Math.cos(180 * DDeiConfig.ROTATE_UNIT) + let y3 = er * Math.sin(180 * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x3,y:y2,oppoint:1,stroke:1}); + pvs.push({x:x1,y:y1,type:3}); + pvs.push({x:0,y:-10,type:3}); + pvs.push({x:x3,y:10,oppoint:1,stroke:1}); + pvs.push({x:0,y:-10,type:3}); + pvs.push({x:x,y:10,oppoint:1,stroke:1}); + pvs.push({x:0,y:-10,type:3}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:0,y:-50,oppoint:1,type:0}); + } + }` + ] + }, + //组合控件 + composes: [ + { + id: "100103", + cIndex: 2, + initCPV: { + x: 0, + y: -35 + }, + width: 30, + height: 30, + attrLinks: [ + { code: "border", mapping: ["*"] }, + { code: "fill", mapping: ["*"] } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_93$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: human + }, Symbol.toStringTag, { value: "Module" })); + const human1 = { + "id": "103002", + "name": "ddei.control.human", + "code": "human", + "desc": "人形图标", + "from": "100500", + "define": { + width: 60, + height: 85, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 1, + //采样信息 + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + }, + //一圈 + depProps: { + "8": "text" + //映射属性 + }, + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let x = sample.x + let y = sample.y + switch(i){ + case 1: + y = y-8 + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + y = y-8 + pvs[2].y=y + x = pvs[0].x + break; + } + pvs.push({begin:i==0,end:i==3,x:x,y:y,select:1,oppoint:2,op2close:i == 3 ? 1 : 0,clip:1}); + }` + ] + }, + iconPos: { + dy: 20 + }, + depProps: { + "8": "text" + //映射属性 + }, + //组合控件 + composes: [ + { + id: "100103", + cIndex: 2, + initCPV: { + x: 0, + y: -35 + }, + width: 35, + height: 35, + attrLinks: [ + { code: "border", mapping: ["*"] }, + { code: "fill", mapping: ["*"] } + ] + }, + { + id: "100008", + cIndex: 1, + width: 60, + height: 50, + attrLinks: [ + { code: "border", mapping: ["*"] }, + { code: "fill", mapping: ["*"] } + ] + } + ], + border: { + round: 15 + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_94$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: human1 + }, Symbol.toStringTag, { value: "Module" })); + const human2 = { + "id": "103006", + "name": "ddei.control.human", + "code": "human", + "desc": "人形图标", + "from": "100500", + "define": { + width: 50, + height: 100, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 1, + fill: { + type: 0 + }, + //采样信息 + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + }, + depProps: { + "8": "text" + //映射属性 + }, + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let x = sample.x + let y = sample.y + switch(i){ + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + break; + } + pvs.push({begin:i==0,end:i==3,x:x,y:y,select:1,clip:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + let x = 0 + let y = -20 + pvs.push({begin:1,x:x,y:y,stroke:1}); + y = 10 + pvs.push({x:x,y:y,stroke:1}); + y += 10 + let y1= y + let x1 = x + pvs.push({x:x,y:y,stroke:1}); + let er = sample.r + x = sample.x + y = sample.y + let y2 = er * Math.sin(90 * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y2,oppoint:1,stroke:1}); + pvs.push({x:x1,y:y1,type:3}); + let x3 = er * Math.cos(180 * DDeiConfig.ROTATE_UNIT) + let y3 = er * Math.sin(180 * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x3,y:y2,oppoint:1,stroke:1}); + pvs.push({x:x1,y:y1,type:3}); + pvs.push({x:0,y:-10,type:3}); + pvs.push({x:x3,y:-10,oppoint:1,stroke:1}); + pvs.push({x:0,y:-10,type:3}); + pvs.push({x:x,y:-10,oppoint:1,stroke:1}); + pvs.push({x:0,y:-10,type:3}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:0,y:-50,oppoint:1,type:0}); + } + }` + ] + }, + //组合控件 + composes: [ + { + id: "100103", + cIndex: 2, + initCPV: { + x: 0, + y: -35 + }, + width: 30, + height: 30, + attrLinks: [ + { code: "border", mapping: ["*"] }, + { code: "fill", mapping: ["*"] } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + }, + { + name: "ddei.data", + icon: "icon-edit-properies", + subGroups: [ + { + name: "ddei.basic", + attrs: ["code", "text"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_95$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: human2 + }, Symbol.toStringTag, { value: "Module" })); + const papertape = { + "id": "103004", + "name": "ddei.control.ptap", + "code": "ptap", + "desc": "纸带", + "from": "100500", + "define": { + width: 100, + height: 60, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + switch(i){ + case 0: + start = 1 + break; + case 1: + sample.y += 15 + pvs[0].y=sample.y + break; + case 2: + pvs[1].x=sample.x + sample.y -= 15 + break; + case 3: + pvs[2].y=sample.y + sample.y -= 15 + sample.x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:sample.x,y:sample.y,select:1}); + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + //从左下,左上,曲线:右上,右下,曲线:左下 + pvs.push({begin:1,x:-sample.x,y:sample.x,fill:1}); + pvs.push({x:-sample.x,y:-sample.x,stroke:1}); + //贝塞尔曲线,至少需要四个点, + pvs.push({x:-50,y:-50,stroke:1,type:5}); + pvs.push({x:-33,y:-30}); + pvs.push({x:-16,y:-30}); + pvs.push({x:0,y:-50}); + + pvs.push({x:0,y:-50,type:5,stroke:1,stroke:1}); + pvs.push({x:17,y:-70}); + pvs.push({x:34,y:-70}); + pvs.push({x:50,y:-50}); + + pvs.push({x:sample.x,y:sample.x,stroke:1}); + //贝塞尔曲线,至少需要四个点, + pvs.push({x:50,y:50,stroke:1,type:5}); + pvs.push({x:33,y:30}); + pvs.push({x:16,y:30}); + pvs.push({x:0,y:50}); + + pvs.push({x:0,y:50,type:5,stroke:1,stroke:1,end:1}); + pvs.push({x:-17,y:70}); + pvs.push({x:-34,y:70}); + pvs.push({x:-50,y:50}); + + + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + //从左下,左上,右上,右下,曲线:左下 + pvs.push({begin:1,x:-sample.x,y:sample.x-15,text:1}); + pvs.push({x:-sample.x,y:-sample.x+15,text:1}); + pvs.push({x:sample.x,y:-sample.x+15,text:1}); + pvs.push({x:sample.x,y:sample.x-15,end:1,text:1}); + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + pvs.push({x:-sample.x,y:0,type:0,oppoint:1}); + pvs.push({x:sample.x,y:0,type:0,oppoint:1}); + pvs.push({x:0,y:50,type:0,oppoint:1}); + pvs.push({x:0,y:-50,type:0,oppoint:1}); + } + }` + ] + } + } + }; + const __vite_glob_0_96$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: papertape + }, Symbol.toStringTag, { value: "Module" })); + const layer = { + "id": "DDeiLayer", + "name": "ddei.layerName", + "code": "layer", + "desc": "整体图层的属性", + "type": "DDeiLayer", + /** + * 定义组件属性 + * 样式属性会影响图形的显示,修改样式属性也会刷新图形 + * 数据属性一般用于业务计算,数据属性一般不会刷新图形,除非数据属性和样式属性产生联动关系 + * 事件属性一般用来作为扩展用 + * 属性采用三层结构:组---子分组---属性,在基础json中先定义而后使用(可以复写) + * 特殊属性: + * code属性编码在统一个组中,code唯一 + * mapping建立与模型中属性的映射关系,为null时为默认,采用code指向的属性映射;mapping为[]时交由控件编辑器处理值映射 + * hiddenTitle隐藏标题,为true时不会显示属性标题,默认false不隐藏标题 + * display控件显示模式,有row(横向排列)和column(纵向排列)两个选项,默认row + */ + attrs: [ + { + "code": "bg.type", + "name": "ddei.property.background", + "desc": "背景的类型", + "controlType": "radio", + "dataType": "string", + "dataSource": [{ "text": "ddei.property.ds.none", "value": -1 }, { "text": "ddei.property.ds.color", "value": 1 }, { "text": "ddei.property.ds.image", "value": 2 }], + "defaultValue": 1, + "type": 1, + "cascadeDisplay": { 1: { show: ["bg.color", "bg.opacity"], hidden: ["bg.image", "bg.imageMode", "bg.imageScale", "bg.imageAlign"] }, 2: { show: ["bg.image", "bg.imageMode", "bg.imageScale", "bg.imageAlign"], hidden: ["bg.color"] }, 0: { hidden: ["bg.opacity", "bg.color", "bg.image", "bg.imageMode", "bg.imageScale", "bg.imageAlign"] }, default: { show: ["bg.color", "bg.opacity"], hidden: ["bg.image", "bg.imageMode", "bg.imageScale", "bg.imageAlign"] } }, + "hiddenTitle": true, + "display": "column" + }, + { + "code": "bg.color", + "name": "ddei.property.backgroundColor", + "desc": "背景的颜色", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "", + "type": 1 + }, + { + "code": "bg.image", + "name": "ddei.property.backgroundImage", + "desc": "背景的图片", + "controlType": "image", + "dataType": "string", + "defaultValue": "", + "type": 1 + }, + { + "code": "bg.opacity", + "name": "ddei.property.opacity", + "desc": "背景的透明度", + "controlType": "range", + "min": 0, + "max": 1, + "step": 0.01, + "dataType": "float", + "defaultValue": 1, + "display": "column", + "type": 1 + }, + { + "code": "bg.imageMode", + "name": "ddei.property.bgImageMode", + "desc": "背景的图片的模式", + "controlType": "radio", + "dataType": "integer", + "dataSource": [{ "text": "ddei.property.ds.original", "value": 0 }, { "text": "ddei.property.ds.scale", "value": 1 }, { "text": "ddei.property.ds.fill", "value": 2 }], + "cascadeDisplay": { 1: { show: ["bg.imageScale", "bg.imageAlign"] }, 2: { hidden: ["bg.imageScale", "bg.imageAlign"] }, empty: { hidden: ["bg.imageScale"], show: ["bg.imageAlign"] } }, + "defaultValue": 2, + "type": 1 + }, + { + "code": "bg.imageScale", + "name": "ddei.property.bgImageScale", + "desc": "背景的图片的缩放比例", + "controlType": "range", + "min": 0.01, + "max": 10, + "step": 0.01, + "dataType": "float", + "defaultValue": 1, + "type": 1 + }, + { + "code": "bg.imageAlign", + "name": "ddei.property.bgImagePosition", + "desc": "背景的图片布局方位", + "controlType": "align-type", + "dataType": "string", + "type": 1 + } + ], + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.background", + icon: "icon-background", + subGroups: [ + { + name: "ddei.background", + attrs: ["bg.type", "bg.color", "bg.image", "bg.opacity", "bg.imageMode", "bg.imageScale", "bg.imageAlign"] + } + ] + } + ] + }; + const __vite_glob_0_97$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: layer + }, Symbol.toStringTag, { value: "Module" })); + const angle = { + "id": "104001", + "name": "ddei.control.angle", + "code": "angle", + "desc": "表示一个角度", + "from": "100500", + "define": { + width: 200, + height: 200, + //2为极坐标,缺省点为原点 + poly: 2, + font: { + size: 10 + }, + //采样信息 + sample: { + eqrat: true, + //一圈采样次数 + loop: 1, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //选择区域 + `(i, sample, pvs, model, ovs){ + let sita = Math.round(ovs[1].sita) + let hdelta = (ovs[2].x-ovs[2].ovi.x) + + pvs.push({begin:1,x:hdelta,y:hdelta,select:1,clip:1}); + pvs.push({x:-hdelta,y:hdelta,select:1,clip:1}); + pvs.push({x:-hdelta,y:-hdelta,select:1,clip:1}); + pvs.push({x:hdelta,y:-hdelta,select:1,clip:1}); + + }`, + //下方直线 + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:0,y:0,stroke:1,oppoint:1,type:1}); + pvs.push({end:1,x:(ovs[2].x-ovs[2].ovi.x),y:0,stroke:1,oppoint:1,type:1}); + }`, + //上方直线 + `(i, sample, pvs, model, ovs){ + let rad = (ovs[1].sita) * DDeiConfig.ROTATE_UNIT + let hdelta = (ovs[2].x-ovs[2].ovi.x) + let x = hdelta * Math.cos(rad) + let y = hdelta * Math.sin(rad) + pvs.push({begin:1,x:0,y:0,stroke:1,type:1}); + pvs.push({end:1,x:x,y:y,stroke:1,oppoint:1,type:1}); + }`, + //弧线/直角线 + `(i, sample, pvs, model, ovs){ + let sita = ovs[1].sita + if(Math.round(sita) == -90){ + let ar = (ovs[0].x-ovs[0].ovi.x) + pvs.push({begin:1,x:0,y:-ar,stroke:1}); + pvs.push({x:ar,y:-ar,stroke:1}); + pvs.push({x:ar,y:0,stroke:1}); + pvs.push({end:1,x:0,y:0,stroke:1}); + }else{ + let rad = sita * DDeiConfig.ROTATE_UNIT + let ar = (ovs[0].x-ovs[0].ovi.x) + let x = ar * Math.cos(rad) + let y = ar * Math.sin(rad) + pvs.push({begin:1,x:ar,y:0,r:ar,rad:0,stroke:1}); + pvs.push({end:1,x:x,y:y,r:ar,rad:rad,stroke:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + let sita = ovs[1].sita + let disSita + //显示半径 + let ar = (ovs[0].x-ovs[0].ovi.x)+7 + let dtSita = sita / 2 + + let x = ar * Math.cos(dtSita * DDeiConfig.ROTATE_UNIT) + let y = ar * Math.sin(dtSita * DDeiConfig.ROTATE_UNIT) + if(sita<0 && sita >= -180){ + disSita = (-sita.toFixed(1))+"" + }else{ + x = -x + y = -y + disSita = (180+(180-sita)).toFixed(1)+"" + } + let size = 10; + pvs.push({begin:1,x:x+size,y:y+size/2,text:1}); + pvs.push({x:x-size,y:y+size/2,text:1}); + pvs.push({x:x-size,y:y-size/2,text:1}); + pvs.push({end:1,x:x+size,y:y-size/2,text:1}); + model.text = disSita + model.render?.setCachedValue("text",disSita) + }` + ] + }, + iconPos: { + dx: -50, + dy: 50 + }, + //操作点定义 + ovs: [ + //控制角度显示位置 + { + x: 25, + y: 0, + ix: 0, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 2, + //矩形范围 + x0: 0, + x1: 50, + y0: 0, + y1: 0 + } + }, + //控制角度 + { + //初始化的角度 + isita: 30, + //约束,控制点的移动路径和位置 + constraint: { + type: 3, + //圆形范围 + r: 25 + } + }, + { + x: 50, + y: 0, + ix: 0, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 2, + //矩形范围 + x0: 5, + x1: 100, + y0: 0, + y1: 0 + } + } + ], + ext: { + /** + * 定义分组,用于属性编辑 + */ + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_98$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: angle + }, Symbol.toStringTag, { value: "Module" })); + const basicFlowShapes = { + "id": "102", + "name": "ddei.control.groups.flow", + "code": "basic-flow-shapes", + "desc": "基础的流程形状,包含了开始、结束、任务、分支等基础形状", + "orderNo": 2, + "subject": "basic", + //当前分组下所有控件 + "controls": [ + { + "id": "102001", + "orderNo": 1 + }, + { + "id": "102002", + "orderNo": 2 + }, + { + "id": "102010", + "orderNo": 10 + }, + { + "id": "102011", + "orderNo": 11 + }, + { + "id": "102012", + "orderNo": 12 + }, + { + "id": "102020", + "orderNo": 20 + }, + { + "id": "102021", + "orderNo": 21 + }, + { + "id": "102040", + "orderNo": 25 + }, + { + "id": "102041", + "orderNo": 26 + }, + { + "id": "103003", + "orderNo": 27 + }, + { + "id": "102030", + "orderNo": 30 + }, + { + "id": "102031", + "orderNo": 31 + }, + { + "id": "102032", + "orderNo": 32 + }, + { + "id": "102033", + "orderNo": 33 + }, + { + "id": "103013", + "name": "ddei.control.direct-data", + "orderNo": 34 + }, + { + "id": "102090", + "orderNo": 50 + }, + { + "id": "102091", + "orderNo": 51 + }, + { + "id": "102092", + "orderNo": 52 + }, + { + "id": "103010", + "orderNo": 60 + }, + { + "id": "103001", + "orderNo": 71 + }, + { + "id": "103002", + "orderNo": 72 + }, + { + "id": "102050", + "orderNo": 73 + }, + { + "id": "102052", + "orderNo": 74 + }, + { + "id": "102057", + "orderNo": 74 + }, + { + "id": "102053", + "orderNo": 75 + }, + { + "id": "102054", + "orderNo": 76 + }, + { + "id": "103004", + "orderNo": 77 + }, + { + "id": "102055", + "orderNo": 78 + }, + { + "id": "102056", + "orderNo": 79 + }, + { + "id": "102051", + "orderNo": 83 + }, + { + "id": "102058", + "orderNo": 84 + } + ] + }; + const __vite_glob_1_0$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: basicFlowShapes + }, Symbol.toStringTag, { value: "Module" })); + const basicShapes = { + "id": "101", + "name": "ddei.control.groups.basic", + "code": "basic-shapes", + "desc": "基础的绘图形状,包含了正方形、长方形、三角形、圆形、线条等基础形状", + "orderNo": 1, + "subject": "basic", + //当前分组下所有控件 + "controls": [ + { + "id": "100200", + "orderNo": 0 + }, + { + "id": "100001", + "orderNo": 1 + }, + { + "id": "100002", + "orderNo": 2 + }, + { + "id": "100003", + "orderNo": 3 + }, + { + "id": "100004", + "orderNo": 4 + }, + { + "id": "100005", + "orderNo": 5 + }, + { + "id": "100006", + "text": "", + "orderNo": 6 + }, + { + "id": "100007", + "text": "", + "orderNo": 7 + }, + { + "id": "100010", + "text": "", + "orderNo": 10 + }, + { + "id": "100011", + "text": "", + "orderNo": 11 + }, + { + "id": "100012", + "text": "", + "orderNo": 12 + }, + { + "id": "100013", + "text": "", + "orderNo": 13 + }, + { + "id": "100014", + "text": "", + "orderNo": 14 + }, + { + "id": "100015", + "text": "", + "orderNo": 15 + }, + { + "id": "100020", + "orderNo": 20 + }, + { + "id": "100021", + "text": "", + "orderNo": 21 + }, + { + "id": "100030", + "text": "", + "orderNo": 30 + }, + { + "id": "100031", + "text": "", + "orderNo": 31 + }, + { + "id": "100040", + "orderNo": 40 + }, + { + "id": "100041", + "text": "", + "orderNo": 41 + }, + { + "id": "100050", + "text": "", + "orderNo": 50 + }, + { + "id": "100051", + "text": "", + "orderNo": 51 + }, + { + "id": "100060", + "text": "", + "orderNo": 60 + }, + { + "id": "100061", + "text": "", + "orderNo": 61 + }, + { + "id": "100070", + "text": "", + "orderNo": 70 + }, + { + "id": "100076", + "text": "", + "orderNo": 75 + }, + { + "id": "100075", + "text": "", + "orderNo": 76 + }, + { + "id": "100077", + "text": "", + "orderNo": 77 + }, + { + "id": "104001", + "text": "", + "orderNo": 80 + }, + { + "id": "104105", + "text": "", + "orderNo": 91 + }, + { + "id": "104115", + "text": "", + "orderNo": 92 + }, + { + "id": "104125", + "text": "", + "orderNo": 93 + }, + { + "id": "100110", + "text": "", + "orderNo": 94 + }, + { + "id": "103005", + "orderNo": 305 + }, + { + "id": "103008", + "orderNo": 308 + } + ] + }; + const __vite_glob_1_1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: basicShapes + }, Symbol.toStringTag, { value: "Module" })); + const databases = { + "id": "201", + "name": "ddei.database", + "code": "databases", + "desc": "包含了数据库的各种类型", + "orderNo": 21, + "subject": "basic", + //当前分组下所有控件 + "controls": [ + { + "id": "103010", + "orderNo": 0 + }, + { + "id": "103011", + "orderNo": 1 + }, + { + "id": "103012", + "orderNo": 2 + } + ] + }; + const __vite_glob_1_2$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: databases + }, Symbol.toStringTag, { value: "Module" })); + const ToDefaultPropertys = [ + "fill.type", + "fill.color", + "fill.image", + "fill.opacity", + "border.type", + "border.color", + "borderOpacity", + "borderWidth", + "borderDash", + "borderRound", + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ]; + const parseAttrsToGroup = function(control) { + var _a3; + if (control.attrs) { + control.attrs.forEach((curAttr) => { + let attrDefine = new DDeiEditorArrtibute(curAttr); + if (ToDefaultPropertys.indexOf(curAttr.code) != -1) { + let defValue = DDeiUtil.getDataByPathList(control.define, curAttr.code, curAttr.mapping); + if (defValue || defValue == 0) { + attrDefine.defaultValue = defValue; + } + } + if (!control.attrDefineMap) { + control.attrDefineMap = /* @__PURE__ */ new Map(); + } + control.attrDefineMap.set(curAttr.code, attrDefine); + }); + } + (_a3 = control.groups) == null ? void 0 : _a3.forEach((group2) => { + var _a4; + (_a4 = group2.subGroups) == null ? void 0 : _a4.forEach((subGroup) => { + var _a5; + let attrs = []; + (_a5 = subGroup.attrs) == null ? void 0 : _a5.forEach((attrCode) => { + let attrDefine = control.attrDefineMap.get(attrCode); + if (attrDefine) { + attrDefine.topGroup = group2; + attrDefine.modelCode = control.id; + attrs.push(attrDefine); + } + }); + subGroup.children = attrs; + }); + }); + }; + const loadControlByFrom = function(controlOriginDefinies, control) { + if (control.from && !control.def) { + let fromControl = controlOriginDefinies.get(control.from); + if (fromControl.from) { + loadControlByFrom(controlOriginDefinies, fromControl); + } + control.attrs = cloneDeep(fromControl.attrs); + control.groups = cloneDeep(fromControl.groups); + let fromMenus = cloneDeep(fromControl.menus); + let fromDefine = cloneDeep(fromControl.define); + let fromFilters = cloneDeep(fromControl.filters); + if (fromDefine) { + if (!control.define) { + control.define = {}; + } + for (let i2 in fromDefine) { + if (!(control.define[i2] || control.define[i2] == 0)) { + control.define[i2] = fromDefine[i2]; + } + } + } + if (fromFilters) { + if (!control.filters) { + control.filters = fromFilters; + } else { + for (let k in fromFilters) { + if (!control.filters[k]) { + control.filters[k] = fromFilters[k]; + } + } + } + } + loadControlDefineExt(control); + loadControlDefineComposes(controlOriginDefinies, control); + loadControlOthers(controlOriginDefinies, control); + if (fromMenus) { + if (!control.menus) { + control.menus = {}; + } + for (let i2 in fromMenus) { + if (!(control.menus[i2] || control.menus[i2] == 0)) { + control.menus[i2] = fromMenus[i2]; + } + } + } + control.menus = fromMenus; + control.attrDefineMap = /* @__PURE__ */ new Map(); + if (!control.type && control.type != fromControl.type) { + control.type = fromControl.type; + } + controlOriginDefinies.set(control.id, control); + } + if (control.viewer) { + control.viewer = vue.markRaw(control.viewer); + } + parseAttrsToGroup(control); + control.def = true; + }; + const loadControlOthers = function(controlOriginDefinies, control) { + if (control.others) { + control.others.forEach((other) => { + let otherControlDefine = controlOriginDefinies.get(other.id); + if (otherControlDefine.from) { + loadControlByFrom(controlOriginDefinies, otherControlDefine); + } + other.code = otherControlDefine.code; + let otherDefine = cloneDeep(otherControlDefine.define); + if (otherDefine) { + for (let i2 in otherDefine) { + if (!other.define) { + other.define = {}; + } + if (!(other.define[i2] || other.define[i2] == 0)) { + other.define[i2] = otherDefine[i2]; + } + } + } + other.type = otherControlDefine.type; + other.others = otherControlDefine.others; + loadControlOthers(controlOriginDefinies, other); + }); + } + }; + const loadAndSortGroup = function(groups, controlOriginDefinies) { + let groupOriginDefinies = []; + groups.forEach((group2) => { + if (group2.controls) { + let cos = []; + group2.controls.forEach((control) => { + let id = control.id; + let controlDefine = controlOriginDefinies.get(id); + if (controlDefine) { + let c = cloneDeep(controlDefine); + for (let i2 in control) { + if (control[i2] != void 0 && control[i2] != null) { + c[i2] = control[i2]; + } + } + cos.push(c); + } + }); + cos.sort((a, b) => { + return a.orderNo - b.orderNo; + }); + group2.controls = cos; + } + group2.display = true; + groupOriginDefinies.push(group2); + }); + groupOriginDefinies.sort((a, b) => { + return a.orderNo - b.orderNo; + }); + return groupOriginDefinies; + }; + const loadControlDefineComposes = function(controlOriginDefinies, control) { + var _a3, _b2; + if ((_a3 = control.define) == null ? void 0 : _a3.composes) { + (_b2 = control.define) == null ? void 0 : _b2.composes.forEach((compose) => { + let composeControlDefine = controlOriginDefinies.get(compose.id); + if (composeControlDefine.from) { + loadControlByFrom(controlOriginDefinies, composeControlDefine); + } + compose.attrs = cloneDeep(composeControlDefine.attrs); + let composeDefine = cloneDeep(composeControlDefine.define); + if (composeDefine) { + for (let i2 in composeDefine) { + if (!(compose[i2] || compose[i2] == 0)) { + compose[i2] = composeDefine[i2]; + } + } + } + }); + } + }; + const loadControlDefineExt = function(control) { + var _a3, _b2, _c2, _d2; + if ((_a3 = control.define) == null ? void 0 : _a3.ext) { + for (let i2 in control.define.ext) { + switch (i2) { + case "composes": { + let extComps = (_b2 = control.define) == null ? void 0 : _b2.ext.composes; + let defineComps = control.define.composes; + for (let j2 = 0; j2 < extComps.length; j2++) { + let extComp = extComps[j2]; + let defComp = defineComps[j2]; + if (defComp && !extComp.type) { + for (let k in extComp) { + defComp[k] = extComp[k]; + } + } + } + break; + } + case "ovs": { + let extOVS = (_c2 = control.define) == null ? void 0 : _c2.ext.ovs; + let defineOVS = control.define.ovs; + for (let j2 = 0; j2 < extOVS.length; j2++) { + let extComp = extOVS[j2]; + let defComp = defineOVS[j2]; + if (defComp && extComp) { + for (let k in extComp) { + defComp[k] = extComp[k]; + } + } + } + break; + } + case "sample": { + if (!((_d2 = control.define) == null ? void 0 : _d2.sample)) { + control.define.sample = {}; + } + for (let j2 in control.define.ext.sample) { + if (j2 != "rules") { + control.define.sample[j2] = control.define.ext.sample[j2]; + } else { + if (!control.define.sample.rules) { + control.define.sample.rules = []; + } + control.define.ext.sample[j2].forEach((rule) => { + control.define.sample.rules.push(rule); + }); + } + } + break; + } + case "attrs": { + let extAttrs = control.define.ext.attrs; + extAttrs == null ? void 0 : extAttrs.forEach((extAttr) => { + let append = true; + for (let x2 = 0; x2 < control.attrs.length; x2++) { + if (control.attrs[x2].code == extAttr.code) { + control.attrs[x2] = extAttr; + append = false; + break; + } + } + if (append) { + control.attrs.push(extAttr); + } + }); + break; + } + case "groups": { + let extGroups = control.define.ext.groups; + control.groups = extGroups; + break; + } + default: { + control.define[i2] = control.define.ext[i2]; + break; + } + } + } + delete control.define.ext; + } + }; + const control_ctx$1 = /* @__PURE__ */ Object.assign({ "./control/base/compose-container.ts": __vite_glob_0_0$5, "./control/base/container.ts": __vite_glob_0_1$2, "./control/base/line.ts": __vite_glob_0_2$1, "./control/base/polygon-container.ts": __vite_glob_0_3$1, "./control/base/polygon.ts": __vite_glob_0_4$1, "./control/base/table-cell.ts": __vite_glob_0_5$1, "./control/base/table.ts": __vite_glob_0_6$1, "./control/basic/circle-split.ts": __vite_glob_0_7$1, "./control/basic/circle-text.ts": __vite_glob_0_8$1, "./control/basic/circle.ts": __vite_glob_0_9$1, "./control/basic/cube.ts": __vite_glob_0_10$1, "./control/basic/diamond-round.ts": __vite_glob_0_11$1, "./control/basic/diamond.ts": __vite_glob_0_12$1, "./control/basic/ellipse.ts": __vite_glob_0_13$1, "./control/basic/fivestar.ts": __vite_glob_0_14$1, "./control/basic/half-circle.ts": __vite_glob_0_15$1, "./control/basic/hexagon-round.ts": __vite_glob_0_16$1, "./control/basic/hexagon.ts": __vite_glob_0_17$1, "./control/basic/hexstar.ts": __vite_glob_0_18$1, "./control/basic/hexstar1.ts": __vite_glob_0_19$1, "./control/basic/hexstar2.ts": __vite_glob_0_20$1, "./control/basic/left-arrow.ts": __vite_glob_0_21$1, "./control/basic/parallelogram-round.ts": __vite_glob_0_22$1, "./control/basic/parallelogram.ts": __vite_glob_0_23$1, "./control/basic/pentagon-round.ts": __vite_glob_0_24$1, "./control/basic/pentagon.ts": __vite_glob_0_25$1, "./control/basic/rectangle-border.ts": __vite_glob_0_26$1, "./control/basic/rectangle-round.ts": __vite_glob_0_27$1, "./control/basic/rectangle-split.ts": __vite_glob_0_28$1, "./control/basic/rectangle-text.ts": __vite_glob_0_29$1, "./control/basic/rectangle.ts": __vite_glob_0_30$1, "./control/basic/right-arrow.ts": __vite_glob_0_31$1, "./control/basic/square-round.ts": __vite_glob_0_32$1, "./control/basic/square-text.ts": __vite_glob_0_33$1, "./control/basic/square.ts": __vite_glob_0_34$1, "./control/basic/text.ts": __vite_glob_0_35$1, "./control/basic/trapezoid-round.ts": __vite_glob_0_36$1, "./control/basic/trapezoid.ts": __vite_glob_0_37$1, "./control/basic/triangle-left-90-round.ts": __vite_glob_0_38$1, "./control/basic/triangle-left-90.ts": __vite_glob_0_39$1, "./control/basic/triangle-right-90-round.ts": __vite_glob_0_40$1, "./control/basic/triangle-right-90.ts": __vite_glob_0_41$1, "./control/basic/triangle-round.ts": __vite_glob_0_42$1, "./control/basic/triangle.ts": __vite_glob_0_43$1, "./control/basicflow/flow-card-tab.ts": __vite_glob_0_44$1, "./control/basicflow/flow-control-transfer.ts": __vite_glob_0_45$1, "./control/basicflow/flow-data.ts": __vite_glob_0_46$1, "./control/basicflow/flow-data1.ts": __vite_glob_0_47$1, "./control/basicflow/flow-data2.ts": __vite_glob_0_48$1, "./control/basicflow/flow-data3.ts": __vite_glob_0_49$1, "./control/basicflow/flow-defflow.ts": __vite_glob_0_50$1, "./control/basicflow/flow-delay.ts": __vite_glob_0_51$1, "./control/basicflow/flow-display-content.ts": __vite_glob_0_52$1, "./control/basicflow/flow-end.ts": __vite_glob_0_53$1, "./control/basicflow/flow-end1.ts": __vite_glob_0_54$1, "./control/basicflow/flow-end2.ts": __vite_glob_0_55$1, "./control/basicflow/flow-end3.ts": __vite_glob_0_56$1, "./control/basicflow/flow-hand-input.ts": __vite_glob_0_57$1, "./control/basicflow/flow-loop-area.ts": __vite_glob_0_58$1, "./control/basicflow/flow-manual-operate.ts": __vite_glob_0_59$1, "./control/basicflow/flow-page-ref.ts": __vite_glob_0_60$1, "./control/basicflow/flow-prepare.ts": __vite_glob_0_61$1, "./control/basicflow/flow-start.ts": __vite_glob_0_62$1, "./control/basicflow/flow-start1.ts": __vite_glob_0_63$1, "./control/basicflow/flow-subflow.ts": __vite_glob_0_64$1, "./control/basicflow/flow-switch.ts": __vite_glob_0_65$1, "./control/basicflow/flow-switch1.ts": __vite_glob_0_66$1, "./control/basicflow/flow-task.ts": __vite_glob_0_67$1, "./control/basicflow/flow-task1.ts": __vite_glob_0_68$1, "./control/basicflow/flow-task2.ts": __vite_glob_0_69$1, "./control/common/bidfunnel.ts": __vite_glob_0_70$1, "./control/common/bracket-big-left-text.ts": __vite_glob_0_71$1, "./control/common/bracket-big-left.ts": __vite_glob_0_72$1, "./control/common/bracket-big-right-text.ts": __vite_glob_0_73$1, "./control/common/bracket-big-right.ts": __vite_glob_0_74$1, "./control/common/bracket-big-text.ts": __vite_glob_0_75$1, "./control/common/bracket-middle-left-text.ts": __vite_glob_0_76$1, "./control/common/bracket-middle-left.ts": __vite_glob_0_77$1, "./control/common/bracket-middle-right-text.ts": __vite_glob_0_78$1, "./control/common/bracket-middle-right.ts": __vite_glob_0_79$1, "./control/common/bracket-middle-text.ts": __vite_glob_0_80$1, "./control/common/bracket-small-left-text.ts": __vite_glob_0_81$1, "./control/common/bracket-small-left.ts": __vite_glob_0_82$1, "./control/common/bracket-small-right-text.ts": __vite_glob_0_83$1, "./control/common/bracket-small-right.ts": __vite_glob_0_84$1, "./control/common/bracket-small-text.ts": __vite_glob_0_85$1, "./control/common/comment.ts": __vite_glob_0_86$1, "./control/common/comment1.ts": __vite_glob_0_87$1, "./control/common/database.ts": __vite_glob_0_88$1, "./control/common/database1.ts": __vite_glob_0_89$1, "./control/common/database2.ts": __vite_glob_0_90$1, "./control/common/database3.ts": __vite_glob_0_91$1, "./control/common/document.ts": __vite_glob_0_92$1, "./control/common/human.ts": __vite_glob_0_93$1, "./control/common/human1.ts": __vite_glob_0_94$1, "./control/common/human2.ts": __vite_glob_0_95$1, "./control/common/papertape.ts": __vite_glob_0_96$1, "./control/layer.ts": __vite_glob_0_97$1, "./control/math/angle.ts": __vite_glob_0_98$1, "./control/stage.ts": __vite_glob_0_99$1 }); + const group_ctx$1 = /* @__PURE__ */ Object.assign({ "./group/basic/basic-flow-shapes.ts": __vite_glob_1_0$1, "./group/basic/basic-shapes.ts": __vite_glob_1_1$1, "./group/common/databases.ts": __vite_glob_1_2$1 }); + const _DDeiCoreControls = class _DDeiCoreControls extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "controls", /* @__PURE__ */ new Map()); + } + getControls(editor) { + let extOptions = this.getOptions(); + let controls2 = /* @__PURE__ */ new Map(); + let controls1 = new Map(editor.controls); + for (let i2 in control_ctx$1) { + let control = control_ctx$1[i2].default; + if (control) { + let c = cloneDeep(control); + controls2.set(control.id, c); + controls1.set(control.id, c); + if (extOptions && extOptions[control.id]) { + for (let x2 in extOptions[control.id]) { + c.define[x2] = extOptions[control.id][x2]; + } + } + } + } + controls2.forEach((control) => { + loadControlByFrom(controls1, control); + }); + this.controls = controls2; + return controls2; + } + getGroups(editor) { + if (!this.controls) { + this.getControls(editor); + } + let groups = []; + for (let path in group_ctx$1) { + groups.push(group_ctx$1[path].default); + } + loadAndSortGroup(groups, this.controls); + return groups; + } + static configuration(options) { + if (options) { + let controls2 = new _DDeiCoreControls(options); + return controls2; + } + return _DDeiCoreControls; + } + static modify(fn) { + return _DDeiCoreControls.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreControls, "defaultIns", new _DDeiCoreControls(null)); + let DDeiCoreControls = _DDeiCoreControls; + const _MenuCancelMergeCell = class _MenuCancelMergeCell extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-cancel-merge-cell"); + __publicField3(this, "defaultOptions", { + "label": "取消合并单元格", + "icon": "icon-merge-cells", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuCancelMergeCell.defaultIns.name]) { + for (let i2 in options[_MenuCancelMergeCell.defaultIns.name]) { + newOptions[i2] = options[_MenuCancelMergeCell.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuCancelMergeCell(newOptions); + return panels; + } + } + return _MenuCancelMergeCell; + } + static modify(fn) { + return _MenuCancelMergeCell.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + table2.cancelSelectedMergeCells(); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + let selectedCells = table2.getSelectedCells(); + if (selectedCells.length == 1 && (selectedCells[0].mergeRowNum > 1 || selectedCells[0].mergeColNum > 1)) { + return true; + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuCancelMergeCell, "defaultIns", new _MenuCancelMergeCell()); + let MenuCancelMergeCell = _MenuCancelMergeCell; + const _MenuCopySheet = class _MenuCopySheet extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-copy-sheet"); + __publicField3(this, "defaultOptions", { + "label": "ddei.copy", + "icon": "#icon-paste", + "models": ["DDeiSheet"], + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuCopySheet.defaultIns.name]) { + for (let i2 in options[_MenuCopySheet.defaultIns.name]) { + newOptions[i2] = options[_MenuCopySheet.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuCopySheet(newOptions); + return panels; + } + } + return _MenuCopySheet; + } + static modify(fn) { + return _MenuCopySheet.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + var _a3, _b2, _c2, _d2, _e2; + if (model.modelType == "DDeiSheet") { + let editor = DDeiEditor.ACTIVE_INSTANCE; + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + let ddInstance = model.stage.ddInstance; + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_SHEET_BEFORE", "ADD_SHEET", null, ddInstance, null); + if (rsState != -1) { + let sheetJson = model.toJSON(); + let dpi = (_a3 = ddInstance.dpi) == null ? void 0 : _a3.x; + if (!sheetJson.stage.dpi) { + sheetJson.stage.dpi = dpi; + } + let unit = sheetJson.stage.unit; + if (dpi && unit && unit != "px") { + (_c2 = (_b2 = sheetJson.stage) == null ? void 0 : _b2.layers) == null ? void 0 : _c2.forEach((layer2) => { + DDeiUtil.convertChildrenJsonUnit(layer2, sheetJson.stage, unit); + }); + } + let newSheet = DDeiSheet.loadFromJSON(sheetJson, { currentDdInstance: ddInstance }); + let pageText = editor.i18n("ddei.page"); + file.sheets.splice((file == null ? void 0 : file.currentSheetIndex) + 1, 0, newSheet); + newSheet.name = pageText + "-" + file.sheets.length; + file.changeSheet(file.currentSheetIndex + 1); + let stage2 = newSheet.stage; + stage2.ddInstance = ddInstance; + ddInstance.stage = stage2; + stage2.initRender(); + editor.changeState(DDeiEditorState.DESIGNING); + editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI); + editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["bottommenu"] }); + (_d2 = editor.bus) == null ? void 0 : _d2.executeAll(); + (_e2 = editor.editorViewer) == null ? void 0 : _e2.changeFileModifyDirty(); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + var _a3; + if (model) { + let allowEditSheet = ((_a3 = model.stage.ddInstance) == null ? void 0 : _a3.AC_DESIGN_EDIT) != false ? true : false; + return allowEditSheet && !this.disabled; + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuCopySheet, "defaultIns", new _MenuCopySheet()); + let MenuCopySheet = _MenuCopySheet; + const _MenuInsertCol = class _MenuInsertCol extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-insert-col"); + __publicField3(this, "defaultOptions", { + "label": "合并单元格", + "icon": "icon-merge-cells", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuInsertCol.defaultIns.name]) { + for (let i2 in options[_MenuInsertCol.defaultIns.name]) { + newOptions[i2] = options[_MenuInsertCol.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuInsertCol(newOptions); + return panels; + } + } + return _MenuInsertCol; + } + static modify(fn) { + return _MenuInsertCol.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + if (table2.curRow != void 0 && table2.curCol != void 0 && table2.curRow != -1 && table2.curCol != -1) { + let cell = table2.rows[table2.curRow][table2.curCol]; + let col = cell.col; + if (col < 0) { + col = -1; + } else if (col > table2.cols.length - 1) { + col = table2.cols.length - 1; + } + table2.insertCol(col, 2); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + return true; + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuInsertCol, "defaultIns", new _MenuInsertCol()); + let MenuInsertCol = _MenuInsertCol; + const _MenuInsertRow = class _MenuInsertRow extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-insert-row"); + __publicField3(this, "defaultOptions", { + "label": "插入行", + "icon": "icon-insert-row", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuInsertRow.defaultIns.name]) { + for (let i2 in options[_MenuInsertRow.defaultIns.name]) { + newOptions[i2] = options[_MenuInsertRow.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuInsertRow(newOptions); + return panels; + } + } + return _MenuInsertRow; + } + static modify(fn) { + return _MenuInsertRow.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + if (table2.curRow != void 0 && table2.curCol != void 0 && table2.curRow != -1 && table2.curCol != -1) { + let cell = table2.rows[table2.curRow][table2.curCol]; + let row = cell.row; + if (row - 1 < 0) { + row = -1; + } else { + row = row - 1; + } + if (row < 0) { + row = -1; + } else if (row > table2.rows.length - 1) { + row = table2.rows.length - 1; + } + table2.insertRow(row, 1); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + return true; + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuInsertRow, "defaultIns", new _MenuInsertRow()); + let MenuInsertRow = _MenuInsertRow; + const _MenuMergeCell = class _MenuMergeCell extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-merge-cell"); + __publicField3(this, "defaultOptions", { + "label": "插入列", + "icon": "icon-insert-col", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuMergeCell.defaultIns.name]) { + for (let i2 in options[_MenuMergeCell.defaultIns.name]) { + newOptions[i2] = options[_MenuMergeCell.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuMergeCell(newOptions); + return panels; + } + } + return _MenuMergeCell; + } + static modify(fn) { + return _MenuMergeCell.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + table2.mergeSelectedCells(); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + let selectedCells = table2.getSelectedCells(); + if (selectedCells.length >= 2) { + let minMaxColRow = table2.getMinMaxRowAndCol(selectedCells); + return table2.isAllSelected(minMaxColRow.minRow, minMaxColRow.minCol, minMaxColRow.maxRow, minMaxColRow.maxCol); + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuMergeCell, "defaultIns", new _MenuMergeCell()); + let MenuMergeCell = _MenuMergeCell; + const _MenuRemoveCol = class _MenuRemoveCol extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-remove-col"); + __publicField3(this, "defaultOptions", { + "label": "删除列", + "icon": "icon-delete-column", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuRemoveCol.defaultIns.name]) { + for (let i2 in options[_MenuRemoveCol.defaultIns.name]) { + newOptions[i2] = options[_MenuRemoveCol.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuRemoveCol(newOptions); + return panels; + } + } + return _MenuRemoveCol; + } + static modify(fn) { + return _MenuRemoveCol.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + if (table2.curRow != void 0 && table2.curCol != void 0 && table2.curRow != -1 && table2.curCol != -1) { + let cell = table2.rows[table2.curRow][table2.curCol]; + let col = cell.col; + if (col < 0) { + col = 0; + } else if (col > table2.cols.length - 1) { + col = table2.cols.length - 1; + } + table2.removeCol(col); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + var _a3; + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + if (((_a3 = model == null ? void 0 : model.cols) == null ? void 0 : _a3.length) > 1) { + return true; + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuRemoveCol, "defaultIns", new _MenuRemoveCol()); + let MenuRemoveCol = _MenuRemoveCol; + const _MenuRemoveRow = class _MenuRemoveRow extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-remove-row"); + __publicField3(this, "defaultOptions", { + "label": "删除行", + "icon": "icon-delete-row", + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuRemoveRow.defaultIns.name]) { + for (let i2 in options[_MenuRemoveRow.defaultIns.name]) { + newOptions[i2] = options[_MenuRemoveRow.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuRemoveRow(newOptions); + return panels; + } + } + return _MenuRemoveRow; + } + static modify(fn) { + return _MenuRemoveRow.defaultIns.modify(fn); + } + /** + * 执行的方法 + */ + action(model, evt) { + if ((model == null ? void 0 : model.baseModelType) == "DDeiTable") { + let table2 = model; + if (table2.curRow != void 0 && table2.curCol != void 0 && table2.curRow != -1 && table2.curCol != -1) { + let cell = table2.rows[table2.curRow][table2.curCol]; + let row = cell.row; + if (row < 0) { + row = 0; + } else if (row > table2.rows.length - 1) { + row = table2.rows.length - 1; + } + table2.removeRow(row); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.NodifyChange); + model.stage.ddInstance.bus.push(DDeiEnumBusCommandType.AddHistroy, null, evt); + model.stage.ddInstance.bus.executeAll(); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + var _a3; + if (!this.disabled && (model == null ? void 0 : model.baseModelType) == "DDeiTable") { + if (((_a3 = model == null ? void 0 : model.rows) == null ? void 0 : _a3.length) > 1) { + return true; + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuRemoveRow, "defaultIns", new _MenuRemoveRow()); + let MenuRemoveRow = _MenuRemoveRow; + const _MenuRemoveSheet = class _MenuRemoveSheet extends DDeiMenuBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-menu-remove-sheet"); + __publicField3(this, "defaultOptions", { + "label": "ddei.delete", + "icon": "#icon-remove", + "models": ["DDeiSheet"], + "disabled": false + }); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_MenuRemoveSheet.defaultIns.name]) { + for (let i2 in options[_MenuRemoveSheet.defaultIns.name]) { + newOptions[i2] = options[_MenuRemoveSheet.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _MenuRemoveSheet(newOptions); + return panels; + } + } + return _MenuRemoveSheet; + } + static modify(fn) { + return _MenuRemoveSheet.defaultIns.modify(fn); + } + action(model, evt) { + var _a3, _b2, _c2; + if (model.modelType == "DDeiSheet") { + let editor = DDeiEditor.ACTIVE_INSTANCE; + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if (file.sheets.length > 1) { + let ddInstance = model.stage.ddInstance; + let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_DEL_SHEET_BEFORE", "DEL_SHEET", null, ddInstance, null); + if (rsState != -1) { + let currentIndex = -1; + for (let i2 = 0; i2 < ((_a3 = file == null ? void 0 : file.sheets) == null ? void 0 : _a3.length); i2++) { + if (file.sheets[i2].unicode == model.unicode) { + currentIndex = i2; + break; + } + } + file.sheets.splice(currentIndex, 1); + if (currentIndex <= file.currentSheetIndex) { + file.changeSheet(file.currentSheetIndex - 1); + } + let stage2 = file.sheets[file == null ? void 0 : file.currentSheetIndex].stage; + stage2.ddInstance = ddInstance; + ddInstance.stage.destroyRender(); + ddInstance.stage = stage2; + stage2.initRender(); + DDeiEditorUtil.invokeCallbackFunc("EVENT_DEL_SHEET_AFTER", "DEL_SHEET", null, ddInstance, null); + (_b2 = editor.editorViewer) == null ? void 0 : _b2.changeFileModifyDirty(); + editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null); + editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["bottommenu"] }); + (_c2 = editor.bus) == null ? void 0 : _c2.executeAll(); + _MenuRemoveSheet.showPopPicker(stage2); + editor.changeState(DDeiEditorState.DESIGNING); + } + } + } + } + static showPopPicker(stage2) { + var _a3; + if (((_a3 = stage2.selectedModels) == null ? void 0 : _a3.size) > 0) { + let models = Array.from(stage2.selectedModels.values()); + if ((models == null ? void 0 : models.length) > 0) { + let height = 100; + let modelPos = DDeiUtil.getModelsDomAbsPosition(models); + let left = modelPos.left + modelPos.width / 2; + let top = modelPos.top + modelPos.height / 2; + if (modelPos.top - height <= modelPos.cTop) { + if (modelPos.height > 400) { + top = top + height + 20; + } else { + top = top + modelPos.height / 2 + 20; + } + } else { + top = top - height; + } + if (top < 0) { + top = modelPos.cTop + modelPos.cHeight / 2; + } + if (left < 0) { + left = 0; + } + DDeiEditorUtil.showDialog(this.editor, "ddei-core-dialog-quickpop", { + group: "canvas-pop" + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + } + } + /** + * 判定是否显示的方法 + */ + isVisiable(model) { + var _a3; + if (model) { + let allowEditSheet = ((_a3 = model.stage.ddInstance) == null ? void 0 : _a3.AC_DESIGN_EDIT) != false ? true : false; + if (allowEditSheet && !this.disabled && (model == null ? void 0 : model.modelType) == "DDeiSheet") { + let editor = DDeiEditor.ACTIVE_INSTANCE; + let file = editor == null ? void 0 : editor.files[editor.currentFileIndex]; + if (file.sheets.length > 1) { + return true; + } + } + } + return false; + } + }; + /** + * 缺省实例 + */ + __publicField3(_MenuRemoveSheet, "defaultIns", new _MenuRemoveSheet()); + let MenuRemoveSheet = _MenuRemoveSheet; + const _DDeiCoreMenus = class _DDeiCoreMenus extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + MenuCancelMergeCell, + MenuCopySheet, + MenuInsertCol, + MenuInsertRow, + MenuMergeCell, + MenuRemoveCol, + MenuRemoveRow, + MenuRemoveSheet + ]); + } + getMenus(editor) { + var _a3; + let menus2 = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getMenus(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getMenus(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + menus2 = menus2.concat(ls); + } + }); + return menus2; + } + static configuration(options) { + var _a3; + let menus2 = new _DDeiCoreMenus(options); + for (let i2 = 0; i2 < ((_a3 = menus2.plugins) == null ? void 0 : _a3.length); i2++) { + menus2.plugins[i2] = menus2.plugins[i2].configuration(options, true); + } + return menus2; + } + static modify(fn) { + return _DDeiCoreMenus.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreMenus, "defaultIns", new _DDeiCoreMenus(null)); + let DDeiCoreMenus = _DDeiCoreMenus; + const themeDefault = ".ddei-editor[theme='ddei-core-theme-default'] {\n --background: white;\n --theme: #F5F5F5;\n --text: black;\n --dot: #176eff;\n --hover: #e7e7e7;\n --icon: #424242;\n --border:#D5D5DF;\n --placeholder: #AdAdAd;\n --scroll-background: var(--theme);\n --scroll-hover: var(--hover);\n --scroll-border: var(--border);\n\n --panel-header:var(--theme);\n --panel-background: var(--background);\n --panel-title: var(--text);\n --panel-border: var(--border);\n --panel-hover: var(--hover);\n --panel-disabled: var(--theme);\n --panel-selected: var(--hover);\n --panel-title-disabled: #AdAdAd;\n --panel-title-selected: var(--text);\n\n\n --toolbox-header:var(--theme);\n --toolbox-background:var(--background);\n --toolbox-title:var(--text);\n --toolbox-hover:var(--hover);\n --toolbox-control-hover: #EDEFFF;\n --toolbox-control-hover-outline: 2px solid #BED0EF;\n --toolbox-control-title: var(--text);\n\n\n --topmenu-background: var(--background);\n --topmenu-header: var(--theme);\n\n\n\n --canvas-rule-background: var(--background);\n --canvas-rule-border: #E0E3E9;\n --canvas-scroll-background: var(--background);\n --canvas-scroll-border: #E0E3E9;\n --canvas-grid-line: rgb(220, 220, 220);\n --canvas-grid-dot: rgb(121, 121, 121);\n --canvas-control-border: black;\n --canvas-control-background: white;\n --canvas-control-title: #252525;\n\n --canvas-mark-title: #252525;\n --canvas-text-selection: #97bdf2;\n --canvas-text-cursor: black;\n}"; + const __vite_glob_0_0$4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: themeDefault + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiCoreThemeDefault = class _DDeiCoreThemeDefault extends DDeiThemeBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-theme-default"); + __publicField3(this, "label", "默认"); + __publicField3(this, "default", true); + } + getThemes(editor) { + let theme_ctx = /* @__PURE__ */ Object.assign({ + "./theme-default.css": __vite_glob_0_0$4 + }); + for (let path in theme_ctx) { + let css = theme_ctx[path].default; + this.css = css; + } + return super.getThemes(editor); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiCoreThemeDefault.defaultIns.name]) { + for (let i2 in options[_DDeiCoreThemeDefault.defaultIns.name]) { + newOptions[i2] = options[_DDeiCoreThemeDefault.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreThemeDefault(newOptions); + return panels; + } + } + return _DDeiCoreThemeDefault; + } + static modify(fn) { + return _DDeiCoreThemeDefault.defaultIns.modify(fn); + } + }; + // //背景色 + // background:string = 'white'; + // //主题色 + // theme:string = '#F5F5F5'; + // //文本色 + // text:string = 'black'; + // //点缀色 + // dot: string = '#176eff'; + // //交互色 + // active:string = '#edefff'; + // //图标色 + // icon:string = '#424242'; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreThemeDefault, "defaultIns", new _DDeiCoreThemeDefault()); + let DDeiCoreThemeDefault = _DDeiCoreThemeDefault; + const themeBlack = ".ddei-editor[theme='ddei-core-theme-black'] {\n --background: #212121;\n --theme: #2c2c2c;\n --text: white;\n --dot: #176eff;\n --hover: rgb(60,60,60);\n --icon: white;\n --border: #DFDFDF;\n --placeholder: #A1A1A1;\n --scroll-background: var(--theme);\n --scroll-hover: var(--hover);\n --scroll-border: white;\n\n --panel-header: var(--theme);\n --panel-background: var(--background);\n --panel-title: var(--text);\n --panel-border: var(--border);\n --panel-hover: var(--hover);\n --panel-disabled: var(--theme);\n --panel-selected: var(--hover);\n --panel-title-disabled: #A1A1A1;\n --panel-title-selected: var(--text);\n\n\n\n --toolbox-header: var(--theme);\n --toolbox-background: var(--background);\n --toolbox-title: var(--text);\n --toolbox-hover: var(--hover);\n --toolbox-control-hover: var(--dot);\n --toolbox-control-hover-outline: 2px solid #BED0EF;\n --toolbox-control-title: var(--text);\n\n\n --canvas-rule-background: var(--theme);\n --canvas-rule-border: white;\n --canvas-scroll-background: var(--theme);\n --canvas-scroll-border: white;\n --canvas-grid-line: rgb(121, 121, 121);\n --canvas-grid-dot: rgb(121, 121, 121);\n --canvas-control-border: white;\n --canvas-control-background: var(--theme);\n --canvas-control-title: white;\n\n --canvas-mark-title: white;\n --canvas-text-selection: #97bdf2;\n --canvas-text-cursor: white;\n \n}"; + const __vite_glob_0_0$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: themeBlack + }, Symbol.toStringTag, { value: "Module" })); + const _DDeiCoreThemeBlack = class _DDeiCoreThemeBlack extends DDeiThemeBase { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-theme-black"); + __publicField3(this, "label", "黑色"); + } + getThemes(editor) { + let theme_ctx = /* @__PURE__ */ Object.assign({ + "./theme-black.css": __vite_glob_0_0$3 + }); + for (let path in theme_ctx) { + let css = theme_ctx[path].default; + this.css = css; + } + return super.getThemes(editor); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiCoreThemeBlack.defaultIns.name]) { + for (let i2 in options[_DDeiCoreThemeBlack.defaultIns.name]) { + newOptions[i2] = options[_DDeiCoreThemeBlack.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreThemeBlack(newOptions); + return panels; + } + } + return _DDeiCoreThemeBlack; + } + static modify(fn) { + return _DDeiCoreThemeBlack.defaultIns.modify(fn); + } + }; + // //背景色 + // background:string = 'black'; + // //主题色 + // theme:string = 'black'; + // //文本色 + // text:string = 'white'; + // //点缀色 + // dot: string = '#176eff'; + // //交互色 + // active:string = '#edefff'; + // //图标色 + // icon:string = '#424242'; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreThemeBlack, "defaultIns", new _DDeiCoreThemeBlack()); + let DDeiCoreThemeBlack = _DDeiCoreThemeBlack; + const _DDeiCoreThemes = class _DDeiCoreThemes extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiCoreThemeDefault, DDeiCoreThemeBlack]); + } + getThemes(editor) { + var _a3; + let themes = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getThemes(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getThemes(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + themes = themes.concat(ls); + } + }); + return themes; + } + static configuration(options) { + var _a3; + let themes = new _DDeiCoreThemes(options); + for (let i2 = 0; i2 < ((_a3 = themes.plugins) == null ? void 0 : _a3.length); i2++) { + themes.plugins[i2] = themes.plugins[i2].configuration(options, true); + } + return themes; + } + static modify(fn) { + return _DDeiCoreThemes.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreThemes, "defaultIns", new _DDeiCoreThemes(null)); + let DDeiCoreThemes = _DDeiCoreThemes; + const _DDeiCoreLifeCycle = class _DDeiCoreLifeCycle extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-lifecycle"); + __publicField3(this, "EVENT_MOUSE_MOVE_IN_LAYER", new DDeiFuncData("mouse-operating", 1, this.mouseOperating)); + } + /** + * 正在进行鼠标操作 + */ + mouseOperating(operateType, data, ddInstance, evt) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + DDeiEditorUtil.closeDialog(editor, "ddei-core-dialog-choosecontrol"); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiCoreLifeCycle.name]) { + for (let i2 in options[_DDeiCoreLifeCycle.name]) { + newOptions[i2] = options[_DDeiCoreLifeCycle.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreLifeCycle(); + if (newOptions.name) { + panels.name = newOptions.name; + } + if (newOptions.sort) { + panels.sort = newOptions.sort; + } + return panels; + } + } + return _DDeiCoreLifeCycle; + } + static modify(fn) { + return _DDeiCoreLifeCycle.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreLifeCycle, "defaultIns", new _DDeiCoreLifeCycle(null)); + let DDeiCoreLifeCycle = _DDeiCoreLifeCycle; + const _DDeiCoreLifeCycles = class _DDeiCoreLifeCycles extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "lifecyclies", DDeiCoreLifeCycle); + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + static configuration(options) { + let core = new _DDeiCoreLifeCycles(options); + core.lifecyclies = core.lifecyclies.configuration(options, true); + return core; + } + static modify(fn) { + return _DDeiCoreLifeCycles.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreLifeCycles, "defaultIns", new _DDeiCoreLifeCycles(null)); + let DDeiCoreLifeCycles = _DDeiCoreLifeCycles; + const _DDeiCore = class _DDeiCore extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 0); + __publicField3(this, "layouts", DDeiCoreLayouts); + __publicField3(this, "panels", DDeiCorePanels); + __publicField3(this, "components", DDeiCoreComponents); + __publicField3(this, "dialogs", DDeiCoreDialogs); + __publicField3(this, "propeditors", DDeiCorePVEditors); + __publicField3(this, "hotkeys", DDeiCoreHotkeys); + __publicField3(this, "controls", DDeiCoreControls); + __publicField3(this, "menus", DDeiCoreMenus); + __publicField3(this, "themes", DDeiCoreThemes); + __publicField3(this, "lifecycles", DDeiCoreLifeCycles); + } + getOptions() { + let options = {}; + let array = [this.layouts, this.panels, this.propeditors, this.dialogs, this.components, this.hotkeys, this.controls, this.menus, this.themes, this.lifecycles]; + array.forEach((plugin) => { + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + options = Object.assign({}, options, plugin.defaultIns.getOptions()); + } else if (plugin instanceof DDeiPluginBase) { + options = Object.assign({}, options, plugin.getOptions()); + } + }); + return options; + } + getLangs(editor) { + const langModules = /* @__PURE__ */ Object.assign({ "./i18n/en_US.ts": __vite_glob_0_0$6, "./i18n/zh_CN.ts": __vite_glob_0_1$3 }); + let langs = {}; + for (let i2 in langModules) { + let langModule = langModules[i2]; + let newI = i2.substring(i2.lastIndexOf("/") + 1, i2.lastIndexOf(".")); + langs[newI] = langModule.default; + } + return langs; + } + getComponents(editor) { + if (DDeiPluginBase.isSubclass(this.components, DDeiPluginBase)) { + return this.components.defaultIns.getComponents(editor); + } else if (this.components instanceof DDeiPluginBase) { + return this.components.getComponents(editor); + } + } + getPanels(editor) { + if (DDeiPluginBase.isSubclass(this.panels, DDeiPluginBase)) { + return this.panels.defaultIns.getPanels(editor); + } else if (this.panels instanceof DDeiPluginBase) { + return this.panels.getPanels(editor); + } + } + getLayouts(editor) { + if (DDeiPluginBase.isSubclass(this.layouts, DDeiPluginBase)) { + return this.layouts.defaultIns.getLayouts(editor); + } else if (this.layouts instanceof DDeiPluginBase) { + return this.layouts.getLayouts(editor); + } + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecycles, DDeiPluginBase)) { + return this.lifecycles.defaultIns.getLifeCyclies(editor); + } else if (this.lifecycles instanceof DDeiPluginBase) { + return this.lifecycles.getLifeCyclies(editor); + } + } + getDialogs(editor) { + if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) { + return this.dialogs.defaultIns.getDialogs(editor); + } else if (this.dialogs instanceof DDeiPluginBase) { + return this.dialogs.getDialogs(editor); + } + } + getPropEditors(editor) { + if (DDeiPluginBase.isSubclass(this.propeditors, DDeiPluginBase)) { + return this.propeditors.defaultIns.getPropEditors(editor); + } else if (this.propeditors instanceof DDeiPluginBase) { + return this.propeditors.getPropEditors(editor); + } + } + getHotKeys(editor) { + if (DDeiPluginBase.isSubclass(this.hotkeys, DDeiPluginBase)) { + return this.hotkeys.defaultIns.getHotKeys(editor); + } else if (this.hotkeys instanceof DDeiPluginBase) { + return this.hotkeys.getHotKeys(editor); + } + } + getControls(editor) { + if (DDeiPluginBase.isSubclass(this.controls, DDeiPluginBase)) { + return this.controls.defaultIns.getControls(editor); + } else if (this.controls instanceof DDeiPluginBase) { + return this.controls.getControls(editor); + } + } + getGroups(editor) { + if (DDeiPluginBase.isSubclass(this.controls, DDeiPluginBase)) { + return this.controls.defaultIns.getGroups(editor); + } else if (this.controls instanceof DDeiPluginBase) { + return this.controls.getGroups(editor); + } + } + getMenus(editor) { + if (DDeiPluginBase.isSubclass(this.menus, DDeiPluginBase)) { + return this.menus.defaultIns.getMenus(editor); + } else if (this.menus instanceof DDeiPluginBase) { + return this.menus.getMenus(editor); + } + } + getThemes(editor) { + if (DDeiPluginBase.isSubclass(this.themes, DDeiPluginBase)) { + return this.themes.defaultIns.getThemes(editor); + } else if (this.themes instanceof DDeiPluginBase) { + return this.themes.getThemes(editor); + } + } + static configuration(options) { + let core = new _DDeiCore(options); + core.layouts = core.layouts.configuration(options, true); + core.panels = core.panels.configuration(options, true); + core.components = core.components.configuration(options, true); + core.dialogs = core.dialogs.configuration(options, true); + core.propeditors = core.propeditors.configuration(options, true); + core.hotkeys = core.hotkeys.configuration(options, true); + core.controls = core.controls.configuration(options, true); + core.menus = core.menus.configuration(options, true); + core.themes = core.themes.configuration(options, true); + core.lifecycles = core.lifecycles.configuration(options, true); + return core; + } + static modify(fn) { + return _DDeiCore.defaultIns.modify(fn); + } + }; + __publicField3(_DDeiCore, "order", 0); + /** + * 缺省实例 + */ + __publicField3(_DDeiCore, "defaultIns", new _DDeiCore(null)); + let DDeiCore = _DDeiCore; + const cursorBrush = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAZdJREFUOE+lk7FLHFEQxr/v7UZS6b1T8weou41wpDBgoQgphNRJE2JjYdBdtBCtRLhKBC1EeIuFkBSBFEm6kM7milRpYkize8baBH1nl+jtTVjlhMO9A73pZt7M75vHxxBdBrucR3tAWVThUXUyE6gtjFRASp5YW0CfSV44lN1sKCUWzxf8T3cC6CiZgcgEQAWiYgPvXWdAWVw9WF0h8PC6UUoC/M4AhAwAPLyqAn/tn5FtlFnP8psv9O0djam08ZHA26ZS6qjPUk8dl3zWrAkx21Dq+fn88LcWQK85euIg3bahP9XJGR3FlYZylm8BCiZ+DLJCQQq2cUdEhHCg3Mna/ND3lg2yRJvkFYApG3qv87YommRfIAc29N8331tsLJh4neClDb1NHcWr1vF28K+qtCtLNvC3tKmugSI28DZyAUUTvwH55SzwPugoPr544I7jguzB5Vcb+kPaxC+FfFoLvLl8QJQcCKQfYA1ASYQ/iUZm1iiIQ0A0BSdnoT+dC9DRr5IwLXZygXV1aheHf+QC7nNYXV/jf/ZkjxGbpARwAAAAAElFTkSuQmCC"; + const __vite_glob_0_0$2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: cursorBrush + }, Symbol.toStringTag, { value: "Module" })); + const modules = /* @__PURE__ */ Object.assign({ "./icons/cursor-brush.png": __vite_glob_0_0$2 }); + const ICONS = {}; + for (let i2 in modules) { + let icon = modules[i2]; + let newI = i2.substring(i2.lastIndexOf("/") + 1, i2.lastIndexOf(".")); + ICONS[newI] = icon.default; + } + const ddei = ""; + const iconfont = ""; + window._iconfont_svg_string_4428875 = '', ((l) => { + var a = (h = (h = document.getElementsByTagName("script"))[h.length - 1]).getAttribute("data-injectcss"), h = h.getAttribute("data-disable-injectsvg"); + if (!h) { + var t, o, i2, p, z, v = function(a2, h2) { + h2.parentNode.insertBefore(a2, h2); + }; + if (a && !l.__iconfont__svg__cssinject__) { + l.__iconfont__svg__cssinject__ = true; + try { + document.write(""); + } catch (a2) { + console && console.log(a2); + } + } + t = function() { + var a2, h2 = document.createElement("div"); + h2.innerHTML = l._iconfont_svg_string_4428875, (h2 = h2.getElementsByTagName("svg")[0]) && (h2.setAttribute("aria-hidden", "true"), h2.style.position = "absolute", h2.style.width = 0, h2.style.height = 0, h2.style.overflow = "hidden", h2 = h2, (a2 = document.body).firstChild ? v(h2, a2.firstChild) : a2.appendChild(h2)); + }, document.addEventListener ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) ? setTimeout(t, 0) : (o = function() { + document.removeEventListener("DOMContentLoaded", o, false), t(); + }, document.addEventListener("DOMContentLoaded", o, false)) : document.attachEvent && (i2 = t, p = l.document, z = false, m(), p.onreadystatechange = function() { + "complete" == p.readyState && (p.onreadystatechange = null, d()); + }); + } + function d() { + z || (z = true, i2()); + } + function m() { + try { + p.documentElement.doScroll("left"); + } catch (a2) { + return void setTimeout(m, 50); + } + d(); + } + })(window); + const _sfc_main$7 = { + name: "DDei-Editor", + extends: null, + mixins: [], + props: { + //外部配置文件的定义,当传入外部配置文件时,用外部配置文件覆盖内部配置 + options: { + type: Object, + default: null + }, + id: { + type: String, + default: "ddei_editor" + } + }, + data() { + return { + editor: null, + dragObj: null, + changeIndex: -1, + refreshMenu: false, + initLeftWidth: 0, + initRightWidth: 0 + }; + }, + //注册组件 + components: { + MenuDialog + }, + computed: {}, + watch: {}, + created() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n; + autoLoadCommand(); + if (!this.options) { + this.options = vue.markRaw({ + //配置扩展插件 + extensions: [] + }); + } + if (!this.options.extensions) { + this.options.extensions = []; + } + this.options.extensions.splice(0, 0, DDeiCore); + let editor = DDeiEditor.newInstance(this.id, this.id, true, this.options); + if ((_a3 = this.options) == null ? void 0 : _a3.i18n) { + if (this.options.i18n.langs) { + editor.registerLangs(this.options.i18n.langs); + } + } + editor.setI18nLang((_c2 = (_b2 = this.options) == null ? void 0 : _b2.i18n) == null ? void 0 : _c2.lang); + this.editor = editor; + this.editor.createRenderViewer = this.createRenderViewer; + this.editor.removeRenderViewer = this.removeRenderViewer; + editor.appContext = vue.getCurrentInstance().appContext; + if (this.options) { + this.editor.applyConfig(this.options.config); + this.editor.extConfig = this.options.config; + this.editor.ddInstance.applyConfig(this.options.config); + } + if (((_f = (_e2 = (_d2 = this.options) == null ? void 0 : _d2.config) == null ? void 0 : _e2.controlDefines) == null ? void 0 : _f.length) > 0) { + (_h = (_g = this.options) == null ? void 0 : _g.config) == null ? void 0 : _h.controlDefines.forEach((control) => { + if (this.editor.controls.has(control.id)) { + let oldControl = this.editor.controls.get(control.id); + if (control.define) { + for (let n in control.define) { + if (control.define[n] || control.define[n] == 0) { + oldControl.define[n] = control.define[n]; + } + } + loadControlDefineExt(oldControl); + } + control = oldControl; + } + this.editor.controls.set(control.id, control); + loadControlByFrom(this.editor.controls, control); + }); + } + if (((_k = (_j = (_i = this.options) == null ? void 0 : _i.config) == null ? void 0 : _j.groupDefines) == null ? void 0 : _k.length) > 0) { + loadAndSortGroup((_m = (_l = this.options) == null ? void 0 : _l.config) == null ? void 0 : _m.groupDefines, this.editor.controls); + this.options.config.groupDefines.forEach((group2) => { + let finded = false; + for (let i2 = 0; i2 < this.editor.groups.length; i2++) { + if (this.editor.groups[i2].id == group2.id) { + this.editor.groups[i2] = group2; + finded = true; + break; + } + } + if (!finded) { + this.editor.groups.push(group2); + } + }); + this.editor.groups.sort((a, b) => { + return a.orderNo - b.orderNo; + }); + this.options.config.groupDefines.forEach((group2) => { + group2.controls.forEach((control) => { + delete control.attrs; + }); + }); + } + (_n = this.editor.controls) == null ? void 0 : _n.forEach((control) => { + if (control.menus) { + if (!editorInstance.menuMapping[control.id]) { + editorInstance.menuMapping[control.id] = control.menus; + } + let menus2 = editorInstance.menuMapping[control.id]; + for (let i2 = 0; i2 < menus2.length; i2++) { + for (let j2 in editorInstance.menus) { + if (editorInstance.menus[j2].name == menus2[i2].name) { + menus2[i2] = editorInstance.menus[j2]; + break; + } + } + } + } + delete control.attrs; + }); + DDeiEditorUtil.ICONS = ICONS; + }, + mounted() { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + this.editor.editorViewer = this; + this.editor.htmlElement = this.$refs.editor_div; + this.editor.bindEvent(); + this.editor.changeTheme(""); + let options = this.editor.options; + if ((_a3 = options == null ? void 0 : options.config) == null ? void 0 : _a3.width) { + this.$refs.editor_div.style.width = ((_b2 = options == null ? void 0 : options.config) == null ? void 0 : _b2.width) + "px"; + } + if ((_c2 = options == null ? void 0 : options.config) == null ? void 0 : _c2.height) { + this.$refs.editor_div.style.height = ((_d2 = options == null ? void 0 : options.config) == null ? void 0 : _d2.height) + "px"; + } + if ((_e2 = options == null ? void 0 : options.config) == null ? void 0 : _e2.initData) { + let initData = options.config.initData; + let converters = this.editor.getEnabledConverters(initData, 1); + converters == null ? void 0 : converters.forEach((converter) => { + initData = converter.input(initData); + }); + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(this.editor.ddInstance, null, initData.controls); + if (controlInitJSON) { + this.editor.addControls(controlInitJSON); + } + } + if ((_f = options == null ? void 0 : options.config) == null ? void 0 : _f.access) { + this.editor.setAccessInfo(options.config.access); + } else if (((_g = options == null ? void 0 : options.config) == null ? void 0 : _g.readonly) == true || ((_h = options == null ? void 0 : options.config) == null ? void 0 : _h.readonly) == false) { + this.editor.setEditable(!options.config.readonly); + } + this.editor.bus.interceptor[DDeiEnumBusCommandType.NodifyChange] = { + after: [this.changeFileModifyDirty] + }; + this.editor.bus.interceptor[DDeiEnumBusCommandType.ModelChangeValue] = { + after: [this.changeFileModifyDirty] + }; + if (DDeiEditor.HISTROY_LEVEL == "file") { + this.editor.bus.interceptor[DDeiEnumBusCommandType.AddHistroy] = { + execute: [this.addFileHistroy] + }; + } + this.editor.bus.interceptor[DDeiEnumBusCommandType.TextEditorChangeSelectPos] = { + execute: [this.textEditorChangeSelectPos] + }; + if (!this.editor.setCurrentMenu) { + this.editor.setCurrentMenu = this.setCurrentMenu; + } + if (this.editor.needControlIcon) { + DDeiEditorUtil.getControlIcons(this.editor); + } + if (options == null ? void 0 : options.onMounted) { + options.onMounted(this.editor); + } + }, + methods: { + mouseDown(event) { + DDeiEditor.ACTIVE_INSTANCE = this.editor; + }, + /** + * 设置当前菜单 + * @returns 控件ID + */ + setCurrentMenu(menus2) { + this.editor.currentMenuData = menus2; + this.refreshMenu = false; + this.$nextTick(() => { + this.refreshMenu = true; + }); + }, + changeFileModifyDirty() { + let action = DDeiEditorCommandFileDirty.newInstance(); + return action.action( + { state: DDeiFileState.MODIFY }, + this.editor.bus, + null + ); + }, + //记录文件的histroy + addFileHistroy() { + let action = DDeiEditorCommandAddHistroy.newInstance(); + return action.action({}, this.editor.bus, null); + }, + textEditorChangeSelectPos() { + if (!this.editor.textEditorSelectedChange) { + this.editor.textEditorSelectedChange = 1; + } else { + this.editor.textEditorSelectedChange++; + } + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + }, + createRenderViewer(model, operate, tempShape, composeRender) { + let editor = this.editor; + let vNode = editor.viewerMap.get(model.id); + if (vNode) { + if (operate == "VIEW") { + model.render.refreshView(editor, vNode, tempShape, composeRender); + } else if (operate == "VIEW-HIDDEN") { + vNode.el.style.display = "none"; + } + } else { + let parentNode = model.layer.render.containerViewer; + let div = document.createElement("div"); + div.setAttribute("mid", model.id); + parentNode.appendChild(div); + let opts = { editor, model }; + if (model.render.viewerOption) { + for (let k in model.render.viewerOption) { + if (k != "viewer") { + opts[k] = model.render.viewerOption[k]; + } + } + } + let vNode2 = vue.createVNode(model.render.viewer, opts); + let appContext = editor.appContext; + vNode2.appContext = appContext; + vue.render(vNode2, div); + editor.viewerMap.set(model.id, vNode2); + if (operate == "VIEW") { + model.render.refreshView(editor, vNode2, tempShape, composeRender); + } + } + }, + removeRenderViewer(model) { + let editor = this.editor; + let vNode = editor.viewerMap.get(model.id); + if (vNode) { + vNode.component.isUnmounted = true; + vNode.component.update(); + vNode.el.parentElement.remove(); + editor.viewerMap.delete(model.id); + } + } + } + }; + const Editor_vue_vue_type_style_index_0_lang = ""; + const _hoisted_1$7 = ["id"]; + const _hoisted_2$5 = ["id"]; + const _hoisted_3$4 = ["id"]; + function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2; + const _component_MenuDialog = vue.resolveComponent("MenuDialog"); + return vue.openBlock(), vue.createElementBlock("div", { + id: $props.id, + ref: "editor_div", + class: "ddei-editor", + onContextmenu: _cache[0] || (_cache[0] = vue.withModifiers(() => { + }, ["prevent"])), + onMousedown: _cache[1] || (_cache[1] = ($event) => $options.mouseDown($event)) + }, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_a3 = $data.editor) == null ? void 0 : _a3.getLayout()), { + editor: $data.editor, + options: (_b2 = $data.editor) == null ? void 0 : _b2.getLayoutOptions() + }, null, 8, ["editor", "options"])), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_c2 = $data.editor) == null ? void 0 : _c2.getDialogs(), (item, index) => { + return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.dialog), vue.mergeProps({ + editor: $data.editor, + options: item.options, + ref_for: true + }, item.options), null, 16, ["editor", "options"]); + }), 256)), + vue.withDirectives(vue.createVNode(_component_MenuDialog, { editor: $data.editor }, null, 8, ["editor"]), [ + [vue.vShow, !$data.refreshMenu] + ]), + vue.createElementVNode("div", { + id: $props.id + "_dialog_background_div", + class: "dialog-background-div" + }, null, 8, _hoisted_2$5), + vue.createElementVNode("div", { + id: $props.id + "_ddei_cut_img_div", + class: "ddei-cut-img-div" + }, null, 8, _hoisted_3$4) + ], 40, _hoisted_1$7); + } + const DDeiEditorView = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7]]); + const en_US = { + ddei: { + uml: { + active: "Active", + state: "State", + substate: "Substate", + compstate: "Composite", + initstate: "Initial", + finalstate: "Final", + statecontainer: "StateC", + object: "Object", + objname: "Object Name", + life: "Lifeline", + objlife: "ObjectLifeline", + seqobj: "Sequence", + rolelife: "RoleLifeline", + hcross: "HoriCros", + vcross: "VertCros", + sendsignal: "SendSignal", + recsignal: "ReceiveSignal", + recevent: "ReceiveEvent", + dot: "Dot", + pause: "Pause", + hlane: "HoriLane", + vlane: "VertLane", + matrix: "Matrix", + control: "Control", + controlflow: "ControlF", + node: "Node", + nodeins: "NodeInst", + initnode: "InitialN", + forknode: "ForkNode", + endnode: "EndNode", + startnode1: "StartN", + endnode1: "EndN", + flowend: "FlowEnd", + invoke: "Invoke", + transition: "Transition", + fork: "Fork", + container: "Container", + case: "UseCase", + ext: "Ext", + extpoint: "ExtPoint", + extcase: "ExtUseC", + system: "System", + role: "Role", + syspart: "SysParti", + participal: "Participant", + coop: "Collab", + assis: "Assoc", + generalization: "Genera", + include: "Include", + ui: "UI", + interface: "Interf", + reqinte: "ReqInter", + class: "Class", + classname: "ClassName", + simpleclass: "SimpCls", + activeclass: "ActCLs", + active1: "Active", + activebreak: "ActBreak", + muti: "Multi", + enum: "Enum", + datatype: "DataType", + signal: "Signal", + original: "Original", + constraint: "Constr", + collection: "Collect", + package: "Package", + overview: "Overvi", + model: "Model", + relation: "Relatio", + implement: "Implem", + together: "Aggr", + compose: "Compos", + dependent: "Depen", + link: "Link", + relationship: "Relatio", + component: "Component", + compbox: "CompBox", + compins: "CompInst", + direct: "Direct", + msg: "Message", + async: "Async", + asyncmsg: "AsyncMsg", + project: "Project", + projins: "ProjInst", + deploydes: "DeployD", + depdesins: "DeployDI", + sketchmap: "Sketch", + communication: "Communi", + extend: "Extend", + manifest: "Manife", + deploy: "Deploy", + entity: "Entity", + alternative: "Alterna", + loopnative: "LoopFrag", + altnative: "AltFrag", + optnative: "OptFrag", + paranative: "ParFrag", + customnative: "CustomF", + objdel: "ObjDel", + edge: "Edge", + switch: "Decisi", + simplehistory: "SimHis", + detailhistroy: "DetHis", + convert: "Convert", + groups: { + active: "UML-Active", + case: "UML-UseCase", + class: "UML-Class", + component: "UML-Component", + cooperate: "UML-Cooperate", + deploy: "UML-Deploy", + sequence: "UML-Sequence", + state: "UML-State" + } + } + } + }; + const __vite_glob_0_0$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: en_US + }, Symbol.toStringTag, { value: "Module" })); + const zh_CN = { + ddei: { + uml: { + active: "活动", + state: "状态", + substate: "子状态机", + compstate: "复合状态", + initstate: "初始状态", + finalstate: "最终状态", + statecontainer: "状态容器", + object: "对象", + objname: "对象名", + life: "生命线", + objlife: "对象生命线", + seqobj: "序列对象", + rolelife: "角色生命线", + hcross: "水平交叉", + vcross: "垂直交叉", + sendsignal: "发送信号", + recsignal: "接收信号", + recevent: "接收事件", + dot: "点", + pause: "暂停", + hlane: "水平泳道", + vlane: "垂直泳道", + matrix: "矩阵", + control: "控制", + controlflow: "控制流", + node: "节点", + nodeins: "节点实例", + initnode: "初始节点", + forknode: "分叉节点", + endnode: "终止节点", + startnode1: "起点", + endnode1: "终点", + flowend: "流终", + invoke: "调用", + transition: "过渡", + fork: "分叉", + container: "容器", + case: "用例", + ext: "扩展", + extpoint: "扩展点", + extcase: "扩展用例", + system: "系统", + role: "角色", + syspart: "系统参与者", + participal: "参与者", + coop: "协作", + assis: "协会", + generalization: "泛化", + include: "包含", + ui: "界面", + interface: "接口", + reqinte: "需求接口", + class: "类", + classname: "类名", + simpleclass: "简单类", + activeclass: "活动类", + active1: "激活", + activebreak: "激活中断", + muti: "多重", + enum: "枚举", + datatype: "数据类型", + signal: "信号", + original: "原始", + constraint: "约束", + collection: "汇聚", + package: "包", + overview: "概述", + model: "模型", + relation: "关联", + implement: "实现", + together: "聚合", + compose: "组合", + dependent: "依赖", + link: "链接", + relationship: "关系", + component: "组件", + compbox: "组件盒", + compins: "组件实例", + direct: "方向", + msg: "消息", + async: "异步", + asyncmsg: "异步消息", + project: "项目", + projins: "项目实例", + deploydes: "部署描述", + depdesins: "部署描述实例", + sketchmap: "示意图", + communication: "通信", + extend: "继承", + manifest: "表明", + deploy: "部署", + entity: "实体", + alternative: "替代片段", + loopnative: "循环片段", + altnative: "抉择片段", + optnative: "选项片段", + paranative: "并行片段", + customnative: "自定义片段", + objdel: "对象删除", + edge: "边界", + switch: "判定", + simplehistory: "简略历史", + detailhistroy: "详细历史", + convert: "转换", + groups: { + active: "UML-活动", + case: "UML-用例", + class: "UML-类图", + component: "UML-组件", + cooperate: "UML-协作", + deploy: "UML-部署", + sequence: "UML-序列", + state: "UML-状态图" + } + } + } + }; + const __vite_glob_0_1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: zh_CN + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveActive = { + "id": "308001", + "name": "ddei.uml.active", + "code": "act", + "desc": "UML的活动节点", + "from": "100500", + "define": { + width: 110, + height: 50, + text: "Activity", + font: { + size: 14 + }, + border: { + round: 10 + }, + textStyle: { + align: 3, + valign: 3 + }, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,select:1,clip:1,stroke:1,fill:1}); + }`, + //下方子图标 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:35,y:30,type:1,stroke:1}); + pvs.push({x:35,y:40,stroke:1,type:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:45,y:30,type:1,stroke:1}); + pvs.push({x:45,y:40,stroke:1,type:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:35,y:30,type:1,stroke:1}); + pvs.push({x:45,y:30,stroke:1,type:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:40,y:20,type:1,stroke:1}); + pvs.push({x:40,y:40,stroke:1,type:1,end:1}); + } + }`, + //定义锚点 + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 1: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 3: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + } + }`, + //文本区域,margin:右10,下15 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + x-=5 + break; + case 1: + y=15 + pvs[0].y=y + break; + case 2: + x+=5 + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveActive + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveBranch = { + "id": "308023", + "name": "ddei.uml.fork", + "code": "uc", + "desc": "分叉", + "from": "301012", + "define": { + width: 50, + border: { + width: 1 + }, + fill: { + type: 0 + } + } + }; + const __vite_glob_0_1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveBranch + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveContainer = { + "id": "308015", + "name": "ddei.uml.container", + "code": "uc", + "desc": "容器", + "from": "302003" + }; + const __vite_glob_0_2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveContainer + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveCross = { + "id": "308006", + "name": "ddei.uml.hcross", + "code": "cross", + "desc": "水平交叉", + "from": "301012" + }; + const __vite_glob_0_3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveCross + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveCross1 = { + "id": "308007", + "name": "ddei.uml.vcross", + "code": "cross", + "desc": "垂直交叉", + "from": "301012", + "define": { + width: 10, + height: 100 + } + }; + const __vite_glob_0_4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveCross1 + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveCtrlflow = { + "id": "308019", + "name": "ddei.uml.recevent", + "code": "ctrlflow", + "desc": "接收事件", + "from": "100401", + "define": { + type: 1, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveCtrlflow + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveCtrlflow1 = { + "id": "308020", + "name": "ddei.uml.recevent", + "code": "ctrlflow", + "desc": "接收事件", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: -75, z: 1 }, + { x: 75, y: 75, z: 1 } + ] + } + }; + const __vite_glob_0_6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveCtrlflow1 + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveObject = { + "id": "308005", + "name": "ddei.uml.object", + "code": "act", + "desc": "UML的对象节点", + "from": "102010", + "define": { + text: "Object" + } + }; + const __vite_glob_0_7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveObject + }, Symbol.toStringTag, { value: "Module" })); + const umlActivePoint = { + "id": "308012", + "name": "ddei.uml.dot", + "code": "point", + "desc": "点", + "from": "100001", + "define": { + width: 20, + height: 20 + } + }; + const __vite_glob_0_8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActivePoint + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveRecevt = { + "id": "308011", + "name": "ddei.uml.recevent", + "code": "recevt", + "desc": "接收事件", + "from": "103007", + "define": { + width: 70, + height: 70, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveRecevt + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveRecmsg = { + "id": "308009", + "name": "ddei.uml.recsignal", + "code": "uarm", + "desc": "接收信号", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:50,y:50,fill:1,clip:1,select:1,oppoint:2,stroke:1}); + break; + case 1: + pvs.push({x:-50,y:50,fill:1,clip:1,oppoint:2,select:1,stroke:1}); + break; + case 2: + pvs.push({x:-25,y:0,fill:1,clip:1,oppoint:2,stroke:1}); + pvs.push({x:-50,y:-50,fill:1,clip:1,oppoint:2,select:1,stroke:1}); + break; + case 3: + pvs.push({x:50,y:-50,fill:1,stroke:1,oppoint:2,op2close:1,clip:1,select:1,end:1}); + break; + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:50,y:50,text:1}); + break; + case 1: + pvs.push({x:-25,y:50,text:1}); + break; + case 2: + pvs.push({x:-25,y:-50,text:1}); + break; + case 3: + pvs.push({x:50,y:-50,text:1,end:1}); + break; + } + }` + ] + } + } + }; + const __vite_glob_0_10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveRecmsg + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveSendmsg = { + "id": "308008", + "name": "ddei.uml.sendsignal", + "code": "uasm", + "desc": "发送信号", + "from": "100500", + "define": { + width: 110, + height: 70, + //2为极坐标,缺省点为原点 + poly: 2, + cIndex: 2, + //采样信息 + sample: { + //一圈采样次数 + loop: 4, + //半径距离 + r: 50, + //初始次采样的开始角度 + angle: 0, + //半径距离 + //采样的规则,多组采样返回多组规则 + rules: [ + //绘制线段区域 + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({begin:1,x:75,y:0,fill:1,clip:1,select:1,oppoint:2,stroke:1}); + break; + case 1: + pvs.push({x:50,y:50,fill:1,clip:1,text:1,select:1,oppoint:2,stroke:1}); + pvs.push({x:-50,y:50,fill:1,clip:1,text:1,select:1,oppoint:2,stroke:1}); + break; + case 2: + pvs.push({x:-50,y:-50,fill:1,clip:1,text:1,select:1,oppoint:2,stroke:1}); + break; + case 3: + pvs.push({x:50,y:-50,fill:1,stroke:1,text:1,clip:1,oppoint:2,op2close:1,select:1,end:1}); + break; + } + }` + ] + }, + iconPos: { + dx: -20 + } + } + }; + const __vite_glob_0_11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveSendmsg + }, Symbol.toStringTag, { value: "Module" })); + const umlActiveState = { + "id": "308004", + "name": "ddei.uml.state", + "code": "state", + "desc": "UML的活动的状态节点", + "from": "100009", + "define": { + width: 120, + height: 80, + border: { + round: 5 + }, + ext: { + sample: { + //分割横线的纵坐标 + pvalue: -20 + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 115, + height: 20, + cIndex: 2, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "State", + initCPV: { + x: 0, + y: -27 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + }, + { + width: 115, + height: 53, + cIndex: 2, + id: "100002", + textStyle: { + feed: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "Action", + initCPV: { + x: 0, + y: 12 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ] + } + }; + const __vite_glob_0_12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActiveState + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseCase = { + "id": "302002", + "name": "ddei.uml.case", + "code": "case", + "desc": "UML的用例图-用例", + "from": "100006", + "define": { + width: 110, + height: 70 + } + }; + const __vite_glob_0_13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseCase + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseCase1 = { + "id": "302006", + "name": "ddei.uml.extcase", + "code": "case", + "desc": "UML的用例节点", + "from": "100009", + "define": { + width: 140, + height: 90, + ext: { + sample: { + //分割横线的纵坐标 + pvalue: -20 + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 136, + height: 24, + cIndex: 2, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "ddei.uml.case", + initCPV: { + x: 0, + y: -31.5 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 136, + height: 55, + cIndex: 2, + id: "100002", + textStyle: { + valign: 1, + feed: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "ddei.uml.extpoint", + initCPV: { + x: 0, + y: 16 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ] + } + }; + const __vite_glob_0_14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseCase1 + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseCase2 = { + "id": "302007", + "name": "ddei.uml.extcase", + "code": "case", + "desc": "UML的用例节点", + "from": "100104", + "define": { + width: 140, + height: 100, + ext: { + sample: { + eqrat: false, + //分割横线的纵坐标 + pvalue: -10 + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 85, + height: 24, + cIndex: 2, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "ddei.uml.case", + initCPV: { + x: 0, + y: -27.5 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 90, + height: 45, + cIndex: 2, + id: "100002", + textStyle: { + feed: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "ddei.uml.extpoint", + initCPV: { + x: 0, + y: 13 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ] + } + }; + const __vite_glob_0_15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseCase2 + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseColl = { + "id": "302010", + "name": "ddei.uml.assis", + "code": "assis", + "desc": "协会", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseColl + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseCoop = { + "id": "302005", + "name": "ddei.uml.coop", + "code": "coop", + "desc": "UML的用例图-协作", + "from": "302002", + "define": { + border: { + dash: [10, 5] + } + } + }; + const __vite_glob_0_17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseCoop + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseExtend = { + "id": "302013", + "name": "ddei.uml.ext", + "code": "ext", + "desc": "扩展", + "from": "100401", + "define": { + type: 2, + dash: [10, 10], + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 0, dy: -10 } + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "<>", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: -10 + } + } + } + ] + }; + const __vite_glob_0_18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseExtend + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseInclude = { + "id": "302012", + "name": "ddei.uml.include", + "code": "inc", + "desc": "包含", + "from": "100401", + "define": { + type: 2, + dash: [10, 10], + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 0, dy: -10 } + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "<>", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: -10 + } + } + } + ] + }; + const __vite_glob_0_19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseInclude + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseInterface = { + "id": "302014", + "name": "ddei.uml.interface", + "code": "inte", + "desc": "接口", + "from": "100401", + "define": { + type: 1, + sp: { + type: 2, + weight: 20 + }, + ep: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseInterface + }, Symbol.toStringTag, { value: "Module" })); + const umlCasePart = { + "id": "302004", + "name": "ddei.uml.participal", + "code": "parti", + "desc": "UML的用例图参与者", + "from": "100009", + "define": { + width: 140, + height: 90, + ext: { + sample: { + //分割横线的纵坐标 + pvalue: -20 + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 136, + height: 24, + cIndex: 2, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + align: 3 + }, + text: "<>", + initCPV: { + x: 0, + y: -31.5 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 136, + height: 60, + cIndex: 2, + id: "100002", + textStyle: { + align: 3, + feed: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "ddei.uml.syspart", + initCPV: { + x: 0, + y: 13.5 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ] + } + }; + const __vite_glob_0_21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCasePart + }, Symbol.toStringTag, { value: "Module" })); + const umlCaseSystem = { + "id": "302003", + "name": "ddei.uml.system", + "code": "coop", + "desc": "UML的用例图-协作", + "from": "100201", + "define": { + width: 400, + height: 300, + text: "系统", + textStyle: { + valign: 1, + align: 3 + }, + font: { + size: 15 + } + } + }; + const __vite_glob_0_22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCaseSystem + }, Symbol.toStringTag, { value: "Module" })); + const umlClassCls = { + "id": "307001", + "name": "ddei.uml.class", + "code": "cls", + "desc": "UML的类节点", + "from": "100008", + "define": { + width: 240, + height: 160, + border: { + round: 5 + }, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + } + }`, + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[1].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[1].y-model.cpv.y),stroke:1,type:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 240, + height: 30, + id: "100002", + cIndex: 1, + text: "ddei.uml.classname", + textStyle: { + bold: 1, + scale: 1 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -65 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 240, + height: 64, + id: "100002", + cIndex: 1, + text: ` + attribute1:type = defaultValue + + attribute2: type + - attribute3: type`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -17 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 240, + height: 64, + id: "100002", + cIndex: 1, + text: ` + operation1(params):returnType + - operation2(params) + - operation3()`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 47 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: 0, + y: -31, + ix: 0, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + }, + //定义属性区的高度控制点 + { + x: 0, + y: 9.375, + ix: 0, + iy: 9.375, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -31, + y1: 50 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[1]"], + nextModels: ["composes[2]"] + } + ] + } + ] + } + }; + const __vite_glob_0_23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassCls + }, Symbol.toStringTag, { value: "Module" })); + const umlClassCls1 = { + "id": "307002", + "name": "ddei.uml.simpleclass", + "code": "cls", + "desc": "UML的简单类节点", + "from": "308005", + "define": { + width: 120, + height: 80, + text: "Class" + } + }; + const __vite_glob_0_24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassCls1 + }, Symbol.toStringTag, { value: "Module" })); + const umlClassCls2 = { + "id": "307003", + "name": "ddei.uml.activeclass", + "code": "cls", + "desc": "UML的活动类节点", + "from": "102040", + "define": { + width: 180, + height: 115, + text: "Class" + } + }; + const __vite_glob_0_25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassCls2 + }, Symbol.toStringTag, { value: "Module" })); + const umlClassConstraint = { + "id": "307011", + "name": "ddei.uml.constraint", + "code": "constraint", + "desc": "UML的类图约束节点", + "from": "104125", + "define": { + ext: { + composes: [ + {}, + {}, + { + text: "Constraint", + textStyle: { + align: 3, + feed: 1, + scale: 1 + } + } + ] + } + } + }; + const __vite_glob_0_26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassConstraint + }, Symbol.toStringTag, { value: "Module" })); + const umlClassDt = { + "id": "307008", + "name": "ddei.uml.datatype", + "code": "datatype", + "desc": "UML的数据类型", + "from": "100002", + "define": { + width: 110, + height: 70, + text: `<> +Datatype`, + textStyle: { + valign: 1, + italic: 1, + feed: 1, + vspace: 2 + } + } + }; + const __vite_glob_0_27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassDt + }, Symbol.toStringTag, { value: "Module" })); + const umlClassEnum = { + "id": "307007", + "name": "ddei.uml.enum", + "code": "enum", + "desc": "UML的枚举", + "from": "100002", + "define": { + width: 110, + height: 70, + text: `<> +Enumeration`, + textStyle: { + valign: 1, + italic: 1, + feed: 1, + vspace: 2 + } + } + }; + const __vite_glob_0_28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassEnum + }, Symbol.toStringTag, { value: "Module" })); + const umlClassGeneralization = { + "id": "307019", + "name": "ddei.uml.generalization", + "code": "gen", + "desc": "泛化关系", + "from": "100401", + "define": { + type: 2, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassGeneralization + }, Symbol.toStringTag, { value: "Module" })); + const umlClassImpl = { + "id": "307020", + "name": "ddei.uml.implement", + "code": "impl", + "desc": "实现关系", + "from": "100401", + "define": { + type: 2, + dash: [10, 10], + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassImpl + }, Symbol.toStringTag, { value: "Module" })); + const umlClassInterface = { + "id": "307004", + "name": "ddei.uml.interface", + "code": "inte", + "desc": "UML的接口节点", + "from": "100008", + "define": { + width: 230, + height: 100, + border: { + round: 5 + }, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 230, + height: 30, + id: "100002", + cIndex: 1, + text: `<> +接口名`, + textStyle: { + bold: 1, + feed: 1, + scale: 1 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -35 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 230, + height: 70, + id: "100002", + cIndex: 1, + text: ` + Operation A(int): void + + Operation B(): void + - Operation C(int): int`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 15 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: 0, + y: -20, + ix: 0, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + } + ] + } + }; + const __vite_glob_0_31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassInterface + }, Symbol.toStringTag, { value: "Module" })); + const umlClassLink = { + "id": "307018", + "name": "ddei.uml.relation", + "code": "uclink", + "desc": "UML的关联", + "from": "100040", + "define": { + width: 110, + height: 70 + } + }; + const __vite_glob_0_32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassLink + }, Symbol.toStringTag, { value: "Module" })); + const umlClassModel = { + "id": "307014", + "name": "ddei.uml.model", + "code": "model", + "desc": "UML的模型节点", + "from": "305003", + "define": { + ext: { + sample: { + //新增一个三角形 + rules: [ + `(i, sample, pvs, model, ovs){ + let baseX = (ovs[1].x-ovs[1].ovi.x-50)-6 + let baseY = -50+(ovs[0].y-ovs[0].ovi.y)/2-4.5 + pvs.push({begin:1,x:baseX,y:baseY,stroke:1}); + pvs.push({x:baseX-4,y:baseY+8,stroke:1}); + pvs.push({end:1,x:baseX+4,y:baseY+8,stroke:1}); + }` + ] + }, + composes: [ + { + text: "ddei.uml.model", + textStyle: { + align: 1 + } + }, + { + text: "" + } + ] + } + } + }; + const __vite_glob_0_33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassModel + }, Symbol.toStringTag, { value: "Module" })); + const umlClassObj = { + "id": "307016", + "name": "ddei.uml.object", + "code": "obj", + "desc": "UML的对象节点", + "from": "100008", + "define": { + width: 230, + height: 100, + border: { + round: 5 + }, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 230, + height: 30, + id: "100002", + cIndex: 1, + text: `ddei.uml.objname`, + textStyle: { + bold: 1, + feed: 1, + scale: 1 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -35 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 230, + height: 70, + id: "100002", + cIndex: 1, + text: ` attribute A = value A + attribute B = value B`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 15 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: 0, + y: -20, + ix: 0, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + } + ] + } + }; + const __vite_glob_0_34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassObj + }, Symbol.toStringTag, { value: "Module" })); + const umlClassOverview = { + "id": "307013", + "name": "ddei.uml.overview", + "code": "overview", + "desc": "UML的概述节点", + "from": "305003", + "define": { + ext: { + composes: [ + { + width: 100, + height: 40, + text: `<> +Package`, + textStyle: { + feed: 1, + align: 1, + scale: 1 + }, + initCPV: { + x: -50, + y: -60 + } + }, + { + height: 120, + text: "" + } + ], + //操作点扩展 + ovs: [ + { + x: -25, + y: -25, + ix: -25, + iy: -50, + constraint: { + type: 2, + x0: -25, + x1: -25, + y0: -50, + y1: -20 + } + }, + { + x: 0, + y: -37.5, + ix: -50, + iy: -37.5, + constraint: { + type: 2, + x0: -50, + x1: 50, + y0: -37.5, + y1: -37.5 + } + } + ] + } + } + }; + const __vite_glob_0_35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassOverview + }, Symbol.toStringTag, { value: "Module" })); + const umlClassPackage = { + "id": "307012", + "name": "ddei.uml.package", + "code": "package", + "desc": "UML的包节点", + "from": "305003", + "define": { + ext: { + composes: [ + {}, + { + text: "" + } + ] + } + } + }; + const __vite_glob_0_36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassPackage + }, Symbol.toStringTag, { value: "Module" })); + const umlClassPrimitive = { + "id": "307010", + "name": "ddei.uml.original", + "code": "primitive", + "desc": "UML的原始", + "from": "100002", + "define": { + width: 110, + height: 70, + text: `<> +Primitive`, + textStyle: { + valign: 1, + italic: 1, + feed: 1, + vspace: 2 + } + } + }; + const __vite_glob_0_37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassPrimitive + }, Symbol.toStringTag, { value: "Module" })); + const umlClassRel = { + "id": "307024", + "name": "ddei.uml.relation", + "code": "erl", + "desc": "UML类关联关系", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassRel + }, Symbol.toStringTag, { value: "Module" })); + const umlClassSignal = { + "id": "307009", + "name": "ddei.uml.signal", + "code": "signal", + "desc": "UML的信号", + "from": "100002", + "define": { + width: 110, + height: 70, + text: `<> +Signal`, + textStyle: { + valign: 1, + italic: 1, + feed: 1, + vspace: 2 + } + } + }; + const __vite_glob_0_39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassSignal + }, Symbol.toStringTag, { value: "Module" })); + const umlClassUi = { + "id": "307005", + "name": "ddei.uml.ui", + "code": "ui", + "desc": "UML的界面节点", + "from": "100002", + "define": { + width: 110, + height: 70, + text: `<> +Interface`, + textStyle: { + valign: 1, + italic: 1, + feed: 1, + vspace: 2 + } + } + }; + const __vite_glob_0_40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClassUi + }, Symbol.toStringTag, { value: "Module" })); + const umlCompBox = { + "id": "305005", + "name": "ddei.uml.compbox", + "code": "cbox", + "desc": "UML的组件盒节点", + "from": "100008", + "define": { + width: 160, + height: 100, + text: "<>", + textStyle: { + valign: 1, + align: 3 + }, + ext: { + sample: { + rules: [ + //文本区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:45,y:50,text:1}); + pvs.push({x:-45,y:50,text:1}); + pvs.push({x:-45,y:-17,text:1}); + pvs.push({end:1,x:45,y:-17,text:1}); + } + }` + ] + } + }, + composes: [ + { + width: 20, + height: 20, + cIndex: 2, + id: "305101", + sample: { + textInput: 0 + }, + initCPV: { + x: 60, + y: -32 + } + } + ] + } + }; + const __vite_glob_0_41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompBox + }, Symbol.toStringTag, { value: "Module" })); + const umlCompComp = { + "id": "305001", + "name": "ddei.uml.component", + "code": "cmp", + "desc": "UML的组件节点", + "from": "100500", + "define": { + width: 120, + height: 75, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //允许文本输入 + textInput: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,select:1}); + }`, + //线段与填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + pvs.push({begin:1,x:50,y:50,stroke:1,oppoint:2,fill:1}); + + pvs.push({x:-37.5,y:50,stroke:1,oppoint:2,fill:1}); + + pvs.push({x:-37.5,y:34,stroke:1,fill:1}); + pvs.push({x:-25,y:34,stroke:1,fill:1}); + pvs.push({x:-25,y:16,stroke:1,fill:1}); + pvs.push({x:-37.5,y:16,stroke:1,fill:1}); + + + pvs.push({x:-37.5,y:-16,stroke:1,fill:1}); + pvs.push({x:-25,y:-16,stroke:1,fill:1}); + pvs.push({x:-25,y:-34,stroke:1,fill:1}); + pvs.push({x:-37.5,y:-34,stroke:1,fill:1}); + + pvs.push({x:-37.5,y:-50,stroke:1,fill:1,oppoint:2}); + + pvs.push({end:1,x:50,y:-50,stroke:1,fill:1,oppoint:2,op2close:1}); + + } + + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:34,stroke:1,fill:1}); + pvs.push({x:-25,y:34,stroke:1,fill:1}); + pvs.push({x:-25,y:16,stroke:1,fill:1}); + pvs.push({x:-50,y:16,stroke:1,fill:1,end:1}); + pvs.push({x:-50,y:25,type:0,oppoint:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:-34,stroke:1,fill:1}); + pvs.push({x:-25,y:-34,stroke:1,fill:1}); + pvs.push({x:-25,y:-16,stroke:1,fill:1}); + pvs.push({x:-50,y:-16,stroke:1,fill:1,end:1}); + pvs.push({x:-50,y:-25,type:0,oppoint:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(sample.textInput && i == 0){ + + pvs.push({begin:1,x:50,y:50,text:1}); + + pvs.push({x:-25,y:50,text:1}); + + pvs.push({x:-25,y:-50,text:1}); + + pvs.push({end:1,x:50,y:-50,text:1}); + + } + + }` + ] + } + } + }; + const __vite_glob_0_42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompComp + }, Symbol.toStringTag, { value: "Module" })); + const umlCompComp1 = { + "id": "305101", + "name": "ddei.uml.component", + "code": "cmp", + "desc": "UML的组件节点", + "from": "100500", + "define": { + width: 100, + height: 100, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //允许文本输入 + textInput: 1, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,select:1}); + }`, + //线段与填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + pvs.push({begin:1,x:50,y:50,stroke:1,oppoint:2,fill:1}); + + pvs.push({x:-25,y:50,stroke:1,oppoint:2,fill:1}); + + pvs.push({x:-25,y:34,stroke:1,fill:1}); + pvs.push({x:0,y:34,stroke:1,fill:1}); + pvs.push({x:0,y:16,stroke:1,fill:1}); + pvs.push({x:-25,y:16,stroke:1,fill:1}); + pvs.push({x:-25,y:-16,stroke:1,fill:1}); + pvs.push({x:0,y:-16,stroke:1,fill:1}); + pvs.push({x:0,y:-34,stroke:1,fill:1}); + pvs.push({x:-25,y:-34,stroke:1,fill:1}); + + pvs.push({x:-25,y:-50,stroke:1,fill:1,oppoint:2}); + + pvs.push({end:1,x:50,y:-50,stroke:1,fill:1,oppoint:2,op2close:1}); + + } + + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:34,stroke:1,fill:1}); + pvs.push({x:0,y:34,stroke:1,fill:1}); + pvs.push({x:0,y:16,stroke:1,fill:1}); + pvs.push({x:-50,y:16,stroke:1,fill:1,end:1}); + pvs.push({x:-50,y:25,type:0,oppoint:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:-34,stroke:1,fill:1}); + pvs.push({x:0,y:-34,stroke:1,fill:1}); + pvs.push({x:0,y:-16,stroke:1,fill:1}); + pvs.push({x:-50,y:-16,stroke:1,fill:1,end:1}); + pvs.push({x:-50,y:-25,type:0,oppoint:1}); + } + }`, + //文本区域 + `(i, sample, pvs, model, ovs){ + if(sample.textInput && i == 0){ + + pvs.push({begin:1,x:50,y:50,text:1}); + + pvs.push({x:-25,y:50,text:1}); + + pvs.push({x:-25,y:-50,text:1}); + + pvs.push({end:1,x:50,y:-50,text:1}); + + } + + }` + ] + } + } + }; + const __vite_glob_0_43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompComp1 + }, Symbol.toStringTag, { value: "Module" })); + const umlCompCompose = { + "id": "305018", + "name": "ddei.uml.compose", + "code": "compose", + "desc": "组合关系", + "from": "305017", + "define": { + sp: { + type: 41 + } + } + }; + const __vite_glob_0_44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompCompose + }, Symbol.toStringTag, { value: "Module" })); + const umlCompDependent = { + "id": "305016", + "name": "ddei.uml.dependent", + "code": "depen", + "desc": "依赖关系", + "from": "305015", + "define": { + dash: [10, 10] + } + }; + const __vite_glob_0_45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompDependent + }, Symbol.toStringTag, { value: "Module" })); + const umlCompDirect = { + "id": "305015", + "name": "ddei.uml.direct", + "code": "direct", + "desc": "方向关系", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_46 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompDirect + }, Symbol.toStringTag, { value: "Module" })); + const umlCompInterface = { + "id": "305009", + "name": "ddei.uml.interface", + "code": "interface", + "desc": "接口", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + //组合控件 + composes: [ + { + width: 20, + height: 20, + id: "100103", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + } + } + ], + //操作点 + ovs: [ + { + x: 0, + y: 0, + ix: 0, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 0 + //不允许移动 + }, + //联动,点移动后控制的其它点 + links: [ + { + type: 1, + //1施加矩阵 + pvs: ["composes[0]"] + } + ] + } + ] + } + }; + const __vite_glob_0_47 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompInterface + }, Symbol.toStringTag, { value: "Module" })); + const umlCompNode = { + "id": "305002", + "name": "ddei.uml.node", + "code": "node", + "desc": "UML的组件节点", + "from": "100501", + "define": { + width: 200, + height: 160, + text: "ddei.uml.node", + textStyle: { + align: 1, + valign: 1 + }, + ext: { + sample: { + eqrat: false + } + } + } + }; + const __vite_glob_0_48 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompNode + }, Symbol.toStringTag, { value: "Module" })); + const umlCompPackage = { + "id": "305003", + "name": "ddei.uml.package", + "code": "pkg", + "desc": "包", + "from": "100500", + "define": { + width: 200, + height: 160, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //只采样一次 + loop: 1, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model,ovs){ + pvs.push({begin:1,x:50,y:50,stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:-50,y:50,stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:-50,y:-50,stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:(ovs[1].x-ovs[1].ovi.x-50),y:-50,stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:(ovs[1].x-ovs[1].ovi.x-50),y:(ovs[0].y-model.cpv.y),stroke:1,fill:1,clip:1,oppoint:2,select:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,fill:1,clip:1,oppoint:2,op2close:1,select:1,end:1}); + }`, + `(i, sample, pvs, model,ovs){ + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + + }` + ] + }, + // 组合控件 + composes: [ + { + width: 80, + height: 20, + id: "100002", + cIndex: 2, + text: "Package", + fill: { type: 0 }, + border: { type: 0 }, + textStyle: { + feed: 1, + scale: 1 + }, + initCPV: { + x: -60, + y: -70 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 200, + height: 140, + id: "100002", + cIndex: 2, + fill: { type: 0 }, + border: { type: 0 }, + text: "Attribute", + textStyle: { + feed: 1, + scale: 1 + }, + initCPV: { + x: 0, + y: 10 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义垂直控制点 + { + x: -30, + y: -37.5, + ix: -30, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: -30, + x1: -30, + y0: -50, + y1: -20 + }, + //联动,控制composes的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + }, + //上方标题的区域宽度控制点 + { + x: -10, + y: -43.75, + ix: -50, + iy: -43.75, + type: 2, + //横向分割点 + constraint: { + type: 2, + x0: -50, + x1: 50, + y0: -43.75, + y1: -43.75 + }, + //联动,控制第一个和第二个composes的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_h_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: [] + } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_49 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompPackage + }, Symbol.toStringTag, { value: "Module" })); + const umlCompRel = { + "id": "305014", + "name": "ddei.uml.dependent", + "code": "erl", + "desc": "依赖关系", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + sp: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_50 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompRel + }, Symbol.toStringTag, { value: "Module" })); + const umlCompReqinte = { + "id": "305010", + "name": "ddei.uml.reqinte", + "code": "reqinte", + "desc": "需求接口", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + //组合控件 + composes: [ + { + width: 25, + height: 25, + id: "100110", + cIndex: 1, + initCPV: { + x: -75, + y: 0, + z: 1 + } + } + ], + //操作点 + ovs: [ + { + x: 0, + y: 0, + ix: 0, + iy: 0, + //约束,控制点的移动路径和位置 + constraint: { + type: 0 + //不允许移动 + }, + //联动,点移动后控制的其它点 + links: [ + { + type: 1, + //1施加矩阵 + pvs: ["composes[0]"] + } + ] + } + ] + } + }; + const __vite_glob_0_51 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompReqinte + }, Symbol.toStringTag, { value: "Module" })); + const umlCompTogether = { + "id": "305017", + "name": "ddei.uml.together", + "code": "together", + "desc": "依赖关系", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + sp: { + type: 4 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_52 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCompTogether + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg = { + "id": "306003", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "305015", + "define": { + dash: [], + ep: { + type: -1 + } + } + }; + const __vite_glob_0_53 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg1 = { + "id": "306004", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306003", + define: { + ep: { + type: 51, + weight: 15 + }, + iLinkModels: { + "0": { type: 3, dx: -135, dy: 0 } + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: -60, + y: 0 + } + } + } + ] + }; + const __vite_glob_0_54 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg1 + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg2 = { + "id": "306005", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306004", + define: { + pvs: [ + { x: 0, y: 0, z: 1 }, + { x: 0, y: 50, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: -60, dy: 0 } + }, + iconPos: { + dy: -50, + dx: 50 + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: -60, + y: 25 + } + } + } + ] + }; + const __vite_glob_0_55 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg2 + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg3 = { + "id": "306006", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306004", + define: { + pvs: [ + { x: 0, y: 0, z: 1 }, + { x: 0, y: 50, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 65, dy: 0 } + }, + iconPos: { + dy: -50, + dx: -50 + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 65, + y: 25 + } + } + } + ] + }; + const __vite_glob_0_56 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg3 + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg4 = { + "id": "306007", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306004", + define: { + pvs: [ + { x: 0, y: 0, z: 1 }, + { x: -75, y: 0, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 100, dy: 0 } + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 65, + y: 0 + } + } + } + ] + }; + const __vite_glob_0_57 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg4 + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg5 = { + "id": "306008", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306004", + define: { + pvs: [ + { x: 0, y: 0, z: 1 }, + { x: 0, y: -50, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: -60, dy: 0 } + }, + iconPos: { + dy: 50, + dx: 50 + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: -60, + y: -25 + } + } + } + ] + }; + const __vite_glob_0_58 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg5 + }, Symbol.toStringTag, { value: "Module" })); + const umlCopMsg6 = { + "id": "306009", + "name": "ddei.uml.msg", + "code": "msg", + "desc": "消息", + "from": "306004", + define: { + pvs: [ + { x: 0, y: 0, z: 1 }, + { x: 0, y: -50, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 60, dy: 0 } + }, + iconPos: { + dy: 50, + dx: -50 + } + }, + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "Operation A()", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 65, + y: -25 + } + } + } + ] + }; + const __vite_glob_0_59 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCopMsg6 + }, Symbol.toStringTag, { value: "Module" })); + const umlDepComm = { + "id": "304018", + "name": "ddei.uml.communication", + "code": "comm", + "desc": "通信", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + sp: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_60 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepComm + }, Symbol.toStringTag, { value: "Module" })); + const umlDepCompIns = { + "id": "304005", + "name": "ddei.uml.compins", + "code": "compins", + "desc": "UML的组件实例", + "from": "305001", + "define": { + width: 140, + height: 80, + text: `Component +Instance`, + textStyle: { + feed: 1, + underline: 1, + align: 3 + } + } + }; + const __vite_glob_0_61 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepCompIns + }, Symbol.toStringTag, { value: "Module" })); + const umlDepCompIns1 = { + "id": "304007", + "name": "ddei.uml.compins", + "code": "compins", + "desc": "UML的组件实例", + "from": "304006", + "define": { + text: `<> +Component A` + } + }; + const __vite_glob_0_62 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepCompIns1 + }, Symbol.toStringTag, { value: "Module" })); + const umlDepComp = { + "id": "304004", + "name": "ddei.uml.component", + "code": "comp", + "desc": "UML的组件", + "from": "305001", + "define": { + width: 140, + height: 80, + text: "Component" + } + }; + const __vite_glob_0_63 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepComp + }, Symbol.toStringTag, { value: "Module" })); + const umlDepComp1 = { + "id": "304006", + "name": "ddei.uml.component", + "code": "comp", + "desc": "UML的组件", + "from": "305005", + "define": { + textStyle: { + feed: 1, + valign: 1 + } + } + }; + const __vite_glob_0_64 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepComp1 + }, Symbol.toStringTag, { value: "Module" })); + const umlDepDepend = { + "id": "304020", + "name": "ddei.uml.dependent", + "code": "depend", + "desc": "依赖", + "from": "100401", + "define": { + type: 2, + dash: [20, 10], + ep: { + type: 1 + }, + sp: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_65 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepDepend + }, Symbol.toStringTag, { value: "Module" })); + const umlDepDeploy = { + "id": "304023", + "name": "ddei.uml.deploy", + "code": "deploy", + "desc": "部署", + "from": "100401", + "define": { + type: 2, + dash: [20, 10], + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 0, dy: -10 } + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "<>", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: -10 + } + } + } + ] + }; + const __vite_glob_0_66 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepDeploy + }, Symbol.toStringTag, { value: "Module" })); + const umlDepExtend = { + "id": "304019", + "name": "ddei.uml.extend", + "code": "extend", + "desc": "继承", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + sp: { + type: -1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_67 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepExtend + }, Symbol.toStringTag, { value: "Module" })); + const umlDepManifest = { + "id": "304022", + "name": "ddei.uml.manifest", + "code": "manifest", + "desc": "表明", + "from": "100401", + "define": { + type: 2, + dash: [20, 10], + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + iLinkModels: { + "0": { type: 3, dx: 0, dy: -10 } + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 20, + text: "<>", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: -10 + } + } + } + ] + }; + const __vite_glob_0_68 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepManifest + }, Symbol.toStringTag, { value: "Module" })); + const umlDepNodeIns = { + "id": "304011", + "name": "ddei.uml.nodeins", + "code": "nodeins", + "desc": "UML的节点实例", + "from": "305002", + "define": { + text: `Node Instance`, + textStyle: { + align: 2, + valign: 1, + feed: 1, + underline: 1 + } + } + }; + const __vite_glob_0_69 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepNodeIns + }, Symbol.toStringTag, { value: "Module" })); + const umlDepNode = { + "id": "304010", + "name": "ddei.uml.node", + "code": "node", + "desc": "UML的节点", + "from": "305002", + "define": { + text: `Node`, + textStyle: { + align: 2, + valign: 1, + feed: 1 + } + } + }; + const __vite_glob_0_70 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepNode + }, Symbol.toStringTag, { value: "Module" })); + const umlDepObj = { + "id": "304003", + "name": "ddei.uml.object", + "code": "obj", + "desc": "UML的对象节点", + "from": "100008", + "define": { + width: 160, + height: 100, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[0].y-model.cpv.y),stroke:1,type:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 160, + height: 30, + id: "100002", + cIndex: 1, + text: `ddei.uml.objname`, + textStyle: { + underline: 1, + feed: 1, + scale: 1, + align: 3 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -35 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 160, + height: 70, + id: "100002", + cIndex: 1, + text: ` attribute A = value A`, + textStyle: { + align: 3, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 15 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: 0, + y: -20, + ix: 0, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + } + ] + } + }; + const __vite_glob_0_71 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepObj + }, Symbol.toStringTag, { value: "Module" })); + const umlDepOverviewIns = { + "id": "304014", + "name": "ddei.uml.depdesins", + "code": "ovins", + "desc": "UML的部署概述实例", + "from": "100002", + "define": { + text: `<> +Deployment +Specification A`, + textStyle: { + feed: 1 + } + } + }; + const __vite_glob_0_72 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepOverviewIns + }, Symbol.toStringTag, { value: "Module" })); + const umlDepOverview = { + "id": "304013", + "name": "ddei.uml.deploydes", + "code": "node", + "desc": "UML的部署概述", + "from": "100002", + "define": { + text: `<>` + } + }; + const __vite_glob_0_73 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepOverview + }, Symbol.toStringTag, { value: "Module" })); + const umlDepTogether = { + "id": "304021", + "name": "ddei.uml.together", + "code": "together", + "desc": "聚合", + "from": "100401", + "define": { + type: 2, + ep: { + type: -1 + }, + sp: { + type: 4, + weight: 10 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_74 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDepTogether + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqActBreak = { + "id": "303005", + "name": "ddei.uml.activebreak", + "code": "actbreak", + "desc": "激活中断", + "from": "100500", + "define": { + width: 20, + height: 200, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //一圈4次采样 + loop: 1, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选择区 + `(i, sample, pvs, model, ovs){ + pvs.push({begin:1,x:50,y:50,clip:1,select:1}); + pvs.push({x:-50,y:50,clip:1,select:1}); + pvs.push({x:-50,y:-50,clip:1,select:1}); + pvs.push({end:1,x:50,y:-50,clip:1,select:1}); + }`, + //下半部分区域 + `(i, sample, pvs, model, ovs){ + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let unitH = 15 * (bpv.y ? 100 / bpv.y : 1) + pvs.push({begin:1,x:50,y:50,stroke:1,fill:1}); + pvs.push({x:-50,y:50,stroke:1,fill:1}); + pvs.push({x:-50,y:unitH,stroke:1,fill:1}); + pvs.push({end:1,x:50,y:0.5*unitH,stroke:1,fill:1}); + }`, + //上办部分区域 + `(i, sample, pvs, model, ovs){ + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let unitH = 15 * (bpv.y ? 100 / bpv.y : 1) + pvs.push({begin:1,x:-50,y:-50,stroke:1,fill:1}); + pvs.push({x:50,y:-50,stroke:1,fill:1}); + pvs.push({x:50,y:-0.5*unitH,stroke:1,fill:1}); + pvs.push({end:1,x:-50,y:-unitH,stroke:1,fill:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let unitH = 20 * (bpv.y ? 100 / bpv.y : 1) + for(let i = -50; i <= 50; i+=unitH){ + pvs.push({ x: -50, y: i, type: 0, oppoint: 1 }); + pvs.push({ x: 50, y: i, type: 0, oppoint: 1 }); + } + }` + ] + } + } + }; + const __vite_glob_0_75 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqActBreak + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqAct = { + "id": "303004", + "name": "ddei.uml.active1", + "code": "act", + "desc": "激活", + "from": "100008", + "define": { + width: 20, + height: 200, + ext: { + sample: { + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + let bpv = DDeiUtil.pointsToZero([model.bpv], model.cpv, model.rotate)[0] + let unitH = 20 * (bpv.y ? 100/bpv.y : 1) + for(let i = -50;i <= 50;i+=unitH){ + pvs.push({x:-50,y:i,oppoint:1}); + pvs.push({x:50,y:i,oppoint:1}); + } + } + }` + ] + } + } + } + }; + const __vite_glob_0_76 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqAct + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqActorLife = { + "id": "303015", + "name": "ddei.uml.rolelife", + "code": "actor", + "desc": "角色生命线", + "from": "100000", + "define": { + create: false, + initMerges: [0, 1], + ext: { + //清空所有属性 + groups: [] + }, + iconPos: { + dy: -150 + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "303014" + }, + { + "id": "303002", + "define": { + pvs: [ + { x: 0, y: 30, z: 1 }, + { x: 0, y: 450, z: 1 } + ] + } + } + ] + }; + const __vite_glob_0_77 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqActorLife + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqActor = { + "id": "303014", + "name": "ddei.uml.role", + "code": "actor", + "desc": "角色", + "from": "103006", + "define": { + text: "Actor", + iconPos: { + dy: -10 + }, + depPos: { + type: 8 + }, + //一圈 + depProps: { + "8": "text" + //映射属性 + } + } + }; + const __vite_glob_0_78 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqActor + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqAlt = { + "id": "303009", + "name": "ddei.uml.altnative", + "code": "alt", + "desc": "抉择片段", + "from": "303008", + "define": { + ext: { + composes: [ + { text: "Alt" } + ] + } + } + }; + const __vite_glob_0_79 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqAlt + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqAlternative = { + "id": "303007", + "name": "ddei.uml.alternative", + "code": "alternative", + "desc": "替代片段", + "from": "100008", + "define": { + width: 240, + height: 160, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + + pvs.push({begin:1,x:-50,y:(ovs[0].y-model.cpv.y),stroke:1}); + pvs.push({x:-50,y:-50,stroke:1}); + pvs.push({x:(ovs[2].x-ovs[2].ovi.x-50),y:-50,stroke:1}); + pvs.push({x:(ovs[2].x-ovs[2].ovi.x-50),y:(ovs[0].y-model.cpv.y)-5,stroke:1}); + pvs.push({x:(ovs[2].x-ovs[2].ovi.x-50)-5,y:(ovs[0].y-model.cpv.y),stroke:1}); + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,end:1}); + } + }`, + //追加一个从中间切开的采样点,用于横向切割 + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({x:-50,y:(ovs[1].y-model.cpv.y),stroke:1,type:1}); + pvs.push({x:50,y:(ovs[1].y-model.cpv.y),stroke:1,type:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 88, + height: 22, + id: "100002", + cIndex: 1, + text: "Alternative", + textStyle: { + scale: 1, + align: 1 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: -70, + y: -68 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 230, + height: 65, + id: "100002", + cIndex: 1, + text: `[Condition]`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: -22.5 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 230, + height: 65, + id: "100002", + cIndex: 1, + text: `[Else]`, + textStyle: { + align: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 45 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: -31.25, + y: -35, + ix: -31.25, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: -31.25, + x1: -31.25, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + }, + //定义属性区的高度控制点 + { + x: 0, + y: 6, + ix: 0, + iy: 6, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: 0, + x1: 0, + y0: -35, + y1: 50 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[1]"], + nextModels: ["composes[2]"] + } + ] + }, + //上方标题的区域宽度控制点 + { + x: -10, + y: -43.75, + ix: -50, + iy: -43.75, + type: 2, + //横向分割点 + constraint: { + type: 2, + x0: -40, + x1: 40, + y0: -43.75, + y1: -43.75 + }, + //联动,控制第一个和第二个composes的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_h_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: [] + } + ] + } + ] + } + }; + const __vite_glob_0_80 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqAlternative + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqAsync = { + "id": "303021", + "name": "ddei.uml.asyncmsg", + "code": "async", + "desc": "异步消息", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_81 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqAsync + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqControl = { + "id": "303018", + "name": "ddei.uml.control", + "code": "control", + "desc": "控制", + "from": "100500", + "define": { + width: 60, + height: 60, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,begin:1,end:1}); + } + }`, + //上方箭头 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:0,y:-50,type:1,stroke:1}); + pvs.push({x:7.5,y:-56.5,type:1,stroke:1}); + pvs.push({x:0,y:-50}); + pvs.push({x:6.5,y:-42.5,type:1,stroke:1}); + pvs.push({end:1,x:0,y:-50,type:1,stroke:1}); + } + }` + ] + }, + iconPos: { + dy: -10 + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 25, + text: "Control", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: 42 + } + } + } + ] + }; + const __vite_glob_0_82 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqControl + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqCustom = { + "id": "303012", + "name": "ddei.uml.customnative", + "code": "custom", + "desc": "自定义片段", + "from": "303008", + "define": { + ext: { + composes: [ + { text: "Custom" } + ] + } + } + }; + const __vite_glob_0_83 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqCustom + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqEdge = { + "id": "303017", + "name": "ddei.uml.edge", + "code": "edge", + "desc": "边界", + "from": "100500", + "define": { + width: 60, + height: 60, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:50,y:50,select:1}); + pvs.push({x:-65,y:50,select:1}); + pvs.push({x:-65,y:-50,select:1}); + pvs.push({x:50,y:-50,select:1}); + } + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,begin:1,end:1}); + } + }`, + //左方线 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:0,type:1,stroke:1}); + pvs.push({end:1,x:-65,y:0,type:1,stroke:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-65,y:50,type:1,stroke:1,oppoint:2}); + pvs.push({end:1,x:-65,y:-50,type:1,stroke:1,oppoint:2}); + } + }` + ] + }, + iconPos: { + dy: -10 + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 25, + text: "Boundary", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: 42 + } + } + } + ] + }; + const __vite_glob_0_84 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqEdge + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqEntity = { + "id": "303016", + "name": "ddei.uml.entity", + "code": "entity", + "desc": "实体", + "from": "100500", + "define": { + width: 60, + height: 60, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,begin:1,end:1}); + } + }`, + //下方横线 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:50,type:1,stroke:1}); + pvs.push({end:1,x:50,y:50,type:1,stroke:1}); + } + }` + ] + }, + iconPos: { + dy: -10 + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "100002", + "define": { + width: 100, + height: 25, + text: "Entity", + fill: { type: 0 }, + border: { type: 0 }, + initCPV: { + x: 0, + y: 42 + } + } + } + ] + }; + const __vite_glob_0_85 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqEntity + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqInv = { + "id": "303019", + "name": "ddei.uml.invoke", + "code": "inv", + "desc": "调用", + "from": "100401", + "define": { + type: 2, + ep: { + type: 51 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_86 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqInv + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqLife = { + "id": "303002", + "name": "ddei.uml.life", + "code": "life", + "desc": "生命线", + "from": "100401", + "define": { + type: 1, + ep: { + type: -1 + }, + dash: [20, 10], + border: { + width: 2 + }, + pvs: [ + { x: 0, y: -225, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 0, y: 225, z: 1 } + ], + //线段本身的一些限制 + constraint: { + ep: { + //只允许开始节点创建链接 + link: false + }, + type: { + //直线的情况下,开始节点和结束节点的角度限制范围(旋转后则为角度+rotate) + "1": { + //限制角度区间 + angles: [[90, 90], [0, 0], [180, 180], [-90, -90]] + } + } + } + } + }; + const __vite_glob_0_87 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqLife + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqLoop = { + "id": "303008", + "name": "ddei.uml.loopnative", + "code": "loop", + "desc": "循环片段", + "from": "100008", + "define": { + width: 240, + height: 160, + //扩展采样信息,用于在原有的基础上增加采样,或者覆盖采样的部分信息 + ext: { + //追加一个从中间切开的采样点,用于横向切割 + sample: { + rules: [ + `(i, sample, pvs, model,ovs){ + if(i == 0){ + pvs.push({begin:1,x:-50,y:(ovs[0].y-model.cpv.y),stroke:1}); + pvs.push({x:-50,y:-50,stroke:1}); + pvs.push({x:(ovs[1].x-ovs[1].ovi.x-50),y:-50,stroke:1}); + pvs.push({x:(ovs[1].x-ovs[1].ovi.x-50),y:(ovs[0].y-model.cpv.y)-5,stroke:1}); + pvs.push({x:(ovs[1].x-ovs[1].ovi.x-50)-5,y:(ovs[0].y-model.cpv.y),stroke:1}); + pvs.push({x:-50,y:(ovs[0].y-model.cpv.y),stroke:1,end:1}); + } + }` + ] + }, + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 88, + height: 22, + id: "100002", + cIndex: 1, + text: "Loop", + textStyle: { + scale: 1, + align: 1 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: -72, + y: -68 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + }, + { + width: 230, + height: 130, + id: "100002", + cIndex: 1, + text: `[Parameters]`, + textStyle: { + align: 1, + valign: 1, + feed: 1, + scale: 1, + vspace: 2 + }, + fill: { + type: 0 + }, + border: { + type: 0 + }, + initCPV: { + x: 0, + y: 13 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + //操作点定义 + ovs: [ + //定义标题区域的高度控制点 + { + x: -31.25, + y: -35, + ix: -31.25, + iy: -50, + type: 1, + //纵向分割点 + constraint: { + type: 2, + x0: -31.25, + x1: -31.25, + y0: -50, + y1: -20 + }, + //联动,控制第一个和第二个composes[0]的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_v_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: ["composes[1]"] + } + ] + }, + //上方标题的区域宽度控制点 + { + x: -10, + y: -43.75, + ix: -50, + iy: -43.75, + type: 2, + //横向分割点 + constraint: { + type: 2, + x0: -40, + x1: 40, + y0: -43.75, + y1: -43.75 + }, + //联动,控制第一个和第二个composes的大小 + //这里计算较为复杂,需要用脚本来进行控制 + links: [ + { + type: 99, + //执行脚本 + script: ov_link_h_split_point, + //参数可以自定义,脚本中可以取到 + models: ["composes[0]"], + nextModels: [] + } + ] + } + ] + } + }; + const __vite_glob_0_88 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqLoop + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqObj = { + "id": "303003", + "name": "ddei.uml.seqobj", + "code": "obj", + "desc": "序列对象", + "from": "100002", + "define": { + width: 120, + height: 60, + text: "ddei.uml.object" + } + }; + const __vite_glob_0_89 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqObj + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqObjdel = { + "id": "303013", + "name": "ddei.uml.objdel", + "code": "objdel", + "desc": "对象删除", + "from": "100500", + "define": { + width: 40, + height: 40, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:0,y:50,type:0,oppoint:1}); + pvs.push({x:-50,y:0,type:0,oppoint:1}); + pvs.push({x:0,y:-50,type:0,oppoint:1}); + pvs.push({x:50,y:0,type:0,oppoint:1}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:sample.x,y:sample.y,stroke:1,begin:1,type:1}); + }else if(i == 2){ + pvs.push({x:sample.x,y:sample.y,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 1){ + pvs.push({x:sample.x,y:sample.y,stroke:1,begin:1,type:1}); + }else if(i == 3){ + pvs.push({x:sample.x,y:sample.y,stroke:1,end:1,type:1}); + } + }` + ] + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_90 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqObjdel + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqObjlife = { + "id": "303001", + "name": "ddei.uml.objlife", + "code": "obj", + "desc": "对象生命线", + "from": "100000", + "define": { + create: false, + initMerges: [0, 1], + iconPos: { + dy: -150 + } + }, + //其它同时创建的平级控件 + others: [ + { + "id": "303003" + }, + { + "id": "303002", + "define": { + pvs: [ + { x: 0, y: 30, z: 1 }, + { x: 0, y: 450, z: 1 } + ] + } + } + ] + }; + const __vite_glob_0_91 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqObjlife + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqOpt = { + "id": "303010", + "name": "ddei.uml.optnative", + "code": "opt", + "desc": "选项片段", + "from": "303008", + "define": { + ext: { + composes: [ + { text: "Opt" } + ] + } + } + }; + const __vite_glob_0_92 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqOpt + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqPackage = { + "id": "303006", + "name": "ddei.uml.package", + "code": "pkg", + "desc": "包", + "from": "305003" + }; + const __vite_glob_0_93 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqPackage + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqPar = { + "id": "303011", + "name": "ddei.uml.paranative", + "code": "par", + "desc": "并行片段", + "from": "303008", + "define": { + ext: { + composes: [ + { text: "Par" } + ] + } + } + }; + const __vite_glob_0_94 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqPar + }, Symbol.toStringTag, { value: "Module" })); + const umlSeqTransition = { + "id": "303020", + "name": "ddei.uml.transition", + "code": "trans", + "desc": "过渡", + "from": "100401", + "define": { + type: 2, + dash: [20, 10], + ep: { + type: 1 + }, + pvs: [ + { x: 75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: -75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_95 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSeqTransition + }, Symbol.toStringTag, { value: "Module" })); + const umlStateBranch = { + "id": "301012", + "name": "ddei.uml.fork", + "code": "branch", + "desc": "UML的状态的分叉", + "from": "100002", + "define": { + width: 100, + height: 10, + border: { + width: 0, + round: 2 + }, + fill: { + color: "#017fff" + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_96 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateBranch + }, Symbol.toStringTag, { value: "Module" })); + const umlStateCollect = { + "id": "301013", + "name": "ddei.uml.collection", + "code": "coll", + "desc": "UML的状态的汇聚", + "from": "301012" + }; + const __vite_glob_0_97 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateCollect + }, Symbol.toStringTag, { value: "Module" })); + const umlStateConstraint = { + "id": "301010", + "name": "ddei.uml.constraint", + "code": "constr", + "desc": "UML的约束", + "from": "103005", + "define": { + width: 140, + height: 90, + textStyle: { + align: 3, + feed: 1 + }, + text: ` Constraint Name : +Body`, + composes: [ + { + width: 90, + height: 18, + cIndex: 3, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + align: 2 + }, + text: "<>", + initCPV: { + x: -15, + y: -35 + }, + attrLinks: [ + { code: "font", mapping: ["*"] }, + { code: "textStyle", mapping: ["*"] } + ] + } + ], + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + } + } + }; + const __vite_glob_0_98 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateConstraint + }, Symbol.toStringTag, { value: "Module" })); + const umlStateConvert = { + "id": "301014", + "name": "ddei.uml.convert", + "code": "conv", + "desc": "转换", + "from": "100401", + "define": { + type: 2, + ep: { + type: 1 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ] + } + }; + const __vite_glob_0_99 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateConvert + }, Symbol.toStringTag, { value: "Module" })); + const umlStateEnd = { + "id": "301006", + "name": "ddei.uml.flowend", + "code": "end", + "desc": "UML流程终止", + "from": "100500", + "define": { + width: 40, + height: 40, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,clip:1,begin:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:sample.x,y:sample.y,stroke:1,begin:1,type:1}); + }else if(i == 2){ + pvs.push({x:sample.x,y:sample.y,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 1){ + pvs.push({x:sample.x,y:sample.y,stroke:1,begin:1,type:1}); + }else if(i == 3){ + pvs.push({x:sample.x,y:sample.y,stroke:1,end:1,type:1}); + } + }` + ] + }, + ext: { + groups: [ + { + name: "ddei.style", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash", "borderRound"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_100 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateEnd + }, Symbol.toStringTag, { value: "Module" })); + const umlStateHis = { + "id": "301008", + "name": "ddei.uml.simplehistory", + "code": "his", + "desc": "UML状态机简略历史", + "from": "100003", + "define": { + width: 40, + height: 40, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,clip:1,begin:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:-17.5,y:-25,stroke:1,begin:1,type:1}); + pvs.push({x:-17.5,y:25,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:17.5,y:-25,stroke:1,begin:1,type:1}); + pvs.push({x:17.5,y:25,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:-17.5,y:0,stroke:1,begin:1,type:1}); + pvs.push({x:17.5,y:0,stroke:1,end:1,type:1}); + } + }` + ] + }, + ext: { + groups: [ + { + name: "属性", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_101 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateHis + }, Symbol.toStringTag, { value: "Module" })); + const umlStateHis1 = { + "id": "301009", + "name": "ddei.uml.detailhistroy", + "code": "his", + "desc": "UML状态机详细历史", + "from": "100003", + "define": { + width: 40, + height: 40, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: 1, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 45, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + //选中区域 + `(i, sample, pvs, model, ovs){ + let er = sample.r / Math.cos(45 * DDeiConfig.ROTATE_UNIT) + 2 + let x = er * sample.cos + let y = er * sample.sin + pvs.push({x:x,y:y,r:er,select:1}); + }`, + //操作点 + `(i, sample, pvs, model, ovs){ + let x = sample.r * Math.cos((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + let y = sample.r * Math.sin((sample.sita+45) * DDeiConfig.ROTATE_UNIT) + pvs.push({x:x,y:y,r:sample.r ,oppoint:1}); + if(i == 3){ + pvs.push({x:0,y:0,r:sample.r ,oppoint:3}); + } + }`, + //绘制线段、填充区域 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({r:sample.r,stroke:1,fill:1,clip:1,begin:1,end:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:-25.5,y:-25,stroke:1,begin:1,type:1}); + pvs.push({x:-25.5,y:25,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:9.5,y:-25,stroke:1,begin:1,type:1}); + pvs.push({x:9.5,y:25,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:-25.5,y:0,stroke:1,begin:1,type:1}); + pvs.push({x:9.5,y:0,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:13,y:-15,stroke:1,begin:1,type:1}); + pvs.push({x:33,y:-15,stroke:1,end:1,type:1}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({x:23,y:-25,stroke:1,begin:1,type:1}); + pvs.push({x:23,y:-5,stroke:1,end:1,type:1}); + } + }` + ] + }, + ext: { + groups: [ + { + name: "属性", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_102 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateHis1 + }, Symbol.toStringTag, { value: "Module" })); + const umlStateState = { + "id": "301001", + "name": "ddei.uml.state", + "code": "state", + "desc": "UML的状态机节点", + "from": "100500", + "define": { + width: 110, + height: 50, + text: "State", + font: { + size: 14 + }, + border: { + round: 10 + }, + textStyle: { + align: 3 + }, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,select:1,clip:1,stroke:1,fill:1}); + }`, + //定义锚点 + `(i, sample, pvs, model, ovs){ + + switch(i){ + case 0: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 1: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 3: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + } + }`, + //文本区域,右margin:5 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + x-=5 + break; + case 1: + pvs[0].y=y + break; + case 2: + x+=5 + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_103 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateState + }, Symbol.toStringTag, { value: "Module" })); + const umlStateState1 = { + "id": "301003", + "name": "ddei.uml.state", + "code": "state", + "desc": "UML的状态机节点", + "from": "100009", + "define": { + width: 140, + height: 90, + border: { + round: 5 + }, + ext: { + sample: { + //分割横线的纵坐标 + pvalue: -20 + }, + groups: [ + { + name: "属性", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.style", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity", "border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + }, + { + name: "文本", + attrs: [ + "font.family", + "font.size", + "font.color", + "fontAlign", + "textStyle.feed", + "textStyle.scale", + "textStyle.hollow", + "textStyle.bold", + "textStyle.italic", + "textStyle.underline", + "textStyle.deleteline", + "textStyle.topline", + "textStyle.hspace", + "textStyle.vspace" + ] + } + ] + } + ] + }, + //组合控件 + composes: [ + { + width: 136, + height: 24, + cIndex: 2, + id: "100002", + border: { + type: 0 + }, + fill: { + type: 0 + }, + textStyle: { + align: 3 + }, + text: "Name", + initCPV: { + x: 0, + y: -31.5 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + }, + { + width: 136, + height: 60, + cIndex: 2, + id: "100002", + textStyle: { + align: 3, + feed: 1 + }, + border: { + type: 0 + }, + fill: { + type: 0 + }, + text: "Activities", + initCPV: { + x: 0, + y: 13.5 + }, + attrLinks: [ + { code: "textStyle", mapping: ["*"] }, + { code: "font", mapping: ["*"] } + ] + } + ] + } + }; + const __vite_glob_0_104 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateState1 + }, Symbol.toStringTag, { value: "Module" })); + const umlStateSubstate = { + "id": "301002", + "name": "ddei.uml.substate", + "code": "substate", + "desc": "UML的子状态机节点", + "from": "100500", + "define": { + width: 110, + height: 50, + text: "State", + font: { + size: 14 + }, + border: { + round: 10 + }, + textStyle: { + align: 3, + valign: 3 + }, + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + eqrat: false, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + break; + case 1: + pvs[0].y=y + break; + case 2: + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,select:1,clip:1,stroke:1,fill:1}); + }`, + //下方子图标 + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:40,y:40,stroke:1,rd:0}); + pvs.push({x:30,y:40,stroke:1,rd:0}); + pvs.push({x:30,y:30,stroke:1,rd:0}); + pvs.push({x:40,y:30,stroke:1,end:1,rd:0}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + + pvs.push({begin:1,x:25,y:40,stroke:1,rd:0}); + pvs.push({x:15,y:40,stroke:1,rd:0}); + pvs.push({x:15,y:30,stroke:1,rd:0}); + pvs.push({x:25,y:30,stroke:1,end:1,rd:0}); + } + }`, + `(i, sample, pvs, model, ovs){ + if(i == 0){ + pvs.push({begin:1,x:30,y:35,type:1,stroke:1}); + pvs.push({x:25,y:35,stroke:1,type:1,end:1}); + } + }`, + //定义锚点 + `(i, sample, pvs, model, ovs){ + switch(i){ + case 0: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 1: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + case 2: + pvs.push({x:sample.x,y:sample.y-25,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y+25,type:0,oppoint:1}); + break; + case 3: + pvs.push({x:sample.x-25,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x,y:sample.y,type:0,oppoint:1}); + pvs.push({x:sample.x+25,y:sample.y,type:0,oppoint:1}); + break; + } + }`, + //文本区域,margin:右10,下15 + `(i, sample, pvs, model, ovs){ + let start = 0,end = 0 + let x = sample.x,y = sample.y + switch(i){ + case 0: + start = 1 + x-=5 + break; + case 1: + y=15 + pvs[0].y=y + break; + case 2: + x+=5 + pvs[1].x=x + break; + case 3: + pvs[2].y=y + x = pvs[0].x + end = 1 + break; + } + pvs.push({begin:start,end:end,x:x,y:y,text:1}); + }` + ] + } + } + }; + const __vite_glob_0_105 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateSubstate + }, Symbol.toStringTag, { value: "Module" })); + const umlStateSwitch = { + "id": "301007", + "name": "ddei.uml.switch", + "code": "switch", + "desc": "UML的状态分支", + "from": "100040", + "define": { + width: 40, + height: 40, + ext: { + groups: [ + { + name: "属性", + icon: "icon-fill", + subGroups: [ + { + name: "ddei.fill", + attrs: ["fill.type", "fill.color", "fill.image", "fill.opacity"] + }, + { + name: "ddei.line", + attrs: ["border.type", "border.color", "borderOpacity", "borderWidth", "borderDash"] + } + ] + } + ] + } + } + }; + const __vite_glob_0_106 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlStateSwitch + }, Symbol.toStringTag, { value: "Module" })); + const umlActive = { + "id": "308", + "name": "ddei.uml.groups.active", + "code": "uml-active", + "desc": "UML2.0中的活动图", + "subject": "uml", + "orderNo": 308, + //当前分组下所有控件 + "controls": [ + { + "id": "308001" + }, + { + "id": "301001" + }, + { + "id": "301002", + "name": "ddei.uml.state" + }, + { + "id": "308004" + }, + { + "id": "308005" + }, + { + "id": "308006" + }, + { + "id": "308007" + }, + { + "id": "308008" + }, + { + "id": "308009" + }, + { + "id": "308010", + "name": "ddei.uml.pause" + }, + { + "id": "308011" + }, + { + "id": "308012" + }, + { + "id": "103005" + }, + { + "id": "308014", + "name": "ddei.uml.statecontainer" + }, + { + "id": "308016", + "name": "ddei.uml.hlane" + }, + { + "id": "308017", + "name": "ddei.uml.vlane" + }, + { + "id": "308018", + "name": "ddei.uml.matrix" + }, + { + "id": "308019", + "name": "ddei.uml.controlflow" + }, + { + "id": "308020", + "name": "ddei.uml.controlflow" + }, + { + "id": "102001", + "name": "ddei.uml.initnode" + }, + { + "id": "102093", + "name": "ddei.uml.endnode" + }, + { + "id": "308023", + "name": "ddei.uml.forknode" + } + ] + }; + const __vite_glob_1_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlActive + }, Symbol.toStringTag, { value: "Module" })); + const umlCase = { + "id": "302", + "name": "ddei.uml.groups.case", + "code": "uml-case", + "desc": "UML2.0中的用例图", + "orderNo": 302, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "103006", + "name": "ddei.uml.role" + }, + { + "id": "302002" + }, + { + "id": "302006" + }, + { + "id": "302007" + }, + { + "id": "302003" + }, + { + "id": "302004" + }, + { + "id": "302005" + }, + { + "id": "103005" + }, + { + "id": "302010" + }, + { + "id": "307019" + }, + { + "id": "302012" + }, + { + "id": "302013" + }, + { + "id": "302014" + } + ] + }; + const __vite_glob_1_1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCase + }, Symbol.toStringTag, { value: "Module" })); + const umlClass = { + "id": "307", + "name": "ddei.uml.groups.class", + "code": "uml-class", + "desc": "UML2.0中的类图", + "orderNo": 307, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "307001" + }, + { + "id": "307002" + }, + { + "id": "307003" + }, + { + "id": "307004" + }, + { + "id": "307005" + }, + { + "id": "307006", + "name": "ddei.uml.muti" + }, + { + "id": "307007" + }, + { + "id": "307008" + }, + { + "id": "307009" + }, + { + "id": "307010" + }, + { + "id": "307011" + }, + { + "id": "307012" + }, + { + "id": "307013" + }, + { + "id": "307014" + }, + { + "id": "307015", + "name": "ddei.uml.container" + }, + { + "id": "307016" + }, + { + "id": "103005" + }, + { + "id": "307018" + }, + { + "id": "307019" + }, + { + "id": "307020" + }, + { + "id": "305017" + }, + { + "id": "305018" + }, + { + "id": "305016" + }, + { + "id": "307024" + }, + { + "id": "305014", + "name": "ddei.uml.link" + } + ] + }; + const __vite_glob_1_2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlClass + }, Symbol.toStringTag, { value: "Module" })); + const umlComponent = { + "id": "305", + "name": "ddei.uml.groups.component", + "code": "uml-component", + "desc": "UML2.0中的组件图", + "orderNo": 305, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "305001" + }, + { + "id": "305002" + }, + { + "id": "305003" + }, + { + "id": "305004", + "name": "ddei.uml.container" + }, + { + "id": "305005" + }, + { + "id": "102001", + "name": "ddei.uml.startnode1" + }, + { + "id": "308012" + }, + { + "id": "103005" + }, + { + "id": "305009" + }, + { + "id": "305010" + }, + { + "id": "305012", + "name": "ddei.uml.interface" + }, + { + "id": "305013", + "name": "ddei.uml.reqinte" + }, + { + "id": "305014", + "name": "ddei.uml.relationship" + }, + { + "id": "305015" + }, + { + "id": "305016" + }, + { + "id": "305017" + }, + { + "id": "305018" + } + ] + }; + const __vite_glob_1_3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlComponent + }, Symbol.toStringTag, { value: "Module" })); + const umlCooperate = { + "id": "306", + "name": "ddei.uml.groups.cooperate", + "code": "uml-cooperate", + "desc": "UML2.0中的协作图", + "orderNo": 306, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "308005" + }, + { + "id": "303014" + }, + { + "id": "306003" + }, + { + "id": "306004" + }, + { + "id": "306005" + }, + { + "id": "306006" + }, + { + "id": "306007" + }, + { + "id": "306008" + }, + { + "id": "306009" + } + ] + }; + const __vite_glob_1_4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlCooperate + }, Symbol.toStringTag, { value: "Module" })); + const umlDeploy = { + "id": "304", + "name": "ddei.uml.groups.deploy", + "code": "uml-deploy", + "desc": "UML2.0中的部署图", + "orderNo": 304, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "307012" + }, + { + "id": "308005" + }, + { + "id": "304003" + }, + { + "id": "304004" + }, + { + "id": "304005" + }, + { + "id": "304006" + }, + { + "id": "304007" + }, + { + "id": "304008" + }, + { + "id": "304009", + "name": "ddei.uml.projins" + }, + { + "id": "304010" + }, + { + "id": "304011" + }, + { + "id": "304012", + "name": "ddei.uml.nodeins" + }, + { + "id": "304013" + }, + { + "id": "304014" + }, + { + "id": "307011" + }, + { + "id": "103005" + }, + { + "id": "304017", + "name": "ddei.uml.sketchmap" + }, + { + "id": "304018" + }, + { + "id": "304019" + }, + { + "id": "304020" + }, + { + "id": "304021" + }, + { + "id": "304022" + }, + { + "id": "304023" + } + ] + }; + const __vite_glob_1_5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlDeploy + }, Symbol.toStringTag, { value: "Module" })); + const umlSequence = { + "id": "303", + "name": "ddei.uml.groups.sequence", + "code": "uml-sequence", + "desc": "UML2.0中的序列图", + "orderNo": 303, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "303001" + }, + { + "id": "303002" + }, + { + "id": "303003" + }, + { + "id": "303004" + }, + { + "id": "303005" + }, + { + "id": "303006" + }, + { + "id": "303007" + }, + { + "id": "303008" + }, + { + "id": "303009" + }, + { + "id": "303010" + }, + { + "id": "303011" + }, + { + "id": "303012" + }, + { + "id": "303013" + }, + { + "id": "303014" + }, + { + "id": "303015" + }, + { + "id": "303016" + }, + { + "id": "303017" + }, + { + "id": "303018" + }, + { + "id": "307011" + }, + { + "id": "102090", + "name": "ddei.uml.endnode1" + }, + { + "id": "103005" + }, + { + "id": "303019" + }, + { + "id": "303020" + }, + { + "id": "303021" + } + ] + }; + const __vite_glob_1_6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlSequence + }, Symbol.toStringTag, { value: "Module" })); + const umlState = { + "id": "301", + "name": "ddei.uml.groups.state", + "code": "uml-state", + "desc": "UML2.0中的状态图", + "orderNo": 301, + "subject": "uml", + //当前分组下所有控件 + "controls": [ + { + "id": "301001" + }, + { + "id": "301002" + }, + { + "id": "301003", + "name": "ddei.uml.compstate" + }, + { + "id": "102001", + "name": "ddei.uml.initstate" + }, + { + "id": "102091", + "name": "ddei.uml.finalstate" + }, + { + "id": "301006" + }, + { + "id": "301007" + }, + { + "id": "301008" + }, + { + "id": "301009" + }, + { + "id": "301010" + }, + { + "id": "103005" + }, + { + "id": "301012" + }, + { + "id": "301013" + }, + { + "id": "301014" + } + ] + }; + const __vite_glob_1_7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: umlState + }, Symbol.toStringTag, { value: "Module" })); + const control_ctx = /* @__PURE__ */ Object.assign({ "./control/active/uml-active-active.ts": __vite_glob_0_0, "./control/active/uml-active-branch.ts": __vite_glob_0_1, "./control/active/uml-active-container.ts": __vite_glob_0_2, "./control/active/uml-active-cross.ts": __vite_glob_0_3, "./control/active/uml-active-cross1.ts": __vite_glob_0_4, "./control/active/uml-active-ctrlflow.ts": __vite_glob_0_5, "./control/active/uml-active-ctrlflow1.ts": __vite_glob_0_6, "./control/active/uml-active-object.ts": __vite_glob_0_7, "./control/active/uml-active-point.ts": __vite_glob_0_8, "./control/active/uml-active-recevt.ts": __vite_glob_0_9, "./control/active/uml-active-recmsg.ts": __vite_glob_0_10, "./control/active/uml-active-sendmsg.ts": __vite_glob_0_11, "./control/active/uml-active-state.ts": __vite_glob_0_12, "./control/case/uml-case-case.ts": __vite_glob_0_13, "./control/case/uml-case-case1.ts": __vite_glob_0_14, "./control/case/uml-case-case2.ts": __vite_glob_0_15, "./control/case/uml-case-coll.ts": __vite_glob_0_16, "./control/case/uml-case-coop.ts": __vite_glob_0_17, "./control/case/uml-case-extend.ts": __vite_glob_0_18, "./control/case/uml-case-include.ts": __vite_glob_0_19, "./control/case/uml-case-interface.ts": __vite_glob_0_20, "./control/case/uml-case-part.ts": __vite_glob_0_21, "./control/case/uml-case-system.ts": __vite_glob_0_22, "./control/class/uml-class-cls.ts": __vite_glob_0_23, "./control/class/uml-class-cls1.ts": __vite_glob_0_24, "./control/class/uml-class-cls2.ts": __vite_glob_0_25, "./control/class/uml-class-constraint.ts": __vite_glob_0_26, "./control/class/uml-class-dt.ts": __vite_glob_0_27, "./control/class/uml-class-enum.ts": __vite_glob_0_28, "./control/class/uml-class-generalization.ts": __vite_glob_0_29, "./control/class/uml-class-impl.ts": __vite_glob_0_30, "./control/class/uml-class-interface.ts": __vite_glob_0_31, "./control/class/uml-class-link.ts": __vite_glob_0_32, "./control/class/uml-class-model.ts": __vite_glob_0_33, "./control/class/uml-class-obj.ts": __vite_glob_0_34, "./control/class/uml-class-overview.ts": __vite_glob_0_35, "./control/class/uml-class-package.ts": __vite_glob_0_36, "./control/class/uml-class-primitive.ts": __vite_glob_0_37, "./control/class/uml-class-rel.ts": __vite_glob_0_38, "./control/class/uml-class-signal.ts": __vite_glob_0_39, "./control/class/uml-class-ui.ts": __vite_glob_0_40, "./control/component/uml-comp-box.ts": __vite_glob_0_41, "./control/component/uml-comp-comp.ts": __vite_glob_0_42, "./control/component/uml-comp-comp1.ts": __vite_glob_0_43, "./control/component/uml-comp-compose.ts": __vite_glob_0_44, "./control/component/uml-comp-dependent.ts": __vite_glob_0_45, "./control/component/uml-comp-direct.ts": __vite_glob_0_46, "./control/component/uml-comp-interface.ts": __vite_glob_0_47, "./control/component/uml-comp-node.ts": __vite_glob_0_48, "./control/component/uml-comp-package.ts": __vite_glob_0_49, "./control/component/uml-comp-rel.ts": __vite_glob_0_50, "./control/component/uml-comp-reqinte.ts": __vite_glob_0_51, "./control/component/uml-comp-together.ts": __vite_glob_0_52, "./control/cooperate/uml-cop-msg.ts": __vite_glob_0_53, "./control/cooperate/uml-cop-msg1.ts": __vite_glob_0_54, "./control/cooperate/uml-cop-msg2.ts": __vite_glob_0_55, "./control/cooperate/uml-cop-msg3.ts": __vite_glob_0_56, "./control/cooperate/uml-cop-msg4.ts": __vite_glob_0_57, "./control/cooperate/uml-cop-msg5.ts": __vite_glob_0_58, "./control/cooperate/uml-cop-msg6.ts": __vite_glob_0_59, "./control/deploy/uml-dep-comm.ts": __vite_glob_0_60, "./control/deploy/uml-dep-comp-ins.ts": __vite_glob_0_61, "./control/deploy/uml-dep-comp-ins1.ts": __vite_glob_0_62, "./control/deploy/uml-dep-comp.ts": __vite_glob_0_63, "./control/deploy/uml-dep-comp1.ts": __vite_glob_0_64, "./control/deploy/uml-dep-depend.ts": __vite_glob_0_65, "./control/deploy/uml-dep-deploy.ts": __vite_glob_0_66, "./control/deploy/uml-dep-extend.ts": __vite_glob_0_67, "./control/deploy/uml-dep-manifest.ts": __vite_glob_0_68, "./control/deploy/uml-dep-node-ins.ts": __vite_glob_0_69, "./control/deploy/uml-dep-node.ts": __vite_glob_0_70, "./control/deploy/uml-dep-obj.ts": __vite_glob_0_71, "./control/deploy/uml-dep-overview-ins.ts": __vite_glob_0_72, "./control/deploy/uml-dep-overview.ts": __vite_glob_0_73, "./control/deploy/uml-dep-together.ts": __vite_glob_0_74, "./control/sequence/uml-seq-act-break.ts": __vite_glob_0_75, "./control/sequence/uml-seq-act.ts": __vite_glob_0_76, "./control/sequence/uml-seq-actor-life.ts": __vite_glob_0_77, "./control/sequence/uml-seq-actor.ts": __vite_glob_0_78, "./control/sequence/uml-seq-alt.ts": __vite_glob_0_79, "./control/sequence/uml-seq-alternative.ts": __vite_glob_0_80, "./control/sequence/uml-seq-async.ts": __vite_glob_0_81, "./control/sequence/uml-seq-control.ts": __vite_glob_0_82, "./control/sequence/uml-seq-custom.ts": __vite_glob_0_83, "./control/sequence/uml-seq-edge.ts": __vite_glob_0_84, "./control/sequence/uml-seq-entity.ts": __vite_glob_0_85, "./control/sequence/uml-seq-inv.ts": __vite_glob_0_86, "./control/sequence/uml-seq-life.ts": __vite_glob_0_87, "./control/sequence/uml-seq-loop.ts": __vite_glob_0_88, "./control/sequence/uml-seq-obj.ts": __vite_glob_0_89, "./control/sequence/uml-seq-objdel.ts": __vite_glob_0_90, "./control/sequence/uml-seq-objlife.ts": __vite_glob_0_91, "./control/sequence/uml-seq-opt.ts": __vite_glob_0_92, "./control/sequence/uml-seq-package.ts": __vite_glob_0_93, "./control/sequence/uml-seq-par.ts": __vite_glob_0_94, "./control/sequence/uml-seq-transition.ts": __vite_glob_0_95, "./control/state/uml-state-branch.ts": __vite_glob_0_96, "./control/state/uml-state-collect.ts": __vite_glob_0_97, "./control/state/uml-state-constraint.ts": __vite_glob_0_98, "./control/state/uml-state-convert.ts": __vite_glob_0_99, "./control/state/uml-state-end.ts": __vite_glob_0_100, "./control/state/uml-state-his.ts": __vite_glob_0_101, "./control/state/uml-state-his1.ts": __vite_glob_0_102, "./control/state/uml-state-state.ts": __vite_glob_0_103, "./control/state/uml-state-state1.ts": __vite_glob_0_104, "./control/state/uml-state-substate.ts": __vite_glob_0_105, "./control/state/uml-state-switch.ts": __vite_glob_0_106 }); + const group_ctx = /* @__PURE__ */ Object.assign({ "./group/uml-active.ts": __vite_glob_1_0, "./group/uml-case.ts": __vite_glob_1_1, "./group/uml-class.ts": __vite_glob_1_2, "./group/uml-component.ts": __vite_glob_1_3, "./group/uml-cooperate.ts": __vite_glob_1_4, "./group/uml-deploy.ts": __vite_glob_1_5, "./group/uml-sequence.ts": __vite_glob_1_6, "./group/uml-state.ts": __vite_glob_1_7 }); + const _DDeiExtUMLControls = class _DDeiExtUMLControls extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "controls", /* @__PURE__ */ new Map()); + } + getControls(editor) { + let extOptions = this.getOptions(); + let controls2 = /* @__PURE__ */ new Map(); + let controls1 = new Map(editor.controls); + for (let i2 in control_ctx) { + let control = control_ctx[i2].default; + if (control) { + let c = cloneDeep(control); + controls2.set(control.id, c); + controls1.set(control.id, c); + if (extOptions && extOptions[control.id]) { + for (let x2 in extOptions[control.id]) { + c.define[x2] = extOptions[control.id][x2]; + } + } + } + } + controls2.forEach((control) => { + loadControlByFrom(controls1, control); + }); + this.controls = controls2; + return controls2; + } + getGroups(editor) { + if (!this.controls) { + this.getControls(editor); + } + let groups = []; + for (let path in group_ctx) { + groups.push(group_ctx[path].default); + } + loadAndSortGroup(groups, editor.controls); + return groups; + } + static modify(fn) { + return _DDeiExtUMLControls.defaultIns.modify(fn); + } + static configuration(options) { + if (options) { + let controls2 = new _DDeiExtUMLControls(options); + return controls2; + } + return _DDeiExtUMLControls; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtUMLControls, "defaultIns", new _DDeiExtUMLControls(null)); + let DDeiExtUMLControls = _DDeiExtUMLControls; + const _DDeiExtUML = class _DDeiExtUML extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 1); + __publicField3(this, "controls", DDeiExtUMLControls); + } + getOptions() { + let options = {}; + let array = [this.controls]; + array.forEach((plugin) => { + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + options = Object.assign({}, options, plugin.defaultIns.getOptions()); + } else if (plugin instanceof DDeiPluginBase) { + options = Object.assign({}, options, plugin.getOptions()); + } + }); + return options; + } + getLangs(editor) { + const langModules = /* @__PURE__ */ Object.assign({ "./i18n/en_US.ts": __vite_glob_0_0$1, "./i18n/zh_CN.ts": __vite_glob_0_1$1 }); + let langs = {}; + for (let i2 in langModules) { + let langModule = langModules[i2]; + let newI = i2.substring(i2.lastIndexOf("/") + 1, i2.lastIndexOf(".")); + langs[newI] = langModule.default; + } + return langs; + } + getControls(editor) { + if (DDeiPluginBase.isSubclass(this.controls, DDeiPluginBase)) { + return this.controls.defaultIns.getControls(editor); + } else if (this.controls instanceof DDeiPluginBase) { + return this.controls.getControls(editor); + } + } + getGroups(editor) { + if (DDeiPluginBase.isSubclass(this.controls, DDeiPluginBase)) { + return this.controls.defaultIns.getGroups(editor); + } else if (this.controls instanceof DDeiPluginBase) { + return this.controls.getGroups(editor); + } + } + static modify(fn) { + return _DDeiExtUML.defaultIns.modify(fn); + } + static configuration(options) { + let core = new _DDeiExtUML(options); + core.controls = core.controls.configuration(controls, true); + return core; + } + }; + __publicField3(_DDeiExtUML, "order", 1); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtUML, "defaultIns", new _DDeiExtUML(null)); + let DDeiExtUML = _DDeiExtUML; + const _sfc_main$6 = { + name: "ddei-core-dialog-quickpop", + extends: null, + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dialogId: "ddei-core-dialog-quickpop", + //当前选中的控件 + selectedModels: null, + //当前操作 + operateState: null, + //全部都是线条 + allLine: false, + forceRefresh: false + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + this.refreshData(); + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + }, + refreshData() { + var _a3; + let stage2 = this.editor.ddInstance.stage; + if (stage2) { + this.selectedModels = stage2.selectedModels; + this.operateState = stage2.render.operateState; + if (((_a3 = this.selectedModels) == null ? void 0 : _a3.size) > 0) { + let allLine = true; + this.selectedModels.forEach((model) => { + if (model.baseModelType != "DDeiLine") { + allLine = false; + } + }); + this.allLine = allLine; + } + } + }, + exchangeLinePoint() { + var _a3, _b2; + (_a3 = this.selectedModels) == null ? void 0 : _a3.forEach((model) => { + if (model.baseModelType == "DDeiLine") { + model.exchangeStartAndEnd(); + } + }); + this.editor.bus.push(DDeiEnumBusCommandType.AddHistroy); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + (_b2 = this.editor.editorViewer) == null ? void 0 : _b2.changeFileModifyDirty(); + }, + showSetStyleDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-setstyle", { + group: "top-dialog" + }, { type: 5 }, srcElement, false, true); + }, + closeAllDialog() { + DDeiEditorUtil.closeDialogs(this.editor); + }, + showAlignDialog(evt) { + let srcElement = evt.currentTarget; + DDeiEditorUtil.showOrCloseDialog(this.editor, "ddei-core-dialog-align", { + group: "top-dialog" + }, { type: 5 }, srcElement, false, true); + }, + //是否可以取消组合 + canCancelMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 0) { + let models = Array.from(stage2 == null ? void 0 : stage2.selectedModels.values()); + if (models[0].baseModelType == "DDeiContainer" && models[0].layout == "compose") { + return true; + } + } + return false; + }, + //是否可以组合 + canMerge() { + var _a3; + return this.operateState != 50 && !this.allLine && ((_a3 = this.selectedModels) == null ? void 0 : _a3.size) > 1; + }, + /** + * 执行组合 + */ + doMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 1) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelMerge); + this.editor.bus.executeAll(); + } + }, + /** + * 执行取消组合 + */ + doCancelMerge() { + var _a3, _b2; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.selectedModels) == null ? void 0 : _b2.size) > 0) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelCancelMerge); + this.editor.bus.executeAll(); + } + }, + //修改图形层次 + doPush(v) { + var _a3; + let file = (_a3 = this.editor) == null ? void 0 : _a3.files[this.editor.currentFileIndex]; + let sheet = file == null ? void 0 : file.sheets[file == null ? void 0 : file.currentSheetIndex]; + let stage2 = sheet == null ? void 0 : sheet.stage; + let stageRender = stage2 == null ? void 0 : stage2.render; + let optContainer = stageRender == null ? void 0 : stageRender.currentOperateContainer; + if (optContainer) { + this.editor.bus.push(DDeiEnumBusCommandType.ModelPush, { + container: optContainer, + type: v + }); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + }, + /** + * 执行格式刷 + */ + execBrushAction(evt) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + if (this.editor.state == DDeiEditorState.QUICK_EDITING) { + if (!((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.ddInstance) == null ? void 0 : _b2.stage) == null ? void 0 : _c2.brushDataText)) { + (_e2 = (_d2 = this.editor) == null ? void 0 : _d2.hotkeys["ddei-core-keyaction-brush-data"]) == null ? void 0 : _e2.action(evt, this.editor.ddInstance, this.editor); + } else { + delete this.editor.ddInstance.stage.brushDataText; + } + } else { + if (!((_h = (_g = (_f = this.editor) == null ? void 0 : _f.ddInstance) == null ? void 0 : _g.stage) == null ? void 0 : _h.brushData)) { + (_j = (_i = this.editor) == null ? void 0 : _i.hotkeys["ddei-core-keyaction-brush-data"]) == null ? void 0 : _j.action(evt, this.editor.ddInstance, this.editor); + } else { + delete this.editor.ddInstance.stage.brushData; + } + } + } + } + }; + const CanvasQuickDialog_vue_vue_type_style_index_0_scoped_c4337de3_lang = ""; + const _hoisted_1$6 = ["id"]; + const _hoisted_2$4 = { + key: 0, + class: "content" + }; + const _hoisted_3$3 = { class: "panel12" }; + const _hoisted_4$3 = { class: "panel12-content-1" }; + const _hoisted_5$3 = { class: "panel12-content-2" }; + const _hoisted_6$3 = { class: "panel12-content-5" }; + const _hoisted_7$3 = { class: "panel12-content-5" }; + const _hoisted_8$2 = { class: "panel12-content-3" }; + const _hoisted_9$2 = { class: "panel12-content-3" }; + const _hoisted_10$1 = { class: "panel12-content-3" }; + const _hoisted_11$1 = { class: "panel12-content-3" }; + const _hoisted_12$1 = { class: "panel12-content-3" }; + const _hoisted_13$1 = { class: "panel12-split-3 panel12-content-4 panel1-split-4" }; + const _hoisted_14 = { class: "panel12-content-4" }; + const _hoisted_15 = ["title"]; + const _hoisted_16 = { class: "text" }; + const _hoisted_17 = { + key: 1, + class: "content" + }; + const _hoisted_18 = { class: "panel6" }; + const _hoisted_19 = { class: "panel6-content1 pointtype" }; + const _hoisted_20 = { class: "text" }; + const _hoisted_21 = { class: "panel6-content1 pointtype" }; + const _hoisted_22 = { class: "text" }; + const _hoisted_23 = { + class: "panel6", + style: { "border-left": "1px solid #E2E2EB" } + }; + const _hoisted_24 = { class: "panel6-content type" }; + const _hoisted_25 = { class: "text" }; + const _hoisted_26 = { class: "panel6-content color2" }; + const _hoisted_27 = { class: "text" }; + const _hoisted_28 = { class: "panel6-content dash" }; + const _hoisted_29 = { class: "text" }; + const _hoisted_30 = { class: "panel6-content dash" }; + const _hoisted_31 = { class: "text" }; + const _hoisted_32 = { + class: "panel6", + style: { "border-left": "1px solid #E2E2EB" } + }; + const _hoisted_33 = { class: "text" }; + const _hoisted_34 = { + key: 2, + class: "content" + }; + const _hoisted_35 = { class: "panel1" }; + const _hoisted_36 = { class: "panel1-content-1" }; + const _hoisted_37 = { class: "panel1-content-2" }; + const _hoisted_38 = { class: "panel1-content-3" }; + const _hoisted_39 = { class: "panel1-content-3" }; + const _hoisted_40 = { class: "panel1-content-3" }; + const _hoisted_41 = { class: "panel1-split-3 panel1-content-4 panel1-split-4" }; + const _hoisted_42 = { class: "panel1-content-4" }; + const _hoisted_43 = ["title"]; + const _hoisted_44 = { class: "text" }; + const _hoisted_45 = { class: "panel3" }; + const _hoisted_46 = { class: "text" }; + const _hoisted_47 = { class: "panel3-content i2" }; + const _hoisted_48 = { class: "text" }; + const _hoisted_49 = { class: "panel3-content i3" }; + const _hoisted_50 = { class: "text" }; + const _hoisted_51 = { class: "panel4" }; + const _hoisted_52 = { class: "text" }; + const _hoisted_53 = { class: "text" }; + const _hoisted_54 = { class: "text" }; + const _hoisted_55 = { class: "text" }; + const _hoisted_56 = { class: "text" }; + function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K; + return $data.forceRefresh ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = $props.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + onMousedown: _cache[10] || (_cache[10] = ($event) => $options.closeAllDialog()), + class: "ddei-core-dialog-quickpop" + }, [ + $data.operateState == 50 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4, [ + vue.createElementVNode("div", _hoisted_3$3, [ + vue.createElementVNode("div", _hoisted_4$3, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_b2 = $props.editor) == null ? void 0 : _b2.panels["ddei-core-btn-fontfamily"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_5$3, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_c2 = $props.editor) == null ? void 0 : _c2.panels["ddei-core-btn-fontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_6$3, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_d2 = $props.editor) == null ? void 0 : _d2.panels["ddei-core-btn-addfontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + addValue: 1, + attrCode: "font.size", + img: "icon-add-fontsize", + extcls: "magtop-2" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_7$3, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_e2 = $props.editor) == null ? void 0 : _e2.panels["ddei-core-btn-addfontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + addValue: -1, + attrCode: "font.size", + img: "icon-reduce-fontsize", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_8$2, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_f = $props.editor) == null ? void 0 : _f.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.bold", + img: "icon-bold" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_9$2, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_g = $props.editor) == null ? void 0 : _g.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.italic", + img: "icon-font-italic" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_10$1, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_h = $props.editor) == null ? void 0 : _h.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.underline", + img: "icon-text-underline", + extcls: "ext-underline" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_11$1, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_i = $props.editor) == null ? void 0 : _i.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + electedValue: "1", + attrCode: "textStyle.deleteline", + img: "icon-a-ziyuan457" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_12$1, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_j = $props.editor) == null ? void 0 : _j.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + onlyQuickEdit: true, + attrCode: "textStyle.subtype", + img: "icon-text-subtype-2", + extcls: "magtop-1" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_13$1, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_k = $props.editor) == null ? void 0 : _k.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "textStyle.bgcolor", + img: "icon-a-ziyuan452" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_14, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_l = $props.editor) == null ? void 0 : _l.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "font.color", + img: "icon-font" + }, null, 8, ["editor", "controlDefine"])) + ]) + ]), + vue.createElementVNode("div", { + class: "panel2", + title: $props.editor.i18n("ddei.brush"), + style: { "border-right": "none" }, + onClick: _cache[0] || (_cache[0] = ($event) => $options.execBrushAction($event)) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "panel2-content": true, "brush-selected": (_o = (_n = (_m = $props.editor) == null ? void 0 : _m.ddInstance) == null ? void 0 : _n.stage) == null ? void 0 : _o.brushDataText }) + }, [ + _cache[11] || (_cache[11] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-brush" }) + ], -1)), + vue.createElementVNode("div", _hoisted_16, vue.toDisplayString($props.editor.i18n("ddei.brush")), 1) + ], 2) + ], 8, _hoisted_15) + ])) : vue.createCommentVNode("", true), + $data.operateState != 50 && $data.allLine ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17, [ + vue.createElementVNode("div", _hoisted_18, [ + vue.createElementVNode("div", _hoisted_19, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_p = $props.editor) == null ? void 0 : _p.panels["ddei-core-btn-linepointtype"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "sp.type" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_20, vue.toDisplayString($props.editor.i18n("ddei.startPoint")), 1) + ]), + vue.createElementVNode("div", { + class: "panel6-content1 exchange", + onClick: _cache[1] || (_cache[1] = (...args) => $options.exchangeLinePoint && $options.exchangeLinePoint(...args)) + }, _cache[12] || (_cache[12] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-zhihuan" }) + ], -1) + ])), + vue.createElementVNode("div", _hoisted_21, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_q = $props.editor) == null ? void 0 : _q.panels["ddei-core-btn-linepointtype"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "ep.type" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_22, vue.toDisplayString($props.editor.i18n("ddei.endPoint")), 1) + ]) + ]), + vue.createElementVNode("div", _hoisted_23, [ + vue.createElementVNode("div", _hoisted_24, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_r = $props.editor) == null ? void 0 : _r.panels["ddei-core-btn-linetype"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "type", + img: "icon-link-line" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_25, vue.toDisplayString($props.editor.i18n("ddei.lineType")), 1) + ]), + vue.createElementVNode("div", _hoisted_26, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_s = $props.editor) == null ? void 0 : _s.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "color", + img: "icon-border-pencil" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_27, vue.toDisplayString($props.editor.i18n("ddei.lineColor")), 1) + ]), + vue.createElementVNode("div", _hoisted_28, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_t = $props.editor) == null ? void 0 : _t.panels["ddei-core-btn-borderweight"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "weight", + hiddenCombo: "1" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_29, vue.toDisplayString($props.editor.i18n("ddei.lineWeight")), 1) + ]), + vue.createElementVNode("div", _hoisted_30, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_u = $props.editor) == null ? void 0 : _u.panels["ddei-core-btn-borderdash"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "dash", + hiddenCombo: "1" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_31, vue.toDisplayString($props.editor.i18n("ddei.lineDash")), 1) + ]) + ]), + vue.createElementVNode("div", _hoisted_32, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "panel6-content brush": true, "brush-selected": (_x = (_w = (_v = $props.editor) == null ? void 0 : _v.ddInstance) == null ? void 0 : _w.stage) == null ? void 0 : _x.brushData }), + onClick: _cache[2] || (_cache[2] = ($event) => $options.execBrushAction($event)) + }, [ + _cache[13] || (_cache[13] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-brush" }) + ], -1)), + vue.createElementVNode("div", _hoisted_33, vue.toDisplayString($props.editor.i18n("ddei.brush")), 1) + ], 2) + ]) + ])) : vue.createCommentVNode("", true), + $data.operateState != 50 && !$data.allLine ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_34, [ + vue.createElementVNode("div", _hoisted_35, [ + vue.createElementVNode("div", _hoisted_36, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_y = $props.editor) == null ? void 0 : _y.panels["ddei-core-btn-fontfamily"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_37, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_z = $props.editor) == null ? void 0 : _z.panels["ddei-core-btn-fontsize"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_38, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_A = $props.editor) == null ? void 0 : _A.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.bold", + img: "icon-bold" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_39, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_B = $props.editor) == null ? void 0 : _B.panels["ddei-core-btn-editbox"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + selectedValue: "1", + attrCode: "textStyle.italic", + img: "icon-font-italic" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_40, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_C = $props.editor) == null ? void 0 : _C.panels["ddei-core-btn-textalign"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + img: "icon-text-align-left" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_41, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_D = $props.editor) == null ? void 0 : _D.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "textStyle.bgcolor", + img: "icon-fill" + }, null, 8, ["editor", "controlDefine"])) + ]), + vue.createElementVNode("div", _hoisted_42, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_E = $props.editor) == null ? void 0 : _E.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "font.color", + img: "icon-font" + }, null, 8, ["editor", "controlDefine"])) + ]) + ]), + vue.createElementVNode("div", { + class: "panel2", + title: $props.editor.i18n("ddei.brush"), + onClick: _cache[3] || (_cache[3] = ($event) => $options.execBrushAction($event)) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "panel2-content": true, "brush-selected": (_H = (_G = (_F = $props.editor) == null ? void 0 : _F.ddInstance) == null ? void 0 : _G.stage) == null ? void 0 : _H.brushData }) + }, [ + _cache[14] || (_cache[14] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-brush" }) + ], -1)), + vue.createElementVNode("div", _hoisted_44, vue.toDisplayString($props.editor.i18n("ddei.brush")), 1) + ], 2) + ], 8, _hoisted_43), + vue.createElementVNode("div", _hoisted_45, [ + vue.createElementVNode("div", { + class: "panel3-content i1", + onClick: _cache[4] || (_cache[4] = ($event) => $options.showSetStyleDialog($event)) + }, [ + _cache[15] || (_cache[15] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-shapes" }) + ], -1)), + vue.createElementVNode("div", _hoisted_46, vue.toDisplayString($props.editor.i18n("ddei.style")), 1) + ]), + vue.createElementVNode("div", _hoisted_47, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_I = $props.editor) == null ? void 0 : _I.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "fill.color", + img: "icon-background" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_48, vue.toDisplayString($props.editor.i18n("ddei.fill")), 1) + ]), + vue.createElementVNode("div", _hoisted_49, [ + (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent((_J = $props.editor) == null ? void 0 : _J.panels["ddei-core-btn-color"]), { + editor: $props.editor, + controlDefine: $props.editor.currentControlDefine, + attrCode: "border.color", + img: "icon-border-pencil" + }, null, 8, ["editor", "controlDefine"])), + vue.createElementVNode("div", _hoisted_50, vue.toDisplayString($props.editor.i18n("ddei.border")), 1) + ]) + ]), + vue.createElementVNode("div", _hoisted_51, [ + vue.createElementVNode("div", { + class: "panel4-content", + onClick: _cache[5] || (_cache[5] = ($event) => $options.doPush("top")) + }, [ + _cache[16] || (_cache[16] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-top" }) + ], -1)), + vue.createElementVNode("div", _hoisted_52, vue.toDisplayString($props.editor.i18n("ddei.pushTop")), 1) + ]), + vue.createElementVNode("div", { + class: "panel4-content", + onClick: _cache[6] || (_cache[6] = ($event) => $options.doPush("bottom")) + }, [ + _cache[17] || (_cache[17] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-move-bottom" }) + ], -1)), + vue.createElementVNode("div", _hoisted_53, vue.toDisplayString($props.editor.i18n("ddei.pushBottom")), 1) + ]) + ]), + vue.createElementVNode("div", { + class: "panel5", + style: vue.normalizeStyle({ "display": $options.canMerge() || $options.canCancelMerge() ? "" : "none" }) + }, [ + vue.withDirectives(vue.createElementVNode("div", { + class: "panel5-content", + onClick: _cache[7] || (_cache[7] = ($event) => $options.canMerge() && $options.doMerge()) + }, [ + _cache[18] || (_cache[18] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-merge" }) + ], -1)), + vue.createElementVNode("div", _hoisted_54, vue.toDisplayString($props.editor.i18n("ddei.combina")), 1) + ], 512), [ + [vue.vShow, $options.canMerge()] + ]), + vue.withDirectives(vue.createElementVNode("div", { + class: "panel5-content", + onClick: _cache[8] || (_cache[8] = ($event) => $options.canCancelMerge() && $options.doCancelMerge()) + }, [ + _cache[19] || (_cache[19] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-cancel-merge" }) + ], -1)), + vue.createElementVNode("div", _hoisted_55, vue.toDisplayString($props.editor.i18n("ddei.cancelCombina")), 1) + ], 512), [ + [vue.vShow, $options.canCancelMerge()] + ]), + vue.withDirectives(vue.createElementVNode("div", { + class: "panel5-content", + onClick: _cache[9] || (_cache[9] = ($event) => $options.canMerge() && $options.showAlignDialog($event)) + }, [ + _cache[20] || (_cache[20] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-align" }) + ], -1)), + vue.createElementVNode("div", _hoisted_56, vue.toDisplayString($props.editor.i18n("ddei.align")), 1) + ], 512), [ + [vue.vShow, $options.canMerge()] + ]) + ], 4) + ])) : vue.createCommentVNode("", true) + ], 40, _hoisted_1$6)), [ + [vue.vShow, ((_K = $data.selectedModels) == null ? void 0 : _K.size) > 0] + ]) : vue.createCommentVNode("", true); + } + const CanvasQuickDialog = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-c4337de3"]]); + const _DDeiCoreCanvasQuickDialog = class _DDeiCoreCanvasQuickDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", CanvasQuickDialog.name); + __publicField3(this, "plugins", [CanvasQuickDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[CanvasQuickDialog.name]) { + for (let i2 in options[CanvasQuickDialog.name]) { + newOptions[i2] = options[CanvasQuickDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreCanvasQuickDialog(newOptions); + return panels; + } + } + return _DDeiCoreCanvasQuickDialog; + } + static modify(fn) { + return _DDeiCoreCanvasQuickDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCanvasQuickDialog, "defaultIns", new _DDeiCoreCanvasQuickDialog(null)); + let DDeiCoreCanvasQuickDialog = _DDeiCoreCanvasQuickDialog; + const _DDeiCoreCanvasLifeCycle = class _DDeiCoreCanvasLifeCycle extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "quickstyle-lifecycle"); + __publicField3(this, "EVENT_CONTROL_SELECT_AFTER", new DDeiFuncData("quickstyle-show", 1, this.showQuickEditPicker)); + __publicField3(this, "EVENT_MOUSE_OPERATING", new DDeiFuncData("quickstyle-hidden", 1, this.mouseOperating)); + __publicField3(this, "EVENT_CLOSE_FILE_AFTER", new DDeiFuncData("quickstyle-hidden", 1, this.closeDialog)); + } + /** + * 正在进行鼠标操作 + */ + mouseOperating(operateType, data, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + DDeiEditorUtil.hiddenDialog(editor, "ddei-core-dialog-quickpop"); + if (operateType == "SCROLL_WORKING" || operateType == "CHANGE_RATIO" || operateType == "CHANGE_WPV" || operateType == "CHANGE_BOUNDS" || operateType == "CHANGE_ROTATE") { + _DDeiCoreCanvasLifeCycle.displayQuickDialog(editor); + } + } + } + /** + * 正在进行鼠标操作 + */ + closeDialog(operateType, data, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + DDeiEditorUtil.closeDialog(editor, "ddei-core-dialog-quickpop"); + } + } + static displayQuickDialog(editor) { + var _a3, _b2, _c2, _d2; + if (editor.state == DDeiEditorState.DESIGNING && ((_c2 = (_b2 = (_a3 = editor == null ? void 0 : editor.ddInstance) == null ? void 0 : _a3.stage) == null ? void 0 : _b2.selectedModels) == null ? void 0 : _c2.size) > 0) { + if (editor.ddInstance.stage.render.operateState != 0) { + _DDeiCoreCanvasLifeCycle.displayQuickDialog(editor); + return; + } + let models = Array.from((_d2 = editor.ddInstance.stage) == null ? void 0 : _d2.selectedModels.values()); + if ((models == null ? void 0 : models.length) > 0) { + let height = 130; + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition(models); + let left = modelPos.left - editorDomPos.left + modelPos.width / 2 + 40; + let top = modelPos.top - editorDomPos.top; + if (modelPos.top - height <= modelPos.cTop) { + if (modelPos.height > 400) { + top = top + height + 40; + } else { + top = top + modelPos.height + 40; + } + } else { + top = top - height; + } + let canvasEle = document.getElementById(editor.id + "_canvas"); + if (top < canvasEle.offsetTop) { + top = modelPos.offsetTop; + } else if (top + 80 > canvasEle.offsetTop + canvasEle.clientHeight) { + top = canvasEle.offsetTop + canvasEle.clientHeight - 80; + } + if (left < canvasEle.offsetLeft) { + left = canvasEle.offsetLeft; + } else if (left + 550 > canvasEle.offsetLeft + canvasEle.clientWidth) { + left = canvasEle.offsetLeft + canvasEle.clientWidth - 550; + } + DDeiEditorUtil.displayDialog(editor, "ddei-core-dialog-quickpop", null, { type: 99, left, top, hiddenMask: true }); + } + } + } + /** + * 选择后,在选择控件的合适位置显示快捷编辑框 + */ + showQuickEditPicker(operateType, data, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let models = data == null ? void 0 : data.models; + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.state == DDeiEditorState.DESIGNING) { + let curState = editor.state; + DDeiEditorUtil.closeDialog(editor, "ddei-core-dialog-quickpop"); + if ((models == null ? void 0 : models.length) > 0) { + let height = 130; + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition(models); + let left = modelPos.left - editorDomPos.left + modelPos.width / 2 + 40; + let top = modelPos.top - editorDomPos.top + modelPos.height / 2; + if (modelPos.top - height <= modelPos.cTop) { + if (modelPos.height > 400) { + top = top + height + 40; + } else { + top = top + modelPos.height / 2 + 40; + } + } else { + top = top - height; + } + let canvasEle = document.getElementById(editor.id + "_canvas"); + if (top < canvasEle.offsetTop) { + top = modelPos.offsetTop; + } else if (top + 80 > canvasEle.offsetTop + canvasEle.clientHeight) { + top = canvasEle.offsetTop + canvasEle.clientHeight - 80; + } + if (left < canvasEle.offsetLeft) { + left = canvasEle.offsetLeft; + } else if (left + 550 > canvasEle.offsetLeft + canvasEle.clientWidth) { + left = canvasEle.offsetLeft + canvasEle.clientWidth - 550; + } + DDeiEditorUtil.showDialog(editor, "ddei-core-dialog-quickpop", { + group: "canvas-pop" + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + editor == null ? void 0 : editor.changeState(curState); + } + } + } + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiCoreCanvasLifeCycle.name]) { + for (let i2 in options[_DDeiCoreCanvasLifeCycle.name]) { + newOptions[i2] = options[_DDeiCoreCanvasLifeCycle.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreCanvasLifeCycle(); + if (newOptions.name) { + panels.name = newOptions.name; + } + if (newOptions.sort) { + panels.sort = newOptions.sort; + } + return panels; + } + } + return _DDeiCoreCanvasLifeCycle; + } + static modify(fn) { + return _DDeiCoreCanvasLifeCycle.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreCanvasLifeCycle, "defaultIns", new _DDeiCoreCanvasLifeCycle(null)); + _DDeiCoreCanvasLifeCycle.displayQuickDialog = debounce(_DDeiCoreCanvasLifeCycle.displayQuickDialog, 300); + let DDeiCoreCanvasLifeCycle = _DDeiCoreCanvasLifeCycle; + const _DDeiExtQuickStyle = class _DDeiExtQuickStyle extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 2); + __publicField3(this, "dialogs", DDeiCoreCanvasQuickDialog); + __publicField3(this, "lifecyclies", DDeiCoreCanvasLifeCycle); + } + getDialogs(editor) { + if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) { + return this.dialogs.defaultIns.getDialogs(editor); + } else if (this.dialogs instanceof DDeiPluginBase) { + return this.dialogs.getDialogs(editor); + } + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + static configuration(options) { + let core = new _DDeiExtQuickStyle(options); + core.dialogs = core.dialogs.configuration(options, true); + core.lifecyclies = core.lifecyclies.configuration(options, true); + return core; + } + static modify(fn) { + return _DDeiExtQuickStyle.defaultIns.modify(fn); + } + }; + __publicField3(_DDeiExtQuickStyle, "order", 2); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickStyle, "defaultIns", new _DDeiExtQuickStyle(null)); + let DDeiExtQuickStyle = _DDeiExtQuickStyle; + const DialogBase$1 = { + props: { + editor: { + type: DDeiEditor, + default: null + } + }, + data: function() { + return { + forceRefresh: false + }; + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + } + }; + const _sfc_main$5 = { + name: "ddei-ext-panel-search", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + searchInputId: "", + replaceInputId: "", + replaceText: "" + }; + }, + computed: {}, + watch: {}, + created() { + if (!this.editor.search) { + this.editor.search = { + resultIndex: -1, + result: [] + }; + } + this.executeQuery = debounce(this.executeQuery, 300); + }, + mounted() { + var _a3, _b2, _c2; + if (!this.editor.search.mode) { + this.editor.search.mode = 1; + } + this.searchInputId = this.editor.id + "_search_input"; + this.replaceInputId = this.editor.id + "_search_replace_input"; + if (((_c2 = (_b2 = (_a3 = this.editor) == null ? void 0 : _a3.search) == null ? void 0 : _b2.result) == null ? void 0 : _c2.length) > 0) { + this.changeFileSheetSelectAndModel(); + } + setTimeout(() => { + if (this.editor.search.mode == 2) { + this.$refs.searchReplaceBoxInput.focus(); + } else { + this.$refs.searchBoxInput.focus(); + } + }, 300); + }, + methods: { + changeReplace() { + if (this.editor.search.mode == 1 && this.editor.ddInstance && this.editor.ddInstance["AC_DESIGN_EDIT"]) { + this.editor.search.mode = 2; + } else { + this.editor.search.mode = 1; + } + }, + changeMatchCase() { + if (this.editor.search.matchCase == true) { + this.editor.search.matchCase = false; + } else { + this.editor.search.matchCase = true; + } + this.executeQuery(); + }, + changeMatchAll() { + if (this.editor.search.matchAll == true) { + this.editor.search.matchAll = false; + } else { + this.editor.search.matchAll = true; + } + this.executeQuery(); + }, + executeQuery(evt) { + var _a3, _b2, _c2; + if ((evt == null ? void 0 : evt.keyCode) != 13 && (evt == null ? void 0 : evt.keyCode) != 27) { + let rs = this.editor.searchModels((_a3 = this.editor.search) == null ? void 0 : _a3.keywords, "text", false, 3, (_b2 = this.editor.search) == null ? void 0 : _b2.matchCase, (_c2 = this.editor.search) == null ? void 0 : _c2.matchAll); + if ((rs == null ? void 0 : rs.length) > 0) { + this.editor.search.result = rs; + this.editor.search.resultIndex = -1; + } else { + this.editor.search.result = []; + this.editor.search.resultIndex = -1; + } + this.moveToNextResult(); + } + this.editor.search.inActive = false; + return true; + }, + moveToNextResult() { + this.editor.search.resultIndex++; + this.changeFileSheetSelectAndModel(); + }, + moveToUpResult() { + this.editor.search.resultIndex--; + this.changeFileSheetSelectAndModel(); + }, + changeFileSheetSelectAndModel(clearSpt = false) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + this.editor.search.inActive = false; + if (this.editor.search.resultIndex >= this.editor.search.result.length - 1) { + this.editor.search.resultIndex = this.editor.search.result.length - 1; + } else if (this.editor.search.resultIndex < 0) { + this.editor.search.resultIndex = 0; + } + let ddInstance = this.editor.ddInstance; + let rsData = this.editor.search.result[this.editor.search.resultIndex]; + let skipIndex = [this.editor.search.resultIndex]; + let textSelectColor = DDeiUtil.getStyleValue("canvas-text-selection", this.editor.ddInstance); + if (rsData == null ? void 0 : rsData.model) { + let file = this.editor.files[rsData.fileIndex]; + if (file) { + let sheetIndex = rsData.sheetIndex; + if (sheetIndex >= 0) { + this.editor.changeFile(rsData.fileIndex, sheetIndex); + this.editor.centerModels(ddInstance.stage, rsData.model.id); + (_b2 = (_a3 = rsData.model) == null ? void 0 : _a3.render) == null ? void 0 : _b2.controlSelect(); + if (!clearSpt) { + let sptStyle = {}; + for (let i2 = 0; i2 < rsData.len; i2++) { + sptStyle["" + (rsData.index + i2)] = { textStyle: { bgcolor: textSelectColor } }; + } + for (let k = this.editor.search.resultIndex - 1; k > 0; k--) { + if (this.editor.search.result[k].model == rsData.model) { + let rsd1 = this.editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + for (let k = this.editor.search.resultIndex + 1; k < this.editor.search.result.length; k++) { + if (this.editor.search.result[k].model == rsData.model) { + let rsd1 = this.editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + (_d2 = (_c2 = rsData.model) == null ? void 0 : _c2.render) == null ? void 0 : _d2.drawShape({ border: { type: 1, color: "#017fff", width: 1, dash: [10, 10] }, sptStyle }); + } else { + (_f = (_e2 = rsData.model) == null ? void 0 : _e2.render) == null ? void 0 : _f.enableRefreshShape(); + } + } + } + } + for (let ri = 0; ri < this.editor.search.result.length; ri++) { + let rsData2 = this.editor.search.result[ri]; + if (rsData2 == null ? void 0 : rsData2.model) { + let file = this.editor.files[rsData2.fileIndex]; + if (file) { + let sheetIndex = rsData2.sheetIndex; + if (sheetIndex >= 0) { + if (skipIndex.indexOf(ri) == -1) { + if (!clearSpt) { + let sptStyle = {}; + for (let i2 = 0; i2 < rsData2.len; i2++) { + sptStyle["" + (rsData2.index + i2)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + for (let k = ri + 1; k < this.editor.search.result.length; k++) { + if (this.editor.search.result[k].model == rsData2.model) { + let rsd1 = this.editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + } else { + ri = k - 1; + break; + } + } + (_h = (_g = rsData2.model) == null ? void 0 : _g.render) == null ? void 0 : _h.drawShape({ sptStyle }); + } else { + (_j = (_i = rsData2.model) == null ? void 0 : _i.render) == null ? void 0 : _j.enableRefreshShape(); + } + } + } + } + } + } + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + }, + executeReplace(editor) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_b2 = (_a3 = editor.search) == null ? void 0 : _a3.result) == null ? void 0 : _b2.length) > 0) { + let rsData = (_d2 = editor.search) == null ? void 0 : _d2.result[(_c2 = editor.search) == null ? void 0 : _c2.resultIndex]; + if (rsData.model) { + editor.replaceModelsData([rsData.model], "text", rsData.index, rsData.index + rsData.len, this.replaceText); + for (let k = editor.search.resultIndex + 1; k < ((_e2 = editor.search.result) == null ? void 0 : _e2.length); k++) { + if (editor.search.result[k].model == rsData.model) { + let lenDelta = this.replaceText.length - rsData.len; + if (lenDelta != 0) { + editor.search.result[k].index += lenDelta; + if (editor.search.result[k].index < 0) { + editor.search.result[k].index = 0; + } + } + } else { + break; + } + } + editor.search.result.splice((_f = editor.search) == null ? void 0 : _f.resultIndex, 1); + if (editor.search.result.length > editor.search.resultIndex) { + editor.search.resultIndex--; + if (editor.search.resultIndex < 0) { + editor.search.resultIndex = 0; + } + } + if (editor.search.result.length == 0) { + editor.search.resultIndex = 0; + (_h = (_g = rsData.model) == null ? void 0 : _g.render) == null ? void 0 : _h.clearCachedValue(); + } + } + this.changeFileSheetSelectAndModel(); + let ddInstance = editor.ddInstance; + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } + editor.search.inActive = false; + return true; + }, + executeReplaceAll(editor) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + while (((_b2 = (_a3 = editor.search) == null ? void 0 : _a3.result) == null ? void 0 : _b2.length) > 0) { + let rsData = (_c2 = editor.search) == null ? void 0 : _c2.result[0]; + if (rsData.model) { + editor.replaceModelsData([rsData.model], "text", rsData.index, rsData.index + rsData.len, this.replaceText); + for (let k = 1; k < ((_d2 = editor.search.result) == null ? void 0 : _d2.length); k++) { + if (editor.search.result[k].model == rsData.model) { + let lenDelta = this.replaceText.length - rsData.len; + if (lenDelta != 0) { + editor.search.result[k].index += lenDelta; + if (editor.search.result[k].index < 0) { + editor.search.result[k].index = 0; + } + } + } else { + break; + } + } + editor.search.result.splice((_e2 = editor.search) == null ? void 0 : _e2.resultIndex, 1); + (_g = (_f = rsData.model) == null ? void 0 : _f.render) == null ? void 0 : _g.clearCachedValue(); + } + } + editor.search.resultIndex = -1; + let ddInstance = editor.ddInstance; + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + editor.search.inActive = false; + return true; + }, + changeEditorState() { + this.editor.changeState("ddei-search"); + }, + closeDialog() { + DDeiEditorUtil.closeDialog(this.editor, "ddei-ext-dialog-search", true); + this.changeFileSheetSelectAndModel(true); + this.editor.changeState(DDeiEditorState.DESIGNING); + } + } + }; + const SearchPanel_vue_vue_type_style_index_0_scoped_75611720_lang = ""; + const _hoisted_1$5 = { class: "ddei-ext-panel-search" }; + const _hoisted_2$3 = { + class: "icon", + "aria-hidden": "true" + }; + const _hoisted_3$2 = { + key: 0, + "xlink:href": "#icon-btn-right1" + }; + const _hoisted_4$2 = { + key: 1, + "xlink:href": "#icon-expand2" + }; + const _hoisted_5$2 = { class: "ddei-ext-panel-search-box" }; + const _hoisted_6$2 = ["id", "placeholder"]; + const _hoisted_7$2 = { + class: "icon", + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }; + const _hoisted_8$1 = { + key: 0, + class: "ddei-ext-panel-search-result" + }; + const _hoisted_9$1 = { + key: 1, + class: "ddei-ext-panel-search-result" + }; + const _hoisted_10 = { class: "ddei-ext-panel-search-buttons" }; + const _hoisted_11 = { + key: 2, + class: "ddei-ext-panel-search-box" + }; + const _hoisted_12 = ["id", "placeholder"]; + const _hoisted_13 = { + key: 3, + class: "ddei-ext-panel-search-replace-buttons" + }; + function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-ext-panel-search-mode": true, "ddei-ext-panel-search-mode__expand": ((_a3 = $props.editor.search) == null ? void 0 : _a3.mode) == 2 }), + onClick: _cache[0] || (_cache[0] = (...args) => $options.changeReplace && $options.changeReplace(...args)) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$3, [ + ((_b2 = $props.editor.search) == null ? void 0 : _b2.mode) == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$2)) : vue.createCommentVNode("", true), + ((_c2 = $props.editor.search) == null ? void 0 : _c2.mode) == 2 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$2)) : vue.createCommentVNode("", true) + ])) + ], 2), + vue.createElementVNode("div", _hoisted_5$2, [ + vue.withDirectives(vue.createElementVNode("input", { + class: "ddei-ext-panel-search-box-input", + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $props.editor.search.keywords = $event), + id: $data.searchInputId, + ref: "searchBoxInput", + onKeydown: _cache[2] || (_cache[2] = ($event) => $options.executeQuery($event)), + onFocus: _cache[3] || (_cache[3] = (...args) => $options.changeEditorState && $options.changeEditorState(...args)), + placeholder: $props.editor.i18n("ddei.search"), + autocomplete: "off" + }, null, 40, _hoisted_6$2), [ + [vue.vModelText, $props.editor.search.keywords] + ]), + vue.createElementVNode("div", { + onClick: _cache[4] || (_cache[4] = ($event) => $options.changeMatchCase()), + class: vue.normalizeClass({ "ddei-ext-panel-search-box-btn": true, "ddei-ext-panel-search-box-btn__selected": ((_d2 = $props.editor.search) == null ? void 0 : _d2.matchCase) == 1 }) + }, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$2, _cache[13] || (_cache[13] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-lock-case" }, null, -1) + ]))) + ], 2), + vue.createElementVNode("div", { + onClick: _cache[5] || (_cache[5] = ($event) => $options.changeMatchAll()), + class: vue.normalizeClass({ "ddei-ext-panel-search-box-btn": true, "ddei-ext-panel-search-box-btn__selected": ((_e2 = $props.editor.search) == null ? void 0 : _e2.matchAll) == 1 }) + }, _cache[14] || (_cache[14] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-all-match" }) + ], -1) + ]), 2) + ]), + $props.editor.lang == "zh_CN" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$1, " 第" + vue.toDisplayString(((_f = $props.editor.search) == null ? void 0 : _f.resultIndex) + 1) + "项,共" + vue.toDisplayString((_h = (_g = $props.editor.search) == null ? void 0 : _g.result) == null ? void 0 : _h.length) + "项 ", 1)) : vue.createCommentVNode("", true), + $props.editor.lang != "zh_CN" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, vue.toDisplayString(((_i = $props.editor.search) == null ? void 0 : _i.resultIndex) + 1) + "/" + vue.toDisplayString((_k = (_j = $props.editor.search) == null ? void 0 : _j.result) == null ? void 0 : _k.length), 1)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_10, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-ext-panel-search-buttons-btn": true, "ddei-ext-panel-search-buttons-btn__disabled": !$props.editor.search || ((_l = $props.editor.search) == null ? void 0 : _l.resultIndex) >= ((_n = (_m = $props.editor.search) == null ? void 0 : _m.result) == null ? void 0 : _n.length) - 1 }), + onClick: _cache[6] || (_cache[6] = ($event) => $options.moveToNextResult()) + }, _cache[15] || (_cache[15] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-down" }) + ], -1) + ]), 2), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "ddei-ext-panel-search-buttons-btn": true, "ddei-ext-panel-search-buttons-btn__disabled": !$props.editor.search || ((_o = $props.editor.search) == null ? void 0 : _o.resultIndex) == 0 || ((_q = (_p = $props.editor.search) == null ? void 0 : _p.result) == null ? void 0 : _q.length) == 0 }), + onClick: _cache[7] || (_cache[7] = ($event) => $options.moveToUpResult()) + }, _cache[16] || (_cache[16] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-up" }) + ], -1) + ]), 2), + vue.createElementVNode("div", { + class: "ddei-ext-panel-search-buttons-btn", + onClick: _cache[8] || (_cache[8] = (...args) => $options.closeDialog && $options.closeDialog(...args)) + }, _cache[17] || (_cache[17] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-close" }) + ], -1) + ])) + ]), + ((_r = $props.editor.search) == null ? void 0 : _r.mode) == 2 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11, [ + vue.withDirectives(vue.createElementVNode("input", { + id: $data.replaceInputId, + ref: "searchReplaceBoxInput", + class: "ddei-ext-panel-search-box-input", + "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $data.replaceText = $event), + onFocus: _cache[10] || (_cache[10] = (...args) => $options.changeEditorState && $options.changeEditorState(...args)), + placeholder: $props.editor.i18n("ddei.replace"), + autocomplete: "off" + }, null, 40, _hoisted_12), [ + [vue.vModelText, $data.replaceText] + ]) + ])) : vue.createCommentVNode("", true), + ((_s = $props.editor.search) == null ? void 0 : _s.mode) == 2 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [ + vue.createElementVNode("div", { + class: "ddei-ext-panel-search-replace-buttons-btn", + onClick: _cache[11] || (_cache[11] = ($event) => $options.executeReplace($props.editor)) + }, _cache[18] || (_cache[18] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-replace" }) + ], -1) + ])), + vue.createElementVNode("div", { + class: "ddei-ext-panel-search-replace-buttons-btn", + onClick: _cache[12] || (_cache[12] = ($event) => $options.executeReplaceAll($props.editor)) + }, _cache[19] || (_cache[19] = [ + vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-replace-all" }) + ], -1) + ])) + ])) : vue.createCommentVNode("", true) + ]); + } + const SearchPanel = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$5], ["__scopeId", "data-v-75611720"]]); + const _sfc_main$4 = { + name: "ddei-ext-dialog-search", + extends: null, + mixins: [DialogBase$1], + props: { + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-ext-dialog-search" + }; + }, + computed: {}, + components: { SearchPanel }, + watch: {}, + created() { + }, + mounted() { + }, + methods: {} + }; + const SearchDialog_vue_vue_type_style_index_0_scoped_869178bc_lang = ""; + const _hoisted_1$4 = ["id"]; + function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + const _component_SearchPanel = vue.resolveComponent("SearchPanel"); + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-ext-dialog-search" + }, [ + vue.createVNode(_component_SearchPanel, { + editor: _ctx.editor, + options: $props.options + }, null, 8, ["editor", "options"]) + ], 8, _hoisted_1$4)) : vue.createCommentVNode("", true); + } + const SearchDialog = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-869178bc"]]); + const _DDeiExtSearchDialog = class _DDeiExtSearchDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SearchDialog.name); + __publicField3(this, "plugins", [SearchDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static modify(fn) { + return _DDeiExtSearchDialog.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[AlignDialog.name]) { + for (let i2 in options[AlignDialog.name]) { + newOptions[i2] = options[AlignDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtSearchDialog(newOptions); + return panels; + } + } + return _DDeiExtSearchDialog; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtSearchDialog, "defaultIns", new _DDeiExtSearchDialog(null)); + let DDeiExtSearchDialog = _DDeiExtSearchDialog; + const _DDeiExtSearchPanel = class _DDeiExtSearchPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", SearchPanel.name); + __publicField3(this, "plugins", [SearchPanel]); + } + getPanels(editor) { + return this.plugins; + } + static modify(fn) { + return _DDeiExtSearchPanel.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChangeRatio.name]) { + for (let i2 in options[ChangeRatio.name]) { + newOptions[i2] = options[ChangeRatio.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtSearchPanel(newOptions); + return panels; + } + } + return _DDeiExtSearchPanel; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtSearchPanel, "defaultIns", new _DDeiExtSearchPanel(null)); + let DDeiExtSearchPanel = _DDeiExtSearchPanel; + const _DDeiKeyActionSearch = class _DDeiKeyActionSearch extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-keyaction-search"); + __publicField3(this, "defaultOptions", { + "keys": [ + { ctrl: 1, keys: "70", type: "search" }, + { ctrl: 1, keys: "72", type: "replace" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static modify(fn) { + return _DDeiKeyActionSearch.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionSearch.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionSearch.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionSearch.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionSearch(newOptions); + return panels; + } + } + return _DDeiKeyActionSearch; + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor, item) { + var _a3; + let mode = 1; + if ((item == null ? void 0 : item.type) == "replace" && ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + mode = 2; + } + if (!editor.search) { + editor.search = { + resultIndex: -1, + result: [] + }; + } + editor.search.mode = mode; + if (!editor.tempPopData || !editor.tempPopData["ddei-ext-dialog-search"]) { + let srcElement = document.getElementById(editor.id + "_canvas"); + if (srcElement) { + let editor2 = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + DDeiEditorUtil.closeDialog(editor2, "ddei-ext-dialog-search", true); + let editorEle = document.getElementById(editor2.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let canvasPos = DDeiUtil.getDomAbsPosition(srcElement); + let left = canvasPos.left - editorDomPos.left + srcElement.offsetWidth - 500; + let top = canvasPos.top - editorDomPos.top; + if ((_a3 = editor2.search) == null ? void 0 : _a3.result) { + editor2.search.inActive = true; + } + DDeiEditorUtil.showDialog(editor2, "ddei-ext-dialog-search", { + group: "ddei-core-search" + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + editor2.changeState("ddei-search"); + } + } else { + if (mode == 2) { + let searchReplaceInput = document.getElementById(editor.id + "_search_replace_input"); + if (searchReplaceInput) { + searchReplaceInput.focus(); + editor.search.inActive = false; + editor.changeState("ddei-search"); + } + } else { + let searchInput = document.getElementById(editor.id + "_search_input"); + if (searchInput) { + searchInput.focus(); + editor.search.inActive = false; + editor.changeState("ddei-search"); + } + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionSearch, "defaultIns", new _DDeiKeyActionSearch()); + let DDeiKeyActionSearch = _DDeiKeyActionSearch; + const _DDeiKeyActionSearchUp = class _DDeiKeyActionSearchUp extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-keyaction-search-up"); + __publicField3(this, "defaultOptions", { + "keys": [ + { shift: 1, keys: "13", editorState: "ddei-search" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionSearchUp.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionSearchUp.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionSearchUp.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionSearchUp(newOptions); + return panels; + } + } + return _DDeiKeyActionSearchUp; + } + static modify(fn) { + return _DDeiKeyActionSearchUp.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + var _a3; + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-search"]) { + if (!((_a3 = editor.search) == null ? void 0 : _a3.inActive)) { + if (editor.search.resultIndex <= 0) { + return; + } + editor.search.resultIndex--; + this.changeFileSheetSelectAndModel(editor); + } else { + editor.search.inActive = false; + } + } + } + changeFileSheetSelectAndModel(editor) { + var _a3, _b2, _c2, _d2, _e2, _f; + editor.search.inActive = false; + if (editor.search.resultIndex >= editor.search.result.length - 1) { + editor.search.resultIndex = editor.search.result.length - 1; + } else if (editor.search.resultIndex < 0) { + editor.search.resultIndex = 0; + } + let ddInstance = editor.ddInstance; + let rsData = editor.search.result[editor.search.resultIndex]; + let skipIndex = [editor.search.resultIndex]; + let textSelectColor = DDeiUtil.getStyleValue("canvas-text-selection", editor.ddInstance); + if (rsData == null ? void 0 : rsData.model) { + let file = editor.files[rsData.fileIndex]; + if (file) { + let sheetIndex = rsData.sheetIndex; + if (sheetIndex >= 0) { + editor.changeFile(rsData.fileIndex, sheetIndex); + editor.centerModels(ddInstance.stage, rsData.model.id); + (_b2 = (_a3 = rsData.model) == null ? void 0 : _a3.render) == null ? void 0 : _b2.controlSelect(); + let sptStyle = {}; + for (let i2 = 0; i2 < rsData.len; i2++) { + sptStyle["" + (rsData.index + i2)] = { textStyle: { bgcolor: textSelectColor } }; + } + for (let k = editor.search.resultIndex - 1; k > 0; k--) { + if (editor.search.result[k].model == rsData.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + for (let k = editor.search.resultIndex + 1; k < editor.search.result.length; k++) { + if (editor.search.result[k].model == rsData.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + (_d2 = (_c2 = rsData.model) == null ? void 0 : _c2.render) == null ? void 0 : _d2.drawShape({ border: { type: 1, color: "#017fff", width: 1, dash: [10, 10] }, sptStyle }); + } + } + } + for (let ri = 0; ri < editor.search.result.length; ri++) { + let rsData2 = editor.search.result[ri]; + if (rsData2 == null ? void 0 : rsData2.model) { + let file = editor.files[rsData2.fileIndex]; + if (file) { + let sheetIndex = rsData2.sheetIndex; + if (sheetIndex >= 0) { + if (skipIndex.indexOf(ri) == -1) { + let sptStyle = {}; + for (let i2 = 0; i2 < rsData2.len; i2++) { + sptStyle["" + (rsData2.index + i2)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + for (let k = ri + 1; k < editor.search.result.length; k++) { + if (editor.search.result[k].model == rsData2.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + } else { + ri = k - 1; + break; + } + } + (_f = (_e2 = rsData2.model) == null ? void 0 : _e2.render) == null ? void 0 : _f.drawShape({ sptStyle }); + } + } + } + } + } + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionSearchUp, "defaultIns", new _DDeiKeyActionSearchUp()); + let DDeiKeyActionSearchUp = _DDeiKeyActionSearchUp; + const _DDeiKeyActionSearchNext = class _DDeiKeyActionSearchNext extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-core-keyaction-search-next"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "13", editorState: "ddei-search" }, + { ctrl: 1, keys: "13", editorState: "ddei-search", type: "replaceAll" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionSearchNext.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionSearchNext.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionSearchNext.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionSearchNext(newOptions); + return panels; + } + } + return _DDeiKeyActionSearchNext; + } + static modify(fn) { + return _DDeiKeyActionSearchNext.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor, item) { + var _a3; + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-search"]) { + if (!((_a3 = editor.search) == null ? void 0 : _a3.inActive)) { + if (editor.search.resultIndex >= editor.search.result.length - 1) { + return; + } + let replaceInput = document.getElementById(editor.id + "_search_replace_input"); + if (replaceInput && document.activeElement == replaceInput && ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + if ((item == null ? void 0 : item.type) == "replaceAll") { + this.executeReplaceAll(editor, replaceInput); + return; + } else { + this.executeReplace(editor, replaceInput); + } + } + editor.search.resultIndex++; + this.changeFileSheetSelectAndModel(editor); + } else { + editor.search.inActive = false; + } + } + } + executeReplace(editor, textInput) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h; + if (((_b2 = (_a3 = editor.search) == null ? void 0 : _a3.result) == null ? void 0 : _b2.length) > 0) { + let rsData = (_d2 = editor.search) == null ? void 0 : _d2.result[(_c2 = editor.search) == null ? void 0 : _c2.resultIndex]; + if (rsData.model) { + editor.replaceModelsData([rsData.model], "text", rsData.index, rsData.index + rsData.len, textInput.value); + for (let k = editor.search.resultIndex + 1; k < ((_e2 = editor.search.result) == null ? void 0 : _e2.length); k++) { + if (editor.search.result[k].model == rsData.model) { + let lenDelta = textInput.value.length - rsData.len; + if (lenDelta != 0) { + editor.search.result[k].index += lenDelta; + if (editor.search.result[k].index < 0) { + editor.search.result[k].index = 0; + } + } + } else { + break; + } + } + editor.search.result.splice((_f = editor.search) == null ? void 0 : _f.resultIndex, 1); + if (editor.search.result.length > editor.search.resultIndex) { + editor.search.resultIndex--; + if (editor.search.resultIndex < 0) { + editor.search.resultIndex = 0; + } + } + if (editor.search.result.length == 0) { + editor.search.resultIndex = 0; + (_h = (_g = rsData.model) == null ? void 0 : _g.render) == null ? void 0 : _h.clearCachedValue(); + } + } + } + } + changeFileSheetSelectAndModel(editor) { + var _a3, _b2, _c2, _d2, _e2, _f; + editor.search.inActive = false; + if (editor.search.resultIndex >= editor.search.result.length - 1) { + editor.search.resultIndex = editor.search.result.length - 1; + } else if (editor.search.resultIndex < 0) { + editor.search.resultIndex = 0; + } + let ddInstance = editor.ddInstance; + let rsData = editor.search.result[editor.search.resultIndex]; + let skipIndex = [editor.search.resultIndex]; + let textSelectColor = DDeiUtil.getStyleValue("canvas-text-selection", editor.ddInstance); + if (rsData == null ? void 0 : rsData.model) { + let file = editor.files[rsData.fileIndex]; + if (file) { + let sheetIndex = rsData.sheetIndex; + if (sheetIndex >= 0) { + editor.changeFile(rsData.fileIndex, sheetIndex); + editor.centerModels(ddInstance.stage, rsData.model.id); + (_b2 = (_a3 = rsData.model) == null ? void 0 : _a3.render) == null ? void 0 : _b2.controlSelect(); + let sptStyle = {}; + for (let i2 = 0; i2 < rsData.len; i2++) { + sptStyle["" + (rsData.index + i2)] = { textStyle: { bgcolor: textSelectColor } }; + } + for (let k = editor.search.resultIndex - 1; k > 0; k--) { + if (editor.search.result[k].model == rsData.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + for (let k = editor.search.resultIndex + 1; k < editor.search.result.length; k++) { + if (editor.search.result[k].model == rsData.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + skipIndex.push(k); + } else { + break; + } + } + (_d2 = (_c2 = rsData.model) == null ? void 0 : _c2.render) == null ? void 0 : _d2.drawShape({ border: { type: 1, color: "#017fff", width: 1, dash: [10, 10] }, sptStyle }); + } + } + } + for (let ri = 0; ri < editor.search.result.length; ri++) { + let rsData2 = editor.search.result[ri]; + if (rsData2 == null ? void 0 : rsData2.model) { + let file = editor.files[rsData2.fileIndex]; + if (file) { + let sheetIndex = rsData2.sheetIndex; + if (sheetIndex >= 0) { + if (skipIndex.indexOf(ri) == -1) { + let sptStyle = {}; + for (let i2 = 0; i2 < rsData2.len; i2++) { + sptStyle["" + (rsData2.index + i2)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + for (let k = ri + 1; k < editor.search.result.length; k++) { + if (editor.search.result[k].model == rsData2.model) { + let rsd1 = editor.search.result[k]; + for (let ki = 0; ki < rsd1.len; ki++) { + sptStyle["" + (rsd1.index + ki)] = { textStyle: { bgcolor: "#ebebeb" } }; + } + } else { + ri = k - 1; + break; + } + } + (_f = (_e2 = rsData2.model) == null ? void 0 : _e2.render) == null ? void 0 : _f.drawShape({ sptStyle }); + } + } + } + } + } + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + executeReplaceAll(editor, textInput) { + var _a3, _b2, _c2, _d2, _e2, _f, _g; + while (((_b2 = (_a3 = editor.search) == null ? void 0 : _a3.result) == null ? void 0 : _b2.length) > 0) { + let rsData = (_c2 = editor.search) == null ? void 0 : _c2.result[0]; + if (rsData.model) { + editor.replaceModelsData([rsData.model], "text", rsData.index, rsData.index + rsData.len, textInput.value); + for (let k = 1; k < ((_d2 = editor.search.result) == null ? void 0 : _d2.length); k++) { + if (editor.search.result[k].model == rsData.model) { + let lenDelta = textInput.value.length - rsData.len; + if (lenDelta != 0) { + editor.search.result[k].index += lenDelta; + if (editor.search.result[k].index < 0) { + editor.search.result[k].index = 0; + } + } + } else { + break; + } + } + editor.search.result.splice((_e2 = editor.search) == null ? void 0 : _e2.resultIndex, 1); + (_g = (_f = rsData.model) == null ? void 0 : _f.render) == null ? void 0 : _g.clearCachedValue(); + } + } + editor.search.resultIndex = -1; + let ddInstance = editor.ddInstance; + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionSearchNext, "defaultIns", new _DDeiKeyActionSearchNext()); + let DDeiKeyActionSearchNext = _DDeiKeyActionSearchNext; + const _DDeiKeyActionSearchEsc = class _DDeiKeyActionSearchEsc extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-keyaction-search-esc"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "27" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionSearchEsc.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionSearchEsc.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionSearchEsc.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionSearchEsc(newOptions); + return panels; + } + } + return _DDeiKeyActionSearchEsc; + } + static modify(fn) { + return _DDeiKeyActionSearchEsc.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + var _a3, _b2; + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-search"]) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-search", true); + if (editor.search.resultIndex >= editor.search.result.length - 1) { + editor.search.resultIndex = editor.search.result.length - 1; + } else if (editor.search.resultIndex < 0) { + editor.search.resultIndex = 0; + } + let rsData = editor.search.result[editor.search.resultIndex]; + if (rsData == null ? void 0 : rsData.model) { + (_b2 = (_a3 = rsData.model) == null ? void 0 : _a3.render) == null ? void 0 : _b2.enableRefreshShape(); + ddInstance.bus.push(DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, {}); + ddInstance.bus.executeAll(); + } + editor.changeState(DDeiEditorState.DESIGNING); + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionSearchEsc, "defaultIns", new _DDeiKeyActionSearchEsc()); + let DDeiKeyActionSearchEsc = _DDeiKeyActionSearchEsc; + const _DDeiExtSearchHotkeys = class _DDeiExtSearchHotkeys extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiKeyActionSearch, DDeiKeyActionSearchUp, DDeiKeyActionSearchNext, DDeiKeyActionSearchEsc]); + } + getHotKeys(editor) { + var _a3; + let hotkeys = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getHotKeys(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getHotKeys(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + hotkeys = hotkeys.concat(ls); + } + }); + return hotkeys; + } + static modify(fn) { + return _DDeiExtSearchHotkeys.defaultIns.modify(fn); + } + static configuration(options) { + var _a3; + let hotkeys = new _DDeiExtSearchHotkeys(options); + for (let i2 = 0; i2 < ((_a3 = hotkeys.plugins) == null ? void 0 : _a3.length); i2++) { + hotkeys.plugins[i2] = hotkeys.plugins[i2].configuration(options, true); + } + return hotkeys; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtSearchHotkeys, "defaultIns", new _DDeiExtSearchHotkeys(null)); + let DDeiExtSearchHotkeys = _DDeiExtSearchHotkeys; + let DDeiExtSearchLifeCycle$1 = (_a2 = class extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "search-ext-lifecycle"); + __publicField3(this, "EVENT_MOUSE_OPERATING", new DDeiFuncData("search-ext-hidden", 1, this.mouseOperating)); + } + /** + * 正在进行鼠标操作 + */ + mouseOperating(operateType, data, ddInstance, evt) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-search"]) { + DDeiEditorUtil.hiddenDialog(editor, "ddei-ext-dialog-search"); + if (operateType == "SCROLL_WORKING" || operateType == "CHANGE_RATIO" || operateType == "SELECT_WORKING" || operateType == "DRAG" || operateType == "CREATE" || operateType == "CHANGE_WPV" || operateType == "CHANGE_BOUNDS" || operateType == "CHANGE_ROTATE") { + _a2.displaySearchDialog(editor); + } + } + } + static displaySearchDialog(editor) { + let srcElement = document.getElementById(editor.id + "_canvas"); + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let canvasPos = DDeiUtil.getDomAbsPosition(srcElement); + let left = canvasPos.left - editorDomPos.left + srcElement.offsetWidth - 500; + let top = canvasPos.top - editorDomPos.top; + DDeiEditorUtil.displayDialog(editor, "ddei-ext-dialog-search", null, { type: 99, left, top, hiddenMask: true }); + } + static modify(fn) { + return _a2.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_a2.name]) { + for (let i2 in options[_a2.name]) { + newOptions[i2] = options[_a2.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _a2(); + if (newOptions.name) { + panels.name = newOptions.name; + } + if (newOptions.sort) { + panels.sort = newOptions.sort; + } + return panels; + } + } + return _a2; + } + }, /** + * 缺省实例 + */ + __publicField3(_a2, "defaultIns", new _a2(null)), _a2.displaySearchDialog = debounce(_a2.displaySearchDialog, 300), _a2); + const DialogBase = { + props: { + editor: { + type: DDeiEditor, + default: null + } + }, + data: function() { + return { + forceRefresh: false + }; + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + } + }; + const _sfc_main$3 = { + name: "ddei-ext-panel-quickcontrol", + extends: null, + mixins: [], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + leftOffset: null, + rightOffset: null, + topOffset: null, + bottomOffset: null, + //四个方向的状态,0无连线,1有连线 + leftState: 0, + rightState: 0, + bottomState: 0, + topState: 0 + }; + }, + computed: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2, _c2, _d2, _e2; + if (this.editor.tempPopData && this.editor.tempPopData["ddei-ext-dialog-quickcontrol"] && this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].model) { + let model = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].model; + if (model) { + let outRect = DDeiAbstractShape.getOutRectByPV([model]); + let stageRatio2 = (_a3 = model.stage) == null ? void 0 : _a3.getStageRatio(); + outRect.x *= stageRatio2; + outRect.x1 *= stageRatio2; + outRect.y *= stageRatio2; + outRect.y1 *= stageRatio2; + outRect.width *= stageRatio2; + outRect.height *= stageRatio2; + let width = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].width; + width = width || width == 0 ? width : 40; + let height = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].height; + height = height || height == 0 ? height : 40; + this.$refs.quickControlDiv.style.width = outRect.width + width + "px"; + this.$refs.quickControlDiv.style.height = outRect.height + height + "px"; + this.leftOffset = (_b2 = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].offset) == null ? void 0 : _b2.left; + this.rightOffset = (_c2 = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].offset) == null ? void 0 : _c2.right; + this.topOffset = (_d2 = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].offset) == null ? void 0 : _d2.top; + this.bottomOffset = (_e2 = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].offset) == null ? void 0 : _e2.bottom; + for (let i2 in model.exPvs) { + let mlPoint = model.exPvs[i2]; + if (parseInt(mlPoint.y) == parseInt(outRect.y)) { + this.topState = 1; + } else if (parseInt(mlPoint.x) == parseInt(outRect.x1)) { + this.rightState = 1; + } else if (parseInt(mlPoint.y) == parseInt(outRect.y1)) { + this.bottomState = 1; + } else if (parseInt(mlPoint.x) == parseInt(outRect.x)) { + this.leftState = 1; + } + } + } + } + }, + mouseEnter(type, el, evt) { + if (this.editor.state == "designing") { + if (this.editor.tempPopData["ddei-ext-dialog-quickcontrol"]) { + let existsControl = null; + let model = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].model; + let layer2 = model.layer; + let outRect = DDeiAbstractShape.getOutRectByPV([model]); + if (type == 1) { + let controls2 = layer2.getSubModels([model.id], 100, { x: outRect.x, y: outRect.y - 150, x1: outRect.x1, y1: outRect.y }); + controls2 = this.filtControls(model, controls2); + if (controls2.length > 0) { + existsControl = controls2[0]; + } + } else if (type == 2) { + let controls2 = layer2.getSubModels([model.id], 100, { x: outRect.x1, y: outRect.y, x1: outRect.x1 + 150, y1: outRect.y1 }); + controls2 = this.filtControls(model, controls2); + if (controls2.length > 0) { + existsControl = controls2[0]; + } + } else if (type == 3) { + let controls2 = layer2.getSubModels([model.id], 100, { x: outRect.x, y: outRect.y1, x1: outRect.x1, y1: outRect.y1 + 150 }); + controls2 = this.filtControls(model, controls2); + if (controls2.length > 0) { + existsControl = controls2[0]; + } + } else if (type == 4) { + let controls2 = layer2.getSubModels([model.id], 100, { x: outRect.x - 150, y: outRect.y, x1: outRect.x, y1: outRect.y1 }); + controls2 = this.filtControls(model, controls2); + if (controls2.length > 0) { + existsControl = controls2[0]; + } + } + if (!existsControl) { + if (this.editor.tempLineModel) { + this.editor.ddInstance.stage.removeModel(this.editor.tempLineModel, true); + delete this.editor.tempLineModel; + } + let editorEle = document.getElementById(this.editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition([model]); + let width = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].width; + width = width || width == 0 ? width : 40; + let height = this.editor.tempPopData["ddei-ext-dialog-quickcontrol"].height; + height = height || height == 0 ? height : 40; + if (model.state == DDeiEnumControlState.SELECTED) { + height = 70; + } + let left = modelPos.left - editorDomPos.left - width / 2; + let top = modelPos.top - editorDomPos.top - height / 2; + let qcWidth = modelPos.width + width; + let qcHeight = modelPos.height + height; + if (type == 1) { + left = left + qcWidth / 2 - 120; + top = top - 240; + } else if (type == 2) { + left = left + qcWidth; + top = top + qcHeight / 2 - 120; + } else if (type == 3) { + left = left + qcWidth / 2 - 120; + top = top + qcHeight; + } else if (type == 4) { + left = left - 240; + top = top + qcHeight / 2 - 120; + } + if (model.state == DDeiEnumControlState.SELECTED) { + top -= 10; + } + DDeiEditorUtil.showDialog(this.editor, "ddei-ext-dialog-quickchoosecontrol", { + group: "canvas-pop-quickcreatecontrol", + type, + model + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } else if (!this.editor.tempLineModel) { + let outRect1 = DDeiAbstractShape.getOutRectByPV([existsControl]); + let sx, sy, ex, ey; + let startSita, endSita; + if (type == 1) { + sx = (outRect.x + outRect.x1) / 2; + sy = outRect.y; + ex = (outRect1.x + outRect1.x1) / 2; + ey = outRect1.y1; + startSita = -90; + endSita = 90; + } else if (type == 2) { + sx = outRect.x1; + sy = (outRect.y + outRect.y1) / 2; + ex = outRect1.x; + ey = (outRect1.y + outRect1.y1) / 2; + startSita = 0; + endSita = 180; + } else if (type == 3) { + sx = (outRect.x + outRect.x1) / 2; + sy = outRect.y1; + ex = (outRect1.x + outRect1.x1) / 2; + ey = outRect1.y; + startSita = 90; + endSita = -90; + } else if (type == 4) { + sx = outRect.x; + sy = (outRect.y + outRect.y1) / 2; + ex = outRect1.x1; + ey = (outRect1.y + outRect1.y1) / 2; + startSita = 180; + endSita = 0; + } + let smodel = { id: model.id, x: sx, y: sy, rate: 0.5, sita: startSita }; + let emodel = { id: existsControl.id, x: ex, y: ey, rate: 0.5, sita: endSita }; + let initLine = DDeiEditorUtil.getLineInitJSON(this.editor.ddInstance, smodel, emodel); + if (initLine) { + let initJson = clone(initLine); + initJson.model = initLine.modelCode ? initLine.modelCode : initLine.model ? initLine.model : initLine.id ? initLine.id : "100401"; + if (!initJson.type) { + initJson.type = 2; + } + if (!initJson.dash) { + initJson.dash = [10, 5]; + this.lockDash = false; + } else { + this.lockDash = true; + } + if (!initJson.startPoint) { + initJson.startPoint = { x: sx, y: sy }; + } + if (!initJson.endPoint) { + initJson.endPoint = { x: ex, y: ey }; + } + if (!initJson.smodel) { + initJson.smodel = smodel; + } + if (!initJson.emodel) { + initJson.emodel = emodel; + } + let lines = this.editor.addLines([ + initJson + ], true, true, false); + this.editor.tempLineModel = lines[0]; + DDeiEditorUtil.closeDialog(this.editor, "ddei-ext-dialog-quickchoosecontrol", true); + this.editor.bus.push(DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + } + } + } + } + }, + createLineOk() { + var _a3; + if (this.editor.tempLineModel) { + if (!this.lockDash) { + delete this.editor.tempLineModel.dash; + } + delete this.lockDash; + (_a3 = this.editor.tempLineModel.render) == null ? void 0 : _a3.clearCachedValue(); + delete this.editor.tempLineModel; + this.refreshData(); + } + }, + mouseleave() { + if (this.editor.tempLineModel) { + this.editor.ddInstance.stage.removeModel(this.editor.tempLineModel, true); + delete this.editor.tempLineModel; + } + }, + filtControls(model, controls2) { + let returnControls = []; + if ((controls2 == null ? void 0 : controls2.length) > 0) { + for (let i2 = 0; i2 < controls2.length; i2++) { + if (controls2[i2].baseModelType != "DDeiLine" && controls2[i2].depModel != model) { + let define2 = DDeiUtil.getControlDefine(controls2[i2]); + let filterMethod = null; + if (define2 && define2.filters && define2.filters["LINE_OBI_FILTER"]) { + filterMethod = define2.filters["LINE_OBI_FILTER"]; + } + if (!filterMethod || filterMethod(model, { model: controls2[i2] })) { + returnControls.push(controls2[i2]); + } + } + } + } + return returnControls; + } + } + }; + const QuickControlPanel_vue_vue_type_style_index_0_scoped_dd1c62d6_lang = ""; + const _hoisted_1$3 = { + class: "ddei-ext-panel-quickcontrol", + ref: "quickControlDiv" + }; + const _hoisted_2$2 = { class: "ddei-ext-panel-quickcontrol-middle" }; + function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [ + vue.createElementVNode("div", { + class: "ddei-ext-panel-quickcontrol-left", + style: vue.normalizeStyle($data.leftOffset) + }, [ + $data.leftState != 1 ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + width: "16", + height: "11", + onMouseenter: _cache[0] || (_cache[0] = ($event) => $options.mouseEnter(4, _ctx.$el, $event)), + onMousedown: _cache[1] || (_cache[1] = (...args) => $options.createLineOk && $options.createLineOk(...args)), + onMouseleave: _cache[2] || (_cache[2] = (...args) => $options.mouseleave && $options.mouseleave(...args)), + style: { "transform": "rotate(-90deg)" } + }, _cache[12] || (_cache[12] = [ + vue.createElementVNode("polygon", { points: "8,0 1,10 15,10" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true) + ], 4), + vue.createElementVNode("div", _hoisted_2$2, [ + vue.createElementVNode("div", { + class: "ddei-ext-panel-quickcontrol-middle-top", + style: vue.normalizeStyle($data.topOffset) + }, [ + $data.topState != 1 ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + width: "16", + height: "11", + onMouseenter: _cache[3] || (_cache[3] = ($event) => $options.mouseEnter(1, _ctx.$el, $event)), + onMouseleave: _cache[4] || (_cache[4] = (...args) => $options.mouseleave && $options.mouseleave(...args)), + onMousedown: _cache[5] || (_cache[5] = (...args) => $options.createLineOk && $options.createLineOk(...args)) + }, _cache[13] || (_cache[13] = [ + vue.createElementVNode("polygon", { points: "8,0 1,10 15,10" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true) + ], 4), + _cache[15] || (_cache[15] = vue.createElementVNode("div", { class: "ddei-ext-panel-quickcontrol-middle-middle" }, null, -1)), + vue.createElementVNode("div", { + class: "ddei-ext-panel-quickcontrol-middle-bottom", + style: vue.normalizeStyle($data.bottomOffset) + }, [ + $data.bottomState != 1 ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + width: "16", + height: "11", + onMouseenter: _cache[6] || (_cache[6] = ($event) => $options.mouseEnter(3, _ctx.$el, $event)), + onMouseleave: _cache[7] || (_cache[7] = (...args) => $options.mouseleave && $options.mouseleave(...args)), + onMousedown: _cache[8] || (_cache[8] = (...args) => $options.createLineOk && $options.createLineOk(...args)), + style: { "transform": "rotate(180deg)" } + }, _cache[14] || (_cache[14] = [ + vue.createElementVNode("polygon", { points: "8,0 1,10 15,10" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true) + ], 4) + ]), + vue.createElementVNode("div", { + class: "ddei-ext-panel-quickcontrol-right", + style: vue.normalizeStyle($data.rightOffset) + }, [ + $data.rightState != 1 ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 0, + width: "16", + height: "11", + onMouseenter: _cache[9] || (_cache[9] = ($event) => $options.mouseEnter(2, _ctx.$el, $event)), + onMouseleave: _cache[10] || (_cache[10] = (...args) => $options.mouseleave && $options.mouseleave(...args)), + onMousedown: _cache[11] || (_cache[11] = (...args) => $options.createLineOk && $options.createLineOk(...args)), + style: { "transform": "rotate(90deg)" } + }, _cache[16] || (_cache[16] = [ + vue.createElementVNode("polygon", { points: "8,0 1,10 15,10" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true) + ], 4) + ], 512); + } + const QuickControlPanel = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3], ["__scopeId", "data-v-dd1c62d6"]]); + const _sfc_main$2 = { + name: "ddei-ext-dialog-quickcontrol", + extends: null, + mixins: [DialogBase], + props: { + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-ext-dialog-quickcontrol" + }; + }, + computed: {}, + components: { QuickControlPanel }, + watch: {}, + created() { + }, + mounted() { + }, + methods: {} + }; + const QuickControlDialog_vue_vue_type_style_index_0_scoped_737aeea8_lang = ""; + const _hoisted_1$2 = ["id"]; + function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + const _component_QuickControlPanel = vue.resolveComponent("QuickControlPanel"); + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-ext-dialog-quickcontrol" + }, [ + vue.createVNode(_component_QuickControlPanel, vue.mergeProps({ editor: _ctx.editor }, $props.options, { options: $props.options }), null, 16, ["editor", "options"]) + ], 8, _hoisted_1$2)) : vue.createCommentVNode("", true); + } + const QuickControlDialog = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-737aeea8"]]); + const _DDeiExtQuickControlDialog = class _DDeiExtQuickControlDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QuickControlDialog.name); + __publicField3(this, "plugins", [QuickControlDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[AlignDialog.name]) { + for (let i2 in options[AlignDialog.name]) { + newOptions[i2] = options[AlignDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtQuickControlDialog(newOptions); + return panels; + } + } + return _DDeiExtQuickControlDialog; + } + static modify(fn) { + return _DDeiExtQuickControlDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickControlDialog, "defaultIns", new _DDeiExtQuickControlDialog(null)); + let DDeiExtQuickControlDialog = _DDeiExtQuickControlDialog; + const _sfc_main$1 = { + name: "ddei-ext-dialog-quickchoosecontrol", + extends: null, + mixins: [DialogBase], + props: { + options: { + type: Object, + default: null + }, + //定义分组 + customGroups: { + type: Array, + default: null + }, + //定义控件 + customControls: { + type: Array, + default: null + } + }, + data() { + return { + dialogId: "ddei-ext-dialog-quickchoosecontrol", + //分组数据 + groups: [], + model: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.refreshData(); + }, + methods: { + refreshData() { + var _a3, _b2; + let groups = this.editor.groups; + if (this.customControls) { + let controls2 = []; + let gps = [{ display: true, controls: controls2 }]; + let hasControlids = {}; + groups.forEach((group2) => { + var _a4; + (_a4 = group2 == null ? void 0 : group2.controls) == null ? void 0 : _a4.forEach((control) => { + if (!hasControlids[control.id] && this.customControls.indexOf(control.id) != -1) { + hasControlids[control.id] = true; + controls2.push(control); + } + }); + }); + this.groups = gps; + } else if (this.customGroups) { + let newGroups = []; + (_a3 = this.customGroups) == null ? void 0 : _a3.forEach((cg) => { + for (let i2 = 0; i2 < groups.length; i2++) { + if (groups[i2].id == cg) { + newGroups.push(groups[i2]); + break; + } + } + }); + this.groups = newGroups; + } else { + let model = this.editor.tempPopData ? (_b2 = this.editor.tempPopData["ddei-ext-dialog-quickchoosecontrol"]) == null ? void 0 : _b2.model : null; + if (!model) { + DDeiEditorUtil.readRecentlyToolGroups(); + let hisGroups = DDeiEditorUtil.recentlyToolGroups; + let gps = []; + if ((hisGroups == null ? void 0 : hisGroups.length) > 0) { + hisGroups.forEach((hg) => { + let group2 = null; + for (let i2 = 0; i2 < groups.length; i2++) { + if (groups[i2].id == hg.id) { + group2 = groups[i2]; + break; + } + } + if (group2) { + group2.expand = hg.expand; + gps.push(group2); + } + }); + this.groups = gps; + } + } else { + let newGroups = []; + for (let i2 = 0; i2 < groups.length; i2++) { + let finded = false; + for (let c = 0; c < groups[i2].controls.length; c++) { + if (groups[i2].controls[c].id == model.modelCode) { + finded = true; + break; + } + } + if (finded) { + newGroups.push(groups[i2]); + break; + } + } + this.model = model; + this.groups = newGroups; + } + } + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + }); + }, + quickCreateControl(controlId) { + if (controlId && this.editor.tempPopData["ddei-ext-dialog-quickchoosecontrol"]) { + let model = this.editor.tempPopData["ddei-ext-dialog-quickchoosecontrol"].model; + let type = this.editor.tempPopData["ddei-ext-dialog-quickchoosecontrol"].type; + if (model) { + let outRect = DDeiAbstractShape.getOutRectByPV([model]); + let controlInitJSON = DDeiEditorUtil.getModelInitJSON(this.editor.ddInstance, model, [ + { + model: controlId + } + ]); + if (controlInitJSON) { + let controls2 = this.editor.addControls(controlInitJSON, true, false, true); + if ((controls2 == null ? void 0 : controls2.length) > 0) { + let outRect1 = DDeiAbstractShape.getOutRectByPV(controls2); + let x2, y2, sx, sy, ex, ey; + let startSita, endSita; + let weight = 60; + if (type == 1) { + x2 = (outRect.x + outRect.x1) / 2; + y2 = outRect.y - weight - outRect1.height / 2; + sx = x2; + sy = outRect.y; + ex = x2; + ey = y2 + outRect1.height / 2; + startSita = -90; + endSita = 90; + } else if (type == 2) { + x2 = outRect.x1 + weight + outRect1.width / 2, y2 = (outRect.y1 + outRect.y) / 2; + sx = outRect.x1; + sy = y2; + ex = x2 - outRect1.width / 2; + ey = y2; + startSita = 0; + endSita = 180; + } else if (type == 3) { + x2 = (outRect.x + outRect.x1) / 2, y2 = outRect.y1 + weight + outRect1.height / 2; + sx = x2; + sy = outRect.y1; + ex = x2; + ey = y2 - outRect1.height / 2; + startSita = 90; + endSita = -90; + } else if (type == 4) { + x2 = outRect.x - weight - outRect1.width / 2; + y2 = (outRect.y1 + outRect.y) / 2; + sx = outRect.x; + sy = y2; + ex = x2 + outRect1.width / 2; + ey = y2; + startSita = 180; + endSita = 0; + } + controls2[0].setPosition({ x: x2, y: y2 }); + let smodel = { id: model.id, x: sx, y: sy, rate: 0.5, sita: startSita }; + let emodel = { id: controls2[0].id, x: ex, y: ey, rate: 0.5, sita: endSita }; + let initLine = DDeiEditorUtil.getLineInitJSON(this.editor.ddInstance, smodel, emodel); + let lines = null; + if (initLine) { + let initJson = clone(initLine); + initJson.model = initLine.modelCode ? initLine.modelCode : initLine.model ? initLine.model : initLine.id ? initLine.id : "100401"; + if (!initJson.type) { + initJson.type = 2; + } + if (!initJson.startPoint) { + initJson.startPoint = { x: sx, y: sy }; + } + if (!initJson.endPoint) { + initJson.endPoint = { x: ex, y: ey }; + } + if (!initJson.smodel) { + initJson.smodel = smodel; + } + if (!initJson.emodel) { + initJson.emodel = emodel; + } + lines = this.editor.addLines([ + initJson + ], true, true, false); + } + this.editor.bus.push(DDeiEnumBusCommandType.NodifyControlCreated, { models: controls2, lines }); + this.editor.bus.executeAll(); + this.editor.ddInstance.stage.makeSelectModels(controls2); + this.editor.ddInstance.stage.notifyChange(); + } + } + } + } + } + } + }; + const QuickChooseControlDialog_vue_vue_type_style_index_0_scoped_5bda071e_lang = ""; + const _hoisted_1$1 = ["id"]; + const _hoisted_2$1 = { class: "ddei-ext-dialog-quickchoosecontrol-group" }; + const _hoisted_3$1 = { + key: 0, + class: "ddei-ext-dialog-quickchoosecontrol-group-itempanel" + }; + const _hoisted_4$1 = ["title", "onClick"]; + const _hoisted_5$1 = ["src"]; + const _hoisted_6$1 = ["innerHTML"]; + const _hoisted_7$1 = { class: "text" }; + function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { + var _a3; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = _ctx.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-ext-dialog-quickchoosecontrol" + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.groups, (group2) => { + return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [ + $props.customControls || $props.customGroups || group2.expand == true || $data.model ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(group2.controls, (control) => { + var _a4; + return vue.openBlock(), vue.createElementBlock("div", { + class: "ddei-ext-dialog-quickchoosecontrol-group-itempanel-item", + title: control.desc, + onClick: ($event) => $options.quickCreateControl(control.id) + }, [ + !control.icon ? (vue.openBlock(), vue.createElementBlock("img", { + key: 0, + class: "icon", + src: (_a4 = _ctx.editor) == null ? void 0 : _a4.icons[control.id] + }, null, 8, _hoisted_5$1)) : vue.createCommentVNode("", true), + control.icon ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: "icon-html", + innerHTML: control.icon + }, null, 8, _hoisted_6$1)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_7$1, vue.toDisplayString(_ctx.editor.i18n(control.name)), 1) + ], 8, _hoisted_4$1); + }), 256)) + ])) : vue.createCommentVNode("", true) + ], 512)), [ + [vue.vShow, group2.display == true] + ]); + }), 256)) + ], 8, _hoisted_1$1)) : vue.createCommentVNode("", true); + } + const QuickChooseControlDialog = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-5bda071e"]]); + const _DDeiExtQuickChooseControlDialog = class _DDeiExtQuickChooseControlDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QuickChooseControlDialog.name); + __publicField3(this, "plugins", [QuickChooseControlDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[QuickChooseControlDialog.name]) { + for (let i2 in options[QuickChooseControlDialog.name]) { + newOptions[i2] = options[QuickChooseControlDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtQuickChooseControlDialog(newOptions); + return panels; + } + } + return _DDeiExtQuickChooseControlDialog; + } + static modify(fn) { + return _DDeiExtQuickChooseControlDialog.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickChooseControlDialog, "defaultIns", new _DDeiExtQuickChooseControlDialog(null)); + let DDeiExtQuickChooseControlDialog = _DDeiExtQuickChooseControlDialog; + const _DDeiExtQuickControlDialogs = class _DDeiExtQuickControlDialogs extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [ + DDeiExtQuickControlDialog, + DDeiExtQuickChooseControlDialog + ]); + } + getDialogs(editor) { + var _a3; + let panels = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getDialogs(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getDialogs(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + panels = panels.concat(ls); + } + }); + return panels; + } + static configuration(options) { + var _a3; + if (options) { + let panels = new _DDeiExtQuickControlDialogs(options); + for (let i2 = 0; i2 < ((_a3 = panels.plugins) == null ? void 0 : _a3.length); i2++) { + panels.plugins[i2] = panels.plugins[i2].configuration(options, true); + } + return panels; + } + return _DDeiExtQuickControlDialogs; + } + static modify(fn) { + return _DDeiExtQuickControlDialogs.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickControlDialogs, "defaultIns", new _DDeiExtQuickControlDialogs(null)); + let DDeiExtQuickControlDialogs = _DDeiExtQuickControlDialogs; + const _DDeiExtQuickControlPanel = class _DDeiExtQuickControlPanel extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", QuickControlPanel.name); + __publicField3(this, "plugins", [QuickControlPanel]); + } + getPanels(editor) { + return this.plugins; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ChangeRatio.name]) { + for (let i2 in options[ChangeRatio.name]) { + newOptions[i2] = options[ChangeRatio.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtQuickControlPanel(newOptions); + return panels; + } + } + return _DDeiExtQuickControlPanel; + } + static modify(fn) { + return _DDeiExtQuickControlPanel.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickControlPanel, "defaultIns", new _DDeiExtQuickControlPanel(null)); + let DDeiExtQuickControlPanel = _DDeiExtQuickControlPanel; + const _DDeiKeyActionQuickControlEsc = class _DDeiKeyActionQuickControlEsc extends DDeiKeyAction { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-keyaction-quickcontrol-esc"); + __publicField3(this, "defaultOptions", { + "keys": [ + { keys: "27" } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionQuickControlEsc.defaultIns.name]) { + for (let i2 in options[_DDeiKeyActionQuickControlEsc.defaultIns.name]) { + newOptions[i2] = options[_DDeiKeyActionQuickControlEsc.defaultIns.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionQuickControlEsc(newOptions); + return panels; + } + } + return _DDeiKeyActionQuickControlEsc; + } + static modify(fn) { + return _DDeiKeyActionQuickControlEsc.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiKeyActionQuickControlEsc, "defaultIns", new _DDeiKeyActionQuickControlEsc()); + let DDeiKeyActionQuickControlEsc = _DDeiKeyActionQuickControlEsc; + const _DDeiExtQuickControlHotkeys = class _DDeiExtQuickControlHotkeys extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "plugins", [DDeiKeyActionQuickControlEsc]); + } + getHotKeys(editor) { + var _a3; + let hotkeys = []; + (_a3 = this.plugins) == null ? void 0 : _a3.forEach((plugin) => { + let ls; + if (DDeiPluginBase.isSubclass(plugin, DDeiPluginBase)) { + ls = plugin.defaultIns.getHotKeys(editor); + } else if (plugin instanceof DDeiPluginBase) { + ls = plugin.getHotKeys(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + hotkeys = hotkeys.concat(ls); + } + }); + return hotkeys; + } + static configuration(options) { + var _a3; + let hotkeys = new _DDeiExtQuickControlHotkeys(options); + for (let i2 = 0; i2 < ((_a3 = hotkeys.plugins) == null ? void 0 : _a3.length); i2++) { + hotkeys.plugins[i2] = hotkeys.plugins[i2].configuration(options, true); + } + return hotkeys; + } + static modify(fn) { + return _DDeiExtQuickControlHotkeys.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickControlHotkeys, "defaultIns", new _DDeiExtQuickControlHotkeys(null)); + let DDeiExtQuickControlHotkeys = _DDeiExtQuickControlHotkeys; + const _DDeiExtSearchLifeCycle = class _DDeiExtSearchLifeCycle extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "quickcontrol-ext-lifecycle"); + // static{ + // DDeiExtSearchLifeCycle.changeQuickControlDialogPos = debounce(DDeiExtSearchLifeCycle.changeQuickControlDialogPos,200) + // } + __publicField3(this, "EVENT_MOUSE_MOVE_IN_CONTROL", new DDeiFuncData("quickcontrol-ext-show", 1, this.moveInControl)); + __publicField3(this, "EVENT_CONTROL_DRAG_AFTER", new DDeiFuncData("quickcontrol-ext-changepos", 1, this.changeQuickControlDialogPos)); + __publicField3(this, "EVENT_MOUSE_MOVE_IN_LAYER", new DDeiFuncData("quickcontrol-ext-close", 1, this.closeQuickControlDialog)); + __publicField3(this, "EVENT_CONTROL_SELECT_AFTER", new DDeiFuncData("quickcontrol-ext-show", 1, this.closeAndShowQuickControlDialog)); + __publicField3(this, "EVENT_MOUSE_OPERATING", new DDeiFuncData("quickstyle-ext-close", 1, this.mouseOperating)); + __publicField3(this, "EVENT_CLOSE_FILE_AFTER", new DDeiFuncData("quickcontrol-ext-close", 1, this.closeDialogs)); + } + moveInControl(operateType, data, ddInstance, evt) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"] && ((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.state == "designing") { + let model = data.models[0]; + if (((_b2 = editor.ddInstance.stage.selectedModels) == null ? void 0 : _b2.size) > 0) { + if (!editor.ddInstance.stage.selectedModels.has(model.id)) { + if (((_c2 = editor.ddInstance.stage.selectedModels) == null ? void 0 : _c2.size) == 1) { + model = Array.from(editor.ddInstance.stage.selectedModels.values())[0]; + } else { + return; + } + } + } + data.model = model; + _DDeiExtSearchLifeCycle.showQuickControlDialog(operateType, data, ddInstance, evt); + } + } + } + changeQuickControlDialogPos(operateType, data, ddInstance, evt) { + var _a3, _b2, _c2; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"] && ((_a3 = data == null ? void 0 : data.models) == null ? void 0 : _a3.length) > 0) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.state == "designing") { + let model = data.models[0]; + if (((_b2 = editor.ddInstance.stage.selectedModels) == null ? void 0 : _b2.size) > 0) { + if (!editor.ddInstance.stage.selectedModels.has(model.id)) { + if (((_c2 = editor.ddInstance.stage.selectedModels) == null ? void 0 : _c2.size) == 1) { + model = Array.from(editor.ddInstance.stage.selectedModels.values())[0]; + } else { + return; + } + } + } + data.model = model; + _DDeiExtSearchLifeCycle.changeQuickControlDialogPos(operateType, data, ddInstance, evt); + } + } + } + /** + * 正在进行鼠标操作 + */ + mouseOperating(operateType, data, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.state == "designing") { + let oldState = editor.state; + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + editor.changeState(oldState); + } + } + } + /** + * 鼠标进入控件 + */ + closeAndShowQuickControlDialog(operateType, data, ddInstance, evt) { + var _a3; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.state == "designing") { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + if (((_a3 = data.models) == null ? void 0 : _a3.length) > 0) { + data.model = data.models[0]; + _DDeiExtSearchLifeCycle.showQuickControlDialog(operateType, data, ddInstance, evt); + } + } + } + } + /** + * 鼠标进入控件 + */ + static showQuickControlDialog(operateType, data, ddInstance, evt) { + var _a3, _b2; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"] && (data == null ? void 0 : data.model)) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (!((_a3 = data.model) == null ? void 0 : _a3.rotate) && ((_b2 = data.model) == null ? void 0 : _b2.baseModelType) != "DDeiLine" && (!editor.tempPopData || !editor.tempPopData["ddei-ext-dialog-quickcontrol"] || editor.tempPopData["ddei-ext-dialog-quickcontrol"].model != data.model)) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition([data.model]); + let width = 50; + let height = 50; + let left = modelPos.left - editorDomPos.left - width / 2; + let top = modelPos.top - editorDomPos.top - height / 2; + let offset = null; + if (data.model.state == DDeiEnumControlState.SELECTED) { + height = 70; + top -= 20; + offset = { + "left": "margin-top:20px", + "right": "margin-top:20px" + }; + } + DDeiEditorUtil.showDialog(editor, "ddei-ext-dialog-quickcontrol", { + group: "canvas-pop-quickcontrol", + model: data.model, + width, + height, + offset + }, { type: 99, left, top, ignoreOutSide: 1, hiddenMask: true }, null, true, true); + } + } + } + /** + * 修改坐标 + */ + static changeQuickControlDialogPos(operateType, data, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"] && (data == null ? void 0 : data.model)) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition([data.model]); + let width = 50; + let height = 50; + let left = modelPos.left - editorDomPos.left - width / 2; + let top = modelPos.top - editorDomPos.top - height / 2; + let offset = null; + if (data.model.state == DDeiEnumControlState.SELECTED) { + height = 70; + top -= 20; + offset = { + "left": "margin-top:20px", + "right": "margin-top:20px" + }; + } + DDeiEditorUtil.displayDialog(editor, "ddei-ext-dialog-quickcontrol", { + group: "canvas-pop-quickcontrol", + model: data.model, + width, + height, + offset + }, { type: 99, left, top, ignoreOutSide: 1, hiddenMask: true }, null, true, true); + } + } + /** + * 鼠标进入画布 + */ + closeQuickControlDialog(operateType, data, ddInstance, evt) { + var _a3, _b2, _c2, _d2; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempPopData && ((_a3 = editor.tempPopData["ddei-ext-dialog-quickcontrol"]) == null ? void 0 : _a3.model)) { + let model = (_b2 = editor.tempPopData["ddei-ext-dialog-quickcontrol"]) == null ? void 0 : _b2.model; + let type = (_c2 = editor.tempPopData["ddei-ext-dialog-quickchoosecontrol"]) == null ? void 0 : _c2.type; + let modelPos = DDeiUtil.getModelsDomAbsPosition([model]); + let width = 25; + let height = 25; + if (model.state == DDeiEnumControlState.SELECTED) { + height = 35; + } + modelPos.x -= width; + modelPos.x1 += width; + modelPos.y -= height; + modelPos.y1 += height; + if (type == 1) { + modelPos.y -= 15; + } else if (type == 2) { + modelPos.x1 += 10; + } else if (type == 3) { + modelPos.y1 += 10; + } else if (type == 4) { + modelPos.x -= 10; + } + if (!(modelPos.x <= data.ex && modelPos.x1 >= data.ex && modelPos.y <= data.ey && modelPos.y1 >= data.ey)) { + let selectedModels = ddInstance.stage.selectedModels; + if ((selectedModels == null ? void 0 : selectedModels.size) == 1 && Array.from(selectedModels.values())[0] == ((_d2 = editor.tempPopData["ddei-ext-dialog-quickcontrol"]) == null ? void 0 : _d2.model)) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + } else { + let quickChooseControlDialog = document.getElementById(editor.id + "_ddei-ext-dialog-quickchoosecontrol"); + if (quickChooseControlDialog) { + let quickChooseControlDialogPos = DDeiUtil.getDomAbsPosition(quickChooseControlDialog); + let dx1 = quickChooseControlDialogPos.left + (quickChooseControlDialog == null ? void 0 : quickChooseControlDialog.clientWidth); + let dy1 = quickChooseControlDialogPos.top + (quickChooseControlDialog == null ? void 0 : quickChooseControlDialog.clientHeight); + let dx = quickChooseControlDialogPos.left; + let dy = quickChooseControlDialogPos.top; + if (!(dx <= evt.clientX && dx1 >= evt.clientX && dy <= evt.clientY && dy1 > evt.clientY)) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + } + } else { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + } + } + } + } + } + } + /** + * 鼠标进入画布 + */ + closeDialogs(operateType, data, ddInstance, evt) { + var _a3; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempPopData && ((_a3 = editor.tempPopData["ddei-ext-dialog-quickcontrol"]) == null ? void 0 : _a3.model)) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickcontrol", true); + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-quickchoosecontrol", true); + } + } + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiExtSearchLifeCycle.name]) { + for (let i2 in options[_DDeiExtSearchLifeCycle.name]) { + newOptions[i2] = options[_DDeiExtSearchLifeCycle.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtSearchLifeCycle(); + if (newOptions.name) { + panels.name = newOptions.name; + } + if (newOptions.sort) { + panels.sort = newOptions.sort; + } + return panels; + } + } + return _DDeiExtSearchLifeCycle; + } + static modify(fn) { + return _DDeiExtSearchLifeCycle.defaultIns.modify(fn); + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtSearchLifeCycle, "defaultIns", new _DDeiExtSearchLifeCycle(null)); + let DDeiExtSearchLifeCycle = _DDeiExtSearchLifeCycle; + const _DDeiExtQuickControl = class _DDeiExtQuickControl extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 2); + __publicField3(this, "dialogs", DDeiExtQuickControlDialogs); + __publicField3(this, "panels", DDeiExtQuickControlPanel); + __publicField3(this, "hotkeys", DDeiExtQuickControlHotkeys); + __publicField3(this, "lifecyclies", DDeiExtSearchLifeCycle); + } + getDialogs(editor) { + if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) { + return this.dialogs.defaultIns.getDialogs(editor); + } else if (this.dialogs instanceof DDeiPluginBase) { + return this.dialogs.getDialogs(editor); + } + } + getPanels(editor) { + if (DDeiPluginBase.isSubclass(this.panels, DDeiPluginBase)) { + return this.panels.defaultIns.getPanels(editor); + } else if (this.panels instanceof DDeiPluginBase) { + return this.panels.getPanels(editor); + } + } + getHotKeys(editor) { + if (DDeiPluginBase.isSubclass(this.hotkeys, DDeiPluginBase)) { + return this.hotkeys.defaultIns.getHotKeys(editor); + } else if (this.hotkeys instanceof DDeiPluginBase) { + return this.hotkeys.getHotKeys(editor); + } + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + static configuration(options) { + let core = new _DDeiExtQuickControl(options); + core.dialogs = core.dialogs.configuration(options, true); + core.panels = core.panels.configuration(options, true); + core.hotkeys = core.hotkeys.configuration(options, true); + core.lifecyclies = core.lifecyclies.configuration(options, true); + return core; + } + static modify(fn) { + return _DDeiExtQuickControl.defaultIns.modify(fn); + } + }; + __publicField3(_DDeiExtQuickControl, "order", 2); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtQuickControl, "defaultIns", new _DDeiExtQuickControl(null)); + let DDeiExtQuickControl = _DDeiExtQuickControl; + const _DDeiExtSearch = class _DDeiExtSearch extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 2); + __publicField3(this, "dialogs", DDeiExtSearchDialog); + __publicField3(this, "panels", DDeiExtSearchPanel); + __publicField3(this, "hotkeys", DDeiExtSearchHotkeys); + __publicField3(this, "lifecyclies", DDeiExtSearchLifeCycle$1); + } + getDialogs(editor) { + if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) { + return this.dialogs.defaultIns.getDialogs(editor); + } else if (this.dialogs instanceof DDeiPluginBase) { + return this.dialogs.getDialogs(editor); + } + } + getPanels(editor) { + if (DDeiPluginBase.isSubclass(this.panels, DDeiPluginBase)) { + return this.panels.defaultIns.getPanels(editor); + } else if (this.panels instanceof DDeiPluginBase) { + return this.panels.getPanels(editor); + } + } + getHotKeys(editor) { + if (DDeiPluginBase.isSubclass(this.hotkeys, DDeiPluginBase)) { + return this.hotkeys.defaultIns.getHotKeys(editor); + } else if (this.hotkeys instanceof DDeiPluginBase) { + return this.hotkeys.getHotKeys(editor); + } + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + static modify(fn) { + return _DDeiExtSearch.defaultIns.modify(fn); + } + static configuration(options) { + let core = new _DDeiExtSearch(options); + core.dialogs = core.dialogs.configuration(options, true); + core.panels = core.panels.configuration(options, true); + core.hotkeys = core.hotkeys.configuration(options, true); + core.lifecyclies = core.lifecyclies.configuration(options, true); + return core; + } + }; + __publicField3(_DDeiExtSearch, "order", 2); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtSearch, "defaultIns", new _DDeiExtSearch(null)); + let DDeiExtSearch = _DDeiExtSearch; + const _sfc_main = { + name: "ddei-ext-dialog-tooltip", + extends: null, + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + }, + editor: { + type: DDeiEditor, + default: null + } + }, + data() { + return { + dialogId: "ddei-ext-dialog-tooltip", + //当前控件 + model: null, + forceRefresh: false + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + this.refreshData(); + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + }, + refreshData() { + if (this.editor.tempPopData && this.editor.tempPopData["ddei-ext-dialog-tooltip"]) { + this.model = this.editor.tempPopData["ddei-ext-dialog-tooltip"].model; + } + } + } + }; + const TooltipDialog_vue_vue_type_style_index_0_scoped_d9902947_lang = ""; + const _hoisted_1 = ["id"]; + const _hoisted_2 = { key: 1 }; + const _hoisted_3 = { class: "ddei-ext-dialog-tooltip-row" }; + const _hoisted_4 = { + key: 0, + class: "ddei-ext-dialog-tooltip-row-title" + }; + const _hoisted_5 = { + key: 1, + class: "ddei-ext-dialog-tooltip-row-data" + }; + const _hoisted_6 = { + key: 0, + class: "ddei-ext-dialog-tooltip-row" + }; + const _hoisted_7 = { class: "ddei-ext-dialog-tooltip-row-data" }; + const _hoisted_8 = { + key: 1, + class: "ddei-ext-dialog-tooltip-row" + }; + const _hoisted_9 = { class: "ddei-ext-dialog-tooltip-row-data" }; + function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i, _j; + return $data.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a3 = $props.editor) == null ? void 0 : _a3.id) + "_" + $data.dialogId, + class: "ddei-ext-dialog-tooltip fade-in" + }, [ + ((_b2 = $props.options) == null ? void 0 : _b2.viewer) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent($props.options.viewer), { + key: 0, + editor: $props.editor, + options: $props.options, + model: $data.model + }, null, 8, ["editor", "options", "model"])) : vue.createCommentVNode("", true), + !((_c2 = $props.options) == null ? void 0 : _c2.viewer) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [ + vue.createElementVNode("div", _hoisted_3, [ + ((_d2 = $data.model) == null ? void 0 : _d2.id) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, " ID ")) : vue.createCommentVNode("", true), + ((_e2 = $data.model) == null ? void 0 : _e2.id) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, vue.toDisplayString((_f = $data.model) == null ? void 0 : _f.id), 1)) : vue.createCommentVNode("", true) + ]), + ((_g = $data.model) == null ? void 0 : _g.code) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [ + _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "ddei-ext-dialog-tooltip-row-title" }, " CODE ", -1)), + vue.createElementVNode("div", _hoisted_7, vue.toDisplayString((_h = $data.model) == null ? void 0 : _h.code), 1) + ])) : vue.createCommentVNode("", true), + ((_i = $data.model) == null ? void 0 : _i.text) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8, [ + _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "ddei-ext-dialog-tooltip-row-title" }, " 文本 ", -1)), + vue.createElementVNode("div", _hoisted_9, vue.toDisplayString((_j = $data.model) == null ? void 0 : _j.text), 1) + ])) : vue.createCommentVNode("", true) + ])) : vue.createCommentVNode("", true) + ], 8, _hoisted_1)) : vue.createCommentVNode("", true); + } + const TooltipDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-d9902947"]]); + const _DDeiCoreTooltipDialog = class _DDeiCoreTooltipDialog extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "name", TooltipDialog.name); + __publicField3(this, "plugins", [TooltipDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static modify(fn) { + return _DDeiCoreTooltipDialog.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[TooltipDialog.name]) { + for (let i2 in options[TooltipDialog.name]) { + newOptions[i2] = options[TooltipDialog.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiCoreTooltipDialog(newOptions); + return panels; + } + } + return _DDeiCoreTooltipDialog; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiCoreTooltipDialog, "defaultIns", new _DDeiCoreTooltipDialog(null)); + let DDeiCoreTooltipDialog = _DDeiCoreTooltipDialog; + const _DDeiExtTooltipLifeCycle = class _DDeiExtTooltipLifeCycle extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-tooltip-lifecycle"); + __publicField3(this, "EVENT_MOUSE_MOVE_IN_CONTROL", new DDeiFuncData("tooltip-show", 1, (operateType, data, ddInstance, evt) => { + this.showTooltip(operateType, data, ddInstance, evt); + })); + __publicField3(this, "EVENT_MOUSE_MOVE_IN_LAYER", new DDeiFuncData("tooltip-hidden", 1, this.mouseOperating)); + __publicField3(this, "EVENT_CLOSE_FILE_AFTER", new DDeiFuncData("tooltip-close", 1, this.mouseOperating)); + } + static modify(fn) { + return _DDeiExtTooltipLifeCycle.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiExtTooltipLifeCycle.name]) { + for (let i2 in options[_DDeiExtTooltipLifeCycle.name]) { + newOptions[i2] = options[_DDeiExtTooltipLifeCycle.name][i2]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiExtTooltipLifeCycle(newOptions); + return panels; + } + } + return _DDeiExtTooltipLifeCycle; + } + showTooltip(operateType, data, ddInstance, evt) { + var _a3, _b2, _c2; + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let stage2 = (_a3 = editor.ddInstance) == null ? void 0 : _a3.stage; + if (((_b2 = stage2 == null ? void 0 : stage2.render) == null ? void 0 : _b2.operateState) == 0 && ((_c2 = data.models) == null ? void 0 : _c2.length) > 0 && data.models[0]) { + if (editor.tempHoverModel != data.models[0]) { + if (!editor.tempHoverX || !editor.tempHoverY || Math.abs(editor.tempHoverX - data.x) > 10 || Math.abs(editor.tempHoverY - data.y) > 10) { + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-tooltip"]) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-tooltip", true); + } + editor.tempHoverModel = data.models[0]; + editor.tempHoverX = data.x; + editor.tempHoverY = data.y; + editor.tempHoverTime = (/* @__PURE__ */ new Date()).getTime(); + } + } else { + if ((/* @__PURE__ */ new Date()).getTime() - editor.tempHoverTime >= this.options.time) { + data.model = editor.tempHoverModel; + this.showTooltipDialog(operateType, data, ddInstance, evt); + } + } + } else { + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-tooltip"]) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-tooltip", true); + } + delete editor.tempHoverModel; + delete editor.tempHoverTime; + delete editor.tempHoverX; + delete editor.tempHoverY; + } + } + /** + * 鼠标进入控件 + */ + showTooltipDialog(operateType, data, ddInstance, evt, options) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (!editor.tempPopData || !editor.tempPopData["ddei-ext-dialog-tooltip"] || editor.tempPopData["ddei-ext-dialog-tooltip"].model != data.model) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-tooltip", true); + let editorEle = document.getElementById(editor.id); + let editorDomPos = DDeiUtil.getDomAbsPosition(editorEle); + let modelPos = DDeiUtil.getModelsDomAbsPosition([data.model]); + let left = modelPos.left - editorDomPos.left + modelPos.width + 20; + let top = modelPos.top - editorDomPos.top - 20; + DDeiEditorUtil.showDialog(editor, "ddei-ext-dialog-tooltip", { + group: "canvas-pop-tooltip", + model: data.model + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + } + mouseOperating(operateType, data, ddInstance, evt) { + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempPopData && editor.tempPopData["ddei-ext-dialog-tooltip"]) { + DDeiEditorUtil.closeDialog(editor, "ddei-ext-dialog-tooltip", true); + } + delete editor.tempHoverModel; + delete editor.tempHoverTime; + delete editor.tempHoverX; + delete editor.tempHoverY; + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtTooltipLifeCycle, "defaultIns", new _DDeiExtTooltipLifeCycle({ + time: 400 + })); + let DDeiExtTooltipLifeCycle = _DDeiExtTooltipLifeCycle; + const _DDeiExtTooltip = class _DDeiExtTooltip extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 2); + __publicField3(this, "dialogs", DDeiCoreTooltipDialog); + __publicField3(this, "lifecyclies", DDeiExtTooltipLifeCycle); + } + getOptions() { + return this.options; + } + getDialogs(editor) { + if (DDeiPluginBase.isSubclass(this.dialogs, DDeiPluginBase)) { + return this.dialogs.defaultIns.getDialogs(editor); + } else if (this.dialogs instanceof DDeiPluginBase) { + return this.dialogs.getDialogs(editor); + } + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + static modify(fn) { + return _DDeiExtTooltip.defaultIns.modify(fn); + } + static configuration(options) { + let core = new _DDeiExtTooltip(options); + core.dialogs = core.dialogs.configuration(options, true); + core.lifecyclies = core.lifecyclies.configuration(options, true); + return core; + } + }; + __publicField3(_DDeiExtTooltip, "order", 2); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtTooltip, "defaultIns", new _DDeiExtTooltip(null)); + let DDeiExtTooltip = _DDeiExtTooltip; + const _DDeiExtHtmlViewerLifeCycle = class _DDeiExtHtmlViewerLifeCycle extends DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField3(this, "name", "ddei-ext-htmlviewer-lifecycle"); + __publicField3(this, "EVENT_CONTROL_VIEW", new DDeiFuncData("htmlviewer-drawshape", 1, (operateType, data, ddInstance, evt) => { + return this.htmlDrawShape(operateType, data, ddInstance, evt); + })); + } + installed(editor) { + for (let i2 in this.options) { + if (i2 != "matchField") { + if (this.options[i2]["viewer"]) { + this.options[i2]["viewer"] = vue.markRaw(this.options[i2]["viewer"]); + } + } + } + } + static configuration(options) { + if (options && Object.keys(options).length !== 0) { + let lcs = new _DDeiExtHtmlViewerLifeCycle(options); + return lcs; + } + return _DDeiExtHtmlViewerLifeCycle; + } + static modify(fn) { + return _DDeiExtHtmlViewerLifeCycle.defaultIns.modify(fn); + } + htmlDrawShape(operate, data, ddInstance, evt) { + let models = data == null ? void 0 : data.models; + let editor = DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor) { + let field = this.options.matchField; + for (let i2 = 0; i2 < (models == null ? void 0 : models.length); i2++) { + let model = models[i2]; + if (model && model[field]) { + let option = this.options[model[field]]; + if (option && option.viewer) { + if (model.render.tempCanvas) { + model.render.tempCanvas.remove(); + } + if (model.render.viewerOption != option && vue.toRaw(model.render.viewerOption) != option) { + DDeiUtil.removeRenderViewer(model); + model.render.viewerOption = option; + model.render.viewer = option.viewer; + } + } + } + } + } + } + }; + /** + * 缺省实例 + */ + __publicField3(_DDeiExtHtmlViewerLifeCycle, "defaultIns", new _DDeiExtHtmlViewerLifeCycle({ + matchField: "code" + })); + let DDeiExtHtmlViewerLifeCycle = _DDeiExtHtmlViewerLifeCycle; + const _DDeiExtHtmlViewer = class _DDeiExtHtmlViewer extends DDeiPluginBase { + constructor() { + super(...arguments); + __publicField3(this, "type", "package"); + __publicField3(this, "order", 1); + __publicField3(this, "lifecyclies", DDeiExtHtmlViewerLifeCycle); + } + getLifeCyclies(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.getLifeCyclies(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.getLifeCyclies(editor); + } + } + installed(editor) { + if (DDeiPluginBase.isSubclass(this.lifecyclies, DDeiPluginBase)) { + return this.lifecyclies.defaultIns.installed(editor); + } else if (this.lifecyclies instanceof DDeiPluginBase) { + return this.lifecyclies.installed(editor); + } + } + static configuration(options) { + let core = new _DDeiExtHtmlViewer(options); + core.lifecyclies = core.lifecyclies.configuration(options); + return core; + } + static modify(fn) { + return _DDeiExtHtmlViewer.defaultIns.modify(fn); + } + }; + __publicField3(_DDeiExtHtmlViewer, "order", 1); + /** + * 缺省实例 + */ + __publicField3(_DDeiExtHtmlViewer, "defaultIns", new _DDeiExtHtmlViewer(null)); + let DDeiExtHtmlViewer = _DDeiExtHtmlViewer; + exports.COMMANDS = COMMANDS; + exports.DDei = DDei; + exports.DDeiAbstractArrtibuteParser = DDeiAbstractArrtibuteParser; + exports.DDeiAbstractShape = DDeiAbstractShape; + exports.DDeiAbstractShapeRender = DDeiAbstractShapeRender; + exports.DDeiActiveType = DDeiActiveType; + exports.DDeiArrtibuteDefine = DDeiArrtibuteDefine; + exports.DDeiArrtibuteParserBool = DDeiArrtibuteParserBool; + exports.DDeiArrtibuteParserNumber = DDeiArrtibuteParserNumber; + exports.DDeiArrtibuteParserString = DDeiArrtibuteParserString; + exports.DDeiBus = DDeiBus; + exports.DDeiBusCommand = DDeiBusCommand; + exports.DDeiBusCommandAddHistroy = DDeiBusCommandAddHistroy; + exports.DDeiBusCommandCancelCurLevelSelectedModels = DDeiBusCommandCancelCurLevelSelectedModels; + exports.DDeiBusCommandCenterStageWPV = DDeiBusCommandCenterStageWPV; + exports.DDeiBusCommandChangeCursor = DDeiBusCommandChangeCursor; + exports.DDeiBusCommandChangeLayout = DDeiBusCommandChangeLayout; + exports.DDeiBusCommandChangeLinePoint = DDeiBusCommandChangeLinePoint; + exports.DDeiBusCommandChangeSelectorPassIndex = DDeiBusCommandChangeSelectorPassIndex; + exports.DDeiBusCommandChangeStageRatio = DDeiBusCommandChangeStageRatio; + exports.DDeiBusCommandChangeStageWPV = DDeiBusCommandChangeStageWPV; + exports.DDeiBusCommandClearTemplateVars = DDeiBusCommandClearTemplateVars; + exports.DDeiBusCommandModelAlign = DDeiBusCommandModelAlign; + exports.DDeiBusCommandModelAutoPos = DDeiBusCommandModelAutoPos; + exports.DDeiBusCommandModelCancelMerge = DDeiBusCommandModelCancelMerge; + exports.DDeiBusCommandModelChangeBounds = DDeiBusCommandModelChangeBounds; + exports.DDeiBusCommandModelChangeContainer = DDeiBusCommandModelChangeContainer; + exports.DDeiBusCommandModelChangePosition = DDeiBusCommandModelChangePosition; + exports.DDeiBusCommandModelChangeRotate = DDeiBusCommandModelChangeRotate; + exports.DDeiBusCommandModelChangeSelect = DDeiBusCommandModelChangeSelect; + exports.DDeiBusCommandModelChangeValue = DDeiBusCommandModelChangeValue; + exports.DDeiBusCommandModelCopyStyle = DDeiBusCommandModelCopyStyle; + exports.DDeiBusCommandModelEdgePosition = DDeiBusCommandModelEdgePosition; + exports.DDeiBusCommandModelMerge = DDeiBusCommandModelMerge; + exports.DDeiBusCommandModelPush = DDeiBusCommandModelPush; + exports.DDeiBusCommandModelRemove = DDeiBusCommandModelRemove; + exports.DDeiBusCommandNodifyControlCreated = DDeiBusCommandNodifyControlCreated; + exports.DDeiBusCommandOVSChangePosition = DDeiBusCommandOVSChangePosition; + exports.DDeiBusCommandRefreshShape = DDeiBusCommandRefreshShape; + exports.DDeiBusCommandResetSelectorState = DDeiBusCommandResetSelectorState; + exports.DDeiBusCommandSetHelpLine = DDeiBusCommandSetHelpLine; + exports.DDeiBusCommandStageChangeSelectModels = DDeiBusCommandStageChangeSelectModels; + exports.DDeiBusCommandTextEditorChangeSelectPos = DDeiBusCommandTextEditorChangeSelectPos; + exports.DDeiBusCommandUpdateDragObj = DDeiBusCommandUpdateDragObj; + exports.DDeiBusCommandUpdatePaperArea = DDeiBusCommandUpdatePaperArea; + exports.DDeiBusCommandUpdateSelectorBounds = DDeiBusCommandUpdateSelectorBounds; + exports.DDeiCircle = DDeiCircle; + exports.DDeiCircleCanvasRender = DDeiCircleCanvasRender; + exports.DDeiColor = DDeiColor; + exports.DDeiCommandChangeEditMode = DDeiCommandChangeEditMode; + exports.DDeiCommandChangeNodifyChange = DDeiCommandChangeNodifyChange; + exports.DDeiConfig = DDeiConfig; + exports.DDeiConverterBase = DDeiConverterBase; + exports.DDeiCore = DDeiCore; + exports.DDeiCoreAddFontSizeButton = DDeiCoreAddFontSizeButton; + exports.DDeiCoreAlignDialog = DDeiCoreAlignDialog; + exports.DDeiCoreAlignTypePropEditor = DDeiCoreAlignTypePropEditor; + exports.DDeiCoreBorderDashButton = DDeiCoreBorderDashButton; + exports.DDeiCoreBorderDashComboPropEditor = DDeiCoreBorderDashComboPropEditor; + exports.DDeiCoreBorderTypePropEditor = DDeiCoreBorderTypePropEditor; + exports.DDeiCoreBorderWeightButton = DDeiCoreBorderWeightButton; + exports.DDeiCoreBottomMenuPanel = DDeiCoreBottomMenuPanel; + exports.DDeiCoreBottomPanels = DDeiCoreBottomPanels; + exports.DDeiCoreCanvasViewPanel = DDeiCoreCanvasViewPanel; + exports.DDeiCoreChangeRatioDialog = DDeiCoreChangeRatioDialog; + exports.DDeiCoreChangeRatioPanel = DDeiCoreChangeRatioPanel; + exports.DDeiCoreChooseControlDialog = DDeiCoreChooseControlDialog; + exports.DDeiCoreChooseControlGroupDialog = DDeiCoreChooseControlGroupDialog; + exports.DDeiCoreCloseFileConfirmDialog = DDeiCoreCloseFileConfirmDialog; + exports.DDeiCoreCollFileConfirmDialog = DDeiCoreCollFileConfirmDialog; + exports.DDeiCoreColorComboPropEditor = DDeiCoreColorComboPropEditor; + exports.DDeiCoreColorPropEditor = DDeiCoreColorPropEditor; + exports.DDeiCoreComboxPropEditor = DDeiCoreComboxPropEditor; + exports.DDeiCoreCommonPanels = DDeiCoreCommonPanels; + exports.DDeiCoreComponents = DDeiCoreComponents; + exports.DDeiCoreControls = DDeiCoreControls; + exports.DDeiCoreDialogs = DDeiCoreDialogs; + exports.DDeiCoreEditBoxButton = DDeiCoreEditBoxButton; + exports.DDeiCoreEditColorButton = DDeiCoreEditColorButton; + exports.DDeiCoreEditFontFamilyButton = DDeiCoreEditFontFamilyButton; + exports.DDeiCoreEditFontSizeButton = DDeiCoreEditFontSizeButton; + exports.DDeiCoreEditLinePointTypeButton = DDeiCoreEditLinePointTypeButton; + exports.DDeiCoreEditLineTypeButton = DDeiCoreEditLineTypeButton; + exports.DDeiCoreEditTextAlignButton = DDeiCoreEditTextAlignButton; + exports.DDeiCoreExCheckboxPropEditor = DDeiCoreExCheckboxPropEditor; + exports.DDeiCoreExportAndImportPanel = DDeiCoreExportAndImportPanel; + exports.DDeiCoreFileInfoPanel = DDeiCoreFileInfoPanel; + exports.DDeiCoreFileOperatePanel = DDeiCoreFileOperatePanel; + exports.DDeiCoreFillTypePropEditor = DDeiCoreFillTypePropEditor; + exports.DDeiCoreFontAndTextPanel = DDeiCoreFontAndTextPanel; + exports.DDeiCoreFontSizePropEditor = DDeiCoreFontSizePropEditor; + exports.DDeiCoreHotkeys = DDeiCoreHotkeys; + exports.DDeiCoreImagePropEditor = DDeiCoreImagePropEditor; + exports.DDeiCoreLayouts = DDeiCoreLayouts; + exports.DDeiCoreLifeCycles = DDeiCoreLifeCycles; + exports.DDeiCoreLinePointTypeDialog = DDeiCoreLinePointTypeDialog; + exports.DDeiCoreLineTypeDialog = DDeiCoreLineTypeDialog; + exports.DDeiCoreManageLayersDialog = DDeiCoreManageLayersDialog; + exports.DDeiCoreManageLayersPanel = DDeiCoreManageLayersPanel; + exports.DDeiCoreMenus = DDeiCoreMenus; + exports.DDeiCoreMergeComposeDialog = DDeiCoreMergeComposeDialog; + exports.DDeiCoreOpenFilesViewPanel = DDeiCoreOpenFilesViewPanel; + exports.DDeiCoreOperatePanel = DDeiCoreOperatePanel; + exports.DDeiCorePVEditors = DDeiCorePVEditors; + exports.DDeiCorePanels = DDeiCorePanels; + exports.DDeiCorePlayPanel = DDeiCorePlayPanel; + exports.DDeiCorePositionDialog = DDeiCorePositionDialog; + exports.DDeiCorePropertyViewPanel = DDeiCorePropertyViewPanel; + exports.DDeiCorePublishFileConfirmDialog = DDeiCorePublishFileConfirmDialog; + exports.DDeiCoreQCViewDialog = DDeiCoreQCViewDialog; + exports.DDeiCoreQuickColorViewPanel = DDeiCoreQuickColorViewPanel; + exports.DDeiCoreQuickSetStyleDialog = DDeiCoreQuickSetStyleDialog; + exports.DDeiCoreRadioPropEditor = DDeiCoreRadioPropEditor; + exports.DDeiCoreRangePropEditor = DDeiCoreRangePropEditor; + exports.DDeiCoreRotateDialog = DDeiCoreRotateDialog; + exports.DDeiCoreSelectBorderDashDialog = DDeiCoreSelectBorderDashDialog; + exports.DDeiCoreSelectBorderWeightDialog = DDeiCoreSelectBorderWeightDialog; + exports.DDeiCoreSelectColorDialog = DDeiCoreSelectColorDialog; + exports.DDeiCoreSelectFontDialog = DDeiCoreSelectFontDialog; + exports.DDeiCoreSelectFontSizeDialog = DDeiCoreSelectFontSizeDialog; + exports.DDeiCoreShapeCountPanel = DDeiCoreShapeCountPanel; + exports.DDeiCoreSheetsPanel = DDeiCoreSheetsPanel; + exports.DDeiCoreSimpleLayout = DDeiCoreSimpleLayout; + exports.DDeiCoreSimplePanels = DDeiCoreSimplePanels; + exports.DDeiCoreSortPanel = DDeiCoreSortPanel; + exports.DDeiCoreStandLayout = DDeiCoreStandLayout; + exports.DDeiCoreStylePanel = DDeiCoreStylePanel; + exports.DDeiCoreSuitRatioPanel = DDeiCoreSuitRatioPanel; + exports.DDeiCoreSwitchCheckboxPropEditor = DDeiCoreSwitchCheckboxPropEditor; + exports.DDeiCoreTextAlignDialog = DDeiCoreTextAlignDialog; + exports.DDeiCoreTextAreaPropEditor = DDeiCoreTextAreaPropEditor; + exports.DDeiCoreTextPropEditor = DDeiCoreTextPropEditor; + exports.DDeiCoreThemeBlack = DDeiCoreThemeBlack; + exports.DDeiCoreThemeDefault = DDeiCoreThemeDefault; + exports.DDeiCoreThemes = DDeiCoreThemes; + exports.DDeiCoreToolPanel = DDeiCoreToolPanel; + exports.DDeiCoreToolboxPanel = DDeiCoreToolboxPanels; + exports.DDeiCoreToolboxPanels = DDeiCoreToolboxPanels; + exports.DDeiCoreToolboxSimplePanel = DDeiCoreToolboxSimplePanel; + exports.DDeiCoreTopMenuPanel = DDeiCoreTopMenuPanel; + exports.DDeiCoreTopMenuSimplePanel = DDeiCoreTopMenuSimplePanel; + exports.DDeiDiamond = DDeiDiamond; + exports.DDeiDiamondCanvasRender = DDeiDiamondCanvasRender; + exports.DDeiEditor = DDeiEditor; + exports.DDeiEditorArrtibute = DDeiEditorArrtibute; + exports.DDeiEditorCommandAddHistroy = DDeiEditorCommandAddHistroy; + exports.DDeiEditorCommandChangeEditMode = DDeiEditorCommandChangeEditMode; + exports.DDeiEditorCommandClearTemplateUI = DDeiEditorCommandClearTemplateUI; + exports.DDeiEditorCommandFileDirty = DDeiEditorCommandFileDirty; + exports.DDeiEditorCommandLoadFile = DDeiEditorCommandLoadFile; + exports.DDeiEditorCommandRefreshEditorParts = DDeiEditorCommandRefreshEditorParts; + exports.DDeiEditorCommandSaveFile = DDeiEditorCommandSaveFile; + exports.DDeiEditorEnumBusCommandType = DDeiEditorEnumBusCommandType; + exports.DDeiEditorState = DDeiEditorState; + exports.DDeiEditorUtil = DDeiEditorUtil; + exports.DDeiEditorView = DDeiEditorView; + exports.DDeiEnumAttributeType = DDeiEnumAttributeType; + exports.DDeiEnumBusCommandType = DDeiEnumBusCommandType; + exports.DDeiEnumControlState = DDeiEnumControlState; + exports.DDeiEnumOperateState = DDeiEnumOperateState; + exports.DDeiEnumOperateType = DDeiEnumOperateType; + exports.DDeiEnumState = DDeiEnumState; + exports.DDeiEnumStoreType = DDeiEnumStoreType; + exports.DDeiExtHtmlViewer = DDeiExtHtmlViewer; + exports.DDeiExtQuickControl = DDeiExtQuickControl; + exports.DDeiExtQuickControlDialogs = DDeiExtQuickControlDialogs; + exports.DDeiExtQuickControlHotkeys = DDeiExtQuickControlHotkeys; + exports.DDeiExtQuickStyle = DDeiExtQuickStyle; + exports.DDeiExtSearch = DDeiExtSearch; + exports.DDeiExtSearchHotkeys = DDeiExtSearchHotkeys; + exports.DDeiExtTooltip = DDeiExtTooltip; + exports.DDeiExtUML = DDeiExtUML; + exports.DDeiFile = DDeiFile; + exports.DDeiFileState = DDeiFileState; + exports.DDeiFuncCallResult = DDeiFuncCallResult; + exports.DDeiFuncData = DDeiFuncData; + exports.DDeiKeyAction = DDeiKeyAction; + exports.DDeiKeyActionAllSelect = DDeiKeyActionAllSelect; + exports.DDeiKeyActionBrushData = DDeiKeyActionBrushData; + exports.DDeiKeyActionCancelCompose = DDeiKeyActionCancelCompose; + exports.DDeiKeyActionCancelControlCreate = DDeiKeyActionCancelControlCreate; + exports.DDeiKeyActionCancelCurrentAction = DDeiKeyActionCancelCurrentAction; + exports.DDeiKeyActionCancelQuickEdit = DDeiKeyActionCancelQuickEdit; + exports.DDeiKeyActionCancelSelect = DDeiKeyActionCancelSelect; + exports.DDeiKeyActionClearBrushData = DDeiKeyActionClearBrushData; + exports.DDeiKeyActionCloseDialog = DDeiKeyActionCloseDialog; + exports.DDeiKeyActionCompose = DDeiKeyActionCompose; + exports.DDeiKeyActionCopy = DDeiKeyActionCopy; + exports.DDeiKeyActionCopyImage = DDeiKeyActionCopyImage; + exports.DDeiKeyActionCut = DDeiKeyActionCut; + exports.DDeiKeyActionEnterQuickEdit = DDeiKeyActionEnterQuickEdit; + exports.DDeiKeyActionMoveModels = DDeiKeyActionMoveModels; + exports.DDeiKeyActionNewRowQuickEdit = DDeiKeyActionNewRowQuickEdit; + exports.DDeiKeyActionPaste = DDeiKeyActionPaste; + exports.DDeiKeyActionPushModels = DDeiKeyActionPushModels; + exports.DDeiKeyActionQuickControlEsc = DDeiKeyActionQuickControlEsc; + exports.DDeiKeyActionReRevoke = DDeiKeyActionReRevoke; + exports.DDeiKeyActionRemoveModels = DDeiKeyActionRemoveModels; + exports.DDeiKeyActionRevoke = DDeiKeyActionRevoke; + exports.DDeiKeyActionSaveFile = DDeiKeyActionSaveFile; + exports.DDeiKeyActionSearch = DDeiKeyActionSearch; + exports.DDeiKeyActionSearchEsc = DDeiKeyActionSearchEsc; + exports.DDeiKeyActionSearchNext = DDeiKeyActionSearchNext; + exports.DDeiKeyActionSearchUp = DDeiKeyActionSearchUp; + exports.DDeiKeyActionStartQuickEdit = DDeiKeyActionStartQuickEdit; + exports.DDeiKeyActionTableNextCol = DDeiKeyActionTableNextCol; + exports.DDeiKeyActionTableNextRow = DDeiKeyActionTableNextRow; + exports.DDeiLayer = DDeiLayer; + exports.DDeiLayerCanvasRender = DDeiLayerCanvasRender; + exports.DDeiLayoutManager = DDeiLayoutManager; + exports.DDeiLayoutManagerCompose = DDeiLayoutManagerCompose; + exports.DDeiLayoutManagerFactory = DDeiLayoutManagerFactory; + exports.DDeiLayoutManagerFree = DDeiLayoutManagerFree; + exports.DDeiLayoutManagerFull = DDeiLayoutManagerFull; + exports.DDeiLayoutManagerNine = DDeiLayoutManagerNine; + exports.DDeiLifeCycle = DDeiLifeCycle; + exports.DDeiLine = DDeiLine; + exports.DDeiLineCanvasRender = DDeiLineCanvasRender; + exports.DDeiLink = DDeiLink; + exports.DDeiMenuBase = DDeiMenuBase; + exports.DDeiModelArrtibuteValue = DDeiModelArrtibuteValue; + exports.DDeiModelLink = DDeiModelLink; + exports.DDeiPluginBase = DDeiPluginBase; + exports.DDeiPolygon = DDeiPolygon; + exports.DDeiPolygonContainer = DDeiPolygonContainer; + exports.DDeiPolygonContainerCanvasRender = DDeiPolygonContainerCanvasRender; + exports.DDeiRectangle = DDeiRectangle; + exports.DDeiRectangleCanvasRender = DDeiRectangleCanvasRender; + exports.DDeiSelector = DDeiSelector; + exports.DDeiSelectorCanvasRender = DDeiSelectorCanvasRender; + exports.DDeiSheet = DDeiSheet; + exports.DDeiStage = DDeiStage; + exports.DDeiStageCanvasRender = DDeiStageCanvasRender; + exports.DDeiStore = DDeiStore; + exports.DDeiTable = DDeiTable; + exports.DDeiTableCanvasRender = DDeiTableCanvasRender; + exports.DDeiTableCell = DDeiTableCell; + exports.DDeiTableCellCanvasRender = DDeiTableCellCanvasRender; + exports.DDeiTableSelector = DDeiTableSelector; + exports.DDeiTableSelectorCanvasRender = DDeiTableSelectorCanvasRender; + exports.DDeiThemeBase = DDeiThemeBase; + exports.DDeiUtil = DDeiUtil; + exports.FONTS = FONTS; + exports.Matrix3 = Matrix3; + exports.MenuCancelMergeCell = MenuCancelMergeCell; + exports.MenuCopySheet = MenuCopySheet; + exports.MenuInsertCol = MenuInsertCol; + exports.MenuInsertRow = MenuInsertRow; + exports.MenuMergeCell = MenuMergeCell; + exports.MenuRemoveCol = MenuRemoveCol; + exports.MenuRemoveRow = MenuRemoveRow; + exports.MenuRemoveSheet = MenuRemoveSheet; + exports.QuickChooseControlDialog = DDeiExtQuickChooseControlDialog; + exports.QuickControlDialog = DDeiExtQuickControlDialog; + exports.Vector3 = Vector3; + exports.addCommand = addCommand; + exports.autoLoadCommand = autoLoadCommand; + exports.clone = clone; + exports.cloneDeep = cloneDeep; + exports.config = config; + exports.debounce = debounce; + exports.default = DDeiEditorView; + exports.loadAndSortGroup = loadAndSortGroup; + exports.loadControlByFrom = loadControlByFrom; + exports.loadControlDefineComposes = loadControlDefineComposes; + exports.loadControlDefineExt = loadControlDefineExt; + exports.merge = merge$1; + exports.ov_link_h_split_point = ov_link_h_split_point; + exports.ov_link_v_split_point = ov_link_v_split_point; + exports.throttle = throttle; + exports.trim = trim; + Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); +}); diff --git a/examples/html/ddei-flow.umd.cjs b/examples/html/ddei-flow.umd.cjs new file mode 100644 index 0000000..e6c7746 --- /dev/null +++ b/examples/html/ddei-flow.umd.cjs @@ -0,0 +1,11857 @@ +(function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("vue"), require("ddei-editor")) : typeof define === "function" && define.amd ? define(["exports", "vue", "ddei-editor"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["ddei-flow"] = {}, global.Vue, global["ddei-editor"])); +})(this, function(exports2, vue, ddeiEditor) { + "use strict";var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; + + var __vite_style__ = document.createElement("style"); + __vite_style__.textContent = `@font-face { + font-family: "icon-ddei-flow"; /* Project id 4654254 */ + src: url('data:application/vnd.ms-fontobject;base64,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AAAAAAAMAAAAAAVcAAAAAAAAAHEAANbvAADW7wAAAGsAAOZ7AADmewAAAGUAAOaBAADmgQAAABkAAOaCAADmggAAABUAAOaDAADmgwAAAAYAAOaFAADmhQAAAEYAAOaGAADmhgAAAEUAAOaHAADmhwAAAEoAAOaIAADmiAAAAEQAAOaKAADmigAAADsAAOaLAADmiwAAAC8AAOaMAADmjAAAADAAAOaNAADmjQAAADEAAOaOAADmjgAAADIAAOaPAADmjwAAAGgAAOaQAADmkAAAADMAAOaRAADmkQAAADQAAOaSAADmkgAAADUAAOaTAADmkwAAADYAAOaUAADmlAAAADcAAOaVAADmlQAAAGYAAOaWAADmlgAAADgAAOaXAADmlwAAAGkAAOaYAADmmAAAADkAAOaZAADmmQAAAGoAAOaaAADmmgAAADoAAOabAADmmwAAADwAAOacAADmnAAAAD0AAOadAADmnQAAAD4AAOaeAADmngAAAD8AAOafAADmnwAAAGIAAOagAADmoAAAAEAAAOahAADmoQAAAEEAAOaiAADmogAAAAMAAOajAADmowAAAEIAAOakAADmpAAAAG4AAOalAADmpQAAAAIAAOamAADmpgAAAEMAAOanAADmpwAAAAUAAOaoAADmqAAAAEcAAOapAADmqQAAAEgAAOaqAADmqgAAAEkAAOarAADmqwAAAEsAAOasAADmrAAAAEwAAOatAADmrQAAAE0AAOauAADmrgAAAE4AAOavAADmrwAAAE8AAOawAADmsAAAAFAAAOaxAADmsQAAAFEAAOayAADmsgAAAFIAAOazAADmswAAAFMAAOa0AADmtAAAAFQAAOa1AADmtQAAAFUAAOa2AADmtgAAAFYAAOa3AADmtwAAACQAAOa4AADmuAAAAFcAAOa5AADmuQAAAGEAAOa6AADmugAAAFgAAOa7AADmuwAAAFkAAOa8AADmvAAAAAQAAOa9AADmvQAAAFoAAOa+AADmvgAAAFsAAOa/AADmvwAAAF0AAObAAADmwAAAAF4AAObBAADmwQAAAAUAAObCAADmwgAAAF8AAObDAADmwwAAAAEAAObEAADmxAAAAAcAAObFAADmxQAAAAgAAObGAADmxgAAAAkAAObHAADmxwAAAAoAAObJAADmyQAAAAsAAObKAADmygAAAAwAAObL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ZXZlbnQtdDUVYm91bmRhcnktZXZlbnQtY2FuY2VsEnN1Yi1wcm9jZXNzLW1hcmtlcg1zZW5kLXRhc2stYmFrC3NjcmlwdC10YXNrDHNlcnZpY2UtdGFzawN0YWIHY29tbWVudAttYW51YWwtdGFzawhzZXF1ZW5jZQpkYXRhLXN0b3JlBm1hbnVhbBJidXNpbmVzcy1ydWxlLXRhc2sNYnVzaW5lc3MtcnVsZRRzdGFydC1ldmVudC1wYXJhbGxlbAdyZWNlaXZlGXN1Yi1wcm9jZXNzLWV4cGFuZC1tYXJrZXIUc3RhcnQtZXZlbnQtY29uZGl0aW8VaW50ZXJtZWRpYXRlLWV2ZW50LWMzEmVuZC1ldmVudC1tZXNzYWdlMRVzdGFydC1ldmVudC1ub24taW50ZTIVc3RhcnQtZXZlbnQtbm9uLWludGU2EXN0YXJ0LWV2ZW50LXRpbWVyEmdhdGV3YXktZXZlbnRiYXNlZBJlbmQtZXZlbnQtbXVsdGlwbGUVaW50ZXJtZWRpYXRlLWV2ZW50LXQzCXVzZXItaWNvbhZpbnRlcm1lZGlhdGUtZXZlbnQtYzE0FHN0YXJ0LWV2ZW50LW11bHRpcGxlBWNob3JlFGJvdW5kYXJ5LWV2ZW50LWVycm9yFWludGVybWVkaWF0ZS1ldmVudC1jNBFzdGFydC1ldmVudC1lcnJvcgRsYW5lFGludGVybWVkaWF0ZS1ldmVudC1uFXN0YXJ0LWV2ZW50LW5vbi1pbnRlMRFsYW5lLWluc2VydC1iZWxvdw5lbmQtZXZlbnQtbm9uZR9pbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtc2lnbmFsDHJlY2VpdmUtdGFzaxNlbmQtZXZlbnQtdGVybWluYXRlFWJvdW5kYXJ5LWV2ZW50LXNpZ25hbAZzY3JpcHQQZW5kLWV2ZW50LXNpZ25hbBJzdGFydC1ldmVudC1zaWduYWwLbG9vcC1tYXJrZXIUc3RhcnQtZXZlbnQtY29tcGVuc2EPZ2F0ZXdheS1jb21wbGV4FmludGVybWVkaWF0ZS1ldmVudC1jMTULZGF0YS1vdXRwdXQZaW50ZXJtZWRpYXRlLWV2ZW50LWM3LWJhaxZpbnRlcm1lZGlhdGUtZXZlbnQtYzExG2JvdW5kYXJ5LWV2ZW50LW1lc3NhZ2UtaW50ZQRzZW5kFWludGVybWVkaWF0ZS1ldmVudC1jMiBpbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtbWVzc2FnZRRzZXF1ZW50aWFsLW1pLW1hcmtlchhib3VuZGFyeS1ldmVudC10aW1lLWludGURbGFuZS1kaXZpZGUtdGhyZWUNY2FsbC1hY3Rpdml0eQ5lbmQtZXZlbnQtbGluawt0cmFuc2FjdGlvbhVpbnRlcm1lZGlhdGUtZXZlbnQtdDElaW50ZXJtZWRpYXRlLXRocm93LWV2ZW50LWNvbXBlbnNhdGlvbhBnYXRld2F5LXBhcmFsbGVsFWludGVybWVkaWF0ZS1ldmVudC1jMRtib3VuZGFyeS1ldmVudC1jb21wZW5zYXRpb24KZ2F0ZXdheS1vcgtkYXRhLW9iamVjdAxnYXRld2F5LW5vbmUVc3RhcnQtZXZlbnQtbm9uLWludGUzE2NvbXBlbnNhdGlvbi1tYXJrZXIQZW5kLWV2ZW50LWNhbmNlbBVzdGFydC1ldmVudC1ub24taW50ZTULZ2F0ZXdheS14b3IEdXNlcg9lbmQtZXZlbnQtZXJyb3IUZW5kLWV2ZW50LWVzY2FsYXRpb24Vc3RhcnQtZXZlbnQtbm9uLWludGU0DWFkLWhvYy1tYXJrZXIGdXNlci0xEnBhcmFsbGVsLW1pLW1hcmtlchRzdGFydC1ldmVudC1lc2NhbGF0aRBzdGFydC1ldmVudC1ub25lBGxpbmsEbG9jawZ1bmxvY2sEZWRpdAZjYW5jZWwCb2sFdHJhc2gEbGVmdAVyaWdodAdzZXR0aW5nAAAAAA=='); /* IE9 */ + src: url('data:application/vnd.ms-fontobject;base64,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AAAAAAAMAAAAAAVcAAAAAAAAAHEAANbvAADW7wAAAGsAAOZ7AADmewAAAGUAAOaBAADmgQAAABkAAOaCAADmggAAABUAAOaDAADmgwAAAAYAAOaFAADmhQAAAEYAAOaGAADmhgAAAEUAAOaHAADmhwAAAEoAAOaIAADmiAAAAEQAAOaKAADmigAAADsAAOaLAADmiwAAAC8AAOaMAADmjAAAADAAAOaNAADmjQAAADEAAOaOAADmjgAAADIAAOaPAADmjwAAAGgAAOaQAADmkAAAADMAAOaRAADmkQAAADQAAOaSAADmkgAAADUAAOaTAADmkwAAADYAAOaUAADmlAAAADcAAOaVAADmlQAAAGYAAOaWAADmlgAAADgAAOaXAADmlwAAAGkAAOaYAADmmAAAADkAAOaZAADmmQAAAGoAAOaaAADmmgAAADoAAOabAADmmwAAADwAAOacAADmnAAAAD0AAOadAADmnQAAAD4AAOaeAADmngAAAD8AAOafAADmnwAAAGIAAOagAADmoAAAAEAAAOahAADmoQAAAEEAAOaiAADmogAAAAMAAOajAADmowAAAEIAAOakAADmpAAAAG4AAOalAADmpQAAAAIAAOamAADmpgAAAEMAAOanAADmpwAAAAUAAOaoAADmqAAAAEcAAOapAADmqQAAAEgAAOaqAADmqgAAAEkAAOarAADmqwAAAEsAAOasAADmrAAAAEwAAOatAADmrQAAAE0AAOauAADmrgAAAE4AAOavAADmrwAAAE8AAOawAADmsAAAAFAAAOaxAADmsQAAAFEAAOayAADmsgAAAFIAAOazAADmswAAAFMAAOa0AADmtAAAAFQAAOa1AADmtQAAAFUAAOa2AADmtgAAAFYAAOa3AADmtwAAACQAAOa4AADmuAAAAFcAAOa5AADmuQAAAGEAAOa6AADmugAAAFgAAOa7AADmuwAAAFkAAOa8AADmvAAAAAQAAOa9AADmvQAAAFoAAOa+AADmvgAAAFsAAOa/AADmvwAAAF0AAObAAADmwAAAAF4AAObBAADmwQAAAAUAAObCAADmwgAAAF8AAObDAADmwwAAAAEAAObEAADmxAAAAAcAAObFAADmxQAAAAgAAObGAADmxgAAAAkAAObHAADmxwAAAAoAAObJAADmyQAAAAsAAObKAADmygAAAAwAAObL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ZXZlbnQtdDUVYm91bmRhcnktZXZlbnQtY2FuY2VsEnN1Yi1wcm9jZXNzLW1hcmtlcg1zZW5kLXRhc2stYmFrC3NjcmlwdC10YXNrDHNlcnZpY2UtdGFzawN0YWIHY29tbWVudAttYW51YWwtdGFzawhzZXF1ZW5jZQpkYXRhLXN0b3JlBm1hbnVhbBJidXNpbmVzcy1ydWxlLXRhc2sNYnVzaW5lc3MtcnVsZRRzdGFydC1ldmVudC1wYXJhbGxlbAdyZWNlaXZlGXN1Yi1wcm9jZXNzLWV4cGFuZC1tYXJrZXIUc3RhcnQtZXZlbnQtY29uZGl0aW8VaW50ZXJtZWRpYXRlLWV2ZW50LWMzEmVuZC1ldmVudC1tZXNzYWdlMRVzdGFydC1ldmVudC1ub24taW50ZTIVc3RhcnQtZXZlbnQtbm9uLWludGU2EXN0YXJ0LWV2ZW50LXRpbWVyEmdhdGV3YXktZXZlbnRiYXNlZBJlbmQtZXZlbnQtbXVsdGlwbGUVaW50ZXJtZWRpYXRlLWV2ZW50LXQzCXVzZXItaWNvbhZpbnRlcm1lZGlhdGUtZXZlbnQtYzE0FHN0YXJ0LWV2ZW50LW11bHRpcGxlBWNob3JlFGJvdW5kYXJ5LWV2ZW50LWVycm9yFWludGVybWVkaWF0ZS1ldmVudC1jNBFzdGFydC1ldmVudC1lcnJvcgRsYW5lFGludGVybWVkaWF0ZS1ldmVudC1uFXN0YXJ0LWV2ZW50LW5vbi1pbnRlMRFsYW5lLWluc2VydC1iZWxvdw5lbmQtZXZlbnQtbm9uZR9pbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtc2lnbmFsDHJlY2VpdmUtdGFzaxNlbmQtZXZlbnQtdGVybWluYXRlFWJvdW5kYXJ5LWV2ZW50LXNpZ25hbAZzY3JpcHQQZW5kLWV2ZW50LXNpZ25hbBJzdGFydC1ldmVudC1zaWduYWwLbG9vcC1tYXJrZXIUc3RhcnQtZXZlbnQtY29tcGVuc2EPZ2F0ZXdheS1jb21wbGV4FmludGVybWVkaWF0ZS1ldmVudC1jMTULZGF0YS1vdXRwdXQZaW50ZXJtZWRpYXRlLWV2ZW50LWM3LWJhaxZpbnRlcm1lZGlhdGUtZXZlbnQtYzExG2JvdW5kYXJ5LWV2ZW50LW1lc3NhZ2UtaW50ZQRzZW5kFWludGVybWVkaWF0ZS1ldmVudC1jMiBpbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtbWVzc2FnZRRzZXF1ZW50aWFsLW1pLW1hcmtlchhib3VuZGFyeS1ldmVudC10aW1lLWludGURbGFuZS1kaXZpZGUtdGhyZWUNY2FsbC1hY3Rpdml0eQ5lbmQtZXZlbnQtbGluawt0cmFuc2FjdGlvbhVpbnRlcm1lZGlhdGUtZXZlbnQtdDElaW50ZXJtZWRpYXRlLXRocm93LWV2ZW50LWNvbXBlbnNhdGlvbhBnYXRld2F5LXBhcmFsbGVsFWludGVybWVkaWF0ZS1ldmVudC1jMRtib3VuZGFyeS1ldmVudC1jb21wZW5zYXRpb24KZ2F0ZXdheS1vcgtkYXRhLW9iamVjdAxnYXRld2F5LW5vbmUVc3RhcnQtZXZlbnQtbm9uLWludGUzE2NvbXBlbnNhdGlvbi1tYXJrZXIQZW5kLWV2ZW50LWNhbmNlbBVzdGFydC1ldmVudC1ub24taW50ZTULZ2F0ZXdheS14b3IEdXNlcg9lbmQtZXZlbnQtZXJyb3IUZW5kLWV2ZW50LWVzY2FsYXRpb24Vc3RhcnQtZXZlbnQtbm9uLWludGU0DWFkLWhvYy1tYXJrZXIGdXNlci0xEnBhcmFsbGVsLW1pLW1hcmtlchRzdGFydC1ldmVudC1lc2NhbGF0aRBzdGFydC1ldmVudC1ub25lBGxpbmsEbG9jawZ1bmxvY2sEZWRpdAZjYW5jZWwCb2sFdHJhc2gEbGVmdAVyaWdodAdzZXR0aW5nAAAAAA==') format('embedded-opentype'), + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('data:font/woff;base64,d09GRgABAAAAADaQAAsAAAAAtQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAARAAAAGAtBErYY21hcAAAAYgAAANTAAAIAImwQ5ZnbHlmAAAE3AAAK58AAJ2oa/t7KmhlYWQAADB8AAAAMQAAADYpz8/5aGhlYQAAMLAAAAAgAAAAJAf7BApobXR4AAAw0AAAABgAAAG8vB3//mxvY2EAADDoAAAA4AAAAODtuxjgbWF4cAAAMcgAAAAfAAAAIAH0AqduYW1lAAAx6AAAAVoAAAKvOqa++HBvc3QAADNEAAADTAAACB4rUm0LeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGFhYJzAwMrAwNTJdIaBgaEfQjO+ZjBi5ACKMrAyM2AFAWmuKQwHrr1/wcHc8L+BgYH5DgOQZGBEUcQEAH5WDUl4nOXV+bOVAwDG8e+5t3IjS0SSuG1URIhS2VLZKkqWuGTfmeHXfqqmNC0KJUuL5UaKNi122WqSKTTTpAkhz6mZZsw0ky1cz3ue+3P+gO6Zz517zrz33PO+93meF2gKVNvp1gSq6in5J0pz/Wqp8no1h1Zeb1J6zM9r/fBxW37VaI3TRK3TBm3WNpW1W3u0Vw3l6l01DQ2NR4zReE3Sem3UVm1vPGJfuZQjDvhVqvylWjrRjXoWsJxVfNn42MFOH/Egd9OGY2nGIAZyJQPoy5n04CzO5j7OoSfnch69uIfe3M/5PEAf+nEBF3IRd3Axl/jM+vMIVVzqq3AZl3MFVzGYIQzlaq5hGMO5lhFcx/X+FDdwOzcy0ud+EzdzC7f6d0b5Ux5CDc19hQ6jBYdzF7fxEEfwMHdyJPdyFC05mmNoxXG05nhOoC0n0o6TONnn1p4OdPR7d+YUTqWL36Wrz/Y0X/PunEGdL0Kz/7lKB8NXi+Jb07rGZ48WyQonAI0OZwGNCacCjQ3nA40LJwWND2cGTQinBz0ezhGaGE4UmhTOFpocThmaEs4bmhpOHnoinEE0LZxGND2cS/RkOKHoqXBW0dPh1KIZ4fyimeEko2fCmUazwulGz4Zzjp4LJx49H84+eiHcAjQ73Ac0J9wMNDfcETQv3Bb0Yrg36KVwg9DLUWyIXgm3CtWH+4Xmh5uGXg13Dr0WxQZpQbiH6PVwI9HCcDfRonBL0RvhvqI3w81Fi8MdRkvCbUZLw71Gy8INR8vDXUdvhVuPVoT7j1aGlwCtCm8CWh1uMHo7vBPonfBioHfD24HeC68Iej+KLdUH4WVBH4Y3Bn0UXhu0Jrw76OOoXLdPwluEPo1it/VZeJ/Q5+GlQmvDm4XWRbHvWh/eMfRFFM3ThvC2oY3hlUObwnuHvgovH/o6vIHom/Aaos3hXURbwwuJvg1vJdoWXk20Pbyf6LvwkqLvw5uKfgivK9oR3ln0Y3hx0U/h7UU/h1cY7QzvMfolvMxI4Y1G5fBao93h3UZ7wguO9oa3HO0Lrzr6Lbzv6Peo5OSP8OajP8Prj/4K3wfQ/vAdAf0dlf/RP+G7BPo3fL9ADeE7B+VSFPfzclX4bkK5OnxfYVdNUPcfkV/aVgB4nO19CZRkVXnwXd6+VL1Xr169Wrr2rqreu6urq2t6uqenB2ZhZmBmGGYBBxiWAWGGTVYlRocZWQTRRBjUGBHUKDCAmhCMEBQVTRQTkQjx4ElCckxiMHoO/hqJoR7/d9+r6rV6pgfr/08cppb77rv3vnf3b7vfdy8yEHrjBXqY9qEOdCq6DL0HfRg9gL6Evol+iVys4yTO4EE8jFchhPNiXhCd2ug4diJpXCuW8lXvWywV86IQxHk7b4v5MrtMf5t3Yt4us2jvBStxiaW3/bAyc0W7LNrivPiwY0ecWqlYHYEQR0xjuxJx7Aqk94IHsSNGnIrtfcdwxJkOTWEWPForiblBXGDvckbZayGk5t+txNVKrVytVNl/jDQ8s25qVZbY9hJXRwax2Khzlf1mblkDlIslbJdquSAWwmkcGR5dgUeKzoIQgsKy2NepZTo7g0YxmzbDIUIozubN0Bf1oIkJwRh+DYdiLMbtrlgik0x/WlYCLIgjlOeXa5ptVnexRISb5CgmK08f0wQMb9CkimUHA5cUrTB7SywZCCaSmVTsk3LYCetZy+aq0UQa9ydS+VTEDPTkRF3MvcMIRe0hVZX9fCGbiDGax6K4IoRXLQuaqjxBRSpp5ifziVTc6SsMYawH3V+u2iVwN4vizZyuKLesehvP3ywI3g3txbwyKYqYk+UJkYc3SpSUBEnBzRwadeTC4bLthIK1m7RAlNVGwAIVCS9LAcNJZTKJ3NOKHeqWg5LmSBk7bkoZ/gvxZIBLQWpsyIV4KpO8u2KwtgkFBGFZIOhYZ0CTwMvpJOG4KdPS1XFeMCKczFc/kMh0RLtVTWNtO+vD4XQ+/YVMVyajj0+G5G+nOlKFlKlHJSUsJxMfGglZUOu+DMay5D55QfkG7iLe5C+isvQdSV477x4JjfnUi8KoG42ijehKdCvMnWEYnJEwDG8hV4L5MlKD8VjLsfswixlm9yMsRhxO4XAA5wbwyCRumYLmc8UV2HNGYC5WmTMcSeIKc8JCL8wboVTxgqt+UtsLhXiboAu2bx0aHh7auv2ZpueCay88f9n4+LLzL/xJ03PtmuvXrLn+duas2blhfU9fX8/6DY82PZ0Xy9oaWdPkNZo84z1ruS6vXi3rjQv56ZxMPM/UnEw8z+FGNuBMzcnE87ipeZk0vL0z+cAFwYdjDj1MnkYUWSiF+qDNzaxZyOYE2wxHKtnh0ao5UuTFEjQM3EWSJCzks6x5nEitQi+vF8nPX3fNWMykBFz3Y488aGk4qlmW5v5Es+6XYH4cqL8OUy5q1p83o1GTDJjRw3vOD+qhkD70IHM/dw4P/Y/4OWNgDE2gtccyAiwoM3SkV2YGN8RSRaw6FUhRqS21A9Puj0RZFnFBkOWP7Xr8+X1YUAS8b4md4n5XFr7Hnv+eIO8Z++g7V1O6+p0IiQvG9i50LrqkvaPbaUPtjzx8J36rtjnygP12q4Zzjopjl+HV+H78DP47/BsiEptsJpeRG09g3CNhXB6Gjlj2qgrumFe1RlUgAipSa9QhwioBaZr/sl96/w7q5jRCvJjy7FRjuOmbc+fMqnajMcqNJoFb9gVvM0l2dlN4ZfNup+vOXK8NcLM9yl6TOQDLRZZwpuaDuMjemBMb3Sx6nSx615kh0Bgvw/4T+ZL3LZbKxbwFPQO5C2IAD2C/QJOAONKsG4VSGZ4oedFQzuOLVHmfbCYjLLmmDFvhjtiDAUqAPpmojQnCXFKg+aECJ2tDYUcPXJHUobreNxL2rtQImnomm+7AqWQql9G0cLSDNyRDPTUQjNiDdsh/ha2PTa4QBbISHgnsL8USllXhZRrLaoEvhiRR4HkMDQJNQtkHGtcIGOlsjsvm02ZI0/wsaSBsq5cpwi7dIckYH9Q5Es7gTISoAZVU8xbVr5PFnnHFoooetoXjmPK6hNedhF/+oFmIJyLha7q6C6qNu1KpdODP4qYuenVTYGySmaE5/0M4idO07mhHKvm+mix7YQD8/RG7QhSD8BGEScxxChE5SfpKKhONddvOrDcQnMkn/jyQjqW1DA2EMv09nymHI4l4pxTg8wlFHpmTIc9PSLICvUFZ1TlCXCReqCdwLsYTKSDW3kGvmhBFSTx89ZgSulfsfyp7klzojtgNOgJomo00gyQUR2k0jtYznMBoFgAxQCYUgaRhxAxMYSByhELWLGUdwK1zqMNJzKZ4GGZ2vuSRiLWSTw/Snhd1a+pxXH9Itywdvzcgv6hY9adI5Bn30c9ysnCOpGnSOYKicdsEYZsgnnOOpBYKqnQOkS39xcfrX7d08oJuyX8v64DFrCn8/Df+ER7rVKVBScsLCke4zbwpbObPVSU1n1MkVfbotFk0RBWtOhbqAbCgRxM02KppP0Gnrz25q7u76+S1n2p6Tl9IFrj/dJMcCsk3CQ8ckEIh6YBADs95xPPsb0EOnXKhICvfUmThQt7gZ/l9uvONn9P7aBFdin6CfoVc6Da/8UusaAByi4CGRkvFXtzsEqhPI5R1XG20EcqIdyfih5a9/nIijWDoLWiORi+yV4qMRIL+HHZSmBFLkM57TW3UA+dD5WF4D6BQgPOTuBHplaBUZHB/pFQuFYE5DeASGyxelPdGUSiyhwCnsAZOYUAVjSivKIAnmhwtUGPQRx4Z55N0pZwQBkYX2NzB7ak+UeZD9mRkPBIxeUrFWLq3Nx0DAMOHIpGJyAoIFZXe9LZ0r6hA0Ap7wk8oRdN9felEI+E4RJiCAAkfCQXCcYHbzgmJiDVgmhBPJggxTUkRi04HJwhcLFqUZNk0KZ2gMjWNwUg4IXDbOJE9YZhUoniC0pDhPRHznnDgCYk9Mc5iTfvTvet7e9fvOKW395TertqyTbWa0csKw/EmK8ykPVNqmZU6MmFDEOFmV8+2JxxWPUHpS29vJJy0ZyX8ogj5J/z8SyLLH8D8OJVJyBi0WZG388J0kVdQ6tcxGuUFgY96dYQYDJWUaMgcsP1KCh2NJ7hxqKN9aqMWO9b31lk1Ni1rwBLGHwWBP6oA1f5RmHnzuCOaNbO4QXfDKCs7kTJ0KKQJRxwYCh5ZXgtgRiSUhbw3Er3fSAlICVIsMbKiNjrMRnEEYAw8AuPTgUELI5PRMI0fG5z+r1Zl4zdfZZnMutKbZnFiBeDMXqpfgk1BHup2iEXi5bXlgMZ1D8nCo5hSnvKESLrE8RTwD8GqzIsAdp2wTGnE1EIWkaHxAcZHFHx/KoZ5jvAiFWVONVVOEQnQADwXT+ZkTb4G/jny9GwGr/4VwrnvlwWnf6OlYBnH1g0P5820RkIb+6OC/BHK8SxXyv4c3AA+B6yryFjqjfC8LKo8DgTMJAB7QWXo8R3pmgEYh/ICYEkoPWAaGBdQHGzU0lIZWBKh7LsIeYwtfYR80uNpHZQAHJBHJdSLBltzt4AW8tl8tSLO+2chnF5W7yU/e/11VjHKGdHo6z/v6SEPbd++f9aP9Pb2kt1uFP9kChrhFa8RImbU/ffRmQ9CgaPyM8vxKSe4lyNxL/QtSotfdIKWlaX6t5dMAraQuZyJLkLXt1fmMjdFMYDDKTxJRhgh4BMtDfFiWGiLAGZnbnkut3w1c3LlbeXytvNPHxw8HQ/KmhbS4uC2RRTz9UYW4FTx0BnnbxsiQ1vP2zr0Q03eKOu6XNVDmgdjF8i0dqN96AZ0sL1tbOV9cp3RUYxYL1XMvANhfgggy0X8bWnx0POSqkrPA0H/Vw8/fPO57GYxpz1y27gq4SJ7pfuSpBYx2qwaKvxWz7mw8e3juCfIjzy6JIyigFMyqBP6oh+hwgyL47UZtgq0UgBkVpiH4GyeYbh31qcSpVKCPA1uvUDIVwipo6kpmrv77u/fdddzd931/bvuJpunpmLFBN7HUrqHEkX8kPsRgt/+6L67pxqf7n1QpN/zyvUY+Q6UUEemh3sLXqnKwLWMohpahsbQcuDJJtAKNIlWoingZVajNWgtWodOAU5tA4ylU9FpaBPajLag09FWdAbahrajHWgnzOGz0NtgpJ2NzkHnogvQxejtQJFdivbCyLsMXY6uQFeiq9A70NXoGnQtug7m+w3onehd6EYo17vR7wPGfS/aj25CB2CUvg/djG5Bt6Lb0PvR7egO9AF0J/og+hD6A/SHgJfvQnejQ+ge9BGg9z6G/gh9HP0x+gS6F30S3YfuR59Cn0afQX+CPos+Bxj8QfQQOoweRo+gLzLszbAkYKsiWzoo5b1/HqizCmtyiMsDuq3UwDfnP6bm8mMx5jXhT8fWipUqvfm6c6dk7dv33PPioUMvHKrSqTvvhHZWqx87dOjFe+554dChBy+9VKWki7W+xEnkO1NdK2MGu4uL0q1XfeHQ1I2GOtzoHvzKIbzvHtxv2GiBrJ3N361tho02q2ytLdNw6oEHbmzL/Pr8xg9s/MMWa01XwSho71oT0Clik4stNZnWmse5Al3veBxpyfECal58yUsusgK0pc0cjyAOCacI7AqX0Lz7P+1mt2VwPYd5h0SxPWAsLw7Bu9aJId7Lc504//6c2dlOe6fXo/ZT2aPdM4utR2EfwPngrZZlYJ8Bu7BAJ+q3kw/Wz2JsEPlcKBZzP65bVtyy7nV9cc0OcMm3INH1J8dC9bMgRYilq38J4razFO5h3TrMnohb07Kk5vpYHhXR0CIrZAvXX/iqE6kwkYK9cJnsfvcxSVEkfKqoKI9c94rrHuB5XripxVLZfkV8hSV9RVSuXf8Xh7ZSuvUQQtKccpUBMu6BUfxubxy3Kh3wojBCgZ73GMw8jNNSk++sAQQSPaaTUfYRNpoj415M1RvLjC9gd8XFUK2ziH9hrZEVkMOmIIX1d0qcYiixsE7EkBq4fNVjwZBuBXQ5agsqrw9xmHs2YCoBXbINQbGDDsFXb2HsnedMiZIkToEvPsRumROfjm3RhPcmUrGwZmBd0kJCSNS0ZMKImJYSDih8SlC00KCt2yHFMAsWFiVFNYwEJNcl3YhFjQARdgJ/C7/eVhfoBmFOX+wCPPFZ9PlFxq1HGM5AhqZsywMBkxiAQVOmNQMrmqIspynGEoEK8iVYlYaYsgZdyQRW1TzAJI+tY/yRt4IdwB4XlcJMJGVXAHIxVosBtiKbP/CqpgBqQXfVX0ppIUmOSzY0LbRSSJN5WbblmCyQkA5xshyTItAVim6auiJIcBOTRRLaIPGSmtLMEIwkUeBEQ1Zk2RA5QYwIomU2owSRRclelCjYojQRy+cr+XwcsoqFQi060j0vpCnTZTD1lB6SpDhki2VBZoWAixxpFhAiWQFlmRVwLSVzi2Go6dklnCmGF6WalgAllG1WoEp+Vygegl8TPmHysgedqugk6GfbWxEXvF72em6k5MyGT7ztR/nJkn5n09kpSJyn7qusljhI+dsJKftAy/1HngKnCeHuq1747U/6EeSxHRwfzUV5uuMmYNqeAuDV6wGvF3Qr0ozaeYCI9Cb367Mj0TRM20b+C9kA0cpAg20GmnEWnc1Gm+nxLYWcL/n0Ro1QO/rdJE4Rdksr/8ay/BvmPPItcOv7DEXi1G41bnBqj3TurLtuuXmXCM7c9YhmUCGi2C1XLZ3s9+pdfxqc/QElLqUkLgKusFFX2Q1vz9yInJ0QU8IGLxlPxIBpwCxfoOuwHOjCI8zRkdGVZNSjB5j+R9hOMTGvBzwj3jJAzQOZvoQXetyTEnutdxR/qcgaqbRwsv3bmYVq1A5eLlqiqm4KRoxIKABDHAiNM8glsqwb+egjTICxjQG6yyjP08uY72aYduCA72IW9i5eAs7flgSu1fS5aqSQiXZrykYei2YxEDEEQuxEmPKczpxgxD1F4KWOYCaWJxR8usQLPAA5wE3MFXiBU4WgEJIRbuBpG6h8hNmaMoAh7DD5D91/2mkP7wwXO9wz0/iBnQM7qF0q7eyyIGBrCj+6Y9fnpvtiI6XAuZSBzr8SRqBHdUEPNIShDpsaDBtRj8KCm2kaCxL5VJaPnRgcm6G/2JzynisdOZqgbRs29ZfL/Zs2PLhhU9/wcN+mDdu3rFqWS6dzy1bdd5LvOWmLlwrG3XQo+L20i0XkTTOd68dP9+fSpun53SnPT+4LauFQ0F0VDIX1gOfHXwW/FnSnjBCkg0HewW5ZVAfMHHgqZLy8eBRCxGvHb9AgULKXerPYW5lgaL3gLWoI/vgVU9iePYDzlG+M3xRmA785UH1/Pjvf7w9g8Hv4BQYwif9w+QVjY+WYhiWzN8glhPRfd1a4rtHeHNedoQPZr7l1vSPX1bW6G3+aDc9nPfJLUINB1f2N518djESC7l8y/68VXVfcl1RTEKWRiK69beyC5actu7DDkP5C44J88Zx8pVPVyHA+NShqemZIUAKdFfKOx2QzvKa0qWt1l27p0Pq+GzSCoYQVCAW0cFjoNEacaX55ho4rASc6DpT/ZuAuW0OBrA8FfJjOFgmrWb5FmDO9ZOiHlYD3K2Xt7ELi573uM7wo8ngCXPe7OO/+Ax5cELRzDwvYw0vS2Rs36njCfabVPL5R4v+bpftvXor9828kfhO72QQ31U0S/wq7eQVuno/sZnIwqPez5LuenKBZ75ULZQQFbw2jRf3mpWPylxKkpYdff4H1HGWo5fWfkJ/WbaouCHr5DeR1NXN/9tWvZmjv6y+oDXCu18GdIlP1/Zb+1+wenKnbvm0FmrEB6yQymX0DNfTUZvFsp6GLjoVf+/+g+beqjbp99T9bmvYe9fr2Ya9vQ9C3C9alcCHrr3YD7VgBPgRD/9GL6yPJ7u4k+S647u+73yC/11UfIRw+kxclTpLwWRz5bk+y/l9eIiXZ437drf+Eo/jH7s8oR3hsuR2UY3m/8St6B1W9cZUGomKR8TTNmO2r97BuJS8yYmAFuae+l2TcHd7oYJyZ2ojSWbIpco97aJoHE+fpBa5A69F2dP6xjoD/h1JEte1ywvrnlyYJXCjL2HJsc2MJkhxHzHs62QHM1rYZJgCqj61gtkeqfWXP7T1X8sJHeY6ME1n4S0GGK8d/lG+LLOJ7Ww4e/CC9klP5xxhcfIxXuSvpQn2Kk49J03RGG5bOaMOuxEvUpxj6zH2mhj1+xf21Zn5Mkj6+VI2KL+4+O6CZpqZl72f82L1n8sJZMAOPtq7Yg2snVhaPvLJ4LGs5x9HC4nNHW1M6jtcTX1vSStdS1u1zuHZidh1x3f4IOOR4mk2L4rLjeBq5/9MaxS5YYzoZbTsmmq3tq+ttWj93/25pgIPRGH9Ov0s3ArUcRjE0AGwolxMxVJRpAjJ9Qlw80szA+1344v3AMb9NUfBn1bSK/0RlN8biAw35z+BnWbo0OKrKnmSPuw+27Ck6p59WHEsftSh2bolU0HsXll1bIhn0hlcDAT6LjrWNaHd7qeDWNW0D/XtBq3ZoB+V79/xW8vlFjXwJ+LUzAYchXCxNAjc8AKwxq/CMsmJjDavgrVs6EWiEhl5iii0SMflukAoNndpBvjitxlhdqJNYndZhJAvUGJu/FLbJZYDZEl2ru/s3mmo8qq/fGZDxq3Jgp/vPktDbGc7leC7YlREVokq2TZjaoKTylLOkgMhDlMzJIiXhiKQCREp34VNO0UP6j+C/bqwsUp4KkikIMOQVQQ/rggKjXxBkjhMBsnJieQw/TKm9PAv5D/ckVi63heytm/uYTKpvyy0fCVu6rYclQmKJ3KhCdFMlFJ7neKrKUBDBQ1GiyCka5MBhzdCpMpp133sugwXn+q69/OJ0UJCglAHOt1uApygzYuAEjhMUKsjB9MXLUXR6HI8DJ3ch2gPUxgPoCfR99O/olziGV+OteDe+Gv8A/wv+Oa6TIKmSc8kB8kdMChvEudqoT2GIMzRGebaZiz2Gm3YvTVqi4pETHnUB34YxEC2xGWA7Hi3hExm1UhoDPVFmtESDyPAJCs4zFvLNeZrkhl1p+sozRj3lEi8KvZBbpDJcq8yiN/IeAVKp+t9aI5gyOx7vtkFtNK17qqUGhcExW53qGIyycrVUzY/hqu8rA9HVoEEqjmfPU80zUqTcuPrfafrMMw5qkm61YqNhSKVJZzUaYISVo9Y0jYJGmDGOat41TJ7InIjKtO1U006q4TbNn+DOzwLqMEjg/eNMKQCKN0iAOGOWSj5J1myTWqMxHHuG5CqVS6y+BFqbVbhcbVS3+fWq3jSDKjcMoBYxgoI35K3fQmaGt+QzQNjw02TbLPoGq7rSE02mgNxIpR+yQgQTRRxXVAvIlep2ZryDibBCEPHKVR01Jw2UiCjrg+GYyaibazPpnETYm4ln6MN+ihK2U/k0l8Ir07m8liGOY8piwiaWrH0aCEWWUXK4n2UtaWr32YoewtgatQ2YsxSLdOLkSUEgKymmyhVDdsRi+dT0sMhKQrER/pqd6kxyOJmL5wygPlm2nJezN4WDxlW2ynV1efRrhnZ8fXVXxbI8i5t48WbVM16ZpEBOiSumlgVsHi/y4XWl33GYDZRxXXTtFipk8hnIPo17Esk0yy1lbZ4ckmVIERrJhABuTMTH9IAAb8cyABHlsY5kOs7I2x4nFZhlyJNwLgcykOcx9b9zzab0DI05I0uRXVLeiEiMSJzXoYqmDNpxg2Czdns8j3mJKByOJsOpbBbTVPbZaElWDDHIC6qtZbKFHlL6g9Rwl1dlSdV7oh1peGnqrqpj8LPfDTBxQtFCxKoJotc5HObI5Hm2YxHoHruTpRFVdfAz0PUsn2RalHhDgqrZiv1XWjrdGYCRECsUO5/qjsazLI9kmg1Kn87lMI6ErxhXdcihalkiC5jOnOc1zKlsDE7SP+5b2xnvcCDWLj+ay+uZoGoLGdFwIlDcjPblZDYptrSYmvvhdKnPcbyqHlhemKScCoF6xgorBCvj5sjfpnJJTJO5ruGgrFvGN+PJVF7AGakzH5KlkGLdPhYIOFBCZyBuK9NvDUrW7Lw9mykos5tZmvx4rgxs4NhkYEeiW5dGFf22cj/3W4vwHVxD//9FTzbN9P8XSMb5rJ3FdrZqVrM2PVBHTA2IIrYMy5EX6r3+n7wQM+sPeZpEO8zYj36JP7RrV/3FXbta68+d3mYNshKtwWBvB4WZvujst+9d1R7NrscOuq++7124wNrgzdhnbyW7T0hKTthnt9M+O43z3o4x3uQ+3iRKv+tG2Piyv98XFG+TgkFsBJnnOBaEHTe21t954lf6f+rxODgeKp2D6waPiUo4Fiw2cSx4yl0/jYloQ7fjxYbO8NE1htliNPlpE+2DW/9YQ6/uUP1F0jM1G+/Xz7N04q1TM4PvhboIDPe3FfO3Bee3Bdsvae0jg/tPYPQjr30cx/jpubcQfHffmAsXfR38T5HXpvmMpp0x4zfmaMNQ3iowWyt+ngEWM8qi582yv0rWTyLkL+tkaormPfMrZoF1t2d+heViB97bUSx2uPd0FPHD2P0IPnnv3oZ5z917mS7gLLh0DDBpiRL7JUrnW/BGO9sti5+eTO2RwV9xm+gPYOk2Md0W0PmJWeNEmIOfOlEXqqE1S9M6zBcq1byTY5tLTHp8dgDnK7lZatf5BajMPdP9bz0c1rHEXNd9/fX3iPxNIlEM4SYeaAYRKwoRbhKD4B7gxRYYz/2oFfhyIBxmTunz19KL+KBO+D2cpoq6we/hiR7kL1qgQ9ODasemkRVO4eFJPDKAc4Glas5ce3hg89mbBzxnqSoz2wcaDwxsRq30pTahXe3Wl5oP79uhJTUfzrZllD47B6D54/R6ilEBnYv2ouvRAfRBtq7g2Q5FnLJnH+QpT2d9AyKfd/PaqpBlTeF/fUOipjGRGMDQFF6iaYuiWVZF/DFaFZHH15iBDiOb0SOKlk0W3U/mgmZAy4V7cM2MSOHRTAH/wM0alpVwknYsoOpaOtRTDMZlRbEqpVGeAmMTczqiGcsxgwmzM6nbijZWnJAE9/kXVMNQX2A6yoebzob9zLcfIja+yHzMIU9vPqu3M9VhdMT1SKyjYKfi4dJAeaBYdAp4KJ7JjfXEjClBUg0rmsyWeruyuXAhZ3TEUunR7rRNVFkzQrF4JlPpyqbMlKPb4Vhq1VRfgTdeCkaC8Ls6GDGMmYvBAo0FtHj1mGacOBtqLmm+3TEHLi5xwr3WHFFz4UMfGjs2+eKbm0Vvcp64LXiel+mzNIv60STACMR7qqwz5fNtEqDQATw9lmcqV8iVBvBKPElShElI89MQHKBHgBDPHGf31i2DQ0ODW7Z+deuWgaE8L0VjQvdY7dzz/+X8c2tjzOPu4qmu0wrRDFPjSYWEVFn8MkDhuPplxRB5I5wBpmVocPMZXzljM3vX5jN2n36KFtNkbcfudzTf4r3uVkwd/XuSznGaIT2n6tw+Ie6I4j4tBJhiAVzsQ+NQ69OOqb+WtJPvkvrwC4tukbvUzrzlaNvNevWd0c3IQC8vR+ta6WdYs3SYxTlWp54Nn2+lJzD4xNbKPRO9IylufNx9iAERvAPcx1U204NXqNIvxGCEOXU1KP5CijDniHocCR9IHG68SGUvHW4+yaKab0TxNyGj3U0uJFeS3yO3nuDrTkhq27qT5pvWwj+OOObfdYnu3qXbOhzHsoDjRtbrJpZkaNK012zuqVlcwo6a/g4gR9wu86qrti2+K2Z/bajWmmfbifa0eZehxbB8W5i37llWcHc2BM1tWY29z7eR2t94t87yeXPrstvIpSew/Qls39512beEzv/vOj7Hb0WbheMGff/tIjpQ0TfF911ALjuBBU5ggXZigaOcS3ICEfyvQQR3tz7f5QQW+N+PBf665blDpLHu+AwKoBTAdR74pELTcB2Lpm+6XjX5yGhNqNGH3L1aQnevG8iQJzIDuD9TXwuXDyuOrDxHzntJEH6QTfX0pBJT7i62NwT+5HM8Frh9rfizS9B17d5PsbTE4xnawrCdxBNBer+k6+BoOn8Nz18jKrfdJuurVunybe3h3XKYqsKwJt8sa2VR5Sj/fiEovF+8SpO1TZvAac33tnlvB2fRnQza0IqntdjnoB1N9+NWmyCgph7YHeRlpAIP7O+HMrP/yGL+fXVv20dy2FPxau0nDUbb/Wnj+kpzc5I3Q2edTS49cUrVCTqrzXTWW3P/it91ogu/hfffOG7Ir68tbT8AY44e2NxzSSqNfdlORus8feJWe/i22MCd/T29wkVOMPH2d5+vIfb6z3t7yeEdO/bP+pGe3t56b+vwFipiT1ZxtfnB1fuq06ec4OoM3envtdeyLvTk+o3kmVm745Gz3E34T98+e5e7ebouQ8emjdDYfXxJai7nsP3Fl6jd8m/eFuLTNmbfbPRlV+t6ii3CFh4p84Dbi39T/2eme0TSnvs+N4b/fSpq1P/DdByTOEb0Qfen2J4yVPdTLAE+Rwu20LPc0WZNtgAWIcppl1L6zsi6SHhj+BqrUGoLIXjritdWhLeHf3/iXe9Bi6wTXdjeFln8JLU2NI/7+vxz1trCaPzZYqewcQt0YI5F/+UYtVyOWZ+lVX9ejK5t87pf6/OEHGvhaUJt6ODwnFN8rAxpnOKzb94ZPm3p9/obs0/LGb1MumqFIEmi+6BizjssR2qhE3sOOo/tydtWHr59GmJHbua7flv9saNMqFePql02f++f7CJ7/8xtM49m91Wij7j3T3FlsbjyVOYUR84cGTnzEuYccX493UgPTrWRHpwZnvn66XX9o67q022N5fzD/nK+rrwoW/WvEPsb7qOLL+V7tgkz7dGiLY5U4yPVDYp/9P0P+/EQXn6C4z7i/odvGTn9irecnPuNluLhBg27idwKM9IBLmSA7cHOFJWr3mEUKcwmvSjkS46JW4QXIPipiPmapsdeC+azlmUEA//1a3x6xPw1BP062AlBZsD9n1/foT8lJ4Jp6ymNGumQe4uVloT6U/hGd+0iEQtsLJd59jJL3591WjXXP/ZirnLuklgCPqS/qkU7tV/IvBLRXzXj+qt6Pqb9YqlblNX/VPMfkGPRAHuPFsvDG6dh1ZH2d7oef/DEbk5t283pxEZGb2ojo+SJTYEW3RSo/tiSNthZEg1ovSkzgkuP2Wag/qmW9gE+/Xc17Uc5dD66d/6egP4JxmQWYTCACwzwlkcr7AiiRXYGJP7OgEKrnQGz0zsDMtHCzOnG3hmulUV2BzwkKdnCsnOXrXx7FPBK6KQ9NaAxH9Wt0T3uIZUKE3GnIzLkQHlrfapOgmoqCRQHR7WgwAuipVqKKAhhXRB5hSOJlBokutJXw9+8MBQLuc+DcyHetEbmJCqrgirIoqIIAZ4LJUJyQFAUSdZ4YJupIEprNuGnOK7j9H4oy5qxYk//lqSUuvSW9ROMGJ5Yf8ulX0skBDXJDiLCNFcY3BCgVsQEwkKReEEIaDwlVGDCTKrIvCyYElyIEbFoYMNg/T9vYstZN/lux+l39tqSxmuKIHMCz3FMjsx+HMcL8DIpwMlauOfO09uyP8OScGJjf4YlCsrm7M8wq3wjx8RVzpZALc1EdJaMaWkl/cVsKZK5BF6ijFfg9Xj7CX7iiLsenLD10INvP2Erwc5t/vHSzrLAjfNMbkUVhCzPXnjGkpjtQuutssII9A53atoRD+Cm3XF1eybbW+sZHRhIZsPFTiud6OzrSsULRiKQy/SNDFTLvZG4keq2O1etj+fSoawl4w+fOrQyG5XFlJkwsplgzLQ1NZvujnTmv726qxYNy1I66OgdRTOZlaKp/o7lGeMpNM07baEGUPRp37bVO1FnhB3DN+wdtlTIBbDdEPszfFry5Ty+zIfOlvZQhR23Mn7R+MvjFy3vcq/oWdfDAT1IaPe6nqu8VcELziiXzyhnRjOZ0alqJlMd6kpC0vE948mulyE1wwxwOVQ+40KWEBzcmxldyZKDMyPnYfYbGoox643CbFludtEb7ywfdhLdPzRPpPOv1aNoTHj+BXzc2mPcAfxYTntfkuBQXvI56ks9p+XupZ9J/lvsz7Gkyi2xyIh74403bgEoeQBlgLNm5ywjJ8cmkneylzPrGL8ALkX8S6px7BeUlZGoRS80AnSsFzzgJwZElSKi87OBbdm+dLrv4MC7V1jp/oN9N9xwZiYzfZvZ/oeJU05JHMwErNV6MaGv7tqZPphgm6Z+q/vMzMG4aVXXrfOiewI5hyofeVc+03/9DX0H+9PWincPHOzNZHbeMHObyR9kujgHM2d2r9ETRX11KACvgwzwbVYgczCxbl3VMuM3p8/q6lWokwsMeutmt9O76H6YCd0Aa1YDJ+6dX1Qym7plw97pmmwKAJict3xXyFb9TStsi7GLA8zKGzOlFKEEgSnCyOcirdT/qFTDy0rjJ19969Unj5eW4WX1awC6EnIxc90BvLJ3w44NvfeF4j3Dwood62PZYjytGBIXYIchXVcrEdS1bPLkq0+G3+SyLheVauQijrqI8DwhiHJnTfZu6IVf/fvxUFBbu3OlPHjGFjsWij+nWFaAE00FZiCbf3fQD9NbUL5lTQmj25kJ+wBme39nW1cZz6+or18Cs3F2Tcs7r7zirJikZfJS7KLL1+C/g0rX5lT6b+ZUVjZl+Omm2azs2EVr49E1FSNvaMbwUHznspb1di+ZX18sGSEDMHMoZjXXAf+c/gD4rjCM7w0Ac/agK2C+eSKAmQMZPfafZuceezlT8abODNTWFx74Zzj7JzdXat42CkFMswuOf/OyEGzyf8wopXew9ds785XoZP37nZVKp3d/BxDxlAwSzsk5lYEDpqP+a2xdbFUs9mNt74YfctwqwuMfdrv/YTqV/BOdlegbf8XRJ4BZf9wxn6Q0mo1WOp80oy4e7iR3dA47Wcinfh1r4CfY25/sLD/hmAcM7ccxeOe62L+qW37I8VOE/BDXosYHOoeHOz9gRLfsYQ94MOlO+gt6tYcXGBwYqXkMKLCp2VzJY00dxpqucTIGvc7szxqv32HS3Y75+h1Gtt+k1xmZqzMDBr2e3UHYdCJjIIuaOP1X5HlGWRfYCyeJI0MOKQw54PdYuvuEhuOdAVwg3YHOONbqj+sDOl6jF+JYd39EerR4IVD/kt7Yc/Uu+iS9HDAum7dTbIcC/9yxBgE5rdxaaRxiGhbw9Dhm85adYCjYc/aCy89Z1PyNqxVry8143PxErYj7i7VPMLWJ5aP1fwIa8peEcy/Ey2Ew/oByQD3FYp2x2Ev+5fJakewGz75irVbcB576/cVR8mT9fm/4796xj13rG2Mh3Mfe6P6AuTN+1Gwr8mXyOSYlxHwKACuUjNE3vBDG23FOdmwgax0ZkDC+oA7caljDv9HCMpXqWuf85wtsRkOdAHLXCqMj5LD7j83ncU7H9/rPu8LM8wwv7OeSABf3o5+i1zC0N984TxIGOwPwRSYFZnh4gElVvRiP3oEQFjMy2pgjcGFRZNwHpGEvyEfd7BxVmEEQwiKZZMGT0Po2YmGhkUuRASMP7UACZjm2AoBPxH/ziL+XRq0yDHn0YsEvkT8d4RFWKjYDkzjiv8pfYGxIggX/xFZ2sisrRsR2mMSBrb7NI858OD6AyUl7E4MJylMasUZGwhstXbcihBIukxhIQEyGMuWkCFMy2pA6IxVhDHowWQjv7RhIcOypQKG7EDg1EAwGIh7jnwkXksHEQEcnMPMkEjCMwIbwyIgVAaYFL38pmef3AruTX74iEuHoqRhHbC1aSed4PpOuxvQovP9U9lxkRTJVwNxeHufHpyJhjmNJI1p0JJ1hxCCQiGpAi0Yw3ghww46s/Oiy3cuW7b6KOctyy2L64EkrC6nKfqhAjon/SMQK6NYGq8oKwgkdgwm//ATKX+yC8nd0eKXnOK/0UG3Oe4pVa4NXw5mKQ6zAsXp3FYIb/ObiMCd1j/+rOgIVoUROVxw1YlO6wa/J8jzmGxWxOW6jVxFdBTKX8kJmJKY74WbSybE8JXsptE8quSpiw3s3EuI46spG1cDBk4WVJw3qsWW5VCWF/i9drUT1AHicY2BkYGAA4oBliR3x/DZfGbhZGEDgsZfrbxj9////BhZZ5jYgl4OBCSQKAE9UDJsAAAB4nGNgZGBgbvjfwBDDIvP///9/LLIMQBEUkA8ApekHDHicY2FgYGAZxYMM//9PUI3M//8A1FEF1QAAAAABqAJkAqoDFgOyBs4HOAegCPQJzgoaC9AMgA1ADYwOYA7eD6wP9BBAEQYR/BJeEtoTgBOgFEQU2BVUFbgWQhaAFrYXRBfgGEYZ9huSHBIcZhzIHVoeLCFiIc4iACKCJXYlxiX+JnQoAihKKI4pFimCKdwqais8K5Ir8CxoLOAtVDB4MLYxTjRQN1I3hjgyOMo5BDwaPI48sj0APUI9yj5iPrI/ZkAQQGRAmEDGQmJCsEMcRRJFZEZGRpZG7EiqSQBJWEmUShpKXkreS1RLzkxkTJRMuk0qTUpNak7UeJxjYGRgYMhnms1QzQACTEDMBYQMDP/BfAYALmMCngB4nH2Py07CQBiFT7lIhMSFJq5YjDEhJoZyWZjIFgNLExLZuSjtFEraTjMdILyB7+Aj+BQ+iL6AL+GhjCawoM38853zX/oXwCW+4WD/XPHs2cEF1Z5LqOHGcpn+neUK+cFyFQ08WT6j/2y5jnu8Wm5w4hsnOJVzqhbeLTto4tNyib1flsv0fyxX0HRqlqu4dm4tn9F/tFzH1Hmx3EDL+Rhq6RkZiNlWRL5KQ5Wa3d0OAhm1w1htJnK+ij19aB6qqdR5pFLRc7uHibFMpf4bn6/nfWNCEWqViBG/I+NYiUyrpfSNuzAmG3Q6ofVdXyUYQkPCg2EMIDDDljGCD4UUYRHNv26zJmBlRAoR09tgQj3HisrjrFOVp3JTao2c3q5CoAcX3ZMdY+q06DrePseaG/XpGlYLHs2OhDSy/yM5YzdFICtySzo+fReLoivDAB2+4VG9W+yT/AKrK35GAAB4nHVVZ2PbNhDVcyQ5lqzYluUkTpomHelIyraS7YzuvTK6m3QXJC8SIhBgQFB2/n3BVZEqwg+SeMA93L17D2qttYqn13I/Cms4hTY66GIdp7GBHvrYxABnsIVt7GCIXYywh7M4h/PYxwVcxHO4hOdxGVfwAl7ES3gZV/EKXsVreB3XcB1vwMObeAtvY4wJDnCII9zATdzCbbyDd/Ee3scH+BAf4WN8gk/xGT7HF/gSX+FrfIM7uIt7uI9v8R2+xw/4ET/hZ/yCB3iIX/Ebfscf+BN/4W/8AwYfAUIQHmGKGTgeYw6BCBIKcetSYpg2Hi1IGi9QUUwyYZ5U0uPS0F72oSMKOTNUbbq5kZAMPcOS+W49O6IkYVNnjpmcdSGNJ72QGWaPilMzykCbdRi+npBe8IB6qf2RHzneEkySF/IFD8kzx2pUr6EqfNdXqQyZfloVwCN3M7d3cjguLb7xmK8W1JlqlcbONo72VnADJgMSwyT1vVirwDLgRUzPSQ/+48jz2byfBJrHJn/fLFvKX04Z5q/bdiML1o+YTJnI46cTepKSxS4ISozS1C3Wh36acJmdpFNRoAwaoQYhMdNMCBLrmgLiC9qvl0onMbNVFhWPmkqQITdcOTk7GC5HVQ59vOeawsQZvbFTj2aT0cOphT9mJas+Syisn5EKw2PhVtbBRi4Nbit2a+yw0ViF1QlmltLRyjhJa6WdPR82is73tTPljBybpbPtcUNpPgl1fGbZo91FlxtYZqbVcbma8KlkYrOcYWG9ZW6WxKXNWVVnkdYtxLe9TCjiw3qVRagvlIrdeigcuVUNKgsIOnFTftTPVatSY32977xDMle4k8cXV7ooJZaT2M5s5RzQ5Moz2SsBRoWnDLcei3jZ5XnHRZGftNO4ZmaaaBBYJ3ksMDZmntZmJ7ic941mlh+7qKRTp+Orz6xved0puV0RXBnX2ez/OKpD9CoIpcs5+I8pMJtVOJOaU6EHu3WYkqCabIrLzpl61K/QT6wxMkduLfNyt9Sud0osk/kZTqzDAQu9mQrKArq5v8fDipDl7BoKrUC3VyCpnY2nLVQw76Yy+2pbLk23aGZNzTt2csmsLeiR6Wg+nRn7n2MMl9NW61/Z9cD6') format('woff'), + url('data:font/ttf;base64,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AADmjwAAAGgAAOaQAADmkAAAADMAAOaRAADmkQAAADQAAOaSAADmkgAAADUAAOaTAADmkwAAADYAAOaUAADmlAAAADcAAOaVAADmlQAAAGYAAOaWAADmlgAAADgAAOaXAADmlwAAAGkAAOaYAADmmAAAADkAAOaZAADmmQAAAGoAAOaaAADmmgAAADoAAOabAADmmwAAADwAAOacAADmnAAAAD0AAOadAADmnQAAAD4AAOaeAADmngAAAD8AAOafAADmnwAAAGIAAOagAADmoAAAAEAAAOahAADmoQAAAEEAAOaiAADmogAAAAMAAOajAADmowAAAEIAAOakAADmpAAAAG4AAOalAADmpQAAAAIAAOamAADmpgAAAEMAAOanAADmpwAAAAUAAOaoAADmqAAAAEcAAOapAADmqQAAAEgAAOaqAADmqgAAAEkAAOarAADmqwAAAEsAAOasAADmrAAAAEwAAOatAADmrQAAAE0AAOauAADmrgAAAE4AAOavAADmrwAAAE8AAOawAADmsAAAAFAAAOaxAADmsQAAAFEAAOayAADmsgAAAFIAAOazAADmswAAAFMAAOa0AADmtAAAAFQAAOa1AADmtQAAAFUAAOa2AADmtgAAAFYAAOa3AADmtwAAACQAAOa4AADmuAAAAFcAAOa5AADmuQAAAGEAAOa6AADmugAAAFgAAOa7AADmuwAAAFkAAOa8AADmvAAAAAQAAOa9AADmvQAAAFoAAOa+AADmvgAAAFsAAOa/AADmvwAAAF0AAObAAADmwAAAAF4AAObBAADmwQAAAAUAAObCAADmwgAAAF8AAObDAADmwwAAAAEAAObEAADmxAAAAAcAAObFAADmxQAAAAgAAObGAADmxgAAAAkAAObHAADmxwAAAAoAAObJAADmyQAAAAsAAObKAADmygAAAAwAAObLAADmywAAAA0AAObOAADmzgAAAGQAAObPAADmzwAAAGAAAObQAADm0AAAAGwAAObRAADm0QAAAA4AAObSAADm0gAAAG0AAObTAADm0wAAAGMAAObYAADm2AAAAA8AAObZAADm2QAAAGcAAObaAADm2gAAABAAAObcAADm3AAAABEAAObdAADm3QAAABIAAObeAADm3gAAABMAAObfAADm3wAAABQAAObgAADm4AAAABYAAObhAADm4QAAABcAAObi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LgAwAGkAYwBvAG4ALQBkAGQAZQBpAC0AZgBsAG8AdwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAAdc3RhcnQtZXZlbnQtY29tcGVuc2Etbm9uLWludGUVaW50ZXJtZWRpYXRlLWV2ZW50LWM3CXNlbmQtdGFzaxNzdGFydC1ldmVudC1tZXNzYWdlFWludGVybWVkaWF0ZS1ldmVudC10MhZpbnRlcm1lZGlhdGUtZXZlbnQtYzEyCmRhdGEtaW5wdXQUZW5kLWV2ZW50LWNvbXBlbnNhdGkHc2VydmljZQp1c2VyLXRhc2sxD2xhbmUtZGl2aWRlLXR3bxRzdGFydC1ldmVudC1ub24taW50ZRNib3VuZGFyeS1ldmVudC10aW1lFWludGVybWVkaWF0ZS1ldmVudC1jORFsYW5lLWluc2VydC1hYm92ZQVncm91cBVpbnRlcm1lZGlhdGUtZXZlbnQtdDUVYm91bmRhcnktZXZlbnQtY2FuY2VsEnN1Yi1wcm9jZXNzLW1hcmtlcg1zZW5kLXRhc2stYmFrC3NjcmlwdC10YXNrDHNlcnZpY2UtdGFzawN0YWIHY29tbWVudAttYW51YWwtdGFzawhzZXF1ZW5jZQpkYXRhLXN0b3JlBm1hbnVhbBJidXNpbmVzcy1ydWxlLXRhc2sNYnVzaW5lc3MtcnVsZRRzdGFydC1ldmVudC1wYXJhbGxlbAdyZWNlaXZlGXN1Yi1wcm9jZXNzLWV4cGFuZC1tYXJrZXIUc3RhcnQtZXZlbnQtY29uZGl0aW8VaW50ZXJtZWRpYXRlLWV2ZW50LWMzEmVuZC1ldmVudC1tZXNzYWdlMRVzdGFydC1ldmVudC1ub24taW50ZTIVc3RhcnQtZXZlbnQtbm9uLWludGU2EXN0YXJ0LWV2ZW50LXRpbWVyEmdhdGV3YXktZXZlbnRiYXNlZBJlbmQtZXZlbnQtbXVsdGlwbGUVaW50ZXJtZWRpYXRlLWV2ZW50LXQzCXVzZXItaWNvbhZpbnRlcm1lZGlhdGUtZXZlbnQtYzE0FHN0YXJ0LWV2ZW50LW11bHRpcGxlBWNob3JlFGJvdW5kYXJ5LWV2ZW50LWVycm9yFWludGVybWVkaWF0ZS1ldmVudC1jNBFzdGFydC1ldmVudC1lcnJvcgRsYW5lFGludGVybWVkaWF0ZS1ldmVudC1uFXN0YXJ0LWV2ZW50LW5vbi1pbnRlMRFsYW5lLWluc2VydC1iZWxvdw5lbmQtZXZlbnQtbm9uZR9pbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtc2lnbmFsDHJlY2VpdmUtdGFzaxNlbmQtZXZlbnQtdGVybWluYXRlFWJvdW5kYXJ5LWV2ZW50LXNpZ25hbAZzY3JpcHQQZW5kLWV2ZW50LXNpZ25hbBJzdGFydC1ldmVudC1zaWduYWwLbG9vcC1tYXJrZXIUc3RhcnQtZXZlbnQtY29tcGVuc2EPZ2F0ZXdheS1jb21wbGV4FmludGVybWVkaWF0ZS1ldmVudC1jMTULZGF0YS1vdXRwdXQZaW50ZXJtZWRpYXRlLWV2ZW50LWM3LWJhaxZpbnRlcm1lZGlhdGUtZXZlbnQtYzExG2JvdW5kYXJ5LWV2ZW50LW1lc3NhZ2UtaW50ZQRzZW5kFWludGVybWVkaWF0ZS1ldmVudC1jMiBpbnRlcm1lZGlhdGUtdGhyb3ctZXZlbnQtbWVzc2FnZRRzZXF1ZW50aWFsLW1pLW1hcmtlchhib3VuZGFyeS1ldmVudC10aW1lLWludGURbGFuZS1kaXZpZGUtdGhyZWUNY2FsbC1hY3Rpdml0eQ5lbmQtZXZlbnQtbGluawt0cmFuc2FjdGlvbhVpbnRlcm1lZGlhdGUtZXZlbnQtdDElaW50ZXJtZWRpYXRlLXRocm93LWV2ZW50LWNvbXBlbnNhdGlvbhBnYXRld2F5LXBhcmFsbGVsFWludGVybWVkaWF0ZS1ldmVudC1jMRtib3VuZGFyeS1ldmVudC1jb21wZW5zYXRpb24KZ2F0ZXdheS1vcgtkYXRhLW9iamVjdAxnYXRld2F5LW5vbmUVc3RhcnQtZXZlbnQtbm9uLWludGUzE2NvbXBlbnNhdGlvbi1tYXJrZXIQZW5kLWV2ZW50LWNhbmNlbBVzdGFydC1ldmVudC1ub24taW50ZTULZ2F0ZXdheS14b3IEdXNlcg9lbmQtZXZlbnQtZXJyb3IUZW5kLWV2ZW50LWVzY2FsYXRpb24Vc3RhcnQtZXZlbnQtbm9uLWludGU0DWFkLWhvYy1tYXJrZXIGdXNlci0xEnBhcmFsbGVsLW1pLW1hcmtlchRzdGFydC1ldmVudC1lc2NhbGF0aRBzdGFydC1ldmVudC1ub25lBGxpbmsEbG9jawZ1bmxvY2sEZWRpdAZjYW5jZWwCb2sFdHJhc2gEbGVmdAVyaWdodAdzZXR0aW5nAAAAAA==') format('truetype'), + url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxtZXRhZGF0YT5DcmVhdGVkIGJ5IGljb25mb250PC9tZXRhZGF0YT4KICA8ZGVmcz4KICA8Zm9udCBpZD0iaWNvbi1kZGVpLWZsb3ciIGhvcml6LWFkdi14PSIxMDI0Ij4KICAgIDxmb250LWZhY2UKICAgICAgZm9udC1mYW1pbHk9Imljb24tZGRlaS1mbG93IgogICAgICBmb250LXdlaWdodD0iNDAwIgogICAgICBmb250LXN0cmV0Y2g9Im5vcm1hbCIKICAgICAgdW5pdHMtcGVyLWVtPSIxMDI0IgogICAgICBhc2NlbnQ9Ijg5NiIKICAgICAgZGVzY2VudD0iLTEyOCIKICAgIC8+CiAgICAgIDxtaXNzaW5nLWdseXBoIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhcnQtZXZlbnQtY29tcGVuc2Etbm9uLWludGUiIHVuaWNvZGU9IiYjNTkwNzU7IiBkPSJNNTEyIDgxMC42NjY2NjdoLTIwLjQ4Yy0yLjk4NjY2Ny0wLjQyNjY2Ny01Ljk3MzMzMy0wLjg1MzMzMy04Ljk2LTAuODUzMzM0aC02LjRjLTI3LjMwNjY2Ny0yLjk4NjY2Ny01NC4xODY2NjctNy42OC04MC4yMTMzMzMtMTQuOTMzMzMzbDEyLjM3MzMzMy02MS40NCAzMS41NzMzMzMgNi40QTM2OS4wNjY2NjcgMzY5LjA2NjY2NyAwIDAgMCA1MTIgNzQ3LjA5MzMzM2gxNS4zNmwxNS4zNi0xLjI4YzI0LjMyLTIuMTMzMzMzIDQ4LjIxMzMzMy02LjQgNzEuMjUzMzMzLTEzLjIyNjY2NmwzMC43Mi04Ljk2IDE3LjQ5MzMzNCA2MC4xNmMtMTIuMzczMzMzIDQuNjkzMzMzLTI1LjE3MzMzMyA4Ljk2LTM3Ljk3MzMzNCAxMi4zNzMzMzNoLTIuMTMzMzMzdjAuODUzMzMzaC0yLjU2Vjc5Ny44NjY2NjdoLTIuNTZ2MC44NTMzMzNoLTEuMjhjLTIxLjc2IDUuNTQ2NjY3LTQ0LjM3MzMzMyA5LjM4NjY2Ny02Ny40MTMzMzMgMTEuNTItMTEuNTIgMC44NTMzMzMtMjMuNDY2NjY3IDEuMjgtMzUuNDEzMzM0IDEuMjh6IG0tMTc1Ljc4NjY2Ny0zNy45NzMzMzRjLTkuODEzMzMzLTQuMjY2NjY3LTE5LjItOC45Ni0yOC41ODY2NjYtMTQuMDgtNS45NzMzMzMtMy40MTMzMzMtMTEuNTItNi40LTE3LjA2NjY2Ny05LjgxMzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMC40MjY2NjdsLTIuMTMzMzMzLTEuNzA2NjY2aC0wLjg1MzMzNHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzNsLTIuNTYtMi4xMzMzMzNoLTAuODUzMzM0di0wLjg1MzMzNGgtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuNDI2NjY3bC01Ljk3MzMzMy00LjY5MzMzNGMtMTYuNjQtMTIuMzczMzMzLTMyLjQyNjY2Ny0yNS42LTQ3LjM2LTQwLjEwNjY2Nmw0MC41MzMzMzMtNDguMjEzMzM0IDI0LjMyIDIwLjQ4YzE4LjM0NjY2NyAxNS43ODY2NjcgMzguNCAyOS40NCA1OS43MzMzMzMgNDAuOTZsMjguMTYgMTUuMzYtMzAuMjkzMzMzIDU1LjA0ek0xNzEuNTIgNjQwLjg1MzMzM2MtNi40LTguNTMzMzMzLTEyLjM3MzMzMy0xNy4wNjY2NjctMTguMzQ2NjY3LTI2LjAyNjY2Ni01LjEyLTguMTA2NjY3LTkuODEzMzMzLTE2LjIxMzMzMy0xNC41MDY2NjYtMjQuMzJ2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0xLjcwNjY2N2gtMC40MjY2NjZ2LTMuODRoLTAuNDI2NjY3di01Ljk3MzMzM0gxMzYuNTMzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjZjLTEuMjgtMi41Ni0yLjEzMzMzMy00LjY5MzMzMy0yLjk4NjY2Ny02LjgyNjY2N3YtMi41NmgtMC40MjY2NjdjLTEuMjgtMi4xMzMzMzMtMi4xMzMzMzMtNC42OTMzMzMtMy40MTMzMzMtNi44MjY2Njd2LTIuNTZzLTEuMjgtMy40MTMzMzMtMi4xMzMzMzMtNC42OTMzMzNWNTQ0LjQyNjY2N2wtMS4yOC0yLjk4NjY2N3YtMC44NTMzMzNzLTEuMjgtMi45ODY2NjctMS43MDY2NjctNC42OTMzMzRjLTMuODQtOS44MTMzMzMtNy4yNTMzMzMtMjAuMDUzMzMzLTEwLjI0LTMwLjI5MzMzM2w1OC40NTMzMzMtMjIuNjEzMzMzIDExLjUyIDI5Ljg2NjY2NmM4LjUzMzMzMyAyMi42MTMzMzMgMTkuNjI2NjY3IDQzLjk0NjY2NyAzMi44NTMzMzQgNjQuNDI2NjY3bDE3LjQ5MzMzMyAyNi44OC01Mi45MDY2NjcgMzQuMTMzMzMzeiBtLTgxLjQ5MzMzMy0xOTQuNTZjLTEuNzA2NjY3LTEwLjI0LTIuNTYtMjAuOTA2NjY3LTMuNDEzMzM0LTMxLjU3MzMzMyAwLTUuOTczMzMzLTAuODUzMzMzLTExLjk0NjY2Ny0wLjg1MzMzMy0xNy45MlYzNTYuMjY2NjY3YzAtOC41MzMzMzMgMC44NTMzMzMtMTYuNjQgMS43MDY2NjctMjQuMzJ2LTcuNjhjMS4yOC0xMS45NDY2NjcgMy40MTMzMzMtMjMuNDY2NjY3IDUuNTQ2NjY2LTM0Ljk4NjY2N2w2Mi4yOTMzMzQgOC4xMDY2NjctNC4yNjY2NjcgMzEuNTczMzMzYy0yLjEzMzMzMyAxNS4zNi0yLjk4NjY2NyAzMS4xNDY2NjctMi45ODY2NjcgNDYuOTMzMzMzIDAgOC41MzMzMzMgMCAxNy4wNjY2NjcgMC44NTMzMzQgMjUuNmwyLjEzMzMzMyAzMi02Mi43MiA0LjI2NjY2N3ogbTc4LjkzMzMzMy0xODMuODkzMzMzbC01Ny4xNzMzMzMtMjYuMDI2NjY3YzMuODQtOS44MTMzMzMgNy42OC0xOS42MjY2NjcgMTEuOTQ2NjY2LTI5LjQ0IDIuMTMzMzMzLTQuNjkzMzMzIDQuMjY2NjY3LTkuMzg2NjY3IDYuNC0xMy42NTMzMzN2LTQuMjY2NjY3aDAuNDI2NjY3YzkuODEzMzMzLTE5LjIgMjAuNDgtMzcuMTIgMzIuODUzMzMzLTU0LjE4NjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2M2LjQtOC45NiAxMi44LTE3LjQ5MzMzMyAyMC4wNTMzMzMtMjUuNmw1MC43NzMzMzMgMzcuMTItMTguNzczMzMzIDI2LjAyNjY2NmMtMTQuMDggMTkuNjI2NjY3LTI2LjQ1MzMzMyA0MC41MzMzMzMtMzYuNjkzMzMzIDYyLjI5MzMzNGwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzMtMTQ5Ljc2bC0zNy41NDY2NjYtNTAuMzQ2NjY3YzEyLjM3MzMzMy0xMC42NjY2NjcgMjUuNi0yMC45MDY2NjcgMzkuMjUzMzMzLTMwLjI5MzMzM2gwLjg1MzMzM3YtMC44NTMzMzNoMS4yOHYtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzYzE3LjA2NjY2Ny0xMS45NDY2NjcgMzQuOTg2NjY3LTIyLjE4NjY2NyA1My43Ni0zMS4xNDY2NjcgOS4zODY2NjctNC42OTMzMzMgMTkuMi04Ljk2IDI5LjAxMzMzMy0xMi44bDI2Ljg4IDU2Ljc0NjY2Ny0yOS4wMTMzMzMgMTMuNjUzMzMzYy0yMS43NiAxMC4yNC00Mi42NjY2NjcgMjMuMDQtNjEuODY2NjY3IDM3LjU0NjY2N2wtMjUuNiAxOS4yeiBtMTU5LjU3MzMzNC04My4ybC04Ljk2LTYyLjI5MzMzM2MxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctNC4yNjY2NjcgMzEuNTczMzMzLTUuNTQ2NjY3IDEwLjY2NjY2Ny0xLjcwNjY2NyAyMC45MDY2NjctMi41NiAzMS41NzMzMzMtMy40MTMzMzNoMTIuMzczMzM0Vi00Mi42NjY2NjdoMzMuNzA2NjY2YzEzLjIyNjY2NyAwLjQyNjY2NyAyNi40NTMzMzMgMS43MDY2NjcgMzkuMjUzMzM0IDMuNDEzMzM0bC0zLjQxMzMzNCA2Mi43Mi0zMi0xLjcwNjY2N2MtNi44MjY2NjcgMC0xNC4wOC0wLjQyNjY2Ny0yMC45MDY2NjYtMC40MjY2NjctMTcuMDY2NjY3IDAtMzQuNTYgMS4yOC01MS4yIDMuNDEzMzM0bC0zMS41NzMzMzQgNC42OTMzMzN6IG0zMDIuMDggNjRsLTI3LjMwNjY2Ny0xNy4wNjY2NjdjLTIwLjQ4LTEyLjgtNDIuMjQtMjMuNDY2NjY3LTY0Ljg1MzMzMy0zMmwtMjkuODY2NjY3LTExLjA5MzMzMyAyMi4xODY2NjctNTguODhjMTAuMjQgMi45ODY2NjcgMjAuNDggNi40IDMwLjI5MzMzMyAxMC4yNCAyNi44OCAxMC4yNCA1Mi40OCAyMi42MTMzMzMgNzYuMzczMzMzIDM3Ljk3MzMzMyA4Ljk2IDUuOTczMzMzIDE3LjkyIDExLjUyIDI2LjQ1MzMzNCAxNy45MmwtMzMuMjggNTMuMzMzMzM0eiBtMTEyLjY0IDE0MC44bC0xNS43ODY2NjctMjcuNzMzMzMzYy0xMS45NDY2NjctMjAuOTA2NjY3LTI2LjAyNjY2Ny00MC45Ni00MS44MTMzMzMtNTkuMzA2NjY3bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZjNy42OCA3LjY4IDE0LjkzMzMzMyAxNS4zNiAyMS43NiAyMy4wNCAzLjQxMzMzMyA0LjI2NjY2NyA2LjgyNjY2NyA4LjEwNjY2NyA5LjgxMzMzMyAxMi4zNzMzMzN2MC44NTMzMzRoMC40MjY2NjdsMi4xMzMzMzMgMi45ODY2NjZoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2NjdWMTI4aDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzSDg1My4zMzMzMzN2MC44NTMzMzNsMi41NiAzLjg0djAuODUzMzM0YzE0LjkzMzMzMyAyMC45MDY2NjcgMjcuNzMzMzMzIDQzLjA5MzMzMyAzOC40IDY2LjEzMzMzM2wtNTQuNjEzMzMzIDMwLjcyeiBtMzEuMTQ2NjY2IDE3Ny40OTMzMzN2LTMyYy0wLjg1MzMzMy0yNC4zMi0zLjQxMzMzMy00OC42NC04LjUzMzMzMy03Mi4xMDY2NjZsLTYuODI2NjY3LTMxLjE0NjY2NyA2MS40NC0xMy4yMjY2NjdjMTEuNTIgMzguNCAxNy40OTMzMzMgNzguOTMzMzMzIDE3LjQ5MzMzNCAxMjEuMTczMzM0IDAgOC45NiAwIDE3LjkyLTAuODUzMzM0IDI2LjQ1MzMzM2wtNjIuNzIgMC44NTMzMzN6IG0tMi4xMzMzMzMgMjAwLjEwNjY2N2wtNTUuNDY2NjY3LTI5LjQ0IDE0LjkzMzMzNC0yOC4xNmMxMS41Mi0yMS4zMzMzMzMgMjAuNDgtNDMuOTQ2NjY3IDI3LjMwNjY2Ni02Ni45ODY2NjdsOC45Ni0zMC43MiA2MC4xNiAxNy45MmMtMi41NiAxMi4zNzMzMzMtNS45NzMzMzMgMjQuMzItOS4zODY2NjYgMzYuMjY2NjY3VjUxOS4yNTMzMzNjLTMuNDEzMzMzIDEwLjI0LTcuMjUzMzMzIDIwLjA1MzMzMy0xMS4wOTMzMzQgMjkuODY2NjY3VjU1Ny42NTMzMzNjLTguNTMzMzMzIDE5LjYyNjY2Ny0xOC4zNDY2NjcgMzcuOTczMzMzLTI5Ljg2NjY2NiA1NS44OTMzMzR6IG0tMTUzLjE3MzMzMyAxNDUuNDkzMzMzbC0zNC41Ni01Mi40OCAyNi44OC0xNy40OTMzMzNjMjAuMDUzMzMzLTEzLjIyNjY2NyAzOC44MjY2NjctMjguNTg2NjY3IDU2LjMyLTQ1LjY1MzMzM2wyMi42MTMzMzMtMjIuNjEzMzM0IDQ0LjM3MzMzMyA0NC4zNzMzMzRhNDIzLjE2OCA0MjMuMTY4IDAgMCAxLTg1LjMzMzMzMyA3NS41MmgtMC44NTMzMzN2MC44NTMzMzNoLTEuMjh2MC44NTMzMzNoLTAuNDI2NjY3Yy04Ljk2IDYuNC0xNy45MiAxMS45NDY2NjctMjcuMzA2NjY3IDE3LjA2NjY2N3pNNDUyLjI2NjY2NyA0MzMuNDkzMzMzdi05OC45ODY2NjZMMzg3LjQxMzMzMyAzODRsNjQuODUzMzM0IDQ5LjQ5MzMzM20yNS42IDY5LjEyYy0zLjQxMzMzMyAwLTcuMjUzMzMzLTEuMjgtMTAuMjQtMy40MTMzMzNsLTEzMi42OTMzMzQtMTAxLjEyYy04Ljk2LTYuODI2NjY3LTguOTYtMjAuMDUzMzMzIDAtMjYuODhsMTMyLjY5MzMzNC0xMDEuMTJjMi45ODY2NjctMi41NiA2LjgyNjY2Ny0zLjQxMzMzMyAxMC4yNC0zLjQxMzMzMyA4Ljk2IDAgMTcuMDY2NjY3IDYuODI2NjY3IDE3LjA2NjY2NiAxNy4wNjY2NjZWNDg2LjRjMCAxMC4yNC04LjEwNjY2NyAxNy4wNjY2NjctMTcuMDY2NjY2IDE3LjA2NjY2N3pNNjE4LjY2NjY2NyA0MzMuNDkzMzMzdi05OC45ODY2NjZMNTUzLjgxMzMzMyAzODRsNjQuODUzMzM0IDQ5LjQ5MzMzM20yNS42IDY5LjEyYy0zLjQxMzMzMyAwLTcuMjUzMzMzLTEuMjgtMTAuMjQtMy40MTMzMzNsLTEzMi42OTMzMzQtMTAxLjEyYy04Ljk2LTYuODI2NjY3LTguOTYtMjAuMDUzMzMzIDAtMjYuODhsMTMyLjY5MzMzNC0xMDEuMTJjMi45ODY2NjctMi41NiA2LjgyNjY2Ny0zLjQxMzMzMyAxMC4yNC0zLjQxMzMzMyA4Ljk2IDAgMTcuMDY2NjY3IDYuODI2NjY3IDE3LjA2NjY2NiAxNy4wNjY2NjZWNDg2LjRjMCAxMC4yNC04LjEwNjY2NyAxNy4wNjY2NjctMTcuMDY2NjY2IDE3LjA2NjY2N3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtYzciIHVuaWNvZGU9IiYjNTkwNDU7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek01NjIuNzczMzMzIDIyMS44NjY2NjdoLTEwMS41NDY2NjZjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzQgMjEuMzMzMzMzdjY4LjY5MzMzM0gzNzEuMmMtMTEuOTQ2NjY3IDAtMjEuMzMzMzMzIDkuMzg2NjY3LTIxLjMzMzMzMyAyMS4zMzMzMzR2MTAxLjU0NjY2NmMwIDExLjk0NjY2NyA5LjM4NjY2NyAyMS4zMzMzMzMgMjEuMzMzMzMzIDIxLjMzMzMzNGg2OC42OTMzMzNWNTI0LjhjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzNCAyMS4zMzMzMzNoMTAxLjU0NjY2NmMxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzM0LTIxLjMzMzMzM3YtNjguNjkzMzMzaDY4LjY5MzMzM2MxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzMzLTIxLjMzMzMzNHYtMTAxLjU0NjY2NmMwLTExLjk0NjY2Ny05LjM4NjY2Ny0yMS4zMzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNGgtNjguNjkzMzMzdi02OC42OTMzMzNjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzNC0yMS4zMzMzMzN6IG0tODAuMjEzMzMzIDQyLjY2NjY2Nmg1OC44OHY2OC42OTMzMzRjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzMyAyMS4zMzMzMzNoNjguNjkzMzM0djU4Ljg4aC02OC42OTMzMzRjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzMgMjEuMzMzMzMzVjUwMy40NjY2NjdoLTU4Ljg4di02OC42OTMzMzRjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNIMzkyLjUzMzMzM3YtNTguODhoNjguNjkzMzM0YzExLjk0NjY2NyAwIDIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzMtMjEuMzMzMzMzdi02OC42OTMzMzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VuZC10YXNrIiB1bmljb2RlPSImIzU5MDQyOyIgZD0iTTg3Ni44IDY0Mi4xMzMzMzN2LTUxNi4yNjY2NjZIMTQ3LjJWNjQyLjEzMzMzM2g3MjkuNm0yMC40OCA2MS44NjY2NjdIMTI2LjcyYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3LTQxLjM4NjY2N3YtNTU3LjIyNjY2NmMwLTIyLjYxMzMzMyAxOC4zNDY2NjctNDEuMzg2NjY3IDQxLjM4NjY2Ny00MS4zODY2NjdoNzcwLjU2YzIyLjYxMzMzMyAwIDQxLjM4NjY2NyAxOC4zNDY2NjcgNDEuMzg2NjY3IDQxLjM4NjY2N1Y2NjIuNjEzMzMzYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3IDQxLjM4NjY2N3pNNTU0LjY2NjY2NyA1MzIuOTA2NjY3bC0xNzIuOC05OS44NEwyMTMuMzMzMzMzIDUzMC4zNDY2Njd2MTQuNTA2NjY2YzAgMTcuMDY2NjY3IDE0LjA4IDMxLjE0NjY2NyAzMS4xNDY2NjcgMzEuMTQ2NjY3aDI3OS4wNGMxNy4wNjY2NjcgMCAzMS4xNDY2NjctMTQuMDggMzEuMTQ2NjY3LTMxLjE0NjY2N3YtMTEuOTQ2NjY2eiBtMC0zNS44NHYtMTY5LjM4NjY2N2MwLTE3LjA2NjY2Ny0xNC4wOC0zMS4xNDY2NjctMzEuMTQ2NjY3LTMxLjE0NjY2N0gyNDQuNDhjLTE3LjA2NjY2NyAwLTMxLjE0NjY2NyAxNC4wOC0zMS4xNDY2NjcgMzEuMTQ2NjY3VjQ5NC41MDY2NjdsMTYwLjg1MzMzNC05Mi41ODY2NjdjNS41NDY2NjctMy40MTMzMzMgMTEuOTQ2NjY3LTIuNTYgMTcuMDY2NjY2IDAuODUzMzMzaDAuODUzMzM0bDE2Mi45ODY2NjYgOTQuMjkzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LW1lc3NhZ2UiIHVuaWNvZGU9IiYjNTkwNjg7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNjU4Ljc3MzMzMyA1MDMuMDRIMzY1LjY1MzMzM2MtOC41MzMzMzMgMC0xNS4zNi02LjgyNjY2Ny0xNS4zNi0xNS4zNnYtMjA2LjkzMzMzM2MwLTguNTMzMzMzIDYuODI2NjY3LTE1LjM2IDE1LjM2LTE1LjM2aDI5My4xMmM4LjUzMzMzMyAwIDE1LjM2IDYuODI2NjY3IDE1LjM2IDE1LjM2VjQ4Ny42OGMwIDguNTMzMzMzLTYuODI2NjY3IDE1LjM2LTE1LjM2IDE1LjM2ek01MTIgNDAzLjJsLTkwLjg4IDU3LjE3MzMzM2gxODEuNzZMNTEyIDQwMy4yeiBtLTExOS40NjY2NjctOTUuMTQ2NjY3djExOS44OTMzMzRsMTA3Ljk0NjY2Ny02OC4yNjY2NjdoMC44NTMzMzNjMy40MTMzMzMtMS43MDY2NjcgNi44MjY2NjctMi45ODY2NjcgMTAuNjY2NjY3LTIuOTg2NjY3czcuMjUzMzMzIDEuMjggMTAuNjY2NjY3IDIuOTg2NjY3aDAuODUzMzMzbDEwNy45NDY2NjcgNjguMjY2NjY3di0xMTkuODkzMzM0SDM5Mi41MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LXQyIiB1bmljb2RlPSImIzU5MDczOyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA2NDBjMTQxLjIyNjY2NyAwIDI1Ni0xMTQuNzczMzMzIDI1Ni0yNTZzLTExNC43NzMzMzMtMjU2LTI1Ni0yNTYtMjU2IDExNC43NzMzMzMtMjU2IDI1NiAxMTQuNzczMzMzIDI1NiAyNTYgMjU2bTAgNjRjLTE3Ni42NCAwLTMyMC0xNDMuMzYtMzIwLTMyMHMxNDMuMzYtMzIwIDMyMC0zMjAgMzIwIDE0My4zNiAzMjAgMzIwLTE0My4zNiAzMjAtMzIwIDMyMHpNNjU4Ljc3MzMzMyA1MDMuMDRIMzY1LjY1MzMzM2MtOC41MzMzMzMgMC0xNS4zNi02LjgyNjY2Ny0xNS4zNi0xNS4zNnYtMjA2LjkzMzMzM2MwLTguNTMzMzMzIDYuODI2NjY3LTE1LjM2IDE1LjM2LTE1LjM2aDI5My4xMmM4LjUzMzMzMyAwIDE1LjM2IDYuODI2NjY3IDE1LjM2IDE1LjM2VjQ4Ny42OGMwIDguNTMzMzMzLTYuODI2NjY3IDE1LjM2LTE1LjM2IDE1LjM2ek01MTIgNDAzLjJsLTkwLjg4IDU3LjE3MzMzM2gxODEuNzZMNTEyIDQwMy4yeiBtLTExOS40NjY2NjctOTUuMTQ2NjY3djExOS44OTMzMzRsMTA3Ljk0NjY2Ny02OC4yNjY2NjdoMC44NTMzMzNjMy40MTMzMzMtMS43MDY2NjcgNi44MjY2NjctMi45ODY2NjcgMTAuNjY2NjY3LTIuOTg2NjY3czcuMjUzMzMzIDEuMjggMTAuNjY2NjY3IDIuOTg2NjY3aDAuODUzMzMzbDEwNy45NDY2NjcgNjguMjY2NjY3di0xMTkuODkzMzM0SDM5Mi41MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LWMxMiIgdW5pY29kZT0iJiM1OTAxMTsiIGQ9Ik01MTIgODEwLjY2NjY2N2gtMjAuNDhjLTIuOTg2NjY3LTAuNDI2NjY3LTUuOTczMzMzLTAuODUzMzMzLTguOTYtMC44NTMzMzRoLTYuNGMtMjcuMzA2NjY3LTIuOTg2NjY3LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDcuMDkzMzMzaDE1LjM2bDE1LjM2LTEuMjhjMjQuMzItMi4xMzMzMzMgNDguMjEzMzMzLTYuNCA3MS4yNTMzMzMtMTMuMjI2NjY2bDMwLjcyLTguOTYgMTcuNDkzMzM0IDYwLjE2Yy0xMi4zNzMzMzMgNC42OTMzMzMtMjUuMTczMzMzIDguOTYtMzcuOTczMzM0IDEyLjM3MzMzM2gtMi4xMzMzMzN2MC44NTMzMzNoLTIuNTZWNzk3Ljg2NjY2N2gtMi41NnYwLjg1MzMzM2gtMS4yOGMtMjEuNzYgNS41NDY2NjctNDQuMzczMzMzIDkuMzg2NjY3LTY3LjQxMzMzMyAxMS41Mi0xMS41MiAwLjg1MzMzMy0yMy40NjY2NjcgMS4yOC0zNS40MTMzMzQgMS4yOHogbS0xNzUuNzg2NjY3LTM3Ljk3MzMzNGMtOS44MTMzMzMtNC4yNjY2NjctMTkuMi04Ljk2LTI4LjU4NjY2Ni0xNC4wOC01Ljk3MzMzMy0zLjQxMzMzMy0xMS41Mi02LjQtMTcuMDY2NjY3LTkuODEzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0wLjQyNjY2N2wtMi4xMzMzMzMtMS43MDY2NjZoLTAuODUzMzM0di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM2wtMi41Ni0yLjEzMzMzM2gtMC44NTMzMzR2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjdsLTUuOTczMzMzLTQuNjkzMzM0Yy0xNi42NC0xMi4zNzMzMzMtMzIuNDI2NjY3LTI1LjYtNDcuMzYtNDAuMTA2NjY2bDQwLjUzMzMzMy00OC4yMTMzMzQgMjQuMzIgMjAuNDhjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzOC40IDI5LjQ0IDU5LjczMzMzMyA0MC45NmwyOC4xNiAxNS4zNi0zMC4yOTMzMzMgNTUuMDR6TTE3MS41MiA2NDAuODUzMzMzYy02LjQtOC41MzMzMzMtMTIuMzczMzMzLTE3LjA2NjY2Ny0xOC4zNDY2NjctMjYuMDI2NjY2LTUuMTItOC4xMDY2NjctOS44MTMzMzMtMTYuMjEzMzMzLTE0LjUwNjY2Ni0yNC4zMnYtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTEuNzA2NjY3aC0wLjQyNjY2NnYtMy44NGgtMC40MjY2Njd2LTUuOTczMzMzSDEzNi41MzMzMzN2LTAuODUzMzMzaC0wLjQyNjY2NmMtMS4yOC0yLjU2LTIuMTMzMzMzLTQuNjkzMzMzLTIuOTg2NjY3LTYuODI2NjY3di0yLjU2aC0wLjQyNjY2N2MtMS4yOC0yLjEzMzMzMy0yLjEzMzMzMy00LjY5MzMzMy0zLjQxMzMzMy02LjgyNjY2N3YtMi41NnMtMS4yOC0zLjQxMzMzMy0yLjEzMzMzMy00LjY5MzMzM1Y1NDQuNDI2NjY3bC0xLjI4LTIuOTg2NjY3di0wLjg1MzMzM3MtMS4yOC0yLjk4NjY2Ny0xLjcwNjY2Ny00LjY5MzMzNGMtMy44NC05LjgxMzMzMy03LjI1MzMzMy0yMC4wNTMzMzMtMTAuMjQtMzAuMjkzMzMzbDU4LjQ1MzMzMy0yMi42MTMzMzMgMTEuNTIgMjkuODY2NjY2YzguNTMzMzMzIDIyLjYxMzMzMyAxOS42MjY2NjcgNDMuOTQ2NjY3IDMyLjg1MzMzNCA2NC40MjY2NjdsMTcuNDkzMzMzIDI2Ljg4LTUyLjkwNjY2NyAzNC4xMzMzMzN6IG0tODEuNDkzMzMzLTE5NC41NmMtMS43MDY2NjctMTAuMjQtMi41Ni0yMC45MDY2NjctMy40MTMzMzQtMzEuNTczMzMzIDAtNS45NzMzMzMtMC44NTMzMzMtMTEuOTQ2NjY3LTAuODUzMzMzLTE3LjkyVjM1Ni4yNjY2NjdjMC04LjUzMzMzMyAwLjg1MzMzMy0xNi42NCAxLjcwNjY2Ny0yNC4zMnYtNy42OGMxLjI4LTExLjk0NjY2NyAzLjQxMzMzMy0yMy40NjY2NjcgNS41NDY2NjYtMzQuOTg2NjY3bDYyLjI5MzMzNCA4LjEwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzNjLTIuMTMzMzMzIDE1LjM2LTIuOTg2NjY3IDMxLjE0NjY2Ny0yLjk4NjY2NyA0Ni45MzMzMzMgMCA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwLjg1MzMzNCAyNS42bDIuMTMzMzMzIDMyLTYyLjcyIDQuMjY2NjY3eiBtNzguOTMzMzMzLTE4My44OTMzMzNsLTU3LjE3MzMzMy0yNi4wMjY2NjdjMy44NC05LjgxMzMzMyA3LjY4LTE5LjYyNjY2NyAxMS45NDY2NjYtMjkuNDQgMi4xMzMzMzMtNC42OTMzMzMgNC4yNjY2NjctOS4zODY2NjcgNi40LTEzLjY1MzMzM3YtNC4yNjY2NjdoMC40MjY2NjdjOS44MTMzMzMtMTkuMiAyMC40OC0zNy4xMiAzMi44NTMzMzMtNTQuMTg2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzYzYuNC04Ljk2IDEyLjgtMTcuNDkzMzMzIDIwLjA1MzMzMy0yNS42bDUwLjc3MzMzMyAzNy4xMi0xOC43NzMzMzMgMjYuMDI2NjY2Yy0xNC4wOCAxOS42MjY2NjctMjYuNDUzMzMzIDQwLjUzMzMzMy0zNi42OTMzMzMgNjIuMjkzMzM0bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzMy0xNDkuNzZsLTM3LjU0NjY2Ni01MC4zNDY2NjdjMTIuMzczMzMzLTEwLjY2NjY2NyAyNS42LTIwLjkwNjY2NyAzOS4yNTMzMzMtMzAuMjkzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gxLjI4di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC44NTMzMzNjMTcuMDY2NjY3LTExLjk0NjY2NyAzNC45ODY2NjctMjIuMTg2NjY3IDUzLjc2LTMxLjE0NjY2NyA5LjM4NjY2Ny00LjY5MzMzMyAxOS4yLTguOTYgMjkuMDEzMzMzLTEyLjhsMjYuODggNTYuNzQ2NjY3LTI5LjAxMzMzMyAxMy42NTMzMzNjLTIxLjc2IDEwLjI0LTQyLjY2NjY2NyAyMy4wNC02MS44NjY2NjcgMzcuNTQ2NjY3bC0yNS42IDE5LjJ6IG0xNTkuNTczMzM0LTgzLjJsLTguOTYtNjIuMjkzMzMzYzEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzMtNS41NDY2NjcgMTAuNjY2NjY3LTEuNzA2NjY3IDIwLjkwNjY2Ny0yLjU2IDMxLjU3MzMzMy0zLjQxMzMzM2gxMi4zNzMzMzRWLTQyLjY2NjY2N2gzMy43MDY2NjZjMTMuMjI2NjY3IDAuNDI2NjY3IDI2LjQ1MzMzMyAxLjcwNjY2NyAzOS4yNTMzMzQgMy40MTMzMzRsLTMuNDEzMzM0IDYyLjcyLTMyLTEuNzA2NjY3Yy02LjgyNjY2NyAwLTE0LjA4LTAuNDI2NjY3LTIwLjkwNjY2Ni0wLjQyNjY2Ny0xNy4wNjY2NjcgMC0zNC41NiAxLjI4LTUxLjIgMy40MTMzMzRsLTMxLjU3MzMzNCA0LjY5MzMzM3ogbTMwMi4wOCA2NGwtMjcuMzA2NjY3LTE3LjA2NjY2N2MtMjAuNDgtMTIuOC00Mi4yNC0yMy40NjY2NjctNjQuODUzMzMzLTMybC0yOS44NjY2NjctMTEuMDkzMzMzIDIyLjE4NjY2Ny01OC44OGMxMC4yNCAyLjk4NjY2NyAyMC40OCA2LjQgMzAuMjkzMzMzIDEwLjI0IDI2Ljg4IDEwLjI0IDUyLjQ4IDIyLjYxMzMzMyA3Ni4zNzMzMzMgMzcuOTczMzMzIDguOTYgNS45NzMzMzMgMTcuOTIgMTEuNTIgMjYuNDUzMzM0IDE3LjkybC0zMy4yOCA1My4zMzMzMzR6IG0xMTIuNjQgMTQwLjhsLTE1Ljc4NjY2Ny0yNy43MzMzMzNjLTExLjk0NjY2Ny0yMC45MDY2NjctMjYuMDI2NjY3LTQwLjk2LTQxLjgxMzMzMy01OS4zMDY2NjdsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmM3LjY4IDcuNjggMTQuOTMzMzMzIDE1LjM2IDIxLjc2IDIzLjA0IDMuNDEzMzMzIDQuMjY2NjY3IDYuODI2NjY3IDguMTA2NjY3IDkuODEzMzMzIDEyLjM3MzMzM3YwLjg1MzMzNGgwLjQyNjY2N2wyLjEzMzMzMyAyLjk4NjY2NmgwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N1YxMjhoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNIODUzLjMzMzMzM3YwLjg1MzMzM2wyLjU2IDMuODR2MC44NTMzMzRjMTQuOTMzMzMzIDIwLjkwNjY2NyAyNy43MzMzMzMgNDMuMDkzMzMzIDM4LjQgNjYuMTMzMzMzbC01NC42MTMzMzMgMzAuNzJ6IG0zMS4xNDY2NjYgMTc3LjQ5MzMzM3YtMzJjLTAuODUzMzMzLTI0LjMyLTMuNDEzMzMzLTQ4LjY0LTguNTMzMzMzLTcyLjEwNjY2NmwtNi44MjY2NjctMzEuMTQ2NjY3IDYxLjQ0LTEzLjIyNjY2N2MxMS41MiAzOC40IDE3LjQ5MzMzMyA3OC45MzMzMzMgMTcuNDkzMzM0IDEyMS4xNzMzMzQgMCA4Ljk2IDAgMTcuOTItMC44NTMzMzQgMjYuNDUzMzMzbC02Mi43MiAwLjg1MzMzM3ogbS0yLjEzMzMzMyAyMDAuMTA2NjY3bC01NS40NjY2NjctMjkuNDQgMTQuOTMzMzM0LTI4LjE2YzExLjUyLTIxLjMzMzMzMyAyMC40OC00My45NDY2NjcgMjcuMzA2NjY2LTY2Ljk4NjY2N2w4Ljk2LTMwLjcyIDYwLjE2IDE3LjkyYy0yLjU2IDEyLjM3MzMzMy01Ljk3MzMzMyAyNC4zMi05LjM4NjY2NiAzNi4yNjY2NjdWNTE5LjI1MzMzM2MtMy40MTMzMzMgMTAuMjQtNy4yNTMzMzMgMjAuMDUzMzMzLTExLjA5MzMzNCAyOS44NjY2NjdWNTU3LjY1MzMzM2MtOC41MzMzMzMgMTkuNjI2NjY3LTE4LjM0NjY2NyAzNy45NzMzMzMtMjkuODY2NjY2IDU1Ljg5MzMzNHogbS0xNTMuMTczMzMzIDE0NS40OTMzMzNsLTM0LjU2LTUyLjQ4IDI2Ljg4LTE3LjQ5MzMzM2MyMC4wNTMzMzMtMTMuMjI2NjY3IDM4LjgyNjY2Ny0yOC41ODY2NjcgNTYuMzItNDUuNjUzMzMzbDIyLjYxMzMzMy0yMi42MTMzMzQgNDQuMzczMzMzIDQ0LjM3MzMzNGE0MjMuMTY4IDQyMy4xNjggMCAwIDEtODUuMzMzMzMzIDc1LjUyaC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMC40MjY2NjdjLTguOTYgNi40LTE3LjkyIDExLjk0NjY2Ny0yNy4zMDY2NjcgMTcuMDY2NjY3ek0zNDAuMDUzMzMzIDY1NC4wOGMtOC45Ni01LjU0NjY2Ny0xNy40OTMzMzMtMTEuOTQ2NjY3LTI2LjAyNjY2Ni0xOC4zNDY2NjctMTguNzczMzMzLTE0LjkzMzMzMy0zNS44NC0zMS41NzMzMzMtNTAuNzczMzM0LTQ5LjkyaC0wLjQyNjY2NnYtMC44NTMzMzNoLTAuODUzMzM0di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNIMjYwLjI2NjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0wLjg1MzMzNGgtMC40MjY2Njd2LTEuMjhoLTAuNDI2NjY2Yy03LjY4LTEwLjI0LTE0LjkzMzMzMy0yMC45MDY2NjctMjEuNzYtMzJsNDkuOTItMzcuMTIgMTkuMiAyNS42YzEzLjY1MzMzMyAxOC4zNDY2NjcgMjkuNDQgMzQuNTYgNDcuMzYgNDkuMDY2NjY3bDI1LjE3MzMzMyAxOS42MjY2NjctMzguODI2NjY3IDQ5LjA2NjY2NnpNMjA5LjkyIDQ5MC4yNGMtOC45Ni0yNS42LTE0LjkzMzMzMy01Mi45MDY2NjctMTcuMDY2NjY3LTgxLjA2NjY2N1YzNzEuNjI2NjY3YzAtMTAuNjY2NjY3IDEuMjgtMjEuMzMzMzMzIDIuNTYtMzJMMjU3LjI4IDM0MS4zMzMzMzN2MzkuMjUzMzM0Yy0wLjQyNjY2NyAyMC40OCAxLjcwNjY2NyA0MC41MzMzMzMgNi40IDYwLjE2bDcuNjggMzEuMTQ2NjY2LTYwLjU4NjY2NyAxNC41MDY2Njd6IG01NS44OTMzMzMtMTgzLjQ2NjY2N2wtNTYuNzQ2NjY2LTI2LjAyNjY2NmMzLjQxMzMzMy0xMC4yNCA3LjI1MzMzMy0yMC4wNTMzMzMgMTEuOTQ2NjY2LTI5LjQ0IDEuMjgtMi41NiAyLjEzMzMzMy01LjEyIDMuNDEzMzM0LTcuMjUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTEuNzA2NjY3aDAuNDI2NjY2di0xLjcwNjY2N2gwLjQyNjY2N1YyMjguMjY2NjY3aDAuNDI2NjY3di0xLjcwNjY2N2gwLjQyNjY2NnYtMS43MDY2NjdoMC40MjY2Njd2LTEuNzA2NjY2aDAuODUzMzMzdi0yLjU2aDAuODUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzNGgwLjg1MzMzNHYtMS4yOGgwLjQyNjY2NmwwLjg1MzMzNC0xLjI4di0wLjg1MzMzM2gwLjQyNjY2NmwxLjI4LTIuMTMzMzMzdi0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDAuNDI2NjY3di0xLjI4aDAuNDI2NjY3di0wLjg1MzMzNGgwLjQyNjY2NnYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMS43MDY2NjZoMC40MjY2NjdjNC4yNjY2NjctNS41NDY2NjcgOC4xMDY2NjctMTEuMDkzMzMzIDEyLjgtMTYuMjEzMzM0IDYuODI2NjY3LTguNTMzMzMzIDE0LjA4LTE2LjIxMzMzMyAyMS43Ni0yMy40NjY2NjZsNDcuNzg2NjY2IDQwLjEwNjY2Ni0yMC40OCAyNC43NDY2NjdjLTE0LjUwNjY2NyAxNy40OTMzMzMtMjYuODggMzYuNjkzMzMzLTM2LjI2NjY2NiA1Ny42bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzNC0xMzUuNjhsLTI4LjU4NjY2Ny01NS40NjY2NjZjOS44MTMzMzMtNi40IDE5LjYyNjY2Ny0xMS45NDY2NjcgMzAuMjkzMzMzLTE3LjQ5MzMzNGgwLjg1MzMzNHYtMC44NTMzMzNoMS43MDY2NjZ2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gxLjI4di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS43MDY2NjZjMTMuMjI2NjY3LTYuNCAyNi44OC0xMS45NDY2NjcgNDEuMzg2NjY3LTE2LjIxMzMzM2gyLjEzMzMzM2wwLjg1MzMzNC0wLjg1MzMzM2gyLjEzMzMzM2wwLjg1MzMzMy0wLjg1MzMzNGgxLjcwNjY2N2wwLjg1MzMzMy0wLjg1MzMzM2gyLjEzMzMzNGwwLjg1MzMzMy0wLjg1MzMzM2M1LjEyLTEuMjggMTAuMjQtMi41NiAxNS43ODY2NjctMy44NCAxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctMy44NCAzMS41NzMzMzMtNS4xMmwxMi44IDYxLjAxMzMzMy0zMS4xNDY2NjcgNi40Yy0yMi4xODY2NjcgNC42OTMzMzMtNDMuOTQ2NjY3IDEyLjM3MzMzMy02NCAyMi42MTMzMzNsLTI4LjU4NjY2NiAxNC41MDY2Njd6IG0yODcuNTczMzMzLTIuNTZsLTI4LjU4NjY2Ny0xNC4wOGMtMjAuNDgtMTAuMjQtNDIuMjQtMTcuNDkzMzMzLTY0LjQyNjY2Ni0yMS43NmwtMzEuNTczMzM0LTUuOTczMzMzIDExLjk0NjY2Ny02MS40NGMxMC42NjY2NjcgMC44NTMzMzMgMjEuMzMzMzMzIDIuNTYgMzEuNTczMzMzIDQuMjY2NjY3IDE3LjkyIDMuNDEzMzMzIDM0Ljk4NjY2NyA4LjUzMzMzMyA1MS42MjY2NjcgMTQuNTA2NjY2bDEuNzA2NjY3IDAuODUzMzM0aDAuNDI2NjY2bDIuOTg2NjY3IDEuMjhjOC4xMDY2NjcgMy40MTMzMzMgMTYuMjEzMzMzIDYuODI2NjY3IDIzLjg5MzMzMyAxMC42NjY2NjYgOS4zODY2NjcgNC42OTMzMzMgMTguNzczMzMzIDkuODEzMzMzIDI3LjczMzMzNCAxNS43ODY2NjdsLTI3LjczMzMzNCA1NS44OTMzMzN6IG0xMDIuODI2NjY3IDEzMy45NzMzMzRsLTEzLjY1MzMzNC0yOS4wMTMzMzRjLTkuODEzMzMzLTIwLjQ4LTIyLjE4NjY2Ny0zOS42OC0zNy41NDY2NjYtNTYuNzQ2NjY2bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZhMzU2LjQ4IDM1Ni40OCAwIDAgMSAzOC40IDQzLjk0NjY2NnYwLjg1MzMzNGgwLjg1MzMzM3YwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2N3YxLjI4aDAuODUzMzMzdjAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djEuNzA2NjY2aDAuNDI2NjY2djEuNzA2NjY3aDAuNDI2NjY3djEuNzA2NjY3aDAuNDI2NjY3YzEzLjY1MzMzMyAyMC45MDY2NjcgMjQuNzQ2NjY3IDQzLjA5MzMzMyAzMy4yOCA2Ni45ODY2NjZsLTU2LjMyIDI2Ljg4eiBtNTguODggMTgyLjYxMzMzM2wtNjEuMDEzMzM0LTEzLjY1MzMzMyA2LjgyNjY2Ny0zMS4xNDY2NjdjNC4yNjY2NjctMTguMzQ2NjY3IDUuOTczMzMzLTM3LjEyIDUuOTczMzMzLTU1Ljg5MzMzM3YtMTEuOTQ2NjY3bC0xLjI4LTMyIDYyLjI5MzMzNC0yLjk4NjY2N2MxLjcwNjY2NyAxMC4yNCAyLjU2IDIwLjkwNjY2NyAyLjk4NjY2NiAzMS41NzMzMzRWNDAxLjQ5MzMzM2EzMjMuODQgMzIzLjg0IDAgMCAxLTE1Ljc4NjY2NiA4Ni42MTMzMzR6IG0tMTI3LjU3MzMzNCAxNjYuNGwtMzkuMjUzMzMzLTQ4LjIxMzMzMyAyNC43NDY2NjctMjAuMDUzMzM0YzE3LjQ5MzMzMy0xNC41MDY2NjcgMzMuMjgtMzEuMTQ2NjY3IDQ2LjUwNjY2Ni00OS40OTMzMzNsMTguNzczMzM0LTI2LjAyNjY2NyA1MC43NzMzMzMgMzYuMjY2NjY3Yy01LjEyIDkuMzg2NjY3LTExLjA5MzMzMyAxNy45Mi0xNy4wNjY2NjcgMjYuODgtMTYuNjQgMjMuNDY2NjY3LTM2LjI2NjY2NyA0NC4zNzMzMzMtNTguMDI2NjY2IDYyLjI5MzMzMy04LjEwNjY2NyA2LjgyNjY2Ny0xNi42NCAxMy4yMjY2NjctMjUuNiAxOS4yek01MTIgNzA0LjQyNjY2N2MtOC45NiAwLTE3LjkyIDAtMjYuNDUzMzMzLTEuMjhoLTYuODI2NjY3di0wLjg1MzMzNGgtNS45NzMzMzN2LTAuODUzMzMzaC00LjY5MzMzNHYtMC44NTMzMzNoLTUuMTJsLTAuODUzMzMzLTAuODUzMzM0aC0zLjg0di0wLjg1MzMzM2gtMy40MTMzMzNsLTAuODUzMzM0LTAuODUzMzMzaC0zLjQxMzMzM2wtMC44NTMzMzMtMC44NTMzMzRoLTIuMTMzMzM0bC0yLjEzMzMzMy0wLjg1MzMzM2gtMi45ODY2NjdsLTAuODUzMzMzLTAuODUzMzMzaC0yLjEzMzMzM3YtMC44NTMzMzRoLTIuOTg2NjY3di0wLjg1MzMzM2gtMi45ODY2Njd2LTAuODUzMzMzaC0yLjU2di0wLjg1MzMzNGgtMi41NnYtMC44NTMzMzNoLTEuMjhjLTEwLjI0LTIuOTg2NjY3LTIwLjQ4LTYuNC0zMC4yOTMzMzMtMTAuMjRsMTYuMjEzMzMzLTYwLjE2IDMwLjcyIDguNTMzMzMzYTI1NC4yOTMzMzMgMjU0LjI5MzMzMyAwIDAgMCA2Ny40MTMzMzQgOC45Nmg0LjI2NjY2NmMyMy4wNCAwIDQ1LjY1MzMzMy0zLjg0IDY3LjQxMzMzNC0xMC4yNGwzMC43Mi04Ljk2IDE3LjQ5MzMzMyA1OS43MzMzMzRjLTkuODEzMzMzIDMuODQtMjAuMDUzMzMzIDcuNjgtMzAuMjkzMzMzIDEwLjY2NjY2Ni0zLjg0IDEuMjgtNy42OCAyLjEzMzMzMy0xMS41MiAyLjk4NjY2N2gtMi4xMzMzMzRsLTAuODUzMzMzIDAuODUzMzMzaC0yLjEzMzMzM2wtMC44NTMzMzQgMC44NTMzMzRoLTIuMTMzMzMzbC0wLjg1MzMzMyAwLjg1MzMzM2gtMi45ODY2NjdjLTExLjA5MzMzMyAyLjk4NjY2Ny0yMi42MTMzMzMgNC42OTMzMzMtMzQuMTMzMzMzIDUuOTczMzMzLTEwLjY2NjY2NyAwLjg1MzMzMy0yMS4zMzMzMzMgMS43MDY2NjctMzIgMS43MDY2Njd6TTYxOC42NjY2NjcgMTkxLjE0NjY2N2MtNS45NzMzMzMgMC0xMS41MiAyLjEzMzMzMy0xNS43ODY2NjcgNi44MjY2NjZsLTkxLjMwNjY2NyA5OC41NmMtMTIuOC0xMy4yMjY2NjctMjQuNzQ2NjY3LTI2Ljg4LTM3LjEyLTQwLjk2LTE3LjQ5MzMzMy0yMC4wNTMzMzMtMzUuNDEzMzMzLTM5LjY4LTU0LjE4NjY2Ni01OC40NTMzMzNhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMC0yNi40NTMzMzQtMi45ODY2NjcgMjEuMTIgMjEuMTIgMCAwIDAtOC41MzMzMzMgMjUuMTczMzM0YzIwLjA1MzMzMyA1NS44OTMzMzMgMzYuNjkzMzMzIDExMy45MiA1Mi45MDY2NjcgMTcwLjI0IDE2LjIxMzMzMyA1Ni43NDY2NjcgMzMuMjggMTE1LjYyNjY2NyA1My43NiAxNzIuOCAyLjk4NjY2NyA4LjUzMzMzMyAxMS4wOTMzMzMgMTQuMDggMjAuMDUzMzMzIDE0LjA4IDguOTYgMCAxNy4wNjY2NjctNS45NzMzMzMgMjAuMDUzMzMzLTE0LjkzMzMzNCAxNy45Mi01Ny4xNzMzMzMgMzUuODQtMTE0LjM0NjY2NyA1My4zMzMzMzQtMTcxLjUyIDE3LjQ5MzMzMy01Ny4xNzMzMzMgMzQuOTg2NjY3LTExNC4zNDY2NjcgNTMuMzMzMzMzLTE3MS4wOTMzMzNhMjEuMTIgMjEuMTIgMCAwIDAtMjAuMDUzMzMzLTI3LjczMzMzM3ogbS0xMDYuNjY2NjY3IDE1Ny44NjY2NjZoMC40MjY2NjdjNS41NDY2NjcgMCAxMS4wOTMzMzMtMi41NiAxNS4zNi02LjgyNjY2Nmw0Mi4yNC00NS42NTMzMzRjLTguNTMzMzMzIDI2Ljg4LTE2LjY0IDU0LjE4NjY2Ny0yNS4xNzMzMzQgODEuMDY2NjY3LTExLjA5MzMzMyAzNi4yNjY2NjctMjIuMTg2NjY3IDcyLjUzMzMzMy0zMy43MDY2NjYgMTA4LjgtMTEuNTItMzYuMjY2NjY3LTIxLjc2LTcyLjUzMzMzMy0zMi0xMDguMzczMzMzLTcuMjUzMzMzLTI2LjAyNjY2Ny0xNC45MzMzMzMtNTIuMDUzMzMzLTIzLjA0LTc4LjUwNjY2NyAxMy4yMjY2NjcgMTQuOTMzMzMzIDI2Ljg4IDI5LjQ0IDQwLjk2IDQzLjUyYTIxLjc2IDIxLjc2IDAgMCAwIDE0LjkzMzMzMyA2LjR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZGF0YS1pbnB1dCIgdW5pY29kZT0iJiM1OTA3NjsiIGQ9Ik04MDkuODEzMzMzIDUyMC45NmgtMjE0LjE4NjY2NmMtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjc2Ny4xNDY2NjdoNjR2LTE4Mi4xODY2NjdoMTgyLjE4NjY2NnYtNjR6TTgxMC42NjY2NjcgMTAuNjY2NjY3SDIxMy4zMzMzMzNjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMlY3NjhjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyaDM4My4xNDY2NjdjOC41MzMzMzMgMCAxNi42NC0zLjQxMzMzMyAyMi42MTMzMzMtOS4zODY2NjdsMjE0LjE4NjY2Ny0yMTQuMTg2NjY2YzUuOTczMzMzLTUuOTczMzMzIDkuMzg2NjY3LTE0LjA4IDkuMzg2NjY3LTIyLjYxMzMzNFY0Mi42NjY2NjdjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyeiBtLTU2NS4zMzMzMzQgNjRoNTMzLjMzMzMzNFY1NDAuNTg2NjY3bC0xOTUuNDEzMzM0IDE5NS40MTMzMzNIMjQ1LjMzMzMzM3YtNjYxLjMzMzMzM3pNNDEwLjg4IDUxMy43MDY2NjdjLTIuNTYgMC01LjEyIDAuNDI2NjY3LTcuNjggMS43MDY2NjZhMTguNTYgMTguNTYgMCAwIDAtMTEuNTIgMTcuNDkzMzM0djM1Ljg0SDI5OC42NjY2NjdjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4yVjYzNS4zMDY2NjdjMCAxMC42NjY2NjcgOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuMDEzMzMzdjM1Ljg0YzAgNy42OCA0LjY5MzMzMyAxNC41MDY2NjcgMTEuNTIgMTcuNDkzMzMzIDYuODI2NjY3IDIuOTg2NjY3IDE1LjM2IDEuNzA2NjY3IDIwLjkwNjY2Ny0zLjQxMzMzM2w4NC4wNTMzMzMtNzguOTMzMzM0YzMuODQtMy44NCA1Ljk3MzMzMy04LjUzMzMzMyA1Ljk3MzMzMy0xNC4wOHMtMi4xMzMzMzMtMTAuMjQtNS45NzMzMzMtMTQuMDhMNDI0LjEwNjY2NyA1MTguNGMtMy44NC0zLjQxMzMzMy04LjUzMzMzMy01LjEyLTEzLjIyNjY2Ny01LjEyek0zMTcuODY2NjY3IDYwNy4xNDY2NjdoOTMuMDEzMzMzYzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ydi0xMC42NjY2NjdsMzYuNjkzMzMzIDM0LjU2LTM2LjY5MzMzMyAzNC41NnYtMTAuNjY2NjY3YzAtMTAuNjY2NjY3LTguNTMzMzMzLTE5LjItMTkuMi0xOS4ySDMxNy44NjY2Njd2LTguOTZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZW5kLWV2ZW50LWNvbXBlbnNhdGkiIHVuaWNvZGU9IiYjNTkwNzc7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTMzOS4yIDM3MC43NzMzMzNsMTI5LjI4LTk4LjU2YzExLjA5MzMzMy04LjUzMzMzMyAyNi40NTMzMzMtMC40MjY2NjcgMjYuNDUzMzMzIDEzLjIyNjY2N1Y0ODIuNTZjMCAxMy42NTMzMzMtMTUuNzg2NjY3IDIxLjMzMzMzMy0yNi40NTMzMzMgMTMuMjI2NjY3bC0xMjkuMjgtOTguNTZjLTguNTMzMzMzLTYuODI2NjY3LTguNTMzMzMzLTE5LjYyNjY2NyAwLTI2LjQ1MzMzNHpNNTAxLjMzMzMzMyAzNzAuNzczMzMzbDEyOS4yOC05OC41NmMxMS4wOTMzMzMtOC41MzMzMzMgMjYuNDUzMzMzLTAuNDI2NjY3IDI2LjQ1MzMzNCAxMy4yMjY2NjdWNDgyLjU2YzAgMTMuNjUzMzMzLTE1Ljc4NjY2NyAyMS4zMzMzMzMtMjYuNDUzMzM0IDEzLjIyNjY2N2wtMTI5LjI4LTk4LjU2Yy04LjUzMzMzMy02LjgyNjY2Ny04LjUzMzMzMy0xOS42MjY2NjcgMC0yNi40NTMzMzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VydmljZSIgdW5pY29kZT0iJiM1OTA3ODsiIGQ9Ik01NTguNTA2NjY3LTE2LjIxMzMzM2gtODQuMDUzMzM0Yy00MC45NiAwLTc0LjI0IDMzLjI4LTc0LjI0IDc0LjI0djI2Ljg4YzAgNC4yNjY2NjctMi41NiA4LjEwNjY2Ny02LjgyNjY2NiA5LjM4NjY2Ni02LjgyNjY2NyAyLjk4NjY2Ny0xMS41MiAyLjEzMzMzMy0xNC41MDY2NjctMC44NTMzMzNsLTE2LjY0LTE2LjY0LTAuODUzMzMzLTAuODUzMzMzYy0yOS4wMTMzMzMtMjkuMDEzMzMzLTc1Ljk0NjY2Ny0yOC41ODY2NjctMTA0Ljk2IDBsLTU5LjMwNjY2NyA1OS4zMDY2NjZjLTI5LjAxMzMzMyAyOS40NC0yOS4wMTMzMzMgNzYuMzczMzMzIDAgMTA0Ljk2bDE3LjA2NjY2NyAxNy4wNjY2NjdjMi45ODY2NjcgMi45ODY2NjcgMy44NCA3LjY4IDIuMTMzMzMzIDExLjUyLTIuNTYgNy4yNTMzMzMtNi40IDkuODEzMzMzLTEwLjY2NjY2NyA5LjgxMzMzM2gtMjQuNzQ2NjY2Yy00MC45NiAwLTc0LjI0IDMzLjI4LTc0LjI0IDc0LjI0djg0LjA1MzMzNGMwIDQwLjk2IDMzLjI4IDc0LjI0IDc0LjI0IDc0LjI0aDI1LjE3MzMzM2M0LjI2NjY2NyAwIDguMTA2NjY3IDIuNTYgOS4zODY2NjcgNi44MjY2NjYgMi45ODY2NjcgNi44MjY2NjcgMi4xMzMzMzMgMTEuNTItMC44NTMzMzQgMTQuNTA2NjY3bC0xNy40OTMzMzMgMTcuNDkzMzMzYy0yOS4wMTMzMzMgMjkuNDQtMjkuMDEzMzMzIDc2LjM3MzMzMyAwIDEwNC45Nmw1OS4zMDY2NjcgNTguODggMC44NTMzMzMgMC44NTMzMzRjMjkuMDEzMzMzIDI4LjU4NjY2NyA3NS45NDY2NjcgMjguNTg2NjY3IDEwNC45NiAwbDE3LjA2NjY2Ny0xNy4wNjY2NjdjMi45ODY2NjctMi45ODY2NjcgNy42OC0zLjg0IDExLjUyLTIuMTMzMzMzIDcuMjUzMzMzIDIuNTYgOS44MTMzMzMgNi40IDkuODEzMzMzIDEwLjY2NjY2NnYyNC43NDY2NjdjMCA0MC45NiAzMy4yOCA3NC4yNCA3NC4yNCA3NC4yNGg4NC4wNTMzMzNjNDAuOTYgMCA3NC4yNC0zMy4yOCA3NC4yNC03NC4yNHYtMjQuNzQ2NjY3YzAtNC4yNjY2NjcgMi45ODY2NjctOC4xMDY2NjcgNi44MjY2NjctOS4zODY2NjYgNy42OC0zLjQxMzMzMyAxMi4zNzMzMzMtMi41NiAxNS4zNiAwLjQyNjY2NmwxNy40OTMzMzMgMTcuNDkzMzM0YzE0LjUwNjY2NyAxNC4wOCAzMi44NTMzMzMgMjEuNzYgNTIuNDggMjEuNzYgMTkuNjI2NjY3IDAgMzguNC03LjY4IDUyLjA1MzMzNC0yMS43Nmw1OS4zMDY2NjYtNTkuNzMzMzM0aDAuNDI2NjY3YzE0LjA4LTE0LjkzMzMzMyAyMS43Ni0zMy4yOCAyMS43Ni01My4zMzMzMzMgMC0xOS42MjY2NjctNy42OC0zOC40LTIxLjc2LTUyLjQ4bC0xNy4wNjY2NjctMTcuMDY2NjY3Yy0yLjk4NjY2Ny0yLjk4NjY2Ny0zLjg0LTcuNjgtMi4xMzMzMzMtMTEuNTIgMi41Ni03LjI1MzMzMyA2LjQtOS44MTMzMzMgMTAuNjY2NjY3LTkuODEzMzMzSDg1My4zMzMzMzNjNDAuOTYgMCA3NC4yNC0zMy4yOCA3NC4yNC03NC4yNHYtODUuMzMzMzMzYzAtNDAuOTYtMzMuMjgtNzQuMjQtNzQuMjQtNzQuMjRoLTI3LjMwNjY2NmMtNC4yNjY2NjcgMC04LjEwNjY2Ny0yLjU2LTkuMzg2NjY3LTYuODI2NjY3LTIuOTg2NjY3LTYuODI2NjY3LTIuMTMzMzMzLTExLjUyIDAuODUzMzMzLTE0LjUwNjY2N2wxNy4wNjY2NjctMTcuMDY2NjY2IDAuODUzMzMzLTAuODUzMzM0YzI4LjU4NjY2Ny0yOS4wMTMzMzMgMjguNTg2NjY3LTc1Ljk0NjY2NyAwLTEwNC45NmwtNTkuMzA2NjY2LTU5LjMwNjY2NmMtMTQuNTA2NjY3LTE0LjA4LTMyLjg1MzMzMy0yMS43Ni01Mi40OC0yMS43Ni0xOS42MjY2NjcgMC0zOC40IDcuNjgtNTIuMDUzMzM0IDIxLjc2bC0xNy4wNjY2NjYgMTcuMDY2NjY2YTEwLjQ5NiAxMC40OTYgMCAwIDEtMTEuNTIgMi4xMzMzMzRjLTcuMjUzMzMzLTIuNTYtOS44MTMzMzMtNi40LTkuODEzMzM0LTEwLjY2NjY2N3YtMjQuNzQ2NjY3YzAtNDAuOTYtMzMuMjgtNzQuMjQtNzQuMjQtNzQuMjR6IG0tMTcyLjM3MzMzNCAxNzYuNjRjMTAuNjY2NjY3IDAgMjEuNzYtMi4xMzMzMzMgMzEuNTczMzM0LTcuMjUzMzM0IDI2LjQ1MzMzMy04Ljk2IDQ2LjA4LTM3LjEyIDQ2LjUwNjY2Ni02OC4yNjY2NjZ2LTI2Ljg4YzAtNS41NDY2NjcgNC42OTMzMzMtMTAuMjQgMTAuMjQtMTAuMjRoODQuMDUzMzM0YzUuNTQ2NjY3IDAgMTAuMjQgNC42OTMzMzMgMTAuMjQgMTAuMjR2MjQuNzQ2NjY2YzAgMzEuNTczMzMzIDIwLjA1MzMzMyA1OS4zMDY2NjcgNDkuNDkzMzMzIDY5LjU0NjY2NyAyNS4xNzMzMzMgMTEuOTQ2NjY3IDU5LjMwNjY2NyA2LjQgODEuNDkzMzMzLTE2LjIxMzMzM2wxNy4wNjY2NjctMTcuMDY2NjY3YzIuNTYtMi41NiA4LjEwNjY2Ny0yLjk4NjY2NyA3LjI1MzMzMy0yLjk4NjY2NyAxLjcwNjY2NyAwIDQuNjkzMzMzIDAgNy4yNTMzMzQgMi45ODY2NjdsNTkuMzA2NjY2IDU5LjMwNjY2N2MzLjg0IDMuODQgMy44NCAxMC4yNCAwIDE0LjA4bC0xNy4wNjY2NjYgMTcuNDkzMzMzYy0yMi4xODY2NjcgMjEuNzYtMjguMTYgNTUuODkzMzMzLTE0LjUwNjY2NyA4NC40OCA4Ljk2IDI2LjQ1MzMzMyAzNy4xMiA0Ni41MDY2NjcgNjguMjY2NjY3IDQ2LjUwNjY2N2gyNy4zMDY2NjZjNS41NDY2NjcgMCAxMC4yNCA0LjY5MzMzMyAxMC4yNCAxMC4yNHY4NS4zMzMzMzNjMCA1LjU0NjY2Ny00LjY5MzMzMyAxMC4yNC0xMC4yNCAxMC4yNGgtMjQuNzQ2NjY2Yy0zMS41NzMzMzMgMC01OS4zMDY2NjcgMjAuMDUzMzMzLTY5LjU0NjY2NyA0OS40OTMzMzMtMTIuMzczMzMzIDI1LjE3MzMzMy02LjQgNTkuMzA2NjY3IDE2LjIxMzMzMyA4MS4wNjY2NjdsMTcuMDY2NjY3IDE3LjA2NjY2N2MyLjU2IDIuNTYgMi45ODY2NjcgNS41NDY2NjcgMi45ODY2NjcgNy4yNTMzMzMgMCAxLjcwNjY2Ny0wLjQyNjY2NyA0LjI2NjY2Ny0yLjU2IDYuODI2NjY3aC0wLjQyNjY2N2wtNTkuNzMzMzMzIDYwLjU4NjY2NmExMi41MDEzMzMgMTIuNTAxMzMzIDAgMCAxLTcuMjUzMzM0IDIuOTg2NjY3Yy0xLjcwNjY2NyAwLTQuNjkzMzMzIDAtNy4yNTMzMzMtMi45ODY2NjdsLTE3LjQ5MzMzMy0xNy40OTMzMzNjLTIxLjc2LTIyLjE4NjY2Ny01NS44OTMzMzMtMjguMTYtODQuNDgtMTQuNTA2NjY3LTI2LjQ1MzMzMyA4LjUzMzMzMy00Ny4zNiAzNi42OTMzMzMtNDcuMzYgNjguNjkzMzM0djI0Ljc0NjY2NmMwIDUuNTQ2NjY3LTQuNjkzMzMzIDEwLjI0LTEwLjI0IDEwLjI0aC04NC4wNTMzMzRjLTUuNTQ2NjY3IDAtMTAuMjQtNC42OTMzMzMtMTAuMjQtMTAuMjR2LTI0Ljc0NjY2NmMwLTMxLjU3MzMzMy0yMC4wNTMzMzMtNTkuMzA2NjY3LTQ5LjQ5MzMzMy02OS41NDY2NjctMjUuMTczMzMzLTEyLjM3MzMzMy01OS4zMDY2NjctNi40LTgxLjA2NjY2NyAxNi4yMTMzMzNsLTE3LjA2NjY2NiAxNy4wNjY2NjdhMTAuNDUzMzMzIDEwLjQ1MzMzMyAwIDAgMS0xNC4wOCAwLjQyNjY2N2gtMC40MjY2NjdMMjQzLjIgNjA5LjcwNjY2N2MtMy44NC0zLjg0LTMuODQtMTAuMjQgMC0xNC4wOGwxNy40OTMzMzMtMTcuNDkzMzM0YzIyLjE4NjY2Ny0yMi4xODY2NjcgMjguMTYtNTUuODkzMzMzIDE0LjUwNjY2Ny04NC40OC04Ljk2LTI2LjQ1MzMzMy0zNy4xMi00Ni41MDY2NjctNjguMjY2NjY3LTQ2LjUwNjY2NmgtMjUuMTczMzMzYy01LjU0NjY2NyAwLTEwLjI0LTQuNjkzMzMzLTEwLjI0LTEwLjI0di04NC4wNTMzMzRjMC01LjU0NjY2NyA0LjY5MzMzMy0xMC4yNCAxMC4yNC0xMC4yNGgyNC43NDY2NjdjMzEuNTczMzMzIDAgNTkuMzA2NjY3LTIwLjA1MzMzMyA2OS41NDY2NjYtNDkuNDkzMzMzIDEyLjM3MzMzMy0yNS4xNzMzMzMgNi40LTU5LjMwNjY2Ny0xNi4yMTMzMzMtODEuMDY2NjY3bC0xNy4wNjY2NjctMTcuMDY2NjY2Yy0zLjg0LTMuODQtMy44NC0xMC4yNCAwLTE0LjUwNjY2N2w1OS4zMDY2NjctNTkuMzA2NjY3YzMuODQtMy44NCA5LjgxMzMzMy0zLjg0IDE0LjA4LTAuNDI2NjY2aDAuNDI2NjY3bDE3LjA2NjY2NiAxNy45MmMxNC4wOCAxNC4wOCAzMy4yOCAyMS43NiA1Mi40OCAyMS43NnogbTEzMS40MTMzMzQgNzUuOTQ2NjY2Yy04Ny4wNCAwLTE1OC4yOTMzMzMgNzAuODI2NjY3LTE1OC4yOTMzMzQgMTU4LjI5MzMzNHM3MC44MjY2NjcgMTU4LjI5MzMzMyAxNTguMjkzMzM0IDE1OC4yOTMzMzMgMTU4LjI5MzMzMy03MC44MjY2NjcgMTU4LjI5MzMzMy0xNTguMjkzMzMzLTcwLjgyNjY2Ny0xNTguMjkzMzMzLTE1OC4yOTMzMzMtMTU4LjI5MzMzNHogbTAgMjUyLjE2YTk0LjI5MzMzMyA5NC4yOTMzMzMgMCAxIDEgMC4wNDI2NjYtMTg4LjYyOTMzMyA5NC4yOTMzMzMgOTQuMjkzMzMzIDAgMCAxLTAuMDQyNjY2IDE4OC42MjkzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXNlci10YXNrMSIgdW5pY29kZT0iJiM1OTA3OTsiIGQ9Ik04OTcuMjggNzA0SDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6IG0tMjAuNDgtNTc4LjEzMzMzM0gxNDcuMlY2NDIuMTMzMzMzaDcyOS42di01MTYuMjY2NjY2ek0yMTMuMzMzMzMzIDI2Ni42NjY2NjdoMjczLjA2NjY2N2M4LjEwNjY2NyAwIDE0LjkzMzMzMyA2LjgyNjY2NyAxNC45MzMzMzMgMTQuOTMzMzMzdjIzLjg5MzMzM2MwIDU5LjMwNjY2Ny0zNC45ODY2NjcgMTEzLjQ5MzMzMy04OS4xNzMzMzMgMTM4LjI0cy0yLjU2IDEuMjgtNC4yNjY2NjcgMS43MDY2NjdjMTYuMjEzMzMzIDE1LjM2IDI2LjAyNjY2NyAzNy4xMiAyNi4wMjY2NjcgNjEuMDEzMzMzIDAgNDYuNTA2NjY3LTM3LjU0NjY2NyA4NC4wNTMzMzMtODQuMDUzMzMzIDg0LjA1MzMzNGE4My42MjY2NjcgODMuNjI2NjY3IDAgMCAxLTg0LjA1MzMzNC04NC4wNTMzMzRjMC0yMy40NjY2NjcgOS44MTMzMzMtNDUuMjI2NjY3IDI2LjAyNjY2Ny02MC41ODY2NjYtMS4yOC0wLjQyNjY2Ny0yLjU2LTEuMjgtMy44NC0xLjcwNjY2N2ExNTIuNDA1MzMzIDE1Mi40MDUzMzMgMCAwIDEtODkuMTczMzMzLTEzOC4yNHYtMjMuODkzMzMzYzAtOC4xMDY2NjcgNi44MjY2NjctMTQuOTMzMzMzIDE0LjkzMzMzMy0xNC45MzMzMzR6IG0xNzQuNTA2NjY3IDE1MS4wNHMtMS43MDY2NjctMy40MTMzMzMtMi41Ni00LjY5MzMzNGMtMS4yOC0yLjU2LTMuNDEzMzMzLTUuMTItNS4xMi03LjI1MzMzMy0xLjI4LTEuMjgtMi4xMzMzMzMtMi41Ni0zLjg0LTMuODRhMzIuNDI2NjY3IDMyLjQyNjY2NyAwIDAgMC04LjEwNjY2Ny01LjEyYy0xLjI4LTAuODUzMzMzLTIuNTYtMS43MDY2NjctNC4yNjY2NjYtMi4xMzMzMzMtNC42OTMzMzMtMS43MDY2NjctOS4zODY2NjctMi45ODY2NjctMTQuNTA2NjY3LTIuOTg2NjY3cy05LjgxMzMzMyAxLjI4LTE0LjUwNjY2NyAyLjk4NjY2N2MtMS4yOCAwLjQyNjY2Ny0yLjU2IDEuMjgtNC4yNjY2NjYgMi4xMzMzMzNhMzIuNDI2NjY3IDMyLjQyNjY2NyAwIDAgMC04LjEwNjY2NyA1LjEyYy0xLjI4IDEuMjgtMi41NiAyLjU2LTMuNDEzMzMzIDMuODRhMjguMDMyIDI4LjAzMiAwIDAgMC01LjEyIDcuMjUzMzMzYy0wLjg1MzMzMyAxLjcwNjY2Ny0xLjcwNjY2NyAyLjk4NjY2Ny0yLjEzMzMzNCA0LjY5MzMzNCAwIDAuODUzMzMzLTAuNDI2NjY3IDIuMTMzMzMzLTAuODUzMzMzIDIuOTg2NjY2IDYuNCAyLjEzMzMzMyAxMy4yMjY2NjcgMy44NCAyMC4wNTMzMzMgNC42OTMzMzQgNi44MjY2NjcgMC44NTMzMzMgMTEuOTQ2NjY3IDYuODI2NjY3IDEyLjggMTMuNjUzMzMzYTE1LjI3NDY2NyAxNS4yNzQ2NjcgMCAwIDEtMTAuMjQgMTUuMzYgNTQuMDE2IDU0LjAxNiAwIDAgMC0zMy4yOCA3Mi41MzMzMzNjMS43MDY2NjcgMy40MTMzMzMgMy44NCA2LjgyNjY2NyA1Ljk3MzMzNCA5LjgxMzMzNCAxMC42NjY2NjcgNC42OTMzMzMgMjIuNjEzMzMzIDkuMzg2NjY3IDI5Ljg2NjY2NiA5LjM4NjY2NnMxNC41MDY2NjctMy40MTMzMzMgMjAuNDgtNi44MjY2NjZjMTEuMDkzMzMzLTYuODI2NjY3IDI0LjMyLTkuODEzMzMzIDM3LjEyLTYuNCAwLjg1MzMzMyAwIDEuNzA2NjY3IDAuNDI2NjY3IDIuNTYgMC44NTMzMzMgNS4xMi04LjEwNjY2NyA4LjUzMzMzMy0xNy4wNjY2NjcgOC41MzMzMzQtMjcuMzA2NjY3IDAtMjMuODkzMzMzLTE1LjM2LTQ0LjM3MzMzMy0zNy45NzMzMzQtNTEuNjI2NjY2LTYuODI2NjY3LTIuMTMzMzMzLTExLjA5MzMzMy04LjUzMzMzMy0xMC4yNC0xNS4zNnM1LjU0NjY2Ny0xMi4zNzMzMzMgMTIuOC0xMy42NTMzMzRjNi44MjY2NjctMS4yOCAxMy42NTMzMzMtMi45ODY2NjcgMjAuMDUzMzM0LTUuMTIgMC0wLjg1MzMzMyAwLTIuMTMzMzMzLTAuODUzMzM0LTIuOTg2NjY2eiBtLTE1OS41NzMzMzMtMTEyLjIxMzMzNGMwIDQxLjM4NjY2NyAyMS4zMzMzMzMgNzkuNzg2NjY3IDU1LjA0IDEwMS45NzMzMzQgMC0wLjQyNjY2NyAwLjQyNjY2Ny0wLjg1MzMzMyAwLjg1MzMzMy0xLjcwNjY2NyAyLjU2LTUuNTQ2NjY3IDUuNTQ2NjY3LTExLjA5MzMzMyA4Ljk2LTE1Ljc4NjY2NyAwLjg1MzMzMy0wLjg1MzMzMyAxLjI4LTEuNzA2NjY3IDIuMTMzMzMzLTIuNTYgMy40MTMzMzMtNC4yNjY2NjcgNy42OC04LjEwNjY2NyAxMS45NDY2NjctMTEuNTIgMC44NTMzMzMtMC40MjY2NjcgMS43MDY2NjctMS4yOCAyLjU2LTEuNzA2NjY2IDUuMTItMy40MTMzMzMgMTAuNjY2NjY3LTUuOTczMzMzIDE2LjY0LTguMTA2NjY3bDMuODQtMS4yOGM2LjQtMS43MDY2NjcgMTIuOC0yLjk4NjY2NyAxOS42MjY2NjctMi45ODY2NjdzMTMuMjI2NjY3IDEuMjggMTkuNjI2NjY2IDIuOTg2NjY3YzEuMjggMCAyLjU2IDAuODUzMzMzIDMuODQgMS4yOCA1Ljk3MzMzMyAyLjEzMzMzMyAxMS41MiA0LjY5MzMzMyAxNi42NCA4LjEwNjY2NyAwLjg1MzMzMyAwLjQyNjY2NyAxLjcwNjY2NyAxLjI4IDIuMTMzMzM0IDEuNzA2NjY2IDQuNjkzMzMzIDMuNDEzMzMzIDguNTMzMzMzIDcuMjUzMzMzIDEyLjM3MzMzMyAxMS41MiAwLjg1MzMzMyAwLjg1MzMzMyAxLjI4IDEuNzA2NjY3IDIuMTMzMzMzIDIuNTYgMy44NCA0LjY5MzMzMyA2LjgyNjY2NyAxMC4yNCA4Ljk2IDE1Ljc4NjY2NyAwIDAuNDI2NjY3IDAuODUzMzMzIDAuODUzMzMzIDAuODUzMzM0IDEuNzA2NjY3IDM0LjEzMzMzMy0yMi4xODY2NjcgNTUuMDQtNjAuNTg2NjY3IDU1LjA0LTEwMS45NzMzMzR2LTguOTZoLTM0LjU2djQ5LjQ5MzMzNGMwIDguMTA2NjY3LTYuODI2NjY3IDE0LjkzMzMzMy0xNC45MzMzMzQgMTQuOTMzMzMzcy0xNC45MzMzMzMtNi44MjY2NjctMTQuOTMzMzMzLTE0LjkzMzMzM3YtNDkuNDkzMzM0SDI5Mi4yNjY2Njd2NDkuNDkzMzM0YzAgOC4xMDY2NjctNi44MjY2NjcgMTQuOTMzMzMzLTE0LjkzMzMzNCAxNC45MzMzMzNzLTE0LjkzMzMzMy02LjgyNjY2Ny0xNC45MzMzMzMtMTQuOTMzMzMzdi00OS40OTMzMzRoLTM0LjEzMzMzM3Y4Ljk2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImxhbmUtZGl2aWRlLXR3byIgdW5pY29kZT0iJiM1OTA4MTsiIGQ9Ik04NzYuMzczMzMzIDYwNi43MnYtNDg3LjY4aC03MjUuMzMzMzMzVjYwNi43Mmg3MjUuMzMzMzMzbTIzLjQ2NjY2NyA2NEgxMjcuNTczMzMzYy0yMi4xODY2NjcgMC00MC41MzMzMzMtMTguMzQ2NjY3LTQwLjUzMzMzMy00MC41MzMzMzN2LTUzNC42MTMzMzRjMC0yMi4xODY2NjcgMTguMzQ2NjY3LTQwLjUzMzMzMyA0MC41MzMzMzMtNDAuNTMzMzMzaDc3Mi4yNjY2NjdjMjIuMTg2NjY3IDAgNDAuNTMzMzMzIDE4LjM0NjY2NyA0MC41MzMzMzMgNDAuNTMzMzMzVjYzMC4xODY2NjdjMCAyMi4xODY2NjctMTguMzQ2NjY3IDQwLjUzMzMzMy00MC41MzMzMzMgNDAuNTMzMzMzek0xMjkuNzA2NjY3IDM4OS41NDY2NjdoNDIuNjY2NjY2di01My4zMzMzMzRoLTQyLjY2NjY2NnpNODEyLjM3MzMzMyAzMzYuMjEzMzMzaC04NS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzM3YtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzM3YtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzM3YtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzM3YtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzM3YtNTMuMzMzMzM0ek04NTUuMDQgMzg5LjU0NjY2N2g0Mi42NjY2Njd2LTUzLjMzMzMzNGgtNDIuNjY2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LW5vbi1pbnRlIiB1bmljb2RlPSImIzU5MDgyOyIgZD0iTTUxMiA4MTAuNjY2NjY3aC0yMC40OGMtMi45ODY2NjctMC40MjY2NjctNS45NzMzMzMtMC44NTMzMzMtOC45Ni0wLjg1MzMzNGgtNi40Yy0yNy4zMDY2NjctMi45ODY2NjctNTQuMTg2NjY3LTcuNjgtODAuMjEzMzMzLTE0LjkzMzMzM2wxMi4zNzMzMzMtNjEuNDQgMzEuNTczMzMzIDYuNEEzNjkuMDY2NjY3IDM2OS4wNjY2NjcgMCAwIDAgNTEyIDc0Ny4wOTMzMzNoMTUuMzZsMTUuMzYtMS4yOGMyNC4zMi0yLjEzMzMzMyA0OC4yMTMzMzMtNi40IDcxLjI1MzMzMy0xMy4yMjY2NjZsMzAuNzItOC45NiAxNy40OTMzMzQgNjAuMTZjLTEyLjM3MzMzMyA0LjY5MzMzMy0yNS4xNzMzMzMgOC45Ni0zNy45NzMzMzQgMTIuMzczMzMzaC0yLjEzMzMzM3YwLjg1MzMzM2gtMi41NlY3OTcuODY2NjY3aC0yLjU2djAuODUzMzMzaC0xLjI4Yy0yMS43NiA1LjU0NjY2Ny00NC4zNzMzMzMgOS4zODY2NjctNjcuNDEzMzMzIDExLjUyLTExLjUyIDAuODUzMzMzLTIzLjQ2NjY2NyAxLjI4LTM1LjQxMzMzNCAxLjI4eiBtLTE3NS43ODY2NjctMzcuOTczMzM0Yy05LjgxMzMzMy00LjI2NjY2Ny0xOS4yLTguOTYtMjguNTg2NjY2LTE0LjA4LTUuOTczMzMzLTMuNDEzMzMzLTExLjUyLTYuNC0xNy4wNjY2NjctOS44MTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTAuNDI2NjY3bC0yLjEzMzMzMy0xLjcwNjY2NmgtMC44NTMzMzR2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzbC0yLjU2LTIuMTMzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzRoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0wLjQyNjY2N2wtNS45NzMzMzMtNC42OTMzMzRjLTE2LjY0LTEyLjM3MzMzMy0zMi40MjY2NjctMjUuNi00Ny4zNi00MC4xMDY2NjZsNDAuNTMzMzMzLTQ4LjIxMzMzNCAyNC4zMiAyMC40OGMxOC4zNDY2NjcgMTUuNzg2NjY3IDM4LjQgMjkuNDQgNTkuNzMzMzMzIDQwLjk2bDI4LjE2IDE1LjM2LTMwLjI5MzMzMyA1NS4wNHpNMTcxLjUyIDY0MC44NTMzMzNjLTYuNC04LjUzMzMzMy0xMi4zNzMzMzMtMTcuMDY2NjY3LTE4LjM0NjY2Ny0yNi4wMjY2NjYtNS4xMi04LjEwNjY2Ny05LjgxMzMzMy0xNi4yMTMzMzMtMTQuNTA2NjY2LTI0LjMydi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMS43MDY2NjdoLTAuNDI2NjY2di0zLjg0aC0wLjQyNjY2N3YtNS45NzMzMzNIMTM2LjUzMzMzM3YtMC44NTMzMzNoLTAuNDI2NjY2Yy0xLjI4LTIuNTYtMi4xMzMzMzMtNC42OTMzMzMtMi45ODY2NjctNi44MjY2Njd2LTIuNTZoLTAuNDI2NjY3Yy0xLjI4LTIuMTMzMzMzLTIuMTMzMzMzLTQuNjkzMzMzLTMuNDEzMzMzLTYuODI2NjY3di0yLjU2cy0xLjI4LTMuNDEzMzMzLTIuMTMzMzMzLTQuNjkzMzMzVjU0NC40MjY2NjdsLTEuMjgtMi45ODY2Njd2LTAuODUzMzMzcy0xLjI4LTIuOTg2NjY3LTEuNzA2NjY3LTQuNjkzMzM0Yy0zLjg0LTkuODEzMzMzLTcuMjUzMzMzLTIwLjA1MzMzMy0xMC4yNC0zMC4yOTMzMzNsNTguNDUzMzMzLTIyLjYxMzMzMyAxMS41MiAyOS44NjY2NjZjOC41MzMzMzMgMjIuNjEzMzMzIDE5LjYyNjY2NyA0My45NDY2NjcgMzIuODUzMzM0IDY0LjQyNjY2N2wxNy40OTMzMzMgMjYuODgtNTIuOTA2NjY3IDM0LjEzMzMzM3ogbS04MS40OTMzMzMtMTk0LjU2Yy0xLjcwNjY2Ny0xMC4yNC0yLjU2LTIwLjkwNjY2Ny0zLjQxMzMzNC0zMS41NzMzMzMgMC01Ljk3MzMzMy0wLjg1MzMzMy0xMS45NDY2NjctMC44NTMzMzMtMTcuOTJWMzU2LjI2NjY2N2MwLTguNTMzMzMzIDAuODUzMzMzLTE2LjY0IDEuNzA2NjY3LTI0LjMydi03LjY4YzEuMjgtMTEuOTQ2NjY3IDMuNDEzMzMzLTIzLjQ2NjY2NyA1LjU0NjY2Ni0zNC45ODY2NjdsNjIuMjkzMzM0IDguMTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzM2MtMi4xMzMzMzMgMTUuMzYtMi45ODY2NjcgMzEuMTQ2NjY3LTIuOTg2NjY3IDQ2LjkzMzMzMyAwIDguNTMzMzMzIDAgMTcuMDY2NjY3IDAuODUzMzM0IDI1LjZsMi4xMzMzMzMgMzItNjIuNzIgNC4yNjY2Njd6IG03OC45MzMzMzMtMTgzLjg5MzMzM2wtNTcuMTczMzMzLTI2LjAyNjY2N2MzLjg0LTkuODEzMzMzIDcuNjgtMTkuNjI2NjY3IDExLjk0NjY2Ni0yOS40NCAyLjEzMzMzMy00LjY5MzMzMyA0LjI2NjY2Ny05LjM4NjY2NyA2LjQtMTMuNjUzMzMzdi00LjI2NjY2N2gwLjQyNjY2N2M5LjgxMzMzMy0xOS4yIDIwLjQ4LTM3LjEyIDMyLjg1MzMzMy01NC4xODY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNjNi40LTguOTYgMTIuOC0xNy40OTMzMzMgMjAuMDUzMzMzLTI1LjZsNTAuNzczMzMzIDM3LjEyLTE4Ljc3MzMzMyAyNi4wMjY2NjZjLTE0LjA4IDE5LjYyNjY2Ny0yNi40NTMzMzMgNDAuNTMzMzMzLTM2LjY5MzMzMyA2Mi4yOTMzMzRsLTEzLjIyNjY2NyAyOS4wMTMzMzN6IG0xMDAuNjkzMzMzLTE0OS43NmwtMzcuNTQ2NjY2LTUwLjM0NjY2N2MxMi4zNzMzMzMtMTAuNjY2NjY3IDI1LjYtMjAuOTA2NjY3IDM5LjI1MzMzMy0zMC4yOTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDEuMjh2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjg1MzMzM2MxNy4wNjY2NjctMTEuOTQ2NjY3IDM0Ljk4NjY2Ny0yMi4xODY2NjcgNTMuNzYtMzEuMTQ2NjY3IDkuMzg2NjY3LTQuNjkzMzMzIDE5LjItOC45NiAyOS4wMTMzMzMtMTIuOGwyNi44OCA1Ni43NDY2NjctMjkuMDEzMzMzIDEzLjY1MzMzM2MtMjEuNzYgMTAuMjQtNDIuNjY2NjY3IDIzLjA0LTYxLjg2NjY2NyAzNy41NDY2NjdsLTI1LjYgMTkuMnogbTE1OS41NzMzMzQtODMuMmwtOC45Ni02Mi4yOTMzMzNjMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzMy01LjU0NjY2NyAxMC42NjY2NjctMS43MDY2NjcgMjAuOTA2NjY3LTIuNTYgMzEuNTczMzMzLTMuNDEzMzMzaDEyLjM3MzMzNFYtNDIuNjY2NjY3aDMzLjcwNjY2NmMxMy4yMjY2NjcgMC40MjY2NjcgMjYuNDUzMzMzIDEuNzA2NjY3IDM5LjI1MzMzNCAzLjQxMzMzNGwtMy40MTMzMzQgNjIuNzItMzItMS43MDY2NjdjLTYuODI2NjY3IDAtMTQuMDgtMC40MjY2NjctMjAuOTA2NjY2LTAuNDI2NjY3LTE3LjA2NjY2NyAwLTM0LjU2IDEuMjgtNTEuMiAzLjQxMzMzNGwtMzEuNTczMzM0IDQuNjkzMzMzeiBtMzAyLjA4IDY0bC0yNy4zMDY2NjctMTcuMDY2NjY3Yy0yMC40OC0xMi44LTQyLjI0LTIzLjQ2NjY2Ny02NC44NTMzMzMtMzJsLTI5Ljg2NjY2Ny0xMS4wOTMzMzMgMjIuMTg2NjY3LTU4Ljg4YzEwLjI0IDIuOTg2NjY3IDIwLjQ4IDYuNCAzMC4yOTMzMzMgMTAuMjQgMjYuODggMTAuMjQgNTIuNDggMjIuNjEzMzMzIDc2LjM3MzMzMyAzNy45NzMzMzMgOC45NiA1Ljk3MzMzMyAxNy45MiAxMS41MiAyNi40NTMzMzQgMTcuOTJsLTMzLjI4IDUzLjMzMzMzNHogbTExMi42NCAxNDAuOGwtMTUuNzg2NjY3LTI3LjczMzMzM2MtMTEuOTQ2NjY3LTIwLjkwNjY2Ny0yNi4wMjY2NjctNDAuOTYtNDEuODEzMzMzLTU5LjMwNjY2N2wtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YzcuNjggNy42OCAxNC45MzMzMzMgMTUuMzYgMjEuNzYgMjMuMDQgMy40MTMzMzMgNC4yNjY2NjcgNi44MjY2NjcgOC4xMDY2NjcgOS44MTMzMzMgMTIuMzczMzMzdjAuODUzMzM0aDAuNDI2NjY3bDIuMTMzMzMzIDIuOTg2NjY2aDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3VjEyOGgwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM0g4NTMuMzMzMzMzdjAuODUzMzMzbDIuNTYgMy44NHYwLjg1MzMzNGMxNC45MzMzMzMgMjAuOTA2NjY3IDI3LjczMzMzMyA0My4wOTMzMzMgMzguNCA2Ni4xMzMzMzNsLTU0LjYxMzMzMyAzMC43MnogbTMxLjE0NjY2NiAxNzcuNDkzMzMzdi0zMmMtMC44NTMzMzMtMjQuMzItMy40MTMzMzMtNDguNjQtOC41MzMzMzMtNzIuMTA2NjY2bC02LjgyNjY2Ny0zMS4xNDY2NjcgNjEuNDQtMTMuMjI2NjY3YzExLjUyIDM4LjQgMTcuNDkzMzMzIDc4LjkzMzMzMyAxNy40OTMzMzQgMTIxLjE3MzMzNCAwIDguOTYgMCAxNy45Mi0wLjg1MzMzNCAyNi40NTMzMzNsLTYyLjcyIDAuODUzMzMzeiBtLTIuMTMzMzMzIDIwMC4xMDY2NjdsLTU1LjQ2NjY2Ny0yOS40NCAxNC45MzMzMzQtMjguMTZjMTEuNTItMjEuMzMzMzMzIDIwLjQ4LTQzLjk0NjY2NyAyNy4zMDY2NjYtNjYuOTg2NjY3bDguOTYtMzAuNzIgNjAuMTYgMTcuOTJjLTIuNTYgMTIuMzczMzMzLTUuOTczMzMzIDI0LjMyLTkuMzg2NjY2IDM2LjI2NjY2N1Y1MTkuMjUzMzMzYy0zLjQxMzMzMyAxMC4yNC03LjI1MzMzMyAyMC4wNTMzMzMtMTEuMDkzMzM0IDI5Ljg2NjY2N1Y1NTcuNjUzMzMzYy04LjUzMzMzMyAxOS42MjY2NjctMTguMzQ2NjY3IDM3Ljk3MzMzMy0yOS44NjY2NjYgNTUuODkzMzM0eiBtLTE1My4xNzMzMzMgMTQ1LjQ5MzMzM2wtMzQuNTYtNTIuNDggMjYuODgtMTcuNDkzMzMzYzIwLjA1MzMzMy0xMy4yMjY2NjcgMzguODI2NjY3LTI4LjU4NjY2NyA1Ni4zMi00NS42NTMzMzNsMjIuNjEzMzMzLTIyLjYxMzMzNCA0NC4zNzMzMzMgNDQuMzczMzM0YTQyMy4xNjggNDIzLjE2OCAwIDAgMS04NS4zMzMzMzMgNzUuNTJoLTAuODUzMzMzdjAuODUzMzMzaC0xLjI4djAuODUzMzMzaC0wLjQyNjY2N2MtOC45NiA2LjQtMTcuOTIgMTEuOTQ2NjY3LTI3LjMwNjY2NyAxNy4wNjY2Njd6TTYxOC42NjY2NjcgMTkxLjE0NjY2N2MtNS45NzMzMzMgMC0xMS41MiAyLjEzMzMzMy0xNS43ODY2NjcgNi44MjY2NjZsLTkxLjMwNjY2NyA5OC41NmMtMTIuOC0xMy4yMjY2NjctMjQuNzQ2NjY3LTI2Ljg4LTM3LjEyLTQwLjk2LTE3LjQ5MzMzMy0yMC4wNTMzMzMtMzUuNDEzMzMzLTM5LjY4LTU0LjE4NjY2Ni01OC40NTMzMzNhMjEuMzMzMzMzIDIxLjMzMzMzMyAwIDAgMC0yNi40NTMzMzQtMi45ODY2NjcgMjEuMTIgMjEuMTIgMCAwIDAtOC41MzMzMzMgMjUuMTczMzM0YzIwLjA1MzMzMyA1NS44OTMzMzMgMzYuNjkzMzMzIDExMy45MiA1Mi45MDY2NjcgMTcwLjI0IDE2LjIxMzMzMyA1Ni43NDY2NjcgMzMuMjggMTE1LjYyNjY2NyA1My43NiAxNzIuOCAyLjk4NjY2NyA4LjUzMzMzMyAxMS4wOTMzMzMgMTQuMDggMjAuMDUzMzMzIDE0LjA4IDguOTYgMCAxNy4wNjY2NjctNS45NzMzMzMgMjAuMDUzMzMzLTE0LjkzMzMzNCAxNy45Mi01Ny4xNzMzMzMgMzUuODQtMTE0LjM0NjY2NyA1My4zMzMzMzQtMTcxLjUyIDE3LjQ5MzMzMy01Ny4xNzMzMzMgMzQuOTg2NjY3LTExNC4zNDY2NjcgNTMuMzMzMzMzLTE3MS4wOTMzMzNhMjEuMTIgMjEuMTIgMCAwIDAtMjAuMDUzMzMzLTI3LjczMzMzM3ogbS0xMDYuNjY2NjY3IDE1Ny44NjY2NjZoMC40MjY2NjdjNS41NDY2NjcgMCAxMS4wOTMzMzMtMi41NiAxNS4zNi02LjgyNjY2Nmw0Mi4yNC00NS42NTMzMzRjLTguNTMzMzMzIDI2Ljg4LTE2LjY0IDU0LjE4NjY2Ny0yNS4xNzMzMzQgODEuMDY2NjY3LTExLjA5MzMzMyAzNi4yNjY2NjctMjIuMTg2NjY3IDcyLjUzMzMzMy0zMy43MDY2NjYgMTA4LjgtMTEuNTItMzYuMjY2NjY3LTIxLjc2LTcyLjUzMzMzMy0zMi0xMDguMzczMzMzLTcuMjUzMzMzLTI2LjAyNjY2Ny0xNC45MzMzMzMtNTIuMDUzMzMzLTIzLjA0LTc4LjUwNjY2NyAxMy4yMjY2NjcgMTQuOTMzMzMzIDI2Ljg4IDI5LjQ0IDQwLjk2IDQzLjUyYTIxLjc2IDIxLjc2IDAgMCAwIDE0LjkzMzMzMyA2LjR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm91bmRhcnktZXZlbnQtdGltZSIgdW5pY29kZT0iJiM1OTA4MzsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6TTUxMiA1MDkuODY2NjY3YTEyNS44MjQgMTI1LjgyNCAwIDEgMCAwLTI1MS43MzMzMzQgMTI1LjgyNCAxMjUuODI0IDAgMSAwIDAgMjUxLjczMzMzNG0wIDUzLjMzMzMzM2ExNzkuMiAxNzkuMiAwIDEgMS0wLjA0MjY2Ny0zNTguMzU3MzMzQTE3OS4yIDE3OS4yIDAgMCAxIDUxMiA1NjMuMnpNNTU4LjkzMzMzMyAzNDYuMDI2NjY3SDUxMmMtMTEuOTQ2NjY3IDAtMjEuMzMzMzMzIDkuMzg2NjY3LTIxLjMzMzMzMyAyMS4zMzMzMzN2NzUuMDkzMzMzYzAgMTEuOTQ2NjY3IDkuMzg2NjY3IDIxLjMzMzMzMyAyMS4zMzMzMzMgMjEuMzMzMzM0czIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzMtMjEuMzMzMzM0di01My43NmgyNS42YzExLjk0NjY2NyAwIDIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzQtMjEuMzMzMzMzcy05LjM4NjY2Ny0yMS4zMzMzMzMtMjEuMzMzMzM0LTIxLjMzMzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtYzkiIHVuaWNvZGU9IiYjNTkwODk7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek02MTcuMzg2NjY3IDIxNy42SDQwNy4wNGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJ2Mjk0LjRjMCAxMC42NjY2NjcgOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoMjEwLjM0NjY2N2MxMC42NjY2NjcgMCAxOS4yLTguNTMzMzMzIDE5LjItMTkuMnYtMjk0LjRjMC0xMC42NjY2NjctOC41MzMzMzMtMTkuMi0xOS4yLTE5LjJ6TTQyNi4yNCAyNTZoMTcxLjk0NjY2N1Y1MTJINDI2LjI0di0yNTZ6TTU1OC45MzMzMzMgNDMyLjY0aC05My40NGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJzOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuNDRjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJzLTguNTMzMzMzLTE5LjItMTkuMi0xOS4yek01NTguOTMzMzMzIDM2NC44aC05My40NGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJzOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuNDRjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJzLTguNTMzMzMzLTE5LjItMTkuMi0xOS4yek01NTguOTMzMzMzIDI5Ni45NmgtOTMuNDRjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4yczguNTMzMzMzIDE5LjIgMTkuMiAxOS4yaDkzLjQ0YzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ycy04LjUzMzMzMy0xOS4yLTE5LjItMTkuMnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsYW5lLWluc2VydC1hYm92ZSIgdW5pY29kZT0iJiM1OTA5NjsiIGQ9Ik04ODcuODkzMzMzIDI0Ljc0NjY2N0gxODMuODkzMzMzYy0zNi4yNjY2NjcgMC02NS43MDY2NjcgMjkuNDQtNjUuNzA2NjY2IDY1LjcwNjY2NnYzNjIuNjY2NjY3YzAgMzYuMjY2NjY3IDI5LjQ0IDY1LjcwNjY2NyA2NS43MDY2NjYgNjUuNzA2NjY3aDcwNGMzNi4yNjY2NjcgMCA2NS43MDY2NjctMjkuNDQgNjUuNzA2NjY3LTY1LjcwNjY2N3YtMzYyLjY2NjY2N2MwLTM2LjI2NjY2Ny0yOS40NC02NS43MDY2NjctNjUuNzA2NjY3LTY1LjcwNjY2NnogbS03MDQgNDI2LjY2NjY2NmwxLjcwNjY2Ny0zNjAuOTYgNzAyLjI5MzMzMyAxLjcwNjY2Ny0xLjcwNjY2NiAzNTkuMjUzMzMzSDE4My44OTMzMzN6IG03MDQgMHpNMTE5Ljg5MzMzMyA2MjUuMDY2NjY3aDY0di0xMDYuNjY2NjY3aC02NHpNOTIyLjAyNjY2NyA2NjYuNDUzMzMzaC0xNDcuNjI2NjY3djY0aDE0Ny42MjY2Njd2LTY0eiBtLTIwOC42NCAwaC0xNDcuMnY2NGgxNDcuMnYtNjR6IG0tMjA4LjY0IDBIMzU3LjU0NjY2N3Y2NGgxNDcuMnYtNjR6IG0tMjA4LjY0IDBIMTQ5LjMzMzMzM3Y2NGgxNDcuMnYtNjR6TTg4Ny44OTMzMzMgNjI1LjA2NjY2N2g2NHYtMTA2LjY2NjY2N2gtNjR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ3JvdXAiIHVuaWNvZGU9IiYjNTkwOTg7IiBkPSJNOTAxLjEyIDcxMy44MTMzMzNoLTExNy4zMzMzMzN2LTY0aDkzLjg2NjY2NnYtMzkuNjhoNjRWNjczLjI4aC04LjUzMzMzM3YyNC43NDY2NjdhNDEuMDQ1MzMzIDQxLjA0NTMzMyAwIDAgMS0zMiAxNS43ODY2NjZ6IG0tMTgxLjMzMzMzMyAwaC0xNDkuMzMzMzM0di02NGgxNDkuMzMzMzM0djY0eiBtLTIxMy4zMzMzMzQgMGgtMTQ5LjMzMzMzM3YtNjRoMTQ5LjMzMzMzM3Y2NHogbS0yMTMuMzMzMzMzIDBoLTE0OS4zMzMzMzN2LTI2LjAyNjY2Nkg5MC44OGMtMS43MDY2NjctNC42OTMzMzMtMi41Ni05LjM4NjY2Ny0yLjU2LTE0LjUwNjY2N3YtMTM0LjgyNjY2N2g2NFY2NDkuODEzMzMzaDE0MC44djY0eiBtLTE0MC44LTIzOS4zNmgtNjR2LTE0OS4zMzMzMzNoNjR2MTQ5LjMzMzMzM3ogbTAtMjEzLjMzMzMzM2gtNjR2LTEyMi40NTMzMzNjMC0xMC4yNCAzLjg0LTE5LjYyNjY2NyAxMC4yNC0yNi44OGg1My43NnYxNDkuMzMzMzMzeiBtMTUzLjE3MzMzMy05OC45ODY2NjdoLTE0OS4zMzMzMzN2LTY0aDE0OS4zMzMzMzN2NjR6IG0yMTMuMzMzMzM0IDBoLTE0OS4zMzMzMzR2LTY0aDE0OS4zMzMzMzR2NjR6IG0yMTMuMzMzMzMzIDBoLTE0OS4zMzMzMzN2LTY0aDE0OS4zMzMzMzN2NjR6IG0xNjguOTYgMGgtMTA0Ljk2di02NGgxMDQuOTZ2NjR6IG0xMC42NjY2NjctNjIuNzJ6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDBzLTMuNDEzMzMzLTAuODUzMzMzLTUuMTItMC44NTMzMzNjMS43MDY2NjcgMCAzLjQxMzMzMyAwLjQyNjY2NyA1LjEyIDAuODUzMzMzeiBtLTUuMTItMC44NTMzMzN6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG0wIDB6IG00MC41MzMzMzMgMjM0LjY2NjY2N2gtNjR2LTE0OS4zMzMzMzRoNjR2MTQ5LjMzMzMzNHogbTAgMjEzLjMzMzMzM2gtNjR2LTE0OS4zMzMzMzNoNjR2MTQ5LjMzMzMzM3pNOTM4LjY2NjY2NyA2OTguNDUzMzMzeiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAweiBtMCAwbC0zLjg0LTE2LjY0aDcuNjhWNzAzLjE0NjY2N3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtdDUiIHVuaWNvZGU9IiYjNTkxMDA7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek01MzQuNjEzMzMzIDUyOS4wNjY2Njd2LTc0LjY2NjY2N0gzNjYuOTMzMzMzdi0xNDAuOGgxNjcuNjh2LTc0LjY2NjY2N2M0MC45NiA0OC4yMTMzMzMgODEuNDkzMzMzIDk2Ljg1MzMzMyAxMjIuNDUzMzM0IDE0NS4wNjY2NjdsLTEyMi40NTMzMzQgMTQ1LjA2NjY2N3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJib3VuZGFyeS1ldmVudC1jYW5jZWwiIHVuaWNvZGU9IiYjNTkxMDE7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek01NzUuNTczMzMzIDIyNy40MTMzMzNhMjAuMDUzMzMzIDIwLjA1MzMzMyAwIDAgMC0xNC45MzMzMzMgNi40TDUxMiAyODIuNDUzMzMzbC00OC42NC00OC42NGMtOC41MzMzMzMtOC41MzMzMzMtMjEuNzYtOC41MzMzMzMtMzAuMjkzMzMzIDBsLTcxLjY4IDcxLjY4Yy0zLjg0IDMuODQtNi40IDkuMzg2NjY3LTYuNCAxNC45MzMzMzRzMi4xMzMzMzMgMTEuMDkzMzMzIDYuNCAxNC45MzMzMzNMNDEwLjAyNjY2NyAzODRsLTQ4LjY0IDQ4LjY0Yy0zLjg0IDMuODQtNi40IDkuMzg2NjY3LTYuNCAxNC45MzMzMzNzMi4xMzMzMzMgMTEuMDkzMzMzIDYuNCAxNC45MzMzMzRsNzEuNjggNzEuNjhjOC41MzMzMzMgOC41MzMzMzMgMjEuNzYgOC41MzMzMzMgMzAuMjkzMzMzIDBMNTEyIDQ4NS41NDY2NjdsNDguNjQgNDguNjRjOC41MzMzMzMgOC41MzMzMzMgMjEuNzYgOC41MzMzMzMgMzAuMjkzMzMzIDBsNzEuNjgtNzEuNjhjMy44NC0zLjg0IDYuNC05LjM4NjY2NyA2LjQtMTQuOTMzMzM0cy0yLjEzMzMzMy0xMS4wOTMzMzMtNi40LTE0LjkzMzMzM0w2MTMuOTczMzMzIDM4NGw0OC42NC00OC42NGMzLjg0LTMuODQgNi40LTkuMzg2NjY3IDYuNC0xNC45MzMzMzNzLTIuMTMzMzMzLTExLjA5MzMzMy02LjQtMTQuOTMzMzM0bC03MS42OC03MS42OGMtNC4yNjY2NjctNC4yNjY2NjctOS44MTMzMzMtNi40LTE0LjkzMzMzMy02LjR6IG0tMTY4Ljk2IDkzLjAxMzMzNGw0MS4zODY2NjctNDEuMzg2NjY3IDQ4LjY0IDQ4LjY0YzguNTMzMzMzIDguNTMzMzMzIDIxLjc2IDguNTMzMzMzIDMwLjI5MzMzMyAwbDQ4LjY0LTQ4LjY0IDQxLjM4NjY2NyA0MS4zODY2NjctNDguNjQgNDguNjRjLTMuODQgMy44NC02LjQgOS4zODY2NjctNi40IDE0LjkzMzMzM3MyLjEzMzMzMyAxMS4wOTMzMzMgNi40IDE0LjkzMzMzM2w0OC42NCA0OC42NC00MS4zODY2NjcgNDEuMzg2NjY3LTQ4LjY0LTQ4LjY0Yy04LjUzMzMzMy04LjUzMzMzMy0yMS43Ni04LjUzMzMzMy0zMC4yOTMzMzMgMEw0NDggNDg4Ljk2bC00MS4zODY2NjctNDEuMzg2NjY3IDQ4LjY0LTQ4LjY0YzMuODQtMy44NCA2LjQtOS4zODY2NjcgNi40LTE0LjkzMzMzM3MtMi4xMzMzMzMtMTEuMDkzMzMzLTYuNC0xNC45MzMzMzNsLTQ4LjY0LTQ4LjY0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN1Yi1wcm9jZXNzLW1hcmtlciIgdW5pY29kZT0iJiM1OTEwMjsiIGQ9Ik04MjcuNzMzMzMzIDcwOS41NDY2Njd2LTYyOS43NkgxOTcuOTczMzMzVjcwOS41NDY2NjdIODI3LjczMzMzM20yNC43NDY2NjcgNjcuNDEzMzMzSDE3My4yMjY2NjdjLTIzLjQ2NjY2NyAwLTQyLjY2NjY2Ny0xOS4yLTQyLjY2NjY2Ny00Mi42NjY2Njd2LTY3OS4yNTMzMzNjMC0yMy40NjY2NjcgMTkuMi00Mi42NjY2NjcgNDIuNjY2NjY3LTQyLjY2NjY2N2g2NzkuMjUzMzMzYzIzLjQ2NjY2NyAwIDQyLjY2NjY2NyAxOS4yIDQyLjY2NjY2NyA0Mi42NjY2NjdWNzM0LjI5MzMzM2MwIDIzLjQ2NjY2Ny0xOS4yIDQyLjY2NjY2Ny00Mi42NjY2NjcgNDIuNjY2NjY3ek01MTIuODUzMzMzIDE5MmMtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMydjM0MS4zMzMzMzNjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyczMyLTE0LjUwNjY2NyAzMi0zMnYtMzQxLjMzMzMzM2MwLTE3LjQ5MzMzMy0xNC41MDY2NjctMzItMzItMzJ6TTY4My41MiAzNjIuNjY2NjY3aC0zNDEuMzMzMzMzYy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJzMTQuNTA2NjY3IDMyIDMyIDMyaDM0MS4zMzMzMzNjMTcuNDkzMzMzIDAgMzItMTQuNTA2NjY3IDMyLTMycy0xNC41MDY2NjctMzItMzItMzJ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VuZC10YXNrLWJhayIgdW5pY29kZT0iJiM1OTEwMzsiIGQ9Ik04NzYuOCA2NDIuMTMzMzMzdi01MTYuMjY2NjY2SDE0Ny4yVjY0Mi4xMzMzMzNoNzI5LjZtMjAuNDggNjEuODY2NjY3SDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6TTU2Mi43NzMzMzMgNTc2SDIzMC44MjY2NjdjLTkuODEzMzMzIDAtMTcuNDkzMzMzLTcuNjgtMTcuNDkzMzM0LTE3LjQ5MzMzM3YtMjMzLjgxMzMzNGMwLTkuODEzMzMzIDcuNjgtMTcuNDkzMzMzIDE3LjQ5MzMzNC0xNy40OTMzMzNoMzMxLjk0NjY2NmM5LjgxMzMzMyAwIDE3LjQ5MzMzMyA3LjY4IDE3LjQ5MzMzNCAxNy40OTMzMzNWNTU4LjUwNjY2N2MwIDkuODEzMzMzLTcuNjggMTcuNDkzMzMzLTE3LjQ5MzMzNCAxNy40OTMzMzN6TTM5Ni44IDQ1OS41MkwyNzkuODkzMzMzIDUzMy4zMzMzMzNoMjMzLjgxMzMzNEwzOTYuOCA0NTkuNTJ6TTI1NiAzNDkuNDRWNDk3LjkybDEyOS4yOC04MS40OTMzMzNoMC40MjY2NjdjMi45ODY2NjctMS43MDY2NjcgNi44MjY2NjctMi45ODY2NjcgMTAuMjQtMi45ODY2NjdoMC40MjY2NjZjMy44NCAwIDcuMjUzMzMzIDEuMjggMTAuMjQgMi45ODY2NjdoMC40MjY2NjdsMTI5LjI4IDgxLjQ5MzMzM3YtMTQ4LjQ4SDI1NnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzY3JpcHQtdGFzayIgdW5pY29kZT0iJiM1OTAxMDsiIGQ9Ik04NzYuOCA2NDIuMTMzMzMzdi01MTYuMjY2NjY2SDE0Ny4yVjY0Mi4xMzMzMzNoNzI5LjZtMjAuNDggNjEuODY2NjY3SDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6TTQwMi4zNDY2NjcgNTQ2LjEzMzMzM2MtMTEuNTItMTYuMjEzMzMzLTE5LjYyNjY2Ny0zNS40MTMzMzMtMTkuNjI2NjY3LTU3LjE3MzMzMyAwLTM3Ljk3MzMzMyAyNC43NDY2NjctNTguMDI2NjY3IDQzLjA5MzMzMy03Mi45NiAxOC43NzMzMzMtMTUuMzYgMzEuMTQ2NjY3LTI1LjE3MzMzMyAzMS4xNDY2NjctNTIuNDggMC02LjgyNjY2Ny0xNS43ODY2NjctMjEuMzMzMzMzLTMzLjI4LTMwLjcySDMwMy43ODY2NjdjNS4xMiA3LjY4IDkuMzg2NjY3IDE1Ljc4NjY2NyAxMi4zNzMzMzMgMjQuMzIgMTUuMzYgNDMuOTQ2NjY3LTE4Ljc3MzMzMyA3My44MTMzMzMtNDEuMzg2NjY3IDkzLjQ0LTI1LjYgMjIuNjEzMzMzLTM0LjEzMzMzMyAzMi44NTMzMzMtMzAuNzIgNDYuOTMzMzMzIDEwLjY2NjY2NyAyOS44NjY2NjcgMzkuMjUzMzMzIDQ0LjM3MzMzMyA0OS40OTMzMzQgNDguNjRoMTA5LjIyNjY2Nm02NS43MDY2NjcgMjkuODY2NjY3SDI4Ny41NzMzMzNzLTU0LjE4NjY2Ny0xNy40OTMzMzMtNzIuNTMzMzMzLTY5LjU0NjY2N2MtMTcuOTItNjYuOTg2NjY3IDkwLjQ1MzMzMy04Ny4wNCA3Mi41MzMzMzMtMTM5LjUyLTEwLjY2NjY2Ny0zMC4yOTMzMzMtMzguODI2NjY3LTQ2LjkzMzMzMy02MS4wMTMzMzMtNTUuNDY2NjY2LTQuNjkzMzMzLTEuNzA2NjY3LTMuNDEzMzMzLTguNTMzMzMzIDEuNzA2NjY3LTguNTMzMzM0aDIwMi4yNHM1NS44OTMzMzMgMjYuMDI2NjY3IDU1Ljg5MzMzMyA2MC41ODY2NjdjMCA3NS45NDY2NjctNzQuMjQgNzIuOTYtNzQuMjQgMTI1LjQ0IDAgMzcuNTQ2NjY3IDM3LjEyIDY2LjEzMzMzMyA1OC40NTMzMzMgNzkuMzYgMy44NCAyLjU2IDIuMTMzMzMzIDguMTA2NjY3LTIuNTYgOC4xMDY2Njd6TTM1Ny45NzMzMzMgNDg4Ljk2SDI3Ny43NmMtOC4xMDY2NjcgMC0xNC45MzMzMzMgNi44MjY2NjctMTQuOTMzMzMzIDE0LjkzMzMzM3M2LjgyNjY2NyAxNC45MzMzMzMgMTQuOTMzMzMzIDE0LjkzMzMzNGg4MC4yMTMzMzNjOC4xMDY2NjcgMCAxNC45MzMzMzMtNi44MjY2NjcgMTQuOTMzMzM0LTE0LjkzMzMzNHMtNi44MjY2NjctMTQuOTMzMzMzLTE0LjkzMzMzNC0xNC45MzMzMzN6TTM1Ny45NzMzMzMgNDQ1Ljg2NjY2N0gyOTMuNTQ2NjY3Yy04LjEwNjY2NyAwLTE0LjkzMzMzMyA2LjgyNjY2Ny0xNC45MzMzMzQgMTQuOTMzMzMzczYuODI2NjY3IDE0LjkzMzMzMyAxNC45MzMzMzQgMTQuOTMzMzMzaDY0LjQyNjY2NmM4LjEwNjY2NyAwIDE0LjkzMzMzMy02LjgyNjY2NyAxNC45MzMzMzQtMTQuOTMzMzMzcy02LjgyNjY2Ny0xNC45MzMzMzMtMTQuOTMzMzM0LTE0LjkzMzMzM3pNMzg5Ljk3MzMzMyA0MDMuMkgzNDEuNzZjLTguMTA2NjY3IDAtMTQuOTMzMzMzIDYuODI2NjY3LTE0LjkzMzMzMyAxNC45MzMzMzNzNi44MjY2NjcgMTQuOTMzMzMzIDE0LjkzMzMzMyAxNC45MzMzMzRoNDguMjEzMzMzYzguMTA2NjY3IDAgMTQuOTMzMzMzLTYuODI2NjY3IDE0LjkzMzMzNC0xNC45MzMzMzRzLTYuODI2NjY3LTE0LjkzMzMzMy0xNC45MzMzMzQtMTQuOTMzMzMzek00MjIuNCAzNjAuMTA2NjY3SDM0Mi4xODY2NjdjLTguMTA2NjY3IDAtMTQuOTMzMzMzIDYuODI2NjY3LTE0LjkzMzMzNCAxNC45MzMzMzNzNi44MjY2NjcgMTQuOTMzMzMzIDE0LjkzMzMzNCAxNC45MzMzMzNINDIyLjRjOC4xMDY2NjcgMCAxNC45MzMzMzMtNi44MjY2NjcgMTQuOTMzMzMzLTE0LjkzMzMzM3MtNi44MjY2NjctMTQuOTMzMzMzLTE0LjkzMzMzMy0xNC45MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VydmljZS10YXNrIiB1bmljb2RlPSImIzU5MTA0OyIgZD0iTTg3Ni44IDY0Mi4xMzMzMzN2LTUxNi4yNjY2NjZIMTQ3LjJWNjQyLjEzMzMzM2g3MjkuNm0yMC40OCA2MS44NjY2NjdIMTI2LjcyYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3LTQxLjM4NjY2N3YtNTU3LjIyNjY2NmMwLTIyLjYxMzMzMyAxOC4zNDY2NjctNDEuMzg2NjY3IDQxLjM4NjY2Ny00MS4zODY2NjdoNzcwLjU2YzIyLjYxMzMzMyAwIDQxLjM4NjY2NyAxOC4zNDY2NjcgNDEuMzg2NjY3IDQxLjM4NjY2N1Y2NjIuNjEzMzMzYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3IDQxLjM4NjY2N3pNMzY0LjM3MzMzMyAyODhoLTMwLjI5MzMzM2MtMTYuNjQgMC0zMC4yOTMzMzMgMTMuNjUzMzMzLTMwLjI5MzMzMyAzMC4yOTMzMzN2OS44MTMzMzRsLTguMTA2NjY3LTUuNTQ2NjY3Yy01LjU0NjY2Ny01LjU0NjY2Ny0xMy4yMjY2NjctOC45Ni0yMS4zMzMzMzMtOC45NnMtMTUuNzg2NjY3IDIuOTg2NjY3LTIxLjMzMzMzNCA4Ljk2bC0yMS4zMzMzMzMgMjEuMzMzMzMzYTI5Ljg2NjY2NyAyOS44NjY2NjcgMCAwIDAgMCA0Mi42NjY2NjdsNi40IDUuOTczMzMzLTkuODEzMzMzIDIuMTMzMzM0Yy0xNi42NCAwLTMwLjI5MzMzMyAxMy42NTMzMzMtMzAuMjkzMzM0IDMwLjI5MzMzM3YzMC4yOTMzMzNjMCAxNi42NCAxMy42NTMzMzMgMzAuMjkzMzMzIDMwLjI5MzMzNCAzMC4yOTMzMzRoOC45NmwtNS41NDY2NjcgOC4xMDY2NjZhMjkuODY2NjY3IDI5Ljg2NjY2NyAwIDAgMCAwIDQyLjY2NjY2N2wyMS43NiAyMS4zMzMzMzNhMzEuMTQ2NjY3IDMxLjE0NjY2NyAwIDAgMCAyMS4zMzMzMzMgOC45NmM4LjEwNjY2NyAwIDE1Ljc4NjY2Ny0zLjQxMzMzMyAyMS4zMzMzMzQtOC45Nmw1Ljk3MzMzMy01Ljk3MzMzMyAyLjEzMzMzMyA5LjM4NjY2N2MwIDE2LjY0IDEzLjY1MzMzMyAzMC4yOTMzMzMgMzAuMjkzMzM0IDMwLjI5MzMzM2gzMC4yOTMzMzNjMTYuNjQgMCAzMC4yOTMzMzMtMTMuNjUzMzMzIDMwLjI5MzMzMy0zMC4yOTMzMzN2LTguOTZsOC41MzMzMzQgNS41NDY2NjZjNS41NDY2NjcgNS41NDY2NjcgMTMuMjI2NjY3IDguOTYgMjEuMzMzMzMzIDguOTZzMTUuNzg2NjY3LTIuOTg2NjY3IDIxLjMzMzMzMy04Ljk2bDIxLjMzMzMzNC0yMS43NmMxMS41Mi0xMS45NDY2NjcgMTEuNTItMzEuMTQ2NjY3IDAtNDIuNjY2NjY2bC02LjQtNi40IDkuODEzMzMzLTIuMTMzMzM0YzE2LjY0IDAgMzAuMjkzMzMzLTEzLjY1MzMzMyAzMC4yOTMzMzMtMzAuMjkzMzMzdi0zMC43MmMwLTE2LjY0LTEzLjY1MzMzMy0zMC4yOTMzMzMtMzAuMjkzMzMzLTMwLjI5MzMzM2gtOS44MTMzMzNsNS41NDY2NjYtOC4xMDY2NjdjMTEuNTItMTEuOTQ2NjY3IDExLjUyLTMxLjE0NjY2NyAwLTQyLjY2NjY2N2wtMjEuMzMzMzMzLTIxLjMzMzMzM2EyOS44NjY2NjcgMjkuODY2NjY3IDAgMCAwLTQyLjY2NjY2NyAwbC02LjQgNi40LTIuMTMzMzMzLTkuODEzMzMzYzAtMTYuNjQtMTMuNjUzMzMzLTMwLjI5MzMzMy0zMC4yOTMzMzMtMzAuMjkzMzM0ek0zMDIuMDggMzU4LjRjNC4yNjY2NjcgMCA4Ljk2LTAuODUzMzMzIDEyLjgtMi45ODY2NjcgMTAuNjY2NjY3LTMuNDEzMzMzIDE4Ljc3MzMzMy0xNC45MzMzMzMgMTguNzczMzMzLTI3LjczMzMzM3YtOS44MTMzMzNoMzAuNzJ2OC45NmMwIDEyLjggOC41MzMzMzMgMjQuMzIgMjAuNDggMjguNTg2NjY2IDEwLjI0IDQuNjkzMzMzIDIzLjg5MzMzMyAyLjU2IDMyLjg1MzMzNC02LjgyNjY2Nmw1Ljk3MzMzMy02LjQgMjIuMTg2NjY3IDIxLjc2LTYuNCA2LjRhMjkuOTUyIDI5Ljk1MiAwIDAgMC01Ljk3MzMzNCAzNC4xMzMzMzNjMy40MTMzMzMgMTAuNjY2NjY3IDE0LjkzMzMzMyAxOC4zNDY2NjcgMjcuNzMzMzM0IDE4Ljc3MzMzM2g5LjgxMzMzM3YzMS4xNDY2NjdoLTguOTZjLTEyLjggMC0yNC4zMiA4LjUzMzMzMy0yOC41ODY2NjcgMjAuNDhhMjkuMzEyIDI5LjMxMiAwIDAgMCA2LjgyNjY2NyAzMi44NTMzMzNsNi40IDYuNC0yMS4zMzMzMzMgMjEuNzZzLTEuMjgtMS4yOC0yLjEzMzMzNC0xLjcwNjY2NmwtNC42OTMzMzMtNC42OTMzMzRjLTguOTYtOC45Ni0yMi42MTMzMzMtMTEuNTItMzQuMTMzMzMzLTUuOTczMzMzLTEwLjY2NjY2NyAzLjQxMzMzMy0xOS4yIDE0LjkzMzMzMy0xOS4yIDI3LjczMzMzM3Y4Ljk2aC0zMC43MnYtOC45NmMwLTEyLjgtOC41MzMzMzMtMjQuMzItMjAuNDgtMjguMTYtMTAuMjQtNC42OTMzMzMtMjMuODkzMzMzLTIuNTYtMzIuODUzMzM0IDYuODI2NjY3bC01Ljk3MzMzMyA1Ljk3MzMzMy0yMi4xODY2NjctMjEuMzMzMzMzIDYuNC02LjgyNjY2N2M4Ljk2LTguOTYgMTEuNTItMjIuNjEzMzMzIDUuOTczMzM0LTM0LjEzMzMzMy0zLjQxMzMzMy0xMC42NjY2NjctMTQuOTMzMzMzLTE4Ljc3MzMzMy0yNy43MzMzMzQtMTguNzczMzMzaC04Ljk2di0zMC43Mmg4Ljk2YzEyLjggMCAyNC4zMi04LjUzMzMzMyAyOC4xNi0yMC40OCA1LjEyLTkuODEzMzMzIDIuNTYtMjMuODkzMzMzLTYuODI2NjY2LTMyLjg1MzMzNGwtNS45NzMzMzQtNS45NzMzMzMgMjEuMzMzMzM0LTIxLjc2czEuMjggMS4yOCAyLjEzMzMzMyAxLjcwNjY2N2w0LjI2NjY2NyA0LjI2NjY2NmM1LjU0NjY2NyA1Ljk3MzMzMyAxMy42NTMzMzMgOC45NiAyMS4zMzMzMzMgOC45NnogbTQ3LjM2IDIwLjQ4Yy0zMy4yOCAwLTYwLjU4NjY2NyAyNi44OC02MC41ODY2NjcgNjAuNTg2NjY3czI2Ljg4IDYwLjU4NjY2NyA2MC41ODY2NjcgNjAuNTg2NjY2IDYwLjU4NjY2Ny0yNi44OCA2MC41ODY2NjctNjAuNTg2NjY2LTI2Ljg4LTYwLjU4NjY2Ny02MC41ODY2NjctNjAuNTg2NjY3eiBtMCA5MC44OGMtMTcuMDY2NjY3IDAtMzAuNzItMTMuNjUzMzMzLTMwLjcyLTMwLjcyczEzLjY1MzMzMy0zMC43MiAzMC43Mi0zMC43MiAzMC43MiAxMy42NTMzMzMgMzAuNzIgMzAuNzItMTMuNjUzMzMzIDMwLjcyLTMwLjcyIDMwLjcyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InRhYiIgdW5pY29kZT0iJiM1OTEwNTsiIGQ9Ik01MzguNDUzMzMzIDY5Mi4wNTMzMzNWNjA1Ljg2NjY2N2E4LjUzMzMzMyA4LjUzMzMzMyAwIDAgMC04LjUzMzMzMy04LjUzMzMzNEgyNTguNTZhNDAuOTYgNDAuOTYgMCAwIDEgMC04MS45MmgyNzEuMzZjNC42OTMzMzMgMCA4LjUzMzMzMy0zLjg0IDguNTMzMzMzLTguNTMzMzMzdi04Ni4xODY2NjdsMTM3LjM4NjY2NyAxMjkuMjhjMy40MTMzMzMgMy40MTMzMzMgMy40MTMzMzMgOC45NiAwIDEyLjM3MzMzNGwtMTM3LjM4NjY2NyAxMjkuMjh6TTcyNS4zMzMzMzMgMzczLjMzMzMzM2MtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMydjI5OC42NjY2NjdjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyczMyLTE0LjUwNjY2NyAzMi0zMnYtMjk4LjY2NjY2N2MwLTE3LjQ5MzMzMy0xNC41MDY2NjctMzItMzItMzJ6TTQ0Ny41NzMzMzMgMzUwLjcydi04Ni4xODY2NjdjMC00LjY5MzMzMyAzLjg0LTguNTMzMzMzIDguNTMzMzM0LTguNTMzMzMzaDI3MS4zNmE0MC45NiA0MC45NiAwIDAgMCAwLTgxLjkyaC0yNzEuMzZhOC41MzMzMzMgOC41MzMzMzMgMCAwIDEtOC41MzMzMzQtOC41MzMzMzN2LTg2LjE4NjY2N2wtMTM3LjM4NjY2NiAxMjkuMjhhOC43NDY2NjcgOC43NDY2NjcgMCAwIDAgMCAxMi4zNzMzMzNsMTM3LjM4NjY2NiAxMjkuMjh6TTI2MC42OTMzMzMgMzJjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnYyOTguNjY2NjY3YzAgMTcuNDkzMzMzIDE0LjUwNjY2NyAzMiAzMiAzMnMzMi0xNC41MDY2NjcgMzItMzJ2LTI5OC42NjY2NjdjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbW1lbnQiIHVuaWNvZGU9IiYjNTkxMDY7IiBkPSJNODE5LjIgNTMuMzMzMzMzaC0yMzAuNGMtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjcyNS4zMzMzMzNjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyaDIwNC44YzE3LjQ5MzMzMyAwIDMyLTE0LjUwNjY2NyAzMi0zMnMtMTQuNTA2NjY3LTMyLTMyLTMyaC0xNzIuOHYtNTc2aDE5OC40YzE3LjQ5MzMzMyAwIDMyLTE0LjUwNjY2NyAzMi0zMnMtMTQuNTA2NjY3LTMyLTMyLTMyek0xNzAuNjY2NjY3IDE4MS4zMzMzMzNjLTkuODEzMzMzIDAtMTkuNjI2NjY3IDQuNjkzMzMzLTI2LjAyNjY2NyAxMy4yMjY2NjctMTAuMjQgMTQuNTA2NjY3LTcuMjUzMzMzIDM0LjEzMzMzMyA3LjI1MzMzMyA0NC44bDQxLjM4NjY2NyAyOS44NjY2NjdjMTQuNTA2NjY3IDEwLjI0IDM0LjU2IDYuODI2NjY3IDQ0LjgtNy4yNTMzMzRzNy4yNTMzMzMtMzQuMTMzMzMzLTcuMjUzMzMzLTQ0LjhsLTQxLjM4NjY2Ny0yOS44NjY2NjZjLTUuNTQ2NjY3LTMuODQtMTIuMzczMzMzLTUuOTczMzMzLTE4Ljc3MzMzMy01Ljk3MzMzNHpNMjc0Ljc3MzMzMyAyNTZjLTkuODEzMzMzIDAtMTkuNjI2NjY3IDQuNjkzMzMzLTI2LjAyNjY2NiAxMy4yMjY2NjctMTAuMjQgMTQuNTA2NjY3LTcuMjUzMzMzIDM0LjEzMzMzMyA3LjI1MzMzMyA0NC44bDQxLjM4NjY2NyAyOS44NjY2NjZjMTQuNTA2NjY3IDEwLjI0IDM0LjU2IDYuODI2NjY3IDQ0LjgtNy4yNTMzMzNzNy4yNTMzMzMtMzQuMTMzMzMzLTcuMjUzMzM0LTQ0LjhsLTQxLjM4NjY2Ni0yOS44NjY2NjdjLTUuNTQ2NjY3LTMuODQtMTIuMzczMzMzLTUuOTczMzMzLTE4Ljc3MzMzNC01Ljk3MzMzM3ogbTEwNC4xMDY2NjcgNzQuNjY2NjY3Yy05LjgxMzMzMyAwLTE5LjYyNjY2NyA0LjY5MzMzMy0yNi4wMjY2NjcgMTMuMjI2NjY2LTEwLjI0IDE0LjUwNjY2Ny03LjI1MzMzMyAzNC4xMzMzMzMgNy4yNTMzMzQgNDQuOGw0MS4zODY2NjYgMjkuODY2NjY3YzE0LjUwNjY2NyAxMC4yNCAzNC41NiA2LjgyNjY2NyA0NC44LTcuMjUzMzMzczcuMjUzMzMzLTM0LjEzMzMzMy03LjI1MzMzMy00NC44bC00MS4zODY2NjctMjkuODY2NjY3Yy01LjU0NjY2Ny0zLjg0LTEyLjM3MzMzMy01Ljk3MzMzMy0xOC43NzMzMzMtNS45NzMzMzN6IG0xMDQuMTA2NjY3IDc0LjY2NjY2NmMtOS44MTMzMzMgMC0xOS42MjY2NjcgNC42OTMzMzMtMjYuMDI2NjY3IDEzLjIyNjY2Ny0xMC4yNCAxNC41MDY2NjctNy4yNTMzMzMgMzQuMTMzMzMzIDcuMjUzMzMzIDQ0LjhsNDEuMzg2NjY3IDI5Ljg2NjY2N2EzMi4wNDI2NjcgMzIuMDQyNjY3IDAgMSAwIDM3LjU0NjY2Ny01Mi4wNTMzMzRsLTQxLjM4NjY2Ny0yOS44NjY2NjZjLTUuNTQ2NjY3LTMuODQtMTIuMzczMzMzLTUuOTczMzMzLTE4Ljc3MzMzMy01Ljk3MzMzNHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtYW51YWwtdGFzayIgdW5pY29kZT0iJiM1OTAwOTsiIGQ9Ik04NzYuOCA2NDIuMTMzMzMzdi01MTYuMjY2NjY2SDE0Ny4yVjY0Mi4xMzMzMzNoNzI5LjZtMjAuNDggNjEuODY2NjY3SDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6TTM3Ni4zMiAzMDMuNzg2NjY3SDI4Ny41NzMzMzNjLTQ5LjA2NjY2NyAwLTg5LjE3MzMzMyA0MC4xMDY2NjctODkuMTczMzMzIDg5LjE3MzMzM3YzMmMwIDMxLjU3MzMzMyAxNy4wNjY2NjcgNjEuMDEzMzMzIDQ0LjM3MzMzMyA3Ni44IDUuMTIgMi45ODY2NjcgMTAuMjQgNi40IDE1LjM2IDkuODEzMzMzbDEwOC4zNzMzMzQgNzUuNTJhMjYuNDUzMzMzIDI2LjQ1MzMzMyAwIDAgMCAzMy4yOC0yLjk4NjY2NmMxNS43ODY2NjctMjIuNjEzMzMzIDE0LjkzMzMzMy01MC4zNDY2NjcgMC02OS41NDY2NjdoNzguMDhjMjAuNDggMCAzNy41NDY2NjctMTYuNjQgMzcuNTQ2NjY2LTM3LjU0NjY2NyAwLTIuOTg2NjY3IDAtNS41NDY2NjctMC44NTMzMzMtOC4xMDY2NjYgMjEuMzMzMzMzLTIuMTMzMzMzIDM3Ljk3MzMzMy0xNy45MiAzNy45NzMzMzMtMzcuMTIgMC0xNy4wNjY2NjctMTMuMjI2NjY3LTMxLjU3MzMzMy0zMS4xNDY2NjYtMzUuODQgMC44NTMzMzMtMi45ODY2NjcgMS4yOC01Ljk3MzMzMyAxLjI4LTguOTYgMC0xNy40OTMzMzMtMTIuOC0zMi40MjY2NjctMjkuNDQtMzYuMjY2NjY3IDAuNDI2NjY3LTIuNTYgMC44NTMzMzMtNS41NDY2NjcgMC44NTMzMzMtOC41MzMzMzMgMC0yMC40OC0xNS4zNi0zNy41NDY2NjctMzQuMTMzMzMzLTM3LjU0NjY2N0gzNzYuNzQ2NjY3eiBtMi45ODY2NjcgMjU1LjU3MzMzM2wtMTA0LjUzMzMzNC03Mi41MzMzMzNjLTUuNTQ2NjY3LTMuODQtMTEuNTItNy42OC0xNy40OTMzMzMtMTEuMDkzMzM0LTE3LjkyLTEwLjY2NjY2Ny0yOS40NC0zMC4yOTMzMzMtMjkuNDQtNTEuMnYtMzJjMC0zMi44NTMzMzMgMjYuNDUzMzMzLTU5LjMwNjY2NyA1OS4zMDY2NjctNTkuMzA2NjY2aDE3Mi4zNzMzMzNzNC4yNjY2NjcgMi45ODY2NjcgNC4yNjY2NjcgNy42OC0yLjU2IDcuNjgtNC4yNjY2NjcgNy42OEgzNzYuMzJjLTguMTA2NjY3IDAtMTQuOTMzMzMzIDYuODI2NjY3LTE0LjkzMzMzMyAxNC45MzMzMzNzNi44MjY2NjcgMTQuOTMzMzMzIDE0LjkzMzMzMyAxNC45MzMzMzNoMTA3LjUyYzQuNjkzMzMzIDAgOC41MzMzMzMgMy40MTMzMzMgOC41MzMzMzMgNy42OHMtMy44NCA3LjY4LTguNTMzMzMzIDcuNjhIMzc2LjMyYy04LjEwNjY2NyAwLTE0LjkzMzMzMyA2LjgyNjY2Ny0xNC45MzMzMzMgMTQuOTMzMzM0czYuODI2NjY3IDE0LjkzMzMzMyAxNC45MzMzMzMgMTQuOTMzMzMzaDEzMy4xMmM4LjEwNjY2NyAwIDEzLjIyNjY2NyA0LjY5MzMzMyAxMy4yMjY2NjcgNy42OHMtNS4xMiA3LjY4LTEzLjIyNjY2NyA3LjY4SDM3Ni4zMmMtOC4xMDY2NjcgMC0xNC45MzMzMzMgNi44MjY2NjctMTQuOTMzMzMzIDE0LjkzMzMzM3M2LjgyNjY2NyAxNS4zNiAxNC45MzMzMzMgMTUuMzZoMTAxLjU0NjY2N2M0LjI2NjY2NyAwIDcuNjggMy40MTMzMzMgNy42OCA3LjY4cy0zLjQxMzMzMyA3LjY4LTcuNjggNy42OEgzNTYuNjkzMzMzYy02LjQgMC0xMi4zNzMzMzMgNC4yNjY2NjctMTQuMDggMTAuNjY2NjY3LTIuMTMzMzMzIDYuNCAwIDEyLjggNS41NDY2NjcgMTYuNjRsMjEuMzMzMzMzIDE0LjkzMzMzM2MxMC42NjY2NjcgNy42OCAxNC41MDY2NjcgMjEuMzMzMzMzIDkuODEzMzM0IDMzLjI4eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InNlcXVlbmNlIiB1bmljb2RlPSImIzU5MTA3OyIgZD0iTTg5NiA3ODguOTA2NjY3cy0yNzMuOTItMTM5Ljk0NjY2Ny00MTMuMDEzMzMzLTIwNS4yMjY2NjdjMjkuODY2NjY3LTI3LjMwNjY2NyA1Ny42LTU2Ljc0NjY2NyA4Ni4xODY2NjYtODQuOTA2NjY3LTE0MS42NTMzMzMtMTQzLjM2LTI4Mi44OC0yODYuNzItNDI0LjUzMzMzMy00MzAuMDhsMzEuMTQ2NjY3LTI5Ljg2NjY2NmMxNDEuNjUzMzMzIDE0My4zNiAyODIuODggMjg2LjcyIDQyNC41MzMzMzMgNDMwLjA4IDI5LjAxMzMzMy0yOC41ODY2NjcgNTcuNi01Ny42IDg2LjE4NjY2Ny04Ni4xODY2NjdDNzYwLjc0NjY2NyA1MjkuMDY2NjY3IDg5NiA3ODguOTA2NjY3IDg5NiA3ODguOTA2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImRhdGEtc3RvcmUiIHVuaWNvZGU9IiYjNTkxMDg7IiBkPSJNNTEyLjQyNjY2NyAzNS40MTMzMzNjLTE2NC4yNjY2NjcgMC0zMzAuMjQgNDkuNDkzMzMzLTMzMC4yNCAxNDMuNzg2NjY3VjYyNi43NzMzMzNjMCA5NC4yOTMzMzMgMTY2LjQgMTQzLjc4NjY2NyAzMzAuMjQgMTQzLjc4NjY2N3MzMzAuMjQtNDkuNDkzMzMzIDMzMC4yNC0xNDMuNzg2NjY3VjE3OS4yYzAtOTQuMjkzMzMzLTE2Ni40LTE0My43ODY2NjctMzMwLjI0LTE0My43ODY2Njd6IG0wIDY3MS41NzMzMzRjLTE3Mi4zNzMzMzMgMC0yNjYuMjQtNTIuOTA2NjY3LTI2Ni4yNC03OS43ODY2Njd2LTQ0Ny41NzMzMzNjMC0yNy4zMDY2NjcgOTMuODY2NjY3LTc5Ljc4NjY2NyAyNjYuMjQtNzkuNzg2NjY3czI2Ni4yNCA1Mi45MDY2NjcgMjY2LjI0IDc5Ljc4NjY2N1Y2MjYuNzczMzMzYzAgMjcuMzA2NjY3LTkzLjg2NjY2NyA3OS43ODY2NjctMjY2LjI0IDc5Ljc4NjY2N3pNNTEyLjQyNjY2NyAyNTguOTg2NjY3Yy0xNjQuMjY2NjY3IDAtMzMwLjI0IDQ5LjQ5MzMzMy0zMzAuMjQgMTQzLjc4NjY2NiAwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJzMzItMTQuNTA2NjY3IDMyLTMyYzAtMjcuMzA2NjY3IDkzLjg2NjY2Ny03OS43ODY2NjcgMjY2LjI0LTc5Ljc4NjY2NnMyNjYuMjQgNTIuOTA2NjY3IDI2Ni4yNCA3OS43ODY2NjZjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyczMyLTE0LjUwNjY2NyAzMi0zMmMwLTk0LjI5MzMzMy0xNjYuNC0xNDMuNzg2NjY3LTMzMC4yNC0xNDMuNzg2NjY2ek01MTIuNDI2NjY3IDQ4Mi45ODY2NjdjLTE2NC4yNjY2NjcgMC0zMzAuMjQgNDkuNDkzMzMzLTMzMC4yNCAxNDMuNzg2NjY2IDAgMTcuNDkzMzMzIDE0LjUwNjY2NyAzMiAzMiAzMnMzMi0xNC41MDY2NjcgMzItMzJjMC0yNy4zMDY2NjcgOTMuODY2NjY3LTc5Ljc4NjY2NyAyNjYuMjQtNzkuNzg2NjY2czI2Ni4yNCA1Mi45MDY2NjcgMjY2LjI0IDc5Ljc4NjY2NmMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJzMzItMTQuNTA2NjY3IDMyLTMyYzAtOTQuMjkzMzMzLTE2Ni40LTE0My43ODY2NjctMzMwLjI0LTE0My43ODY2NjZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWFudWFsIiB1bmljb2RlPSImIzU5MTA5OyIgZD0iTTUzOC4wMjY2NjcgOTAuMDI2NjY3SDMyMS43MDY2NjdjLTExNy4zMzMzMzMgMC0yMTIuNDggOTUuNTczMzMzLTIxMi40OCAyMTIuNDhWMzc5LjczMzMzM2MwIDc1LjA5MzMzMyA0MC41MzMzMzMgMTQ1LjQ5MzMzMyAxMDUuMzg2NjY2IDE4My40NjY2NjcgMTIuOCA3LjY4IDI1LjYgMTUuMzYgMzcuNTQ2NjY3IDIzLjg5MzMzM2wyNjMuNjggMTgzLjQ2NjY2N2MyMy4wNCAxNi4yMTMzMzMgNTUuNDY2NjY3IDEzLjIyNjY2NyA3NS4wOTMzMzMtNi44MjY2NjcgMS4yOC0xLjI4IDIuNTYtMi45ODY2NjcgMy44NC00LjI2NjY2NiAzNi4yNjY2NjctNTIuMDUzMzMzIDMwLjcyLTEyMC43NDY2NjctOS4zODY2NjYtMTY2LjRoMTk5LjY4YzQ3Ljc4NjY2NyAwIDg2LjYxMzMzMy0zOC44MjY2NjcgODYuNjEzMzMzLTg2LjYxMzMzNCAwLTguMTA2NjY3LTEuMjgtMTYuMjEzMzMzLTMuNDEzMzMzLTIzLjQ2NjY2NiA1Mi40OC0yLjk4NjY2NyA5My44NjY2NjctNDAuNTMzMzMzIDkzLjg2NjY2Ni04Ni42MTMzMzQgMC00MC45Ni0zMi44NTMzMzMtNzUuMDkzMzMzLTc2LjgtODQuNDggMi41Ni04LjEwNjY2NyAzLjg0LTE2LjY0IDMuODQtMjUuMTczMzMzIDAtNDIuMjQtMzEuNTczMzMzLTc3LjY1MzMzMy03Mi45Ni04NS4zMzMzMzMgMi4xMzMzMzMtNy42OCAyLjk4NjY2Ny0xNS43ODY2NjcgMi45ODY2NjctMjQuMzIgMC00Ny43ODY2NjctMzUuNDEzMzMzLTg2LjYxMzMzMy03OC45MzMzMzMtODYuNjEzMzM0SDUzNy42eiBtOC45NiA2MjQuNjRMMjg4LjQyNjY2NyA1MzUuMDRjLTEzLjY1MzMzMy05LjM4NjY2Ny0yNy43MzMzMzMtMTcuOTItNDEuODEzMzM0LTI2LjQ1MzMzM2ExNDguODY0IDE0OC44NjQgMCAwIDEtNzMuMzg2NjY2LTEyOHYtNzcuMjI2NjY3YzAtODEuOTIgNjYuNTYtMTQ4LjQ4IDE0OC40OC0xNDguNDhoNDE5LjQxMzMzM2M2LjgyNjY2NyAwIDE0LjkzMzMzMyA5LjgxMzMzMyAxNC45MzMzMzMgMjIuNjEzMzMzcy03LjY4IDIyLjYxMzMzMy0xNC45MzMzMzMgMjIuNjEzMzM0aC0yMDIuNjY2NjY3Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJzMTQuNTA2NjY3IDMyIDMyIDMyaDI2MS45NzMzMzRjMTQuMDggMCAyNS42IDEwLjI0IDI1LjYgMjIuNjEzMzMzcy0xMS41MiAyMi42MTMzMzMtMjUuNiAyMi42MTMzMzNoLTI2MS45NzMzMzRjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnMxNC41MDY2NjcgMzIgMzIgMzJoMzIzLjg0YzIwLjkwNjY2NyAwIDM2LjI2NjY2NyAxMS45NDY2NjcgMzYuMjY2NjY3IDIyLjYxMzMzNHMtMTUuNzg2NjY3IDIyLjYxMzMzMy0zNi4yNjY2NjcgMjIuNjEzMzMzaC0zMjMuODRjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnMxNC41MDY2NjcgMzIuODUzMzMzIDMyIDMyLjg1MzMzM2gyNDcuMDRjMTIuMzczMzMzIDAgMjIuNjEzMzMzIDEwLjI0IDIyLjYxMzMzNCAyMi42MTMzMzRzLTEwLjI0IDIyLjYxMzMzMy0yMi42MTMzMzQgMjIuNjEzMzMzSDQ5MC42NjY2NjdhMzIgMzIgMCAwIDAtMzAuNzIgMjIuNjEzMzMzIDMyIDMyIDAgMCAwIDEyLjM3MzMzMyAzNS44NGw1Mi4wNTMzMzMgMzYuMjY2NjY3YzI5LjQ0IDIwLjQ4IDM4LjgyNjY2NyA1OS43MzMzMzMgMjMuMDQgOTAuODh6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVzaW5lc3MtcnVsZS10YXNrIiB1bmljb2RlPSImIzU5MTEwOyIgZD0iTTg3Ni44IDY0Mi4xMzMzMzN2LTUxNi4yNjY2NjZIMTQ3LjJWNjQyLjEzMzMzM2g3MjkuNm0yMC40OCA2MS44NjY2NjdIMTI2LjcyYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3LTQxLjM4NjY2N3YtNTU3LjIyNjY2NmMwLTIyLjYxMzMzMyAxOC4zNDY2NjctNDEuMzg2NjY3IDQxLjM4NjY2Ny00MS4zODY2NjdoNzcwLjU2YzIyLjYxMzMzMyAwIDQxLjM4NjY2NyAxOC4zNDY2NjcgNDEuMzg2NjY3IDQxLjM4NjY2N1Y2NjIuNjEzMzMzYTQxLjM4NjY2NyA0MS4zODY2NjcgMCAwIDEtNDEuMzg2NjY3IDQxLjM4NjY2N3pNNTI5LjA2NjY2NyAzMTQuNDUzMzMzSDIxMy4zMzMzMzNhMTIuMzczMzMzIDEyLjM3MzMzMyAwIDAgMC0xMi4zNzMzMzMgMTIuMzczMzM0VjU3NmMwIDYuODI2NjY3IDUuNTQ2NjY3IDEyLjM3MzMzMyAxMi4zNzMzMzMgMTIuMzczMzMzaDMxNS43MzMzMzRjNi44MjY2NjcgMCAxMi4zNzMzMzMtNS41NDY2NjcgMTIuMzczMzMzLTEyLjM3MzMzM3YtMjQ5LjE3MzMzM2MwLTYuODI2NjY3LTUuNTQ2NjY3LTEyLjM3MzMzMy0xMi4zNzMzMzMtMTIuMzczMzM0eiBtLTMwMy4zNiAyNC43NDY2NjdoMjkwLjk4NjY2NlY1NjMuNjI2NjY3SDIyNS43MDY2Njd2LTIyNC40MjY2Njd6TTUyOS4wNjY2NjcgMzE0LjQ1MzMzM0gyMTMuMzMzMzMzYTEyLjM3MzMzMyAxMi4zNzMzMzMgMCAwIDAtMTIuMzczMzMzIDEyLjM3MzMzNHY3OC4wOGMwIDYuODI2NjY3IDUuNTQ2NjY3IDEyLjM3MzMzMyAxMi4zNzMzMzMgMTIuMzczMzMzaDMxNS43MzMzMzRjNi44MjY2NjcgMCAxMi4zNzMzMzMtNS41NDY2NjcgMTIuMzczMzMzLTEyLjM3MzMzM3YtNzguMDhjMC02LjgyNjY2Ny01LjU0NjY2Ny0xMi4zNzMzMzMtMTIuMzczMzMzLTEyLjM3MzMzNHogbS0zMDMuMzYgMjQuNzQ2NjY3aDI5MC45ODY2NjZ2NTIuOTA2NjY3SDIyNS43MDY2Njd2LTUyLjkwNjY2N3pNMzEzLjE3MzMzMyAzMTQuNDUzMzMzSDIxMy4zMzMzMzNhMTIuMzczMzMzIDEyLjM3MzMzMyAwIDAgMC0xMi4zNzMzMzMgMTIuMzczMzM0VjU2MC42NGMwIDYuODI2NjY3IDUuNTQ2NjY3IDEyLjM3MzMzMyAxMi4zNzMzMzMgMTIuMzczMzMzaDk5Ljg0YzYuODI2NjY3IDAgMTIuMzczMzMzLTUuNTQ2NjY3IDEyLjM3MzMzNC0xMi4zNzMzMzN2LTIzMy44MTMzMzNjMC02LjgyNjY2Ny01LjU0NjY2Ny0xMi4zNzMzMzMtMTIuMzczMzM0LTEyLjM3MzMzNHogbS04Ny40NjY2NjYgMjQuNzQ2NjY3aDc1LjA5MzMzM1Y1NDguNjkzMzMzSDIyNS43MDY2Njd2LTIwOS40OTMzMzN6TTIxMy4zMzMzMzMgNTcwLjg4aDMxNS43MzMzMzR2LTk0LjcySDIxMy4zMzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVzaW5lc3MtcnVsZSIgdW5pY29kZT0iJiM1OTExMTsiIGQ9Ik05MzguNjY2NjY3IDEwLjY2NjY2N0gxMjhjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMlY2ODIuNjY2NjY3YzAgMTcuNDkzMzMzIDE0LjUwNjY2NyAzMiAzMiAzMmg4MTAuNjY2NjY3YzE3LjQ5MzMzMyAwIDMyLTE0LjUwNjY2NyAzMi0zMnYtNjQwYzAtMTcuNDkzMzMzLTE0LjUwNjY2Ny0zMi0zMi0zMnogbS03NzguNjY2NjY3IDY0aDc0Ni42NjY2NjdWNjUwLjY2NjY2N0gxNjB2LTU3NnpNOTM4LjY2NjY2NyAxMC42NjY2NjdIMTI4Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJ2MjAwLjEwNjY2NmMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJoODEwLjY2NjY2N2MxNy40OTMzMzMgMCAzMi0xNC41MDY2NjcgMzItMzJWNDIuNjY2NjY3YzAtMTcuNDkzMzMzLTE0LjUwNjY2Ny0zMi0zMi0zMnogbS03NzguNjY2NjY3IDY0aDc0Ni42NjY2Njd2MTM2LjEwNjY2NkgxNjB2LTEzNi4xMDY2NjZ6TTM4NCAxMC4yNEgxMjhhMzIuNDI2NjY3IDMyLjQyNjY2NyAwIDAgMC0zMi40MjY2NjcgMzIuNDI2NjY3VjY4Mi42NjY2NjdjMCAxNy45MiAxNC41MDY2NjcgMzIuNDI2NjY3IDMyLjQyNjY2NyAzMi40MjY2NjZoMjU2YzE3LjkyIDAgMzIuNDI2NjY3LTE0LjUwNjY2NyAzMi40MjY2NjctMzIuNDI2NjY2di02NDBjMC0xNy45Mi0xNC41MDY2NjctMzIuNDI2NjY3LTMyLjQyNjY2Ny0zMi40MjY2Njd6IG0tMjIzLjU3MzMzMyA2NS4yOGgxOTAuNzJWNjUwLjI0SDE2MC40MjY2Njd2LTU3NC43MnpNMTI4IDY4Mi42NjY2NjdoODEwLjY2NjY2N3YtMjU2SDEyOHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1wYXJhbGxlbCIgdW5pY29kZT0iJiM1OTExMzsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01NjIuNzczMzMzIDIyMS44NjY2NjdoLTEwMS41NDY2NjZjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzQgMjEuMzMzMzMzdjY4LjY5MzMzM0gzNzEuMmMtMTEuOTQ2NjY3IDAtMjEuMzMzMzMzIDkuMzg2NjY3LTIxLjMzMzMzMyAyMS4zMzMzMzR2MTAxLjU0NjY2NmMwIDExLjk0NjY2NyA5LjM4NjY2NyAyMS4zMzMzMzMgMjEuMzMzMzMzIDIxLjMzMzMzNGg2OC42OTMzMzNWNTI0LjhjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzNCAyMS4zMzMzMzNoMTAxLjU0NjY2NmMxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzM0LTIxLjMzMzMzM3YtNjguNjkzMzMzaDY4LjY5MzMzM2MxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzMzLTIxLjMzMzMzNHYtMTAxLjU0NjY2NmMwLTExLjk0NjY2Ny05LjM4NjY2Ny0yMS4zMzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNGgtNjguNjkzMzMzdi02OC42OTMzMzNjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzNC0yMS4zMzMzMzN6IG0tODAuMjEzMzMzIDQyLjY2NjY2Nmg1OC44OHY2OC42OTMzMzRjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzMyAyMS4zMzMzMzNoNjguNjkzMzM0djU4Ljg4aC02OC42OTMzMzRjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzMgMjEuMzMzMzMzVjUwMy40NjY2NjdoLTU4Ljg4di02OC42OTMzMzRjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNIMzkyLjUzMzMzM3YtNTguODhoNjguNjkzMzM0YzExLjk0NjY2NyAwIDIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzMtMjEuMzMzMzMzdi02OC42OTMzMzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVjZWl2ZSIgdW5pY29kZT0iJiM1OTExNjsiIGQ9Ik04NjkuNTQ2NjY3IDcxNS41MkgxNTQuNDUzMzMzYy0zOC44MjY2NjcgMC03MC40LTMxLjU3MzMzMy03MC40LTcwLjR2LTUyMS44MTMzMzNjMC0zOC44MjY2NjcgMzEuNTczMzMzLTcwLjQgNzAuNC03MC40aDcxNS4wOTMzMzRjMzguODI2NjY3IDAgNzAuNCAzMS41NzMzMzMgNzAuNCA3MC40VjY0NS4xMmMwIDM4LjgyNjY2Ny0zMS41NzMzMzMgNzAuNC03MC40IDcwLjR6TTUxMiAzOTcuNjUzMzMzTDE5NC41NiA2NTEuNTJoNjM1LjMwNjY2N2wtMzE3LjQ0LTI1My44NjY2Njd6IG0zNTcuNTQ2NjY3LTI4MS4xNzMzMzNIMTU0LjQ1MzMzM2MtMy40MTMzMzMgMC02LjQgMi45ODY2NjctNi40IDYuNFY2MDYuNzJsMzQ0LjMyLTI3NC43NzMzMzNzMi45ODY2NjctMS43MDY2NjcgNC4yNjY2NjctMi41NmEzMC41OTIgMzAuNTkyIDAgMCAxIDE1Ljc4NjY2Ny00LjI2NjY2N2M0LjI2NjY2NyAwIDguMTA2NjY3IDEuMjggMTIuMzczMzMzIDIuNTYgMS4yOCAwLjQyNjY2NyAyLjEzMzMzMyAxLjI4IDMuNDEzMzMzIDEuNzA2NjY3IDEuMjggMC44NTMzMzMgMi45ODY2NjcgMS4yOCA0LjI2NjY2NyAyLjU2bDM0NC4zMiAyNzQuNzczMzMzdi00ODMuODRjMC0zLjQxMzMzMy0yLjk4NjY2Ny02LjQtNi40LTYuNHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdWItcHJvY2Vzcy1leHBhbmQtbWFya2VyIiB1bmljb2RlPSImIzU5MTIyOyIgZD0iTTg3NC42NjY2NjctMTAuNjY2NjY3aC03MjUuMzMzMzM0Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJ2NzI1LjMzMzMzNGMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJoNzI1LjMzMzMzNGMxNy40OTMzMzMgMCAzMi0xNC41MDY2NjcgMzItMzJ2LTcyNS4zMzMzMzRjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyeiBtLTY5My4zMzMzMzQgNjRoNjYxLjMzMzMzNFY3MTQuNjY2NjY3SDE4MS4zMzMzMzN2LTY2MS4zMzMzMzR6TTcyNS4zMzMzMzMgMzUySDI5OC42NjY2NjdjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnMxNC41MDY2NjcgMzIgMzIgMzJoNDI2LjY2NjY2NmMxNy40OTMzMzMgMCAzMi0xNC41MDY2NjcgMzItMzJzLTE0LjUwNjY2Ny0zMi0zMi0zMnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1jb25kaXRpbyIgdW5pY29kZT0iJiM1OTEyNTsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek02MTcuMzg2NjY3IDIxNy42SDQwNy4wNGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJ2Mjk0LjRjMCAxMC42NjY2NjcgOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoMjEwLjM0NjY2N2MxMC42NjY2NjcgMCAxOS4yLTguNTMzMzMzIDE5LjItMTkuMnYtMjk0LjRjMC0xMC42NjY2NjctOC41MzMzMzMtMTkuMi0xOS4yLTE5LjJ6TTQyNi4yNCAyNTZoMTcxLjk0NjY2N1Y1MTJINDI2LjI0di0yNTZ6TTU1OC45MzMzMzMgNDMyLjY0aC05My40NGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJzOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuNDRjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJzLTguNTMzMzMzLTE5LjItMTkuMi0xOS4yek01NTguOTMzMzMzIDM2NC44aC05My40NGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJzOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuNDRjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJzLTguNTMzMzMzLTE5LjItMTkuMi0xOS4yek01NTguOTMzMzMzIDI5Ni45NmgtOTMuNDRjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4yczguNTMzMzMzIDE5LjIgMTkuMiAxOS4yaDkzLjQ0YzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ycy04LjUzMzMzMy0xOS4yLTE5LjItMTkuMnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtYzMiIHVuaWNvZGU9IiYjNTkxMjY7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek01MTIgNDk3LjQ5MzMzM2wxMTAuOTMzMzMzLTgwLjY0LTQyLjI0LTEzMC41NmgtMTM3LjM4NjY2NmwtNDIuMjQgMTMwLjU2TDUxMiA0OTcuNDkzMzMzbTAgNjEuODY2NjY3Yy0zLjg0IDAtNy4yNTMzMzMtMS4yOC0xMC42NjY2NjctMy40MTMzMzNsLTE1Mi43NDY2NjYtMTEwLjkzMzMzNGMtNi40LTQuNjkzMzMzLTguOTYtMTIuOC02LjQtMjAuMDUzMzMzbDU4LjQ1MzMzMy0xNzkuNjI2NjY3YzIuNTYtNy4yNTMzMzMgOS4zODY2NjctMTIuMzczMzMzIDE3LjA2NjY2Ny0xMi4zNzMzMzNoMTg4LjU4NjY2NmM3LjY4IDAgMTQuNTA2NjY3IDUuMTIgMTcuMDY2NjY3IDEyLjM3MzMzM2w1OC40NTMzMzMgMTc5LjYyNjY2N2MyLjU2IDcuMjUzMzMzIDAgMTUuMzYtNi40IDIwLjA1MzMzM2wtMTUyLjc0NjY2NiAxMTAuOTMzMzM0YTE4LjY4OCAxOC42ODggMCAwIDEtMTAuNjY2NjY3IDMuNDEzMzMzeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC1tZXNzYWdlMSIgdW5pY29kZT0iJiM1OTEyNzsiIGQ9Ik01MTIgNjgyLjY2NjY2N2MxNjQuNjkzMzMzIDAgMjk4LjY2NjY2Ny0xMzMuOTczMzMzIDI5OC42NjY2NjctMjk4LjY2NjY2N3MtMTMzLjk3MzMzMy0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2Ny0yOTguNjY2NjY3IDEzMy45NzMzMzMtMjk4LjY2NjY2NyAyOTguNjY2NjY3IDEzMy45NzMzMzMgMjk4LjY2NjY2NyAyOTguNjY2NjY3IDI5OC42NjY2NjdtMCAxMjhDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNjc1Ljg0IDQ3NS43MzMzMzNsLTE2NC4yNjY2NjctOTQuNzItMTYwIDkyLjE2djEzLjY1MzMzNGMwIDE2LjIxMzMzMyAxMy4yMjY2NjcgMjkuNDQgMjkuNDQgMjkuNDRoMjY1LjM4NjY2N2MxNi4yMTMzMzMgMCAyOS40NC0xMy4yMjY2NjcgMjkuNDQtMjkuNDR2LTExLjUyeiBtMC0zNC4xMzMzMzN2LTE2MC44NTMzMzNjMC0xNi4yMTMzMzMtMTMuMjI2NjY3LTI5LjQ0LTI5LjQ0LTI5LjQ0SDM4MS40NGMtMTYuMjEzMzMzIDAtMjkuNDQgMTMuMjI2NjY3LTI5LjQ0IDI5LjQ0djE1OC4yOTMzMzNsMTUyLjc0NjY2Ny04OC4zMmM1LjEyLTIuOTg2NjY3IDExLjUyLTIuNTYgMTYuMjEzMzMzIDAuODUzMzMzaDAuNDI2NjY3bDE1NC44OCA4OS42eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LW5vbi1pbnRlMiIgdW5pY29kZT0iJiM1OTEyODsiIGQ9Ik01MTIgODEwLjY2NjY2N2gtMjAuNDhjLTIuOTg2NjY3LTAuNDI2NjY3LTUuOTczMzMzLTAuODUzMzMzLTguOTYtMC44NTMzMzRoLTYuNGMtMjcuMzA2NjY3LTIuOTg2NjY3LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDcuMDkzMzMzaDE1LjM2bDE1LjM2LTEuMjhjMjQuMzItMi4xMzMzMzMgNDguMjEzMzMzLTYuNCA3MS4yNTMzMzMtMTMuMjI2NjY2bDMwLjcyLTguOTYgMTcuNDkzMzM0IDYwLjE2Yy0xMi4zNzMzMzMgNC42OTMzMzMtMjUuMTczMzMzIDguOTYtMzcuOTczMzM0IDEyLjM3MzMzM2gtMi4xMzMzMzN2MC44NTMzMzNoLTIuNTZWNzk3Ljg2NjY2N2gtMi41NnYwLjg1MzMzM2gtMS4yOGMtMjEuNzYgNS41NDY2NjctNDQuMzczMzMzIDkuMzg2NjY3LTY3LjQxMzMzMyAxMS41Mi0xMS41MiAwLjg1MzMzMy0yMy40NjY2NjcgMS4yOC0zNS40MTMzMzQgMS4yOHogbS0xNzUuNzg2NjY3LTM3Ljk3MzMzNGMtOS44MTMzMzMtNC4yNjY2NjctMTkuMi04Ljk2LTI4LjU4NjY2Ni0xNC4wOC01Ljk3MzMzMy0zLjQxMzMzMy0xMS41Mi02LjQtMTcuMDY2NjY3LTkuODEzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0wLjQyNjY2N2wtMi4xMzMzMzMtMS43MDY2NjZoLTAuODUzMzM0di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM2wtMi41Ni0yLjEzMzMzM2gtMC44NTMzMzR2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjdsLTUuOTczMzMzLTQuNjkzMzM0Yy0xNi42NC0xMi4zNzMzMzMtMzIuNDI2NjY3LTI1LjYtNDcuMzYtNDAuMTA2NjY2bDQwLjUzMzMzMy00OC4yMTMzMzQgMjQuMzIgMjAuNDhjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzOC40IDI5LjQ0IDU5LjczMzMzMyA0MC45NmwyOC4xNiAxNS4zNi0zMC4yOTMzMzMgNTUuMDR6TTE3MS41MiA2NDAuODUzMzMzYy02LjQtOC41MzMzMzMtMTIuMzczMzMzLTE3LjA2NjY2Ny0xOC4zNDY2NjctMjYuMDI2NjY2LTUuMTItOC4xMDY2NjctOS44MTMzMzMtMTYuMjEzMzMzLTE0LjUwNjY2Ni0yNC4zMnYtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTEuNzA2NjY3aC0wLjQyNjY2NnYtMy44NGgtMC40MjY2Njd2LTUuOTczMzMzSDEzNi41MzMzMzN2LTAuODUzMzMzaC0wLjQyNjY2NmMtMS4yOC0yLjU2LTIuMTMzMzMzLTQuNjkzMzMzLTIuOTg2NjY3LTYuODI2NjY3di0yLjU2aC0wLjQyNjY2N2MtMS4yOC0yLjEzMzMzMy0yLjEzMzMzMy00LjY5MzMzMy0zLjQxMzMzMy02LjgyNjY2N3YtMi41NnMtMS4yOC0zLjQxMzMzMy0yLjEzMzMzMy00LjY5MzMzM1Y1NDQuNDI2NjY3bC0xLjI4LTIuOTg2NjY3di0wLjg1MzMzM3MtMS4yOC0yLjk4NjY2Ny0xLjcwNjY2Ny00LjY5MzMzNGMtMy44NC05LjgxMzMzMy03LjI1MzMzMy0yMC4wNTMzMzMtMTAuMjQtMzAuMjkzMzMzbDU4LjQ1MzMzMy0yMi42MTMzMzMgMTEuNTIgMjkuODY2NjY2YzguNTMzMzMzIDIyLjYxMzMzMyAxOS42MjY2NjcgNDMuOTQ2NjY3IDMyLjg1MzMzNCA2NC40MjY2NjdsMTcuNDkzMzMzIDI2Ljg4LTUyLjkwNjY2NyAzNC4xMzMzMzN6IG0tODEuNDkzMzMzLTE5NC41NmMtMS43MDY2NjctMTAuMjQtMi41Ni0yMC45MDY2NjctMy40MTMzMzQtMzEuNTczMzMzIDAtNS45NzMzMzMtMC44NTMzMzMtMTEuOTQ2NjY3LTAuODUzMzMzLTE3LjkyVjM1Ni4yNjY2NjdjMC04LjUzMzMzMyAwLjg1MzMzMy0xNi42NCAxLjcwNjY2Ny0yNC4zMnYtNy42OGMxLjI4LTExLjk0NjY2NyAzLjQxMzMzMy0yMy40NjY2NjcgNS41NDY2NjYtMzQuOTg2NjY3bDYyLjI5MzMzNCA4LjEwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzNjLTIuMTMzMzMzIDE1LjM2LTIuOTg2NjY3IDMxLjE0NjY2Ny0yLjk4NjY2NyA0Ni45MzMzMzMgMCA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwLjg1MzMzNCAyNS42bDIuMTMzMzMzIDMyLTYyLjcyIDQuMjY2NjY3eiBtNzguOTMzMzMzLTE4My44OTMzMzNsLTU3LjE3MzMzMy0yNi4wMjY2NjdjMy44NC05LjgxMzMzMyA3LjY4LTE5LjYyNjY2NyAxMS45NDY2NjYtMjkuNDQgMi4xMzMzMzMtNC42OTMzMzMgNC4yNjY2NjctOS4zODY2NjcgNi40LTEzLjY1MzMzM3YtNC4yNjY2NjdoMC40MjY2NjdjOS44MTMzMzMtMTkuMiAyMC40OC0zNy4xMiAzMi44NTMzMzMtNTQuMTg2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzYzYuNC04Ljk2IDEyLjgtMTcuNDkzMzMzIDIwLjA1MzMzMy0yNS42bDUwLjc3MzMzMyAzNy4xMi0xOC43NzMzMzMgMjYuMDI2NjY2Yy0xNC4wOCAxOS42MjY2NjctMjYuNDUzMzMzIDQwLjUzMzMzMy0zNi42OTMzMzMgNjIuMjkzMzM0bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzMy0xNDkuNzZsLTM3LjU0NjY2Ni01MC4zNDY2NjdjMTIuMzczMzMzLTEwLjY2NjY2NyAyNS42LTIwLjkwNjY2NyAzOS4yNTMzMzMtMzAuMjkzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gxLjI4di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC44NTMzMzNjMTcuMDY2NjY3LTExLjk0NjY2NyAzNC45ODY2NjctMjIuMTg2NjY3IDUzLjc2LTMxLjE0NjY2NyA5LjM4NjY2Ny00LjY5MzMzMyAxOS4yLTguOTYgMjkuMDEzMzMzLTEyLjhsMjYuODggNTYuNzQ2NjY3LTI5LjAxMzMzMyAxMy42NTMzMzNjLTIxLjc2IDEwLjI0LTQyLjY2NjY2NyAyMy4wNC02MS44NjY2NjcgMzcuNTQ2NjY3bC0yNS42IDE5LjJ6IG0xNTkuNTczMzM0LTgzLjJsLTguOTYtNjIuMjkzMzMzYzEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzMtNS41NDY2NjcgMTAuNjY2NjY3LTEuNzA2NjY3IDIwLjkwNjY2Ny0yLjU2IDMxLjU3MzMzMy0zLjQxMzMzM2gxMi4zNzMzMzRWLTQyLjY2NjY2N2gzMy43MDY2NjZjMTMuMjI2NjY3IDAuNDI2NjY3IDI2LjQ1MzMzMyAxLjcwNjY2NyAzOS4yNTMzMzQgMy40MTMzMzRsLTMuNDEzMzM0IDYyLjcyLTMyLTEuNzA2NjY3Yy02LjgyNjY2NyAwLTE0LjA4LTAuNDI2NjY3LTIwLjkwNjY2Ni0wLjQyNjY2Ny0xNy4wNjY2NjcgMC0zNC41NiAxLjI4LTUxLjIgMy40MTMzMzRsLTMxLjU3MzMzNCA0LjY5MzMzM3ogbTMwMi4wOCA2NGwtMjcuMzA2NjY3LTE3LjA2NjY2N2MtMjAuNDgtMTIuOC00Mi4yNC0yMy40NjY2NjctNjQuODUzMzMzLTMybC0yOS44NjY2NjctMTEuMDkzMzMzIDIyLjE4NjY2Ny01OC44OGMxMC4yNCAyLjk4NjY2NyAyMC40OCA2LjQgMzAuMjkzMzMzIDEwLjI0IDI2Ljg4IDEwLjI0IDUyLjQ4IDIyLjYxMzMzMyA3Ni4zNzMzMzMgMzcuOTczMzMzIDguOTYgNS45NzMzMzMgMTcuOTIgMTEuNTIgMjYuNDUzMzM0IDE3LjkybC0zMy4yOCA1My4zMzMzMzR6IG0xMTIuNjQgMTQwLjhsLTE1Ljc4NjY2Ny0yNy43MzMzMzNjLTExLjk0NjY2Ny0yMC45MDY2NjctMjYuMDI2NjY3LTQwLjk2LTQxLjgxMzMzMy01OS4zMDY2NjdsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmM3LjY4IDcuNjggMTQuOTMzMzMzIDE1LjM2IDIxLjc2IDIzLjA0IDMuNDEzMzMzIDQuMjY2NjY3IDYuODI2NjY3IDguMTA2NjY3IDkuODEzMzMzIDEyLjM3MzMzM3YwLjg1MzMzNGgwLjQyNjY2N2wyLjEzMzMzMyAyLjk4NjY2NmgwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N1YxMjhoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNIODUzLjMzMzMzM3YwLjg1MzMzM2wyLjU2IDMuODR2MC44NTMzMzRjMTQuOTMzMzMzIDIwLjkwNjY2NyAyNy43MzMzMzMgNDMuMDkzMzMzIDM4LjQgNjYuMTMzMzMzbC01NC42MTMzMzMgMzAuNzJ6IG0zMS4xNDY2NjYgMTc3LjQ5MzMzM3YtMzJjLTAuODUzMzMzLTI0LjMyLTMuNDEzMzMzLTQ4LjY0LTguNTMzMzMzLTcyLjEwNjY2NmwtNi44MjY2NjctMzEuMTQ2NjY3IDYxLjQ0LTEzLjIyNjY2N2MxMS41MiAzOC40IDE3LjQ5MzMzMyA3OC45MzMzMzMgMTcuNDkzMzM0IDEyMS4xNzMzMzQgMCA4Ljk2IDAgMTcuOTItMC44NTMzMzQgMjYuNDUzMzMzbC02Mi43MiAwLjg1MzMzM3ogbS0yLjEzMzMzMyAyMDAuMTA2NjY3bC01NS40NjY2NjctMjkuNDQgMTQuOTMzMzM0LTI4LjE2YzExLjUyLTIxLjMzMzMzMyAyMC40OC00My45NDY2NjcgMjcuMzA2NjY2LTY2Ljk4NjY2N2w4Ljk2LTMwLjcyIDYwLjE2IDE3LjkyYy0yLjU2IDEyLjM3MzMzMy01Ljk3MzMzMyAyNC4zMi05LjM4NjY2NiAzNi4yNjY2NjdWNTE5LjI1MzMzM2MtMy40MTMzMzMgMTAuMjQtNy4yNTMzMzMgMjAuMDUzMzMzLTExLjA5MzMzNCAyOS44NjY2NjdWNTU3LjY1MzMzM2MtOC41MzMzMzMgMTkuNjI2NjY3LTE4LjM0NjY2NyAzNy45NzMzMzMtMjkuODY2NjY2IDU1Ljg5MzMzNHogbS0xNTMuMTczMzMzIDE0NS40OTMzMzNsLTM0LjU2LTUyLjQ4IDI2Ljg4LTE3LjQ5MzMzM2MyMC4wNTMzMzMtMTMuMjI2NjY3IDM4LjgyNjY2Ny0yOC41ODY2NjcgNTYuMzItNDUuNjUzMzMzbDIyLjYxMzMzMy0yMi42MTMzMzQgNDQuMzczMzMzIDQ0LjM3MzMzNGE0MjMuMTY4IDQyMy4xNjggMCAwIDEtODUuMzMzMzMzIDc1LjUyaC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMC40MjY2NjdjLTguOTYgNi40LTE3LjkyIDExLjk0NjY2Ny0yNy4zMDY2NjcgMTcuMDY2NjY3ek01MTIgNTA5Ljg2NjY2N2ExMjUuODI0IDEyNS44MjQgMCAxIDAgMC0yNTEuNzMzMzM0IDEyNS44MjQgMTI1LjgyNCAwIDEgMCAwIDI1MS43MzMzMzRtMCA1My4zMzMzMzNhMTc5LjIgMTc5LjIgMCAxIDEtMC4wNDI2NjctMzU4LjM1NzMzM0ExNzkuMiAxNzkuMiAwIDAgMSA1MTIgNTYzLjJ6TTU1OC45MzMzMzMgMzQ2LjAyNjY2N0g1MTJjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzMgMjEuMzMzMzMzdjc1LjA5MzMzM2MwIDExLjk0NjY2NyA5LjM4NjY2NyAyMS4zMzMzMzMgMjEuMzMzMzMzIDIxLjMzMzMzNHMyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzMzLTIxLjMzMzMzNHYtNTMuNzZoMjUuNmMxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzM0LTIxLjMzMzMzM3MtOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzNC0yMS4zMzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhcnQtZXZlbnQtbm9uLWludGU2IiB1bmljb2RlPSImIzU5MTI5OyIgZD0iTTUxMiA4MTAuNjY2NjY3aC0yMC40OGMtMi45ODY2NjctMC40MjY2NjctNS45NzMzMzMtMC44NTMzMzMtOC45Ni0wLjg1MzMzNGgtNi40Yy0yNy4zMDY2NjctMi45ODY2NjctNTQuMTg2NjY3LTcuNjgtODAuMjEzMzMzLTE0LjkzMzMzM2wxMi4zNzMzMzMtNjEuNDQgMzEuNTczMzMzIDYuNEEzNjkuMDY2NjY3IDM2OS4wNjY2NjcgMCAwIDAgNTEyIDc0Ny4wOTMzMzNoMTUuMzZsMTUuMzYtMS4yOGMyNC4zMi0yLjEzMzMzMyA0OC4yMTMzMzMtNi40IDcxLjI1MzMzMy0xMy4yMjY2NjZsMzAuNzItOC45NiAxNy40OTMzMzQgNjAuMTZjLTEyLjM3MzMzMyA0LjY5MzMzMy0yNS4xNzMzMzMgOC45Ni0zNy45NzMzMzQgMTIuMzczMzMzaC0yLjEzMzMzM3YwLjg1MzMzM2gtMi41NlY3OTcuODY2NjY3aC0yLjU2djAuODUzMzMzaC0xLjI4Yy0yMS43NiA1LjU0NjY2Ny00NC4zNzMzMzMgOS4zODY2NjctNjcuNDEzMzMzIDExLjUyLTExLjUyIDAuODUzMzMzLTIzLjQ2NjY2NyAxLjI4LTM1LjQxMzMzNCAxLjI4eiBtLTE3NS43ODY2NjctMzcuOTczMzM0Yy05LjgxMzMzMy00LjI2NjY2Ny0xOS4yLTguOTYtMjguNTg2NjY2LTE0LjA4LTUuOTczMzMzLTMuNDEzMzMzLTExLjUyLTYuNC0xNy4wNjY2NjctOS44MTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTAuNDI2NjY3bC0yLjEzMzMzMy0xLjcwNjY2NmgtMC44NTMzMzR2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzbC0yLjU2LTIuMTMzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzRoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0wLjQyNjY2N2wtNS45NzMzMzMtNC42OTMzMzRjLTE2LjY0LTEyLjM3MzMzMy0zMi40MjY2NjctMjUuNi00Ny4zNi00MC4xMDY2NjZsNDAuNTMzMzMzLTQ4LjIxMzMzNCAyNC4zMiAyMC40OGMxOC4zNDY2NjcgMTUuNzg2NjY3IDM4LjQgMjkuNDQgNTkuNzMzMzMzIDQwLjk2bDI4LjE2IDE1LjM2LTMwLjI5MzMzMyA1NS4wNHpNMTcxLjUyIDY0MC44NTMzMzNjLTYuNC04LjUzMzMzMy0xMi4zNzMzMzMtMTcuMDY2NjY3LTE4LjM0NjY2Ny0yNi4wMjY2NjYtNS4xMi04LjEwNjY2Ny05LjgxMzMzMy0xNi4yMTMzMzMtMTQuNTA2NjY2LTI0LjMydi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMS43MDY2NjdoLTAuNDI2NjY2di0zLjg0aC0wLjQyNjY2N3YtNS45NzMzMzNIMTM2LjUzMzMzM3YtMC44NTMzMzNoLTAuNDI2NjY2Yy0xLjI4LTIuNTYtMi4xMzMzMzMtNC42OTMzMzMtMi45ODY2NjctNi44MjY2Njd2LTIuNTZoLTAuNDI2NjY3Yy0xLjI4LTIuMTMzMzMzLTIuMTMzMzMzLTQuNjkzMzMzLTMuNDEzMzMzLTYuODI2NjY3di0yLjU2cy0xLjI4LTMuNDEzMzMzLTIuMTMzMzMzLTQuNjkzMzMzVjU0NC40MjY2NjdsLTEuMjgtMi45ODY2Njd2LTAuODUzMzMzcy0xLjI4LTIuOTg2NjY3LTEuNzA2NjY3LTQuNjkzMzM0Yy0zLjg0LTkuODEzMzMzLTcuMjUzMzMzLTIwLjA1MzMzMy0xMC4yNC0zMC4yOTMzMzNsNTguNDUzMzMzLTIyLjYxMzMzMyAxMS41MiAyOS44NjY2NjZjOC41MzMzMzMgMjIuNjEzMzMzIDE5LjYyNjY2NyA0My45NDY2NjcgMzIuODUzMzM0IDY0LjQyNjY2N2wxNy40OTMzMzMgMjYuODgtNTIuOTA2NjY3IDM0LjEzMzMzM3ogbS04MS40OTMzMzMtMTk0LjU2Yy0xLjcwNjY2Ny0xMC4yNC0yLjU2LTIwLjkwNjY2Ny0zLjQxMzMzNC0zMS41NzMzMzMgMC01Ljk3MzMzMy0wLjg1MzMzMy0xMS45NDY2NjctMC44NTMzMzMtMTcuOTJWMzU2LjI2NjY2N2MwLTguNTMzMzMzIDAuODUzMzMzLTE2LjY0IDEuNzA2NjY3LTI0LjMydi03LjY4YzEuMjgtMTEuOTQ2NjY3IDMuNDEzMzMzLTIzLjQ2NjY2NyA1LjU0NjY2Ni0zNC45ODY2NjdsNjIuMjkzMzM0IDguMTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzM2MtMi4xMzMzMzMgMTUuMzYtMi45ODY2NjcgMzEuMTQ2NjY3LTIuOTg2NjY3IDQ2LjkzMzMzMyAwIDguNTMzMzMzIDAgMTcuMDY2NjY3IDAuODUzMzM0IDI1LjZsMi4xMzMzMzMgMzItNjIuNzIgNC4yNjY2Njd6IG03OC45MzMzMzMtMTgzLjg5MzMzM2wtNTcuMTczMzMzLTI2LjAyNjY2N2MzLjg0LTkuODEzMzMzIDcuNjgtMTkuNjI2NjY3IDExLjk0NjY2Ni0yOS40NCAyLjEzMzMzMy00LjY5MzMzMyA0LjI2NjY2Ny05LjM4NjY2NyA2LjQtMTMuNjUzMzMzdi00LjI2NjY2N2gwLjQyNjY2N2M5LjgxMzMzMy0xOS4yIDIwLjQ4LTM3LjEyIDMyLjg1MzMzMy01NC4xODY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNjNi40LTguOTYgMTIuOC0xNy40OTMzMzMgMjAuMDUzMzMzLTI1LjZsNTAuNzczMzMzIDM3LjEyLTE4Ljc3MzMzMyAyNi4wMjY2NjZjLTE0LjA4IDE5LjYyNjY2Ny0yNi40NTMzMzMgNDAuNTMzMzMzLTM2LjY5MzMzMyA2Mi4yOTMzMzRsLTEzLjIyNjY2NyAyOS4wMTMzMzN6IG0xMDAuNjkzMzMzLTE0OS43NmwtMzcuNTQ2NjY2LTUwLjM0NjY2N2MxMi4zNzMzMzMtMTAuNjY2NjY3IDI1LjYtMjAuOTA2NjY3IDM5LjI1MzMzMy0zMC4yOTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDEuMjh2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjg1MzMzM2MxNy4wNjY2NjctMTEuOTQ2NjY3IDM0Ljk4NjY2Ny0yMi4xODY2NjcgNTMuNzYtMzEuMTQ2NjY3IDkuMzg2NjY3LTQuNjkzMzMzIDE5LjItOC45NiAyOS4wMTMzMzMtMTIuOGwyNi44OCA1Ni43NDY2NjctMjkuMDEzMzMzIDEzLjY1MzMzM2MtMjEuNzYgMTAuMjQtNDIuNjY2NjY3IDIzLjA0LTYxLjg2NjY2NyAzNy41NDY2NjdsLTI1LjYgMTkuMnogbTE1OS41NzMzMzQtODMuMmwtOC45Ni02Mi4yOTMzMzNjMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzMy01LjU0NjY2NyAxMC42NjY2NjctMS43MDY2NjcgMjAuOTA2NjY3LTIuNTYgMzEuNTczMzMzLTMuNDEzMzMzaDEyLjM3MzMzNFYtNDIuNjY2NjY3aDMzLjcwNjY2NmMxMy4yMjY2NjcgMC40MjY2NjcgMjYuNDUzMzMzIDEuNzA2NjY3IDM5LjI1MzMzNCAzLjQxMzMzNGwtMy40MTMzMzQgNjIuNzItMzItMS43MDY2NjdjLTYuODI2NjY3IDAtMTQuMDgtMC40MjY2NjctMjAuOTA2NjY2LTAuNDI2NjY3LTE3LjA2NjY2NyAwLTM0LjU2IDEuMjgtNTEuMiAzLjQxMzMzNGwtMzEuNTczMzM0IDQuNjkzMzMzeiBtMzAyLjA4IDY0bC0yNy4zMDY2NjctMTcuMDY2NjY3Yy0yMC40OC0xMi44LTQyLjI0LTIzLjQ2NjY2Ny02NC44NTMzMzMtMzJsLTI5Ljg2NjY2Ny0xMS4wOTMzMzMgMjIuMTg2NjY3LTU4Ljg4YzEwLjI0IDIuOTg2NjY3IDIwLjQ4IDYuNCAzMC4yOTMzMzMgMTAuMjQgMjYuODggMTAuMjQgNTIuNDggMjIuNjEzMzMzIDc2LjM3MzMzMyAzNy45NzMzMzMgOC45NiA1Ljk3MzMzMyAxNy45MiAxMS41MiAyNi40NTMzMzQgMTcuOTJsLTMzLjI4IDUzLjMzMzMzNHogbTExMi42NCAxNDAuOGwtMTUuNzg2NjY3LTI3LjczMzMzM2MtMTEuOTQ2NjY3LTIwLjkwNjY2Ny0yNi4wMjY2NjctNDAuOTYtNDEuODEzMzMzLTU5LjMwNjY2N2wtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YzcuNjggNy42OCAxNC45MzMzMzMgMTUuMzYgMjEuNzYgMjMuMDQgMy40MTMzMzMgNC4yNjY2NjcgNi44MjY2NjcgOC4xMDY2NjcgOS44MTMzMzMgMTIuMzczMzMzdjAuODUzMzM0aDAuNDI2NjY3bDIuMTMzMzMzIDIuOTg2NjY2aDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3VjEyOGgwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM0g4NTMuMzMzMzMzdjAuODUzMzMzbDIuNTYgMy44NHYwLjg1MzMzNGMxNC45MzMzMzMgMjAuOTA2NjY3IDI3LjczMzMzMyA0My4wOTMzMzMgMzguNCA2Ni4xMzMzMzNsLTU0LjYxMzMzMyAzMC43MnogbTMxLjE0NjY2NiAxNzcuNDkzMzMzdi0zMmMtMC44NTMzMzMtMjQuMzItMy40MTMzMzMtNDguNjQtOC41MzMzMzMtNzIuMTA2NjY2bC02LjgyNjY2Ny0zMS4xNDY2NjcgNjEuNDQtMTMuMjI2NjY3YzExLjUyIDM4LjQgMTcuNDkzMzMzIDc4LjkzMzMzMyAxNy40OTMzMzQgMTIxLjE3MzMzNCAwIDguOTYgMCAxNy45Mi0wLjg1MzMzNCAyNi40NTMzMzNsLTYyLjcyIDAuODUzMzMzeiBtLTIuMTMzMzMzIDIwMC4xMDY2NjdsLTU1LjQ2NjY2Ny0yOS40NCAxNC45MzMzMzQtMjguMTZjMTEuNTItMjEuMzMzMzMzIDIwLjQ4LTQzLjk0NjY2NyAyNy4zMDY2NjYtNjYuOTg2NjY3bDguOTYtMzAuNzIgNjAuMTYgMTcuOTJjLTIuNTYgMTIuMzczMzMzLTUuOTczMzMzIDI0LjMyLTkuMzg2NjY2IDM2LjI2NjY2N1Y1MTkuMjUzMzMzYy0zLjQxMzMzMyAxMC4yNC03LjI1MzMzMyAyMC4wNTMzMzMtMTEuMDkzMzM0IDI5Ljg2NjY2N1Y1NTcuNjUzMzMzYy04LjUzMzMzMyAxOS42MjY2NjctMTguMzQ2NjY3IDM3Ljk3MzMzMy0yOS44NjY2NjYgNTUuODkzMzM0eiBtLTE1My4xNzMzMzMgMTQ1LjQ5MzMzM2wtMzQuNTYtNTIuNDggMjYuODgtMTcuNDkzMzMzYzIwLjA1MzMzMy0xMy4yMjY2NjcgMzguODI2NjY3LTI4LjU4NjY2NyA1Ni4zMi00NS42NTMzMzNsMjIuNjEzMzMzLTIyLjYxMzMzNCA0NC4zNzMzMzMgNDQuMzczMzM0YTQyMy4xNjggNDIzLjE2OCAwIDAgMS04NS4zMzMzMzMgNzUuNTJoLTAuODUzMzMzdjAuODUzMzMzaC0xLjI4djAuODUzMzMzaC0wLjQyNjY2N2MtOC45NiA2LjQtMTcuOTIgMTEuOTQ2NjY3LTI3LjMwNjY2NyAxNy4wNjY2Njd6TTUxMiA0OTcuNDkzMzMzbDExMC45MzMzMzMtODAuNjQtNDIuMjQtMTMwLjU2aC0xMzcuMzg2NjY2bC00Mi4yNCAxMzAuNTZMNTEyIDQ5Ny40OTMzMzNtMCA2MS44NjY2NjdjLTMuODQgMC03LjI1MzMzMy0xLjI4LTEwLjY2NjY2Ny0zLjQxMzMzM2wtMTUyLjc0NjY2Ni0xMTAuOTMzMzM0Yy02LjQtNC42OTMzMzMtOC45Ni0xMi44LTYuNC0yMC4wNTMzMzNsNTguNDUzMzMzLTE3OS42MjY2NjdjMi41Ni03LjI1MzMzMyA5LjM4NjY2Ny0xMi4zNzMzMzMgMTcuMDY2NjY3LTEyLjM3MzMzM2gxODguNTg2NjY2YzcuNjggMCAxNC41MDY2NjcgNS4xMiAxNy4wNjY2NjcgMTIuMzczMzMzbDU4LjQ1MzMzMyAxNzkuNjI2NjY3YzIuNTYgNy4yNTMzMzMgMCAxNS4zNi02LjQgMjAuMDUzMzMzbC0xNTIuNzQ2NjY2IDExMC45MzMzMzRhMTguNjg4IDE4LjY4OCAwIDAgMS0xMC42NjY2NjcgMy40MTMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhcnQtZXZlbnQtdGltZXIiIHVuaWNvZGU9IiYjNTkxMzA7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDUwOS44NjY2NjdhMTI1LjgyNCAxMjUuODI0IDAgMSAwIDAtMjUxLjczMzMzNCAxMjUuODI0IDEyNS44MjQgMCAxIDAgMCAyNTEuNzMzMzM0bTAgNTMuMzMzMzMzYTE3OS4yIDE3OS4yIDAgMSAxLTAuMDQyNjY3LTM1OC4zNTczMzNBMTc5LjIgMTc5LjIgMCAwIDEgNTEyIDU2My4yek01NTguOTMzMzMzIDM0Ni4wMjY2NjdINTEyYy0xMS45NDY2NjcgMC0yMS4zMzMzMzMgOS4zODY2NjctMjEuMzMzMzMzIDIxLjMzMzMzM3Y3NS4wOTMzMzNjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzMyAyMS4zMzMzMzRzMjEuMzMzMzMzLTkuMzg2NjY3IDIxLjMzMzMzMy0yMS4zMzMzMzR2LTUzLjc2aDI1LjZjMTEuOTQ2NjY3IDAgMjEuMzMzMzMzLTkuMzg2NjY3IDIxLjMzMzMzNC0yMS4zMzMzMzNzLTkuMzg2NjY3LTIxLjMzMzMzMy0yMS4zMzMzMzQtMjEuMzMzMzMzeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImdhdGV3YXktZXZlbnRiYXNlZCIgdW5pY29kZT0iJiM1OTEzMTsiIGQ9Ik01MTIgNzY3LjU3MzMzM0w4OTUuNTczMzMzIDM4NCA1MTIgMC40MjY2NjcgMTI4LjQyNjY2NyAzODQgNTEyIDc2Ny41NzMzMzNtMCA3NS4wOTMzMzRjLTkuMzg2NjY3IDAtMTkuMi0zLjg0LTI2LjQ1MzMzMy0xMS4wOTMzMzRsLTQyMS4xMi00MjEuMTJhMzcuMTIgMzcuMTIgMCAwIDEgMC01Mi40OGw0MjEuNTQ2NjY2LTQyMS41NDY2NjZhMzcuMTIgMzcuMTIgMCAwIDEgNTIuOTA2NjY3IDBsNDIxLjU0NjY2NyA0MjEuNTQ2NjY2YTM3LjEyIDM3LjEyIDAgMCAxIDAgNTIuNDhsLTQyMS45NzMzMzQgNDIxLjEyYTM3LjEyIDM3LjEyIDAgMCAxLTI2LjQ1MzMzMyAxMS4wOTMzMzR6TTUxMiA1MDAuNDhsMTEwLjkzMzMzMy04MC42NC00Mi4yNC0xMzAuNTZoLTEzNy4zODY2NjZsLTQyLjI0IDEzMC41Nkw1MTIgNTAwLjQ4bTAgNjEuODY2NjY3Yy0zLjg0IDAtNy4yNTMzMzMtMS4yOC0xMC42NjY2NjctMy40MTMzMzRsLTE1Mi43NDY2NjYtMTEwLjkzMzMzM2MtNi40LTQuNjkzMzMzLTguOTYtMTIuOC02LjQtMjAuMDUzMzMzbDU4LjQ1MzMzMy0xNzkuNjI2NjY3YzIuNTYtNy4yNTMzMzMgOS4zODY2NjctMTIuMzczMzMzIDE3LjA2NjY2Ny0xMi4zNzMzMzNoMTg4LjU4NjY2NmM3LjY4IDAgMTQuNTA2NjY3IDUuMTIgMTcuMDY2NjY3IDEyLjM3MzMzM2w1OC40NTMzMzMgMTc5LjYyNjY2N2MyLjU2IDcuMjUzMzMzIDAgMTUuMzYtNi40IDIwLjA1MzMzM2wtMTUyLjc0NjY2NiAxMTAuOTMzMzMzYTE4LjY4OCAxOC42ODggMCAwIDEtMTAuNjY2NjY3IDMuNDEzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InVzZXItdGFzayIgdW5pY29kZT0iJiM1OTEzMjsiIGQ9Ik04OTcuMjggNzA0SDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6IG0tMjAuNDgtNTc4LjEzMzMzM0gxNDcuMlY2NDIuMTMzMzMzaDcyOS42di01MTYuMjY2NjY2ek0yMTMuMzMzMzMzIDI2Ni42NjY2NjdoMjczLjA2NjY2N2M4LjEwNjY2NyAwIDE0LjkzMzMzMyA2LjgyNjY2NyAxNC45MzMzMzMgMTQuOTMzMzMzdjIzLjg5MzMzM2MwIDU5LjMwNjY2Ny0zNC45ODY2NjcgMTEzLjQ5MzMzMy04OS4xNzMzMzMgMTM4LjI0cy0yLjU2IDEuMjgtNC4yNjY2NjcgMS43MDY2NjdjMTYuMjEzMzMzIDE1LjM2IDI2LjAyNjY2NyAzNy4xMiAyNi4wMjY2NjcgNjEuMDEzMzMzIDAgNDYuNTA2NjY3LTM3LjU0NjY2NyA4NC4wNTMzMzMtODQuMDUzMzMzIDg0LjA1MzMzNGE4My42MjY2NjcgODMuNjI2NjY3IDAgMCAxLTg0LjA1MzMzNC04NC4wNTMzMzRjMC0yMy40NjY2NjcgOS44MTMzMzMtNDUuMjI2NjY3IDI2LjAyNjY2Ny02MC41ODY2NjYtMS4yOC0wLjQyNjY2Ny0yLjU2LTEuMjgtMy44NC0xLjcwNjY2N2ExNTIuNDA1MzMzIDE1Mi40MDUzMzMgMCAwIDEtODkuMTczMzMzLTEzOC4yNHYtMjMuODkzMzMzYzAtOC4xMDY2NjcgNi44MjY2NjctMTQuOTMzMzMzIDE0LjkzMzMzMy0xNC45MzMzMzR6IG0xNzQuNTA2NjY3IDE1MS4wNHMtMS43MDY2NjctMy40MTMzMzMtMi41Ni00LjY5MzMzNGMtMS4yOC0yLjU2LTMuNDEzMzMzLTUuMTItNS4xMi03LjI1MzMzMy0xLjI4LTEuMjgtMi4xMzMzMzMtMi41Ni0zLjg0LTMuODRhMzIuNDI2NjY3IDMyLjQyNjY2NyAwIDAgMC04LjEwNjY2Ny01LjEyYy0xLjI4LTAuODUzMzMzLTIuNTYtMS43MDY2NjctNC4yNjY2NjYtMi4xMzMzMzMtNC42OTMzMzMtMS43MDY2NjctOS4zODY2NjctMi45ODY2NjctMTQuNTA2NjY3LTIuOTg2NjY3cy05LjgxMzMzMyAxLjI4LTE0LjUwNjY2NyAyLjk4NjY2N2MtMS4yOCAwLjQyNjY2Ny0yLjU2IDEuMjgtNC4yNjY2NjYgMi4xMzMzMzNhMzIuNDI2NjY3IDMyLjQyNjY2NyAwIDAgMC04LjEwNjY2NyA1LjEyYy0xLjI4IDEuMjgtMi41NiAyLjU2LTMuNDEzMzMzIDMuODRhMjguMDMyIDI4LjAzMiAwIDAgMC01LjEyIDcuMjUzMzMzYy0wLjg1MzMzMyAxLjcwNjY2Ny0xLjcwNjY2NyAyLjk4NjY2Ny0yLjEzMzMzNCA0LjY5MzMzNCAwIDAuODUzMzMzLTAuNDI2NjY3IDIuMTMzMzMzLTAuODUzMzMzIDIuOTg2NjY2IDYuNCAyLjEzMzMzMyAxMy4yMjY2NjcgMy44NCAyMC4wNTMzMzMgNC42OTMzMzQgNi44MjY2NjcgMC44NTMzMzMgMTEuOTQ2NjY3IDYuODI2NjY3IDEyLjggMTMuNjUzMzMzYTE1LjI3NDY2NyAxNS4yNzQ2NjcgMCAwIDEtMTAuMjQgMTUuMzYgNTQuMDE2IDU0LjAxNiAwIDAgMC0zMy4yOCA3Mi41MzMzMzNjMS43MDY2NjcgMy40MTMzMzMgMy44NCA2LjgyNjY2NyA1Ljk3MzMzNCA5LjgxMzMzNCAxMC42NjY2NjcgNC42OTMzMzMgMjIuNjEzMzMzIDkuMzg2NjY3IDI5Ljg2NjY2NiA5LjM4NjY2NnMxNC41MDY2NjctMy40MTMzMzMgMjAuNDgtNi44MjY2NjZjMTEuMDkzMzMzLTYuODI2NjY3IDI0LjMyLTkuODEzMzMzIDM3LjEyLTYuNCAwLjg1MzMzMyAwIDEuNzA2NjY3IDAuNDI2NjY3IDIuNTYgMC44NTMzMzMgNS4xMi04LjEwNjY2NyA4LjUzMzMzMy0xNy4wNjY2NjcgOC41MzMzMzQtMjcuMzA2NjY3IDAtMjMuODkzMzMzLTE1LjM2LTQ0LjM3MzMzMy0zNy45NzMzMzQtNTEuNjI2NjY2LTYuODI2NjY3LTIuMTMzMzMzLTExLjA5MzMzMy04LjUzMzMzMy0xMC4yNC0xNS4zNnM1LjU0NjY2Ny0xMi4zNzMzMzMgMTIuOC0xMy42NTMzMzRjNi44MjY2NjctMS4yOCAxMy42NTMzMzMtMi45ODY2NjcgMjAuMDUzMzM0LTUuMTIgMC0wLjg1MzMzMyAwLTIuMTMzMzMzLTAuODUzMzM0LTIuOTg2NjY2eiBtLTE1OS41NzMzMzMtMTEyLjIxMzMzNGMwIDQxLjM4NjY2NyAyMS4zMzMzMzMgNzkuNzg2NjY3IDU1LjA0IDEwMS45NzMzMzQgMC0wLjQyNjY2NyAwLjQyNjY2Ny0wLjg1MzMzMyAwLjg1MzMzMy0xLjcwNjY2NyAyLjU2LTUuNTQ2NjY3IDUuNTQ2NjY3LTExLjA5MzMzMyA4Ljk2LTE1Ljc4NjY2NyAwLjg1MzMzMy0wLjg1MzMzMyAxLjI4LTEuNzA2NjY3IDIuMTMzMzMzLTIuNTYgMy40MTMzMzMtNC4yNjY2NjcgNy42OC04LjEwNjY2NyAxMS45NDY2NjctMTEuNTIgMC44NTMzMzMtMC40MjY2NjcgMS43MDY2NjctMS4yOCAyLjU2LTEuNzA2NjY2IDUuMTItMy40MTMzMzMgMTAuNjY2NjY3LTUuOTczMzMzIDE2LjY0LTguMTA2NjY3bDMuODQtMS4yOGM2LjQtMS43MDY2NjcgMTIuOC0yLjk4NjY2NyAxOS42MjY2NjctMi45ODY2NjdzMTMuMjI2NjY3IDEuMjggMTkuNjI2NjY2IDIuOTg2NjY3YzEuMjggMCAyLjU2IDAuODUzMzMzIDMuODQgMS4yOCA1Ljk3MzMzMyAyLjEzMzMzMyAxMS41MiA0LjY5MzMzMyAxNi42NCA4LjEwNjY2NyAwLjg1MzMzMyAwLjQyNjY2NyAxLjcwNjY2NyAxLjI4IDIuMTMzMzM0IDEuNzA2NjY2IDQuNjkzMzMzIDMuNDEzMzMzIDguNTMzMzMzIDcuMjUzMzMzIDEyLjM3MzMzMyAxMS41MiAwLjg1MzMzMyAwLjg1MzMzMyAxLjI4IDEuNzA2NjY3IDIuMTMzMzMzIDIuNTYgMy44NCA0LjY5MzMzMyA2LjgyNjY2NyAxMC4yNCA4Ljk2IDE1Ljc4NjY2NyAwIDAuNDI2NjY3IDAuODUzMzMzIDAuODUzMzMzIDAuODUzMzM0IDEuNzA2NjY3IDM0LjEzMzMzMy0yMi4xODY2NjcgNTUuMDQtNjAuNTg2NjY3IDU1LjA0LTEwMS45NzMzMzR2LTguOTZoLTM0LjU2djQ5LjQ5MzMzNGMwIDguMTA2NjY3LTYuODI2NjY3IDE0LjkzMzMzMy0xNC45MzMzMzQgMTQuOTMzMzMzcy0xNC45MzMzMzMtNi44MjY2NjctMTQuOTMzMzMzLTE0LjkzMzMzM3YtNDkuNDkzMzM0SDI5Mi4yNjY2Njd2NDkuNDkzMzM0YzAgOC4xMDY2NjctNi44MjY2NjcgMTQuOTMzMzMzLTE0LjkzMzMzNCAxNC45MzMzMzNzLTE0LjkzMzMzMy02LjgyNjY2Ny0xNC45MzMzMzMtMTQuOTMzMzMzdi00OS40OTMzMzRoLTM0LjEzMzMzM3Y4Ljk2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC1tdWx0aXBsZSIgdW5pY29kZT0iJiM1OTEzMzsiIGQ9Ik01MTIgNjgyLjY2NjY2N2MxNjQuNjkzMzMzIDAgMjk4LjY2NjY2Ny0xMzMuOTczMzMzIDI5OC42NjY2NjctMjk4LjY2NjY2N3MtMTMzLjk3MzMzMy0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2Ny0yOTguNjY2NjY3IDEzMy45NzMzMzMtMjk4LjY2NjY2NyAyOTguNjY2NjY3IDEzMy45NzMzMzMgMjk4LjY2NjY2NyAyOTguNjY2NjY3IDI5OC42NjY2NjdtMCAxMjhDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTAxLjMzMzMzMyA1NTUuNTJsLTE1Mi43NDY2NjYtMTEwLjkzMzMzM2MtNi40LTQuNjkzMzMzLTguOTYtMTIuOC02LjQtMjAuMDUzMzM0bDU4LjQ1MzMzMy0xNzkuNjI2NjY2YzIuNTYtNy4yNTMzMzMgOS4zODY2NjctMTIuMzczMzMzIDE3LjA2NjY2Ny0xMi4zNzMzMzRoMTg4LjU4NjY2NmM3LjY4IDAgMTQuNTA2NjY3IDUuMTIgMTcuMDY2NjY3IDEyLjM3MzMzNGw1OC40NTMzMzMgMTc5LjYyNjY2NmMyLjU2IDcuMjUzMzMzIDAgMTUuMzYtNi40IDIwLjA1MzMzNGwtMTUyLjc0NjY2NiAxMTAuOTMzMzMzYTE3LjkyIDE3LjkyIDAgMCAxLTIxLjMzMzMzNCAweiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImludGVybWVkaWF0ZS1ldmVudC10MyIgdW5pY29kZT0iJiM1OTEzNDsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6TTUwMS4zMzMzMzMgNTU1LjUybC0xNTIuNzQ2NjY2LTExMC45MzMzMzNjLTYuNC00LjY5MzMzMy04Ljk2LTEyLjgtNi40LTIwLjA1MzMzNGw1OC40NTMzMzMtMTc5LjYyNjY2NmMyLjU2LTcuMjUzMzMzIDkuMzg2NjY3LTEyLjM3MzMzMyAxNy4wNjY2NjctMTIuMzczMzM0aDE4OC41ODY2NjZjNy42OCAwIDE0LjUwNjY2NyA1LjEyIDE3LjA2NjY2NyAxMi4zNzMzMzRsNTguNDUzMzMzIDE3OS42MjY2NjZjMi41NiA3LjI1MzMzMyAwIDE1LjM2LTYuNCAyMC4wNTMzMzRsLTE1Mi43NDY2NjYgMTEwLjkzMzMzM2ExNy45MiAxNy45MiAwIDAgMS0yMS4zMzMzMzQgMHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1c2VyLWljb24iIHVuaWNvZGU9IiYjNTkxMzU7IiBkPSJNNjE5LjgzNzY3NyA0MjguMTg1NjM4Yy00LjMyNTg2NiAyLjE2MjkzNC04Ljk2MDcyNCA0LjAxNjg3Ni0xMy4yODY1OTEgNS41NjE4MjkgMzEuNTE3MDI5IDI3LjUwMDE1MiA1MC42NzQ0MzggNjcuOTc3OTA2IDUwLjY3NDQzOSAxMTEuODU0NTU0IDAgODIuMTkxNDY3LTY2Ljc0MTk0MyAxNDguOTMzNDEtMTQ4LjkzMzQxMSAxNDguOTMzNDEtNjAuMjUzMTQzIDAtMTE0LjAxNzQ4Ny0zNS44NDI4OTUtMTM3LjE5MTc3Mi05MS40NjExODEtNy43MjQ3NjItMTguMjMwNDM4LTExLjQzMjY0OC0zNy4zODc4NDgtMTEuNDMyNjQ4LTU3LjQ3MjIyOSAwLTQzLjg3NjY0OCAxOS4xNTc0MDktODQuMzU0NDAxIDUwLjM2NTQ0OC0xMTEuODU0NTU0LTQuMzI1ODY2LTEuNTQ0OTUyLTguNjUxNzM0LTMuMzk4ODk1LTEyLjk3NzYtNS4yNTI4MzgtOTcuMDIzMDEtNDQuMTg1NjM4LTE2MC4wNTcwNjgtMTQxLjUxNzYzOS0xNjAuMDU3MDY4LTI0Ny44MTAzNjRWMTM2LjgwNzYxN2MwLTEyLjY2ODYwOSAxMC41MDU2NzctMjMuMTc0Mjg2IDIzLjE3NDI4Ni0yMy4xNzQyODVoNDk2LjU0NzY5OWMxMi42Njg2MDkgMCAyMy4xNzQyODYgMTAuNTA1Njc3IDIzLjE3NDI4NiAyMy4xNzQyODV2NDMuODc2NjQ4YzAgMTA2LjYwMTcxNS02Mi43MjUwNjcgMjAzLjYyNDcyNS0xNTkuNzQ4MDc4IDI0Ny41MDEzNzN6TTQwNS43MDcyNzYgNTQ1LjkxMTAxYzAgMTMuNTk1NTgxIDIuNzgwOTE0IDI2Ljg4MjE3MiA4LjAzMzc1MiAzOS41NTA3ODIgMS44NTM5NDMgNC4zMjU4NjYgNC4wMTY4NzYgOC4zNDI3NDMgNi4xNzk4MDkgMTIuMzU5NjE5IDIxLjAxMTM1MiAxMC4xOTY2ODYgNDYuOTY2NTUyIDIxLjAxMTM1MiA2Mi40MTYwNzcgMjEuMDExMzUzIDEzLjI4NjU5MSAwIDI2LjI2NDE5MS01Ljg3MDgxOSAzNy4wNzg4NTctMTIuNjY4NjEgMjAuMDg0MzgxLTEyLjM1OTYxOSA0NC4xODU2MzgtMTcuNjEyNDU3IDY3LjM1OTkyNS0xMS43NDE2MzggMy43MDc4ODYgMC45MjY5NzEgNi40ODg4IDEuODUzOTQzIDkuNTc4NzA1IDMuMDg5OTA1IDguOTYwNzI0LTE1LjE0MDUzNCAxNC41MjI1NTItMzIuNzUyOTkxIDE0LjUyMjU1Mi01MS42MDE0MTEgMC00NC44MDM2Mi0yOC43MzYxMTQtODQuMDQ1NDEtNzEuNjg1NzkxLTk3LjY0MDk5LTEwLjE5NjY4Ni0zLjA4OTkwNS0xNi45OTQ0NzctMTIuOTc3Ni0xNi4wNjc1MDUtMjMuNzkyMjY4IDAuOTI2OTcxLTEwLjgxNDY2NyA4Ljk2MDcyNC0xOS40NjY0IDE5LjQ2NjQtMjEuMDExMzUyIDE0LjUyMjU1Mi0yLjE2MjkzNCAyOC43MzYxMTQtNS44NzA4MTkgNDIuMzMxNjk2LTEwLjgxNDY2Ni0xLjIzNTk2Mi00LjYzNDg1Ny0yLjc4MDkxNC04Ljk2MDcyNC00LjYzNDg1Ny0xMi45Nzc2LTAuNjE3OTgxLTEuMjM1OTYyLTEuMjM1OTYyLTIuMTYyOTM0LTEuODUzOTQzLTMuMzk4ODk2LTEuNTQ0OTUyLTMuMDg5OTA1LTMuMDg5OTA1LTUuODcwODE5LTQuOTQzODQ4LTguNjUxNzMzLTAuOTI2OTcxLTEuNTQ0OTUyLTIuMTYyOTM0LTIuNzgwOTE0LTMuMDg5OTA1LTQuMDE2ODc3LTEuODUzOTQzLTIuMTYyOTM0LTMuNzA3ODg2LTQuMzI1ODY2LTUuODcwODE5LTYuNDg4OC0xLjIzNTk2Mi0xLjIzNTk2Mi0yLjc4MDkxNC0yLjQ3MTkyNC00LjAxNjg3Ni0zLjcwNzg4NS0yLjE2MjkzNC0xLjg1Mzk0My00LjMyNTg2Ni0zLjcwNzg4Ni02LjQ4ODgtNS4yNTI4MzgtMS41NDQ5NTItMC45MjY5NzEtMy4wODk5MDUtMi4xNjI5MzQtNC42MzQ4NTctMy4wODk5MDUtMi40NzE5MjQtMS41NDQ5NTItNC45NDM4NDgtMi43ODA5MTQtNy43MjQ3NjItNC4wMTY4NzctMS41NDQ5NTItMC42MTc5ODEtMy4zOTg4OTUtMS41NDQ5NTItNC45NDM4NDgtMi4xNjI5MzMtMy4wODk5MDUtMS4yMzU5NjItNi4xNzk4MDktMS44NTM5NDMtOS4yNjk3MTQtMi43ODA5MTQtMS41NDQ5NTItMC4zMDg5OTEtMy4wODk5MDUtMC45MjY5NzEtNC42MzQ4NTctMS4yMzU5NjItNC42MzQ4NTctMC45MjY5NzEtOS41Nzg3MDUtMS41NDQ5NTItMTQuNTIyNTUzLTEuNTQ0OTUycy05Ljg4NzY5NSAwLjYxNzk4MS0xNC41MjI1NTIgMS41NDQ5NTJjLTEuNTQ0OTUyIDAtMy4wODk5MDUgMC45MjY5NzEtNC42MzQ4NTcgMS4yMzU5NjItMy4wODk5MDUgMC42MTc5ODEtNi4xNzk4MDkgMS41NDQ5NTItOC45NjA3MjUgMi43ODA5MTQtMS44NTM5NDMgMC42MTc5ODEtMy4zOTg4OTUgMS41NDQ5NTItNC45NDM4NDcgMi4xNjI5MzNsLTcuNDE1NzcxIDMuNzA3ODg2Yy0xLjU0NDk1MiAwLjkyNjk3MS0zLjM5ODg5NSAyLjE2MjkzNC00Ljk0Mzg0OCAzLjA4OTkwNS0yLjE2MjkzNCAxLjU0NDk1Mi00LjMyNTg2NiAzLjA4OTkwNS02LjQ4ODggNC45NDM4NDgtMS41NDQ5NTIgMS4yMzU5NjItMi43ODA5MTQgMi40NzE5MjQtNC4zMjU4NjcgNC4wMTY4NzYtMS44NTM5NDMgMS44NTM5NDMtMy43MDc4ODYgNC4wMTY4NzYtNS41NjE4MjggNi4xNzk4MWwtMy4zOTg4OTYgNC4zMjU4NjZjLTEuODUzOTQzIDIuNzgwOTE0LTMuMzk4ODk1IDUuNTYxODI5LTQuOTQzODQ3IDguMzQyNzQzLTAuNjE3OTgxIDEuMjM1OTYyLTEuNTQ0OTUyIDIuNDcxOTI0LTIuMTYyOTM0IDMuNzA3ODg2LTEuODUzOTQzIDQuMDE2ODc2LTMuMzk4ODk1IDguMzQyNzQzLTQuNjM0ODU3IDEyLjk3NzYgMTMuNTk1NTgxIDQuOTQzODQ4IDI3LjUwMDE1MiA4LjM0Mjc0MyA0MS43MTM3MTUgMTAuNTA1Njc2IDEwLjUwNTY3NyAxLjU0NDk1MiAxOC44NDg0MTkgMTAuNTA1Njc3IDE5LjQ2NjQgMjEuMDExMzUzcy01Ljg3MDgxOSAyMC43MDIzNjItMTYuMDY3NTA1IDIzLjc5MjI2NmExMDIuMTgzMTUxIDEwMi4xODMxNTEgMCAwIDAtNzEuMzc2ODAxIDk3LjY0MDk5MnogbTMyNy41Mjk5MDYtMzg1LjkyOTEwN2gtNzEuOTk0NzgxdjkzLjYyNDExNWMwIDEyLjA1MDYyOS05Ljg4NzY5NSAyMS45MzgzMjQtMjEuOTM4MzI0IDIxLjkzODMyNHMtMjEuOTM4MzI0LTkuODg3Njk1LTIxLjkzODMyNC0yMS45MzgzMjR2LTkzLjYyNDExNUgzOTguMjkxNTA0djkzLjYyNDExNWMwIDEyLjA1MDYyOS05Ljg4NzY5NSAyMS45MzgzMjQtMjEuOTM4MzI0IDIxLjkzODMyNHMtMjEuOTM4MzI0LTkuODg3Njk1LTIxLjkzODMyNC0yMS45MzgzMjR2LTkzLjYyNDExNUgyODIuNzI5MDY1djIwLjcwMjM2MmEyMjYuMTgxMDMgMjI2LjE4MTAzIDAgMCAwIDEwNi42MDE3MTUgMTkxLjU3NDA5N2MwLjkyNjk3MS0yLjc4MDkxNCAyLjE2MjkzNC01LjI1MjgzOCAzLjM5ODg5Ni04LjAzMzc1MyAwLjkyNjk3MS0yLjE2MjkzNCAxLjg1Mzk0My00LjYzNDg1NyAzLjA4OTkwNC02Ljc5Nzc5IDIuNDcxOTI0LTUuMjUyODM4IDUuNTYxODI5LTEwLjE5NjY4NiA4LjY1MTczMy0xNC44MzE1NDMgMC45MjY5NzEtMS4yMzU5NjIgMS41NDQ5NTItMi40NzE5MjQgMi40NzE5MjQtMy43MDc4ODYgNC4zMjU4NjYtNS44NzA4MTkgOC45NjA3MjQtMTEuMTIzNjU3IDE0LjIxMzU2Mi0xNi4wNjc1MDUgMS4yMzU5NjItMS4yMzU5NjIgMi43ODA5MTQtMi40NzE5MjQgNC4zMjU4NjctMy43MDc4ODUgNC4wMTY4NzYtMy4zOTg4OTUgOC4wMzM3NTItNi43OTc3OTEgMTIuMzU5NjE5LTkuODg3Njk2IDIuMTYyOTM0LTEuNTQ0OTUyIDQuMzI1ODY2LTIuNzgwOTE0IDYuNDg4OC00LjAxNjg3NiA0LjAxNjg3Ni0yLjQ3MTkyNCA4LjM0Mjc0My00LjYzNDg1NyAxMi42Njg2MS02LjQ4ODggMi40NzE5MjQtMC45MjY5NzEgNC42MzQ4NTctMi4xNjI5MzQgNy4xMDY3ODEtMy4wODk5MDUgNC42MzQ4NTctMS44NTM5NDMgOS41Nzg3MDUtMy4wODk5MDUgMTQuNTIyNTUyLTQuMzI1ODY3IDIuMTYyOTM0LTAuNjE3OTgxIDQuNjM0ODU3LTEuMjM1OTYyIDYuNzk3NzkxLTEuNTQ0OTUyIDcuNDE1NzcxLTEuMjM1OTYyIDE0LjgzMTU0My0yLjE2MjkzNCAyMi41NTYzMDUtMi4xNjI5MzNzMTUuMTQwNTM0IDAuOTI2OTcxIDIyLjU1NjMwNSAyLjE2MjkzM2MyLjQ3MTkyNCAwLjMwODk5MSA0LjYzNDg1NyAxLjIzNTk2MiA2Ljc5Nzc5IDEuNTQ0OTUyIDQuOTQzODQ4IDEuMjM1OTYyIDkuODg3Njk1IDIuNDcxOTI0IDE0LjUyMjU1MyA0LjMyNTg2NyAyLjQ3MTkyNCAwLjkyNjk3MSA0Ljk0Mzg0OCAxLjg1Mzk0MyA3LjQxNTc3MSAzLjA4OTkwNSA0LjMyNTg2NiAxLjg1Mzk0MyA4LjY1MTczNCA0LjAxNjg3NiAxMi42Njg2MSA2LjQ4ODggMi4xNjI5MzQgMS4yMzU5NjIgNC4zMjU4NjYgMi40NzE5MjQgNi40ODg4IDQuMDE2ODc2IDQuMzI1ODY2IDMuMDg5OTA1IDguNjUxNzM0IDYuMTc5ODA5IDEyLjM1OTYxOSA5Ljg4NzY5NiAxLjU0NDk1MiAxLjIzNTk2MiAyLjc4MDkxNCAyLjE2MjkzNCA0LjMyNTg2NiAzLjcwNzg4NSA1LjI1MjgzOCA0Ljk0Mzg0OCA5Ljg4NzY5NSAxMC41MDU2NzcgMTQuMjEzNTYzIDE2LjA2NzUwNSAwLjkyNjk3MSAxLjIzNTk2MiAxLjU0NDk1MiAyLjQ3MTkyNCAyLjE2MjkzMyAzLjM5ODg5NSAzLjM5ODg5NSA0Ljk0Mzg0OCA2LjE3OTgwOSA5Ljg4NzY5NSA4Ljk2MDcyNCAxNS4xNDA1MzRsMi43ODA5MTQgNi40ODg4YzEuMjM1OTYyIDIuNzgwOTE0IDIuNDcxOTI0IDUuMjUyODM4IDMuMzk4ODk1IDguMDMzNzUyYTIyNi4wNTc0MzQgMjI2LjA1NzQzNCAwIDAgMCAxMDYuNjAxNzE1LTE5MS4yNjUxMDZ2LTIwLjcwMjM2MnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtYzE0IiB1bmljb2RlPSImIzU5MTM3OyIgZD0iTTMzNi4yMTMzMzMgNzcyLjY5MzMzM2MtMjMuNDY2NjY3LTEwLjY2NjY2Ny00Ni4wOC0yMy40NjY2NjctNjYuOTg2NjY2LTM3Ljk3MzMzM3MtNC4yNjY2NjctMi45ODY2NjctNi40LTQuMjY2NjY3aC0wLjg1MzMzNHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM0gyNjAuMjY2NjY3bC0yLjU2LTIuMTMzMzM0aC0wLjg1MzMzNHYtMC44NTMzMzNIMjU2di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0aC0wLjg1MzMzNHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0SDI1MS43MzMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzNGgtMC44NTMzMzR2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNIMjQ3LjQ2NjY2N3YtMC44NTMzMzRoLTAuODUzMzM0di0wLjg1MzMzM2wtMS43MDY2NjYtMS4yOGgtMC44NTMzMzR2LTAuODUzMzMzSDI0My4ydi0wLjg1MzMzNGgtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzNGwtMTEuMDkzMzMzLTkuODEzMzMzYy04LjEwNjY2Ny03LjI1MzMzMy0xNS43ODY2NjctMTQuNTA2NjY3LTIzLjA0LTIyLjE4NjY2N2w0MS4zODY2NjctNDYuOTMzMzMzIDIzLjg5MzMzMyAyMS4zMzMzMzNjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzNy45NzMzMzMgMzAuMjkzMzMzIDU4Ljg4IDQyLjI0bDEuMjggMC44NTMzMzNoMC40MjY2NjdsMS43MDY2NjYgMS4yOGgwLjg1MzMzNGwwLjg1MzMzMyAwLjg1MzMzNCAxLjcwNjY2NyAwLjg1MzMzMyAyOC4xNiAxNS4zNi0zMC4yOTMzMzQgNTUuMDR6TTE2NS45NzMzMzMgNjMzLjE3MzMzM2MtMTQuMDgtMTkuMi0yNi4wMjY2NjctMzkuNjgtMzYuNjkzMzMzLTYxLjAxMzMzM3YtMC44NTMzMzNsLTIuNTYtNS4xMlY1NTcuNjUzMzMzbC0wLjg1MzMzMy0yLjEzMzMzM1Y1NDYuMTMzMzMzbC0xLjcwNjY2Ny00LjI2NjY2NnYtMS4yOEgxMjMuNzMzMzMzYy02LjgyNjY2Ny0xNy4wNjY2NjctMTIuMzczMzMzLTM0LjU2LTE3LjA2NjY2Ni01Mi40OGw1OS4zMDY2NjYtMjAuMDUzMzM0IDEwLjI0IDMwLjI5MzMzNGM3LjY4IDIyLjYxMzMzMyAxNy45MiA0NC44IDI5Ljg2NjY2NyA2NS43MDY2NjZsMC44NTMzMzMgMS4yOCAwLjg1MzMzNCAyLjEzMzMzNHYwLjg1MzMzM2wwLjg1MzMzMyAwLjg1MzMzMyAwLjg1MzMzMyAxLjcwNjY2NyAxNi42NCAyNy4zMDY2NjctNTMuMzMzMzMzIDMyLjg1MzMzM3ogbS03OC4wOC0yMDUuNjUzMzMzYy0xLjI4LTE0LjA4LTIuMTMzMzMzLTI4LjU4NjY2Ny0yLjEzMzMzMy00My41MiAwLTkuMzg2NjY3IDAtMTguNzczMzMzIDAuODUzMzMzLTI3LjczMzMzM3YtMy40MTMzMzRjMC0yLjU2IDAtNC42OTMzMzMgMC40MjY2NjctNy4yNTMzMzN2LTAuODUzMzMzYzAuNDI2NjY3LTQuNjkzMzMzIDAuODUzMzMzLTkuODEzMzMzIDEuNzA2NjY3LTE0LjUwNjY2N1YzMjIuOTg2NjY3aDAuNDI2NjY2VjMwOC4wNTMzMzNjMC40MjY2NjctNC4yNjY2NjcgMS4yOC04LjEwNjY2NyAyLjEzMzMzNC0xMS41MiAyLjEzMzMzMy0xMC42NjY2NjcgNC42OTMzMzMtMjAuOTA2NjY3IDcuMjUzMzMzLTMxLjE0NjY2Nmw2MS40NCAxMS45NDY2NjYtNS45NzMzMzMgMzEuNTczMzM0Yy00LjY5MzMzMyAyMy4wNC02LjgyNjY2NyA0Ni41MDY2NjctNi44MjY2NjcgNzAuNHY5LjgxMzMzM2wwLjg1MzMzMyAzMkw4NS4zMzMzMzMgNDIyLjgyNjY2N3pNMTQ5Ljc2IDM4NHogbTI4LjE2LTE0NC4yMTMzMzNsLTU1LjA0LTI5Ljg2NjY2N2MxNC41MDY2NjctMzIgMzIuNDI2NjY3LTYyLjI5MzMzMyA1NC4xODY2NjctODkuNmgwLjQyNjY2NnYtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzM0YzMuNDEzMzMzLTQuNjkzMzMzIDcuMjUzMzMzLTguOTYgMTEuMDkzMzMzLTEzLjIyNjY2NiA2LjgyNjY2Ny04LjEwNjY2NyAxNC4wOC0xNS43ODY2NjcgMjEuNzYtMjMuNDY2NjY3bDQ3LjM2IDQxLjM4NjY2Ny0yMC45MDY2NjYgMjQuMzJjLTE1Ljc4NjY2NyAxOC4zNDY2NjctMjkuODY2NjY3IDM3Ljk3MzMzMy00MS44MTMzMzQgNTguODhsLTAuODUzMzMzIDEuMjgtMC44NTMzMzMgMi4xMzMzMzN2MC44NTMzMzNsLTAuODUzMzM0IDAuODUzMzM0LTAuODUzMzMzIDEuNzA2NjY2LTE1LjM2IDI4LjE2eiBtMTE2LjQ4LTE0Ny42MjY2NjdsLTMyLjg1MzMzMy01My4zMzMzMzNjMjAuNDgtMTQuOTMzMzMzIDQyLjI0LTI4LjE2IDY1LjI4LTM5LjI1MzMzNGgwLjQyNjY2NmMyLjU2LTEuNzA2NjY3IDUuNTQ2NjY3LTIuOTg2NjY3IDguMTA2NjY3LTQuMjY2NjY2aDEuMjh2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDEuMjh2LTAuODUzMzMzaDAuNDI2NjY3bDQuMjY2NjY2LTIuMTMzMzM0aDEuMjh2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS43MDY2NjZ2LTAuODUzMzMzaDEuMjhsMS43MDY2NjctMS4yOGgxLjcwNjY2N3YtMC44NTMzMzNoMS43MDY2NjZ2LTAuODUzMzM0aDEuNzA2NjY3di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzNoMS43MDY2NjZ2LTAuODUzMzM0bDEwLjI0LTMuODRjOS44MTMzMzMtMy40MTMzMzMgMjAuMDUzMzMzLTYuNCAzMC4yOTMzMzQtOS4zODY2NjZsMjAuNDggNTkuMzA2NjY2LTMwLjI5MzMzNCAxMC4yNGEzNTEuNTczMzMzIDM1MS41NzMzMzMgMCAwIDAtNjUuNzA2NjY2IDMwLjI5MzMzNGwtMS4yOCAwLjg1MzMzM2gtMC40MjY2NjdsLTEuNzA2NjY3IDEuMjhoLTAuODUzMzMzbC0wLjg1MzMzMyAwLjg1MzMzMy0xLjcwNjY2NyAwLjg1MzMzNC0yNy4zMDY2NjcgMTYuNjR6IG0zMTcuODY2NjY3LTU4LjQ1MzMzM2wtMzEuNTczMzM0LTUuOTczMzM0Yy0yMi42MTMzMzMtNC4yNjY2NjctNDUuNjUzMzMzLTYuNC02OC42OTMzMzMtNi40aC0xMS41MmwtMzIgMS4yOC0yLjEzMzMzMy02Mi43MmMxNC45MzMzMzMtMS43MDY2NjcgMzAuMjkzMzMzLTIuNTYgNDUuNjUzMzMzLTIuNTYgOC41MzMzMzMgMCAxNy4wNjY2NjcgMCAyNS42IDAuODUzMzM0aDcuMjUzMzMzYzE2LjIxMzMzMyAxLjcwNjY2NyAzMi40MjY2NjcgMy44NCA0Ny43ODY2NjcgNi44MjY2NjYgMTAuMjQgMi4xMzMzMzMgMjAuOTA2NjY3IDQuMjY2NjY3IDMwLjcyIDcuMjUzMzM0bC0xMS45NDY2NjcgNjEuODY2NjY2eiBtMTYxLjI4IDk2LjQyNjY2NmwtMjQuMzItMjAuOTA2NjY2Yy0xOC4zNDY2NjctMTUuNzg2NjY3LTM4LjQtMjkuODY2NjY3LTU5LjMwNjY2Ny00MS44MTMzMzRsLTEuMjgtMC44NTMzMzNoLTAuNDI2NjY3bC0xLjcwNjY2Ni0xLjI4aC0wLjg1MzMzNGwtMC44NTMzMzMtMC44NTMzMzMtMS43MDY2NjctMC44NTMzMzQtMjguMTYtMTUuMzYgMjkuNDQtNTUuNDY2NjY2YzM0LjEzMzMzMyAxNC45MzMzMzMgNjUuNzA2NjY3IDM0LjU2IDk0LjcyIDU3LjZoMC44NTMzMzR2MC44NTMzMzNoMC44NTMzMzN2MC44NTMzMzNoMC44NTMzMzN2MC44NTMzMzRoMC44NTMzMzR2MC44NTMzMzNoMC40MjY2NjZjMi41NiAyLjU2IDUuNTQ2NjY3IDUuMTIgOC4xMDY2NjcgNy4yNTMzMzMgOC4xMDY2NjcgNy4yNTMzMzMgMTUuNzg2NjY3IDE0LjUwNjY2NyAyMy4wNCAyMS43NmwtNDAuOTYgNDcuMzZ6IG05MS43MzMzMzMgMTYzLjg0bC0xMC42NjY2NjctMzAuMjkzMzMzYy04LjEwNjY2Ny0yMi42MTMzMzMtMTguMzQ2NjY3LTQ0LjgtMzAuNzItNjUuNzA2NjY3bC0wLjg1MzMzMy0xLjI4LTAuODUzMzMzLTIuMTMzMzMzdi0wLjg1MzMzM2wtMC44NTMzMzQtMC44NTMzMzQtMC44NTMzMzMtMS43MDY2NjYtMTcuMDY2NjY3LTI3LjMwNjY2NyA1My4zMzMzMzQtMzMuMjhjMTQuMDggMTkuMiAyNi40NTMzMzMgMzkuMjUzMzMzIDM3LjEyIDYwLjU4NjY2N3Y2LjgyNjY2NmgwLjg1MzMzM3Y3LjY4YzQuMjY2NjY3IDkuODEzMzMzIDguNTMzMzMzIDE5LjIgMTIuMzczMzMzIDI5LjQ0djIuNTZsMS4yOCAzLjg0djEuNzA2NjY3YzMuNDEzMzMzIDEwLjI0IDYuODI2NjY3IDIwLjQ4IDkuMzg2NjY3IDMxLjE0NjY2N2wtNTkuMzA2NjY3IDIwLjkwNjY2NnogbTU5LjMwNjY2NyAxOTkuNjhsLTYxLjg2NjY2Ny0xMS41MiA1Ljk3MzMzMy0zMS41NzMzMzNjNC4yNjY2NjctMjEuNzYgNS45NzMzMzMtNDQuMzczMzMzIDUuOTczMzM0LTY2Ljk4NjY2N3YtMTMuNjUzMzMzbC0xLjI4LTMyIDYyLjcyLTIuMTMzMzMzYzEuNzA2NjY3IDE1Ljc4NjY2NyAyLjU2IDMxLjU3MzMzMyAyLjU2IDQ3Ljc4NjY2NiAwIDcuNjggMCAxNS43ODY2NjctMC40MjY2NjcgMjMuNDY2NjY3djE0LjA4Yy0yLjEzMzMzMyAyNS4xNzMzMzMtNi40IDQ5LjQ5MzMzMy0xMi44IDczLjM4NjY2N3pNODE0LjkzMzMzMyA2ODQuMzczMzMzbC00Ny43ODY2NjYtNDAuOTYgMjAuOTA2NjY2LTI0LjMyYzE1Ljc4NjY2Ny0xOC4zNDY2NjcgMjkuNDQtMzguNCA0MS4zODY2NjctNTkuMzA2NjY2bDAuODUzMzMzLTEuMjggMC44NTMzMzQtMi4xMzMzMzR2LTAuODUzMzMzbDAuODUzMzMzLTAuODUzMzMzIDAuODUzMzMzLTEuNzA2NjY3IDE0LjkzMzMzNC0yOC4xNiA1NS40NjY2NjYgMjkuNDRjLTkuMzg2NjY3IDIxLjc2LTIwLjkwNjY2NyA0Mi42NjY2NjctMzMuNzA2NjY2IDYyLjcyLTIuMTMzMzMzIDMuNDEzMzMzLTQuMjY2NjY3IDYuNC02LjQgOS44MTMzMzN2MC44NTMzMzRoLTAuNDI2NjY3djAuODUzMzMzaC0wLjQyNjY2N3YwLjg1MzMzM2gtMC40MjY2NjZ2MC44NTMzMzRsLTIuMTMzMzM0IDIuNTZ2MC44NTMzMzNoLTAuNDI2NjY2djAuODUzMzMzaC0wLjQyNjY2N3YwLjg1MzMzNGgtMC40MjY2Njd2MC44NTMzMzNoLTAuNDI2NjY2djAuODUzMzMzcy0xLjcwNjY2NyAyLjk4NjY2Ny0yLjk4NjY2NyAzLjg0djAuODUzMzM0aC0wLjQyNjY2N3YwLjg1MzMzM2gtMC40MjY2NjZhMzc2Ljk2IDM3Ni45NiAwIDAgMS0zNi4yNjY2NjcgNDIuNjY2NjY3eiBtLTE5MC4yOTMzMzMgMTEwLjkzMzMzNGwtMjAuOTA2NjY3LTU5LjMwNjY2NyAzMC4yOTMzMzQtMTAuNjY2NjY3YzIyLjYxMzMzMy04LjEwNjY2NyA0NC44LTE4LjM0NjY2NyA2NS4yOC0zMS4xNDY2NjZsMS4yOC0wLjg1MzMzNGgwLjQyNjY2NmwxLjcwNjY2Ny0xLjI4aDAuODUzMzMzbDAuODUzMzM0LTAuODUzMzMzIDEuNzA2NjY2LTAuODUzMzMzIDI2Ljg4LTE3LjA2NjY2NyAzMy43MDY2NjcgNTIuOTA2NjY3Yy0xOC43NzMzMzMgMTQuMDgtMzkuMjUzMzMzIDI2LjQ1MzMzMy02MC4xNiAzNy41NDY2NjZsLTE1LjM2IDcuNjhoLTEuMjhWNzcyLjI2NjY2N2gtMC44NTMzMzNjLTIuMTMzMzMzIDEuMjgtNC4yNjY2NjcgMi4xMzMzMzMtNi44MjY2NjcgMy40MTMzMzNoLTEuMjhWNzc2LjUzMzMzM2gtMS43MDY2Njd2MC44NTMzMzRoLTEuNzA2NjY2djAuODUzMzMzaC0xLjcwNjY2N2wtMy40MTMzMzMgMi4xMzMzMzNoLTEuNzA2NjY3djAuODUzMzM0aC0xLjcwNjY2N3YwLjg1MzMzM2gtMS43MDY2NjZ2MC44NTMzMzNoLTEuNzA2NjY3djAuODUzMzM0aC0xLjcwNjY2N2wtMi41NiAxLjI4aC0xLjcwNjY2NnYwLjg1MzMzM2gtMS43MDY2Njd2MC44NTMzMzNoLTEuNzA2NjY3djAuODUzMzM0aC0xLjcwNjY2NmMtOS44MTMzMzMgMy44NC0yMC4wNTMzMzMgNy4yNTMzMzMtMzAuMjkzMzM0IDEwLjI0ek01MTIgODEwLjI0Yy0xMC42NjY2NjcgMC0yMS4zMzMzMzMgMC0zMi0xLjI4aC0zLjg0Yy0yNy4zMDY2NjctMi41Ni01NC4xODY2NjctNy42OC04MC4yMTMzMzMtMTQuOTMzMzMzbDEyLjM3MzMzMy02MS40NCAzMS41NzMzMzMgNi40QTM2OS4wNjY2NjcgMzY5LjA2NjY2NyAwIDAgMCA1MTIgNzQ2LjI0aDE1LjM2bDMyLTEuNzA2NjY3IDIuNTYgNjIuNzJjLTE2LjIxMzMzMyAxLjcwNjY2Ny0zMi44NTMzMzMgMi45ODY2NjctNDkuOTIgMi45ODY2Njd6TTM0MC4wNTMzMzMgNjU0LjA4YTMyMi40NzQ2NjcgMzIyLjQ3NDY2NyAwIDAgMS0xMDcuOTQ2NjY2LTExNC4zNDY2NjdsNTEuMi0zNS44NCAxOC4zNDY2NjYgMjYuNDUzMzM0YzEzLjIyNjY2NyAxOC43NzMzMzMgMjguNTg2NjY3IDM1LjQxMzMzMyA0Ni4wOCA1MC4zNDY2NjZsMC44NTMzMzQgMC44NTMzMzRoMC40MjY2NjZsMS4yOCAxLjcwNjY2NmgwLjg1MzMzNGwwLjg1MzMzMyAxLjI4IDEuMjggMS4yOCAyNS4xNzMzMzMgMjAuMDUzMzM0LTM4LjQgNDkuMDY2NjY2ek0yMDYuOTMzMzMzIDQ4MS4yOGMtNy4yNTMzMzMtMjIuMTg2NjY3LTExLjk0NjY2Ny00NS42NTMzMzMtMTMuNjUzMzMzLTY5LjU0NjY2NyAwLTQuMjY2NjY3LTAuODUzMzMzLTguNTMzMzMzLTAuODUzMzMzLTEyLjhWMzY2LjkzMzMzM2MwLTUuMTIgMC40MjY2NjctOS44MTMzMzMgMC44NTMzMzMtMTQuOTMzMzMzIDAuODUzMzMzLTExLjA5MzMzMyAyLjU2LTIxLjMzMzMzMyA0LjI2NjY2Ny0zMS41NzMzMzNsNjIuMjkzMzMzIDUuNTQ2NjY2LTIuNTYgMzJjLTAuODUzMzMzIDcuMjUzMzMzLTAuODUzMzMzIDE0LjkzMzMzMy0wLjg1MzMzMyAyMi42MTMzMzQgMCAxNS4zNiAxLjI4IDMwLjcyIDMuODQgNDUuNjUzMzMzdjQuNjkzMzMzbDAuODUzMzMzIDAuODUzMzM0djEuNzA2NjY2bDYuODI2NjY3IDMxLjE0NjY2Ny02MS4wMTMzMzQgMTIuOHogbTYzLjU3MzMzNC0xODkuMDEzMzMzbC01NS4wNC0yOS4wMTMzMzRjOC45Ni0yMi4xODY2NjcgMjAuNDgtNDMuMDkzMzMzIDM0LjEzMzMzMy02Mi4yOTMzMzMgMS43MDY2NjctMi41NiAzLjQxMzMzMy00LjY5MzMzMyA1LjEyLTcuMjUzMzMzdi0xLjI4aDAuODUzMzMzdi0wLjg1MzMzNEgyNTZ2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRoMC44NTMzMzN2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjg1MzMzM3YtMC44NTMzMzRoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjg1MzMzM3YtMC44NTMzMzRoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjg1MzMzM3YtMC44NTMzMzRoMC44NTMzMzR2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzRoMC44NTMzMzN2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzRoMC44NTMzMzN2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzRoMC40MjY2NjZsMC44NTMzMzQtMC44NTMzMzMgMi45ODY2NjYtMi45ODY2NjdjNy42OC03LjY4IDE1LjM2LTE0LjkzMzMzMyAyMy40NjY2NjctMjEuMzMzMzMzbDQ0LjM3MzMzMyA0My45NDY2NjctMjIuNjEzMzMzIDIyLjYxMzMzM2MtMTYuMjEzMzMzIDE2LjIxMzMzMy0yOS44NjY2NjcgMzQuNTYtNDEuMzg2NjY3IDU0LjE4NjY2N3YxLjI4aC0wLjg1MzMzM2wtMC44NTMzMzMgMi4xMzMzMzN2MC44NTMzMzNsLTAuODUzMzM0IDAuODUzMzM0LTAuODUzMzMzIDEuNzA2NjY2LTE0LjkzMzMzMyAyOC4xNnogbTExNS4yLTEzMy41NDY2NjdsLTIzLjQ2NjY2Ny01Ny42YzQ0LjgtMjMuODkzMzMzIDk1LjU3MzMzMy0zNy4xMiAxNDkuNzYtMzcuMTJoMi45ODY2NjdsNS41NDY2NjYgNjIuMjkzMzMzLTMyIDIuOTg2NjY3Yy0yMi42MTMzMzMgMi4xMzMzMzMtNDUuMjI2NjY3IDcuMjUzMzMzLTY2LjEzMzMzMyAxNC45MzMzMzNoLTEuMjh2MC44NTMzMzRsLTIuMTMzMzMzIDAuODUzMzMzSDQxOC4xMzMzMzNsLTAuODUzMzMzIDAuODUzMzMzLTEuNzA2NjY3IDAuODUzMzM0LTI5Ljg2NjY2NiAxMS45NDY2NjZ6IG0yOTguMjQgMzIuODUzMzMzbC0yNi40NTMzMzQtMTguMzQ2NjY2Yy0xOC43NzMzMzMtMTIuOC0zOS4yNTMzMzMtMjMuNDY2NjY3LTYwLjU4NjY2Ni0zMC43MmgtMS43MDY2NjdsLTEuNzA2NjY3LTEuMjhoLTEuNzA2NjY2bC0xLjcwNjY2Ny0xLjI4LTMwLjI5MzMzMy05LjgxMzMzNCAxOC43NzMzMzMtNTkuMzA2NjY2YTMxOC43MiAzMTguNzIgMCAwIDEgMTQxLjIyNjY2NyA2OS41NDY2NjZsLTM1LjQxMzMzNCA1MS4yeiBtODMuNjI2NjY2IDE1NC44OGwtOC41MzMzMzMtMzAuNzJjLTUuOTczMzMzLTIxLjc2LTE0LjkzMzMzMy00My4wOTMzMzMtMjYuODgtNjIuMjkzMzMzbC0wLjg1MzMzMy0xLjI4LTAuODUzMzM0LTIuMTMzMzMzdi0wLjg1MzMzNGwtMC44NTMzMzMtMC44NTMzMzMtMC44NTMzMzMtMS43MDY2NjctMTcuMDY2NjY3LTI2Ljg4IDUyLjQ4LTMzLjI4YzIxLjMzMzMzMyAyNi44OCAzNy45NzMzMzMgNTcuMTczMzMzIDQ5LjkyIDkwLjAyNjY2N3YxNC41MDY2NjdsMi41NiA5LjM4NjY2NmMyLjk4NjY2NyAxMC4yNCA1LjEyIDIwLjkwNjY2NyA2LjgyNjY2NyAzMS4xNDY2NjdsLTYwLjE2IDE2LjY0eiBtMjEuMzMzMzM0IDE5OC40bC01Ni43NDY2NjctMjUuNiAxMy4yMjY2NjctMjkuMDEzMzMzYzkuMzg2NjY3LTIwLjkwNjY2NyAxNS43ODY2NjctNDIuNjY2NjY3IDE5LjYyNjY2Ni02NS4yOHYtNS41NDY2NjdsMC44NTMzMzQtMS43MDY2NjYgNC4yNjY2NjYtMzEuNTczMzM0IDYxLjg2NjY2NyA4LjEwNjY2N2MtMC44NTMzMzMgMjQuMzItNC4yNjY2NjcgNDcuNzg2NjY3LTkuODEzMzMzIDcwLjRWNDgzLjQxMzMzM2MtMS43MDY2NjcgNS41NDY2NjctMy44NCAxMS41Mi01Ljk3MzMzNCAxNi42NFY1MTcuOTczMzMzYy00LjI2NjY2NyAxMC4yNC05LjM4NjY2NyAxOS42MjY2NjctMTQuNTA2NjY2IDI5LjAxMzMzNHogbS0xNjcuMjUzMzM0IDEzOS45NDY2NjdsLTI3LjMwNjY2Ni01Ni4zMiAyOS4wMTMzMzMtMTQuMDhjMjAuNDgtOS44MTMzMzMgMzkuNjgtMjIuNjEzMzMzIDU2Ljc0NjY2Ny0zNy41NDY2NjdsMC44NTMzMzMtMC44NTMzMzNoMC40MjY2NjdsMS4yOC0xLjcwNjY2N2gwLjg1MzMzM2wwLjg1MzMzMy0xLjI4IDEuMjgtMS4yOCAyMy40NjY2NjctMjEuNzYgNDIuMjQgNDUuNjUzMzM0Yy0xNS43ODY2NjcgMTcuOTItMzMuMjggMzMuNzA2NjY3LTUyLjkwNjY2NyA0Ny43ODY2NjYtNC42OTMzMzMgMy40MTMzMzMtOS4zODY2NjcgNi40LTE0LjA4IDkuMzg2NjY3aC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzNGgtMC44NTMzMzN2MC44NTMzMzNoLTEuMjh2MC44NTMzMzNoLTEuMjhWNjU3LjA2NjY2N2gtMS4yOHYwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMS4yOHYwLjg1MzMzNGgtMS4yOHYwLjg1MzMzM2gtMC44NTMzMzRWNjYxLjMzMzMzM2gtMS4yOGwtMC44NTMzMzMgMC44NTMzMzRjLTE1Ljc4NjY2NyA4Ljk2LTMyLjQyNjY2NyAxNy4wNjY2NjctNDkuOTIgMjMuMDR6TTUxMiA3MDRjLTEwLjY2NjY2NyAwLTIxLjMzMzMzMy0wLjQyNjY2Ny0zMi0xLjcwNjY2N2gtNS41NDY2Njd2LTAuODUzMzMzaC01LjU0NjY2NnYtMC44NTMzMzNoLTQuNjkzMzM0bC0wLjg1MzMzMy0wLjg1MzMzNGgtMy40MTMzMzNsLTAuODUzMzM0LTAuODUzMzMzaC0zLjQxMzMzM2wtMC44NTMzMzMtMC44NTMzMzNoLTIuOTg2NjY3bC0wLjg1MzMzMy0wLjg1MzMzNGgtMy40MTMzMzRsLTIuMTMzMzMzLTAuODUzMzMzaC0yLjk4NjY2N2wtMC44NTMzMzMtMC44NTMzMzNoLTIuMTMzMzMzdi0wLjg1MzMzNGgtMi45ODY2Njd2LTAuODUzMzMzaC0yLjk4NjY2N3YtMC44NTMzMzNoLTIuNTZ2LTAuODUzMzM0aC0yLjU2di0wLjg1MzMzM2gtMS4yOGMtMTAuMjQtMi45ODY2NjctMjAuNDgtNi40LTMwLjI5MzMzMy0xMC4yNGwxNi4yMTMzMzMtNjAuMTYgMzAuNzIgOC41MzMzMzNhMjU0LjI5MzMzMyAyNTQuMjkzMzMzIDAgMCAwIDY3LjQxMzMzNCA4Ljk2aDEyLjhsMzItMS43MDY2NjYgMi45ODY2NjYgNjIuMjkzMzMzYy0xNS4zNiAyLjEzMzMzMy0zMS41NzMzMzMgMy40MTMzMzMtNDcuNzg2NjY2IDMuNDEzMzMzek01NjIuNzczMzMzIDIyMS44NjY2NjdoLTEwMS41NDY2NjZjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzQgMjEuMzMzMzMzdjY4LjY5MzMzM0gzNzEuMmMtMTEuOTQ2NjY3IDAtMjEuMzMzMzMzIDkuMzg2NjY3LTIxLjMzMzMzMyAyMS4zMzMzMzR2MTAxLjU0NjY2NmMwIDExLjk0NjY2NyA5LjM4NjY2NyAyMS4zMzMzMzMgMjEuMzMzMzMzIDIxLjMzMzMzNGg2OC42OTMzMzNWNTI0LjhjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzNCAyMS4zMzMzMzNoMTAxLjU0NjY2NmMxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzM0LTIxLjMzMzMzM3YtNjguNjkzMzMzaDY4LjY5MzMzM2MxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzMzLTIxLjMzMzMzNHYtMTAxLjU0NjY2NmMwLTExLjk0NjY2Ny05LjM4NjY2Ny0yMS4zMzMzMzMtMjEuMzMzMzMzLTIxLjMzMzMzNGgtNjguNjkzMzMzdi02OC42OTMzMzNjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzNC0yMS4zMzMzMzN6IG0tODAuMjEzMzMzIDQyLjY2NjY2Nmg1OC44OHY2OC42OTMzMzRjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzMyAyMS4zMzMzMzNoNjguNjkzMzM0djU4Ljg4aC02OC42OTMzMzRjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzMgMjEuMzMzMzMzVjUwMy40NjY2NjdoLTU4Ljg4di02OC42OTMzMzRjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzNIMzkyLjUzMzMzM3YtNTguODhoNjguNjkzMzM0YzExLjk0NjY2NyAwIDIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzMtMjEuMzMzMzMzdi02OC42OTMzMzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhcnQtZXZlbnQtbXVsdGlwbGUiIHVuaWNvZGU9IiYjNTkxMzg7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDQ5Ny40OTMzMzNsMTEwLjkzMzMzMy04MC42NC00Mi4yNC0xMzAuNTZoLTEzNy4zODY2NjZsLTQyLjI0IDEzMC41Nkw1MTIgNDk3LjQ5MzMzM20wIDYxLjg2NjY2N2MtMy44NCAwLTcuMjUzMzMzLTEuMjgtMTAuNjY2NjY3LTMuNDEzMzMzbC0xNTIuNzQ2NjY2LTExMC45MzMzMzRjLTYuNC00LjY5MzMzMy04Ljk2LTEyLjgtNi40LTIwLjA1MzMzM2w1OC40NTMzMzMtMTc5LjYyNjY2N2MyLjU2LTcuMjUzMzMzIDkuMzg2NjY3LTEyLjM3MzMzMyAxNy4wNjY2NjctMTIuMzczMzMzaDE4OC41ODY2NjZjNy42OCAwIDE0LjUwNjY2NyA1LjEyIDE3LjA2NjY2NyAxMi4zNzMzMzNsNTguNDUzMzMzIDE3OS42MjY2NjdjMi41NiA3LjI1MzMzMyAwIDE1LjM2LTYuNCAyMC4wNTMzMzNsLTE1Mi43NDY2NjYgMTEwLjkzMzMzNGExOC42ODggMTguNjg4IDAgMCAxLTEwLjY2NjY2NyAzLjQxMzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaG9yZSIgdW5pY29kZT0iJiM1OTEzOTsiIGQ9Ik04OTcuNzA2NjY3IDcyNS4zMzMzMzNoLTc2OGMtMjMuNDY2NjY3IDAtNDIuNjY2NjY3LTE5LjItNDIuNjY2NjY3LTQyLjY2NjY2NnYtNTk3LjMzMzMzNGMwLTIzLjQ2NjY2NyAxOS4yLTQyLjY2NjY2NyA0Mi42NjY2NjctNDIuNjY2NjY2aDc2OGMyMy40NjY2NjcgMCA0Mi42NjY2NjcgMTkuMiA0Mi42NjY2NjYgNDIuNjY2NjY2VjY4Mi42NjY2NjdjMCAyMy40NjY2NjctMTkuMiA0Mi42NjY2NjctNDIuNjY2NjY2IDQyLjY2NjY2NnpNMTUxLjA0IDUwNS42aDcyNS4zMzMzMzN2LTI0My4yaC03MjUuMzMzMzMzdjI0My4yeiBtNzI1LjMzMzMzMyAxNTUuNzMzMzMzdi05MS43MzMzMzNoLTcyNS4zMzMzMzNWNjYxLjMzMzMzM2g3MjUuMzMzMzMzeiBtLTcyNS4zMzMzMzMtNTU0LjY2NjY2NnY5MS43MzMzMzNoNzI1LjMzMzMzM3YtOTEuNzMzMzMzaC03MjUuMzMzMzMzeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImJvdW5kYXJ5LWV2ZW50LWVycm9yIiB1bmljb2RlPSImIzU5MDE5OyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA2NDBjMTQxLjIyNjY2NyAwIDI1Ni0xMTQuNzczMzMzIDI1Ni0yNTZzLTExNC43NzMzMzMtMjU2LTI1Ni0yNTYtMjU2IDExNC43NzMzMzMtMjU2IDI1NiAxMTQuNzczMzMzIDI1NiAyNTYgMjU2bTAgNjRjLTE3Ni42NCAwLTMyMC0xNDMuMzYtMzIwLTMyMHMxNDMuMzYtMzIwIDMyMC0zMjAgMzIwIDE0My4zNiAzMjAgMzIwLTE0My4zNiAzMjAtMzIwIDMyMHpNNTY3Ljg5MzMzMyAzNzEuNjI2NjY3bC0xMDEuMTIgMTMwLjk4NjY2Ni05MS4zMDY2NjYtMjcwLjUwNjY2NiAxMDIuNCAxMzEuODQgMTA1LjgxMzMzMy0xMjAuNzQ2NjY3IDY0Ljg1MzMzMyAyOTIuNjkzMzMzLTgwLjY0LTE2NC4yNjY2NjZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LWM0IiB1bmljb2RlPSImIzU5MDIwOyIgZD0iTTUxMiA4MTAuNjY2NjY3aC0yMC40OGMtMi45ODY2NjctMC40MjY2NjctNS45NzMzMzMtMC44NTMzMzMtOC45Ni0wLjg1MzMzNGgtNi40Yy0yNy4zMDY2NjctMi45ODY2NjctNTQuMTg2NjY3LTcuNjgtODAuMjEzMzMzLTE0LjkzMzMzM2wxMi4zNzMzMzMtNjEuNDQgMzEuNTczMzMzIDYuNEEzNjkuMDY2NjY3IDM2OS4wNjY2NjcgMCAwIDAgNTEyIDc0Ny4wOTMzMzNoMTUuMzZsMTUuMzYtMS4yOGMyNC4zMi0yLjEzMzMzMyA0OC4yMTMzMzMtNi40IDcxLjI1MzMzMy0xMy4yMjY2NjZsMzAuNzItOC45NiAxNy40OTMzMzQgNjAuMTZjLTEyLjM3MzMzMyA0LjY5MzMzMy0yNS4xNzMzMzMgOC45Ni0zNy45NzMzMzQgMTIuMzczMzMzaC0yLjEzMzMzM3YwLjg1MzMzM2gtMi41NlY3OTcuODY2NjY3aC0yLjU2djAuODUzMzMzaC0xLjI4Yy0yMS43NiA1LjU0NjY2Ny00NC4zNzMzMzMgOS4zODY2NjctNjcuNDEzMzMzIDExLjUyLTExLjUyIDAuODUzMzMzLTIzLjQ2NjY2NyAxLjI4LTM1LjQxMzMzNCAxLjI4eiBtLTE3NS43ODY2NjctMzcuOTczMzM0Yy05LjgxMzMzMy00LjI2NjY2Ny0xOS4yLTguOTYtMjguNTg2NjY2LTE0LjA4LTUuOTczMzMzLTMuNDEzMzMzLTExLjUyLTYuNC0xNy4wNjY2NjctOS44MTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTAuNDI2NjY3bC0yLjEzMzMzMy0xLjcwNjY2NmgtMC44NTMzMzR2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzbC0yLjU2LTIuMTMzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzRoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0wLjQyNjY2N2wtNS45NzMzMzMtNC42OTMzMzRjLTE2LjY0LTEyLjM3MzMzMy0zMi40MjY2NjctMjUuNi00Ny4zNi00MC4xMDY2NjZsNDAuNTMzMzMzLTQ4LjIxMzMzNCAyNC4zMiAyMC40OGMxOC4zNDY2NjcgMTUuNzg2NjY3IDM4LjQgMjkuNDQgNTkuNzMzMzMzIDQwLjk2bDI4LjE2IDE1LjM2LTMwLjI5MzMzMyA1NS4wNHpNMTcxLjUyIDY0MC44NTMzMzNjLTYuNC04LjUzMzMzMy0xMi4zNzMzMzMtMTcuMDY2NjY3LTE4LjM0NjY2Ny0yNi4wMjY2NjYtNS4xMi04LjEwNjY2Ny05LjgxMzMzMy0xNi4yMTMzMzMtMTQuNTA2NjY2LTI0LjMydi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMS43MDY2NjdoLTAuNDI2NjY2di0zLjg0aC0wLjQyNjY2N3YtNS45NzMzMzNIMTM2LjUzMzMzM3YtMC44NTMzMzNoLTAuNDI2NjY2Yy0xLjI4LTIuNTYtMi4xMzMzMzMtNC42OTMzMzMtMi45ODY2NjctNi44MjY2Njd2LTIuNTZoLTAuNDI2NjY3Yy0xLjI4LTIuMTMzMzMzLTIuMTMzMzMzLTQuNjkzMzMzLTMuNDEzMzMzLTYuODI2NjY3di0yLjU2cy0xLjI4LTMuNDEzMzMzLTIuMTMzMzMzLTQuNjkzMzMzVjU0NC40MjY2NjdsLTEuMjgtMi45ODY2Njd2LTAuODUzMzMzcy0xLjI4LTIuOTg2NjY3LTEuNzA2NjY3LTQuNjkzMzM0Yy0zLjg0LTkuODEzMzMzLTcuMjUzMzMzLTIwLjA1MzMzMy0xMC4yNC0zMC4yOTMzMzNsNTguNDUzMzMzLTIyLjYxMzMzMyAxMS41MiAyOS44NjY2NjZjOC41MzMzMzMgMjIuNjEzMzMzIDE5LjYyNjY2NyA0My45NDY2NjcgMzIuODUzMzM0IDY0LjQyNjY2N2wxNy40OTMzMzMgMjYuODgtNTIuOTA2NjY3IDM0LjEzMzMzM3ogbS04MS40OTMzMzMtMTk0LjU2Yy0xLjcwNjY2Ny0xMC4yNC0yLjU2LTIwLjkwNjY2Ny0zLjQxMzMzNC0zMS41NzMzMzMgMC01Ljk3MzMzMy0wLjg1MzMzMy0xMS45NDY2NjctMC44NTMzMzMtMTcuOTJWMzU2LjI2NjY2N2MwLTguNTMzMzMzIDAuODUzMzMzLTE2LjY0IDEuNzA2NjY3LTI0LjMydi03LjY4YzEuMjgtMTEuOTQ2NjY3IDMuNDEzMzMzLTIzLjQ2NjY2NyA1LjU0NjY2Ni0zNC45ODY2NjdsNjIuMjkzMzM0IDguMTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzM2MtMi4xMzMzMzMgMTUuMzYtMi45ODY2NjcgMzEuMTQ2NjY3LTIuOTg2NjY3IDQ2LjkzMzMzMyAwIDguNTMzMzMzIDAgMTcuMDY2NjY3IDAuODUzMzM0IDI1LjZsMi4xMzMzMzMgMzItNjIuNzIgNC4yNjY2Njd6IG03OC45MzMzMzMtMTgzLjg5MzMzM2wtNTcuMTczMzMzLTI2LjAyNjY2N2MzLjg0LTkuODEzMzMzIDcuNjgtMTkuNjI2NjY3IDExLjk0NjY2Ni0yOS40NCAyLjEzMzMzMy00LjY5MzMzMyA0LjI2NjY2Ny05LjM4NjY2NyA2LjQtMTMuNjUzMzMzdi00LjI2NjY2N2gwLjQyNjY2N2M5LjgxMzMzMy0xOS4yIDIwLjQ4LTM3LjEyIDMyLjg1MzMzMy01NC4xODY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNjNi40LTguOTYgMTIuOC0xNy40OTMzMzMgMjAuMDUzMzMzLTI1LjZsNTAuNzczMzMzIDM3LjEyLTE4Ljc3MzMzMyAyNi4wMjY2NjZjLTE0LjA4IDE5LjYyNjY2Ny0yNi40NTMzMzMgNDAuNTMzMzMzLTM2LjY5MzMzMyA2Mi4yOTMzMzRsLTEzLjIyNjY2NyAyOS4wMTMzMzN6IG0xMDAuNjkzMzMzLTE0OS43NmwtMzcuNTQ2NjY2LTUwLjM0NjY2N2MxMi4zNzMzMzMtMTAuNjY2NjY3IDI1LjYtMjAuOTA2NjY3IDM5LjI1MzMzMy0zMC4yOTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDEuMjh2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjg1MzMzM2MxNy4wNjY2NjctMTEuOTQ2NjY3IDM0Ljk4NjY2Ny0yMi4xODY2NjcgNTMuNzYtMzEuMTQ2NjY3IDkuMzg2NjY3LTQuNjkzMzMzIDE5LjItOC45NiAyOS4wMTMzMzMtMTIuOGwyNi44OCA1Ni43NDY2NjctMjkuMDEzMzMzIDEzLjY1MzMzM2MtMjEuNzYgMTAuMjQtNDIuNjY2NjY3IDIzLjA0LTYxLjg2NjY2NyAzNy41NDY2NjdsLTI1LjYgMTkuMnogbTE1OS41NzMzMzQtODMuMmwtOC45Ni02Mi4yOTMzMzNjMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzMy01LjU0NjY2NyAxMC42NjY2NjctMS43MDY2NjcgMjAuOTA2NjY3LTIuNTYgMzEuNTczMzMzLTMuNDEzMzMzaDEyLjM3MzMzNFYtNDIuNjY2NjY3aDMzLjcwNjY2NmMxMy4yMjY2NjcgMC40MjY2NjcgMjYuNDUzMzMzIDEuNzA2NjY3IDM5LjI1MzMzNCAzLjQxMzMzNGwtMy40MTMzMzQgNjIuNzItMzItMS43MDY2NjdjLTYuODI2NjY3IDAtMTQuMDgtMC40MjY2NjctMjAuOTA2NjY2LTAuNDI2NjY3LTE3LjA2NjY2NyAwLTM0LjU2IDEuMjgtNTEuMiAzLjQxMzMzNGwtMzEuNTczMzM0IDQuNjkzMzMzeiBtMzAyLjA4IDY0bC0yNy4zMDY2NjctMTcuMDY2NjY3Yy0yMC40OC0xMi44LTQyLjI0LTIzLjQ2NjY2Ny02NC44NTMzMzMtMzJsLTI5Ljg2NjY2Ny0xMS4wOTMzMzMgMjIuMTg2NjY3LTU4Ljg4YzEwLjI0IDIuOTg2NjY3IDIwLjQ4IDYuNCAzMC4yOTMzMzMgMTAuMjQgMjYuODggMTAuMjQgNTIuNDggMjIuNjEzMzMzIDc2LjM3MzMzMyAzNy45NzMzMzMgOC45NiA1Ljk3MzMzMyAxNy45MiAxMS41MiAyNi40NTMzMzQgMTcuOTJsLTMzLjI4IDUzLjMzMzMzNHogbTExMi42NCAxNDAuOGwtMTUuNzg2NjY3LTI3LjczMzMzM2MtMTEuOTQ2NjY3LTIwLjkwNjY2Ny0yNi4wMjY2NjctNDAuOTYtNDEuODEzMzMzLTU5LjMwNjY2N2wtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YzcuNjggNy42OCAxNC45MzMzMzMgMTUuMzYgMjEuNzYgMjMuMDQgMy40MTMzMzMgNC4yNjY2NjcgNi44MjY2NjcgOC4xMDY2NjcgOS44MTMzMzMgMTIuMzczMzMzdjAuODUzMzM0aDAuNDI2NjY3bDIuMTMzMzMzIDIuOTg2NjY2aDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3VjEyOGgwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM0g4NTMuMzMzMzMzdjAuODUzMzMzbDIuNTYgMy44NHYwLjg1MzMzNGMxNC45MzMzMzMgMjAuOTA2NjY3IDI3LjczMzMzMyA0My4wOTMzMzMgMzguNCA2Ni4xMzMzMzNsLTU0LjYxMzMzMyAzMC43MnogbTMxLjE0NjY2NiAxNzcuNDkzMzMzdi0zMmMtMC44NTMzMzMtMjQuMzItMy40MTMzMzMtNDguNjQtOC41MzMzMzMtNzIuMTA2NjY2bC02LjgyNjY2Ny0zMS4xNDY2NjcgNjEuNDQtMTMuMjI2NjY3YzExLjUyIDM4LjQgMTcuNDkzMzMzIDc4LjkzMzMzMyAxNy40OTMzMzQgMTIxLjE3MzMzNCAwIDguOTYgMCAxNy45Mi0wLjg1MzMzNCAyNi40NTMzMzNsLTYyLjcyIDAuODUzMzMzeiBtLTIuMTMzMzMzIDIwMC4xMDY2NjdsLTU1LjQ2NjY2Ny0yOS40NCAxNC45MzMzMzQtMjguMTZjMTEuNTItMjEuMzMzMzMzIDIwLjQ4LTQzLjk0NjY2NyAyNy4zMDY2NjYtNjYuOTg2NjY3bDguOTYtMzAuNzIgNjAuMTYgMTcuOTJjLTIuNTYgMTIuMzczMzMzLTUuOTczMzMzIDI0LjMyLTkuMzg2NjY2IDM2LjI2NjY2N1Y1MTkuMjUzMzMzYy0zLjQxMzMzMyAxMC4yNC03LjI1MzMzMyAyMC4wNTMzMzMtMTEuMDkzMzM0IDI5Ljg2NjY2N1Y1NTcuNjUzMzMzYy04LjUzMzMzMyAxOS42MjY2NjctMTguMzQ2NjY3IDM3Ljk3MzMzMy0yOS44NjY2NjYgNTUuODkzMzM0eiBtLTE1My4xNzMzMzMgMTQ1LjQ5MzMzM2wtMzQuNTYtNTIuNDggMjYuODgtMTcuNDkzMzMzYzIwLjA1MzMzMy0xMy4yMjY2NjcgMzguODI2NjY3LTI4LjU4NjY2NyA1Ni4zMi00NS42NTMzMzNsMjIuNjEzMzMzLTIyLjYxMzMzNCA0NC4zNzMzMzMgNDQuMzczMzM0YTQyMy4xNjggNDIzLjE2OCAwIDAgMS04NS4zMzMzMzMgNzUuNTJoLTAuODUzMzMzdjAuODUzMzMzaC0xLjI4djAuODUzMzMzaC0wLjQyNjY2N2MtOC45NiA2LjQtMTcuOTIgMTEuOTQ2NjY3LTI3LjMwNjY2NyAxNy4wNjY2Njd6TTM0MC4wNTMzMzMgNjU0LjA4Yy04Ljk2LTUuNTQ2NjY3LTE3LjQ5MzMzMy0xMS45NDY2NjctMjYuMDI2NjY2LTE4LjM0NjY2Ny0xOC43NzMzMzMtMTQuOTMzMzMzLTM1Ljg0LTMxLjU3MzMzMy01MC43NzMzMzQtNDkuOTJoLTAuNDI2NjY2di0wLjg1MzMzM2gtMC44NTMzMzR2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM0gyNjAuMjY2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTAuODUzMzM0aC0wLjQyNjY2N3YtMS4yOGgtMC40MjY2NjZjLTcuNjgtMTAuMjQtMTQuOTMzMzMzLTIwLjkwNjY2Ny0yMS43Ni0zMmw0OS45Mi0zNy4xMiAxOS4yIDI1LjZjMTMuNjUzMzMzIDE4LjM0NjY2NyAyOS40NCAzNC41NiA0Ny4zNiA0OS4wNjY2NjdsMjUuMTczMzMzIDE5LjYyNjY2Ny0zOC44MjY2NjcgNDkuMDY2NjY2ek0yMDkuOTIgNDkwLjI0Yy04Ljk2LTI1LjYtMTQuOTMzMzMzLTUyLjkwNjY2Ny0xNy4wNjY2NjctODEuMDY2NjY3VjM3MS42MjY2NjdjMC0xMC42NjY2NjcgMS4yOC0yMS4zMzMzMzMgMi41Ni0zMkwyNTcuMjggMzQxLjMzMzMzM3YzOS4yNTMzMzRjLTAuNDI2NjY3IDIwLjQ4IDEuNzA2NjY3IDQwLjUzMzMzMyA2LjQgNjAuMTZsNy42OCAzMS4xNDY2NjYtNjAuNTg2NjY3IDE0LjUwNjY2N3ogbTU1Ljg5MzMzMy0xODMuNDY2NjY3bC01Ni43NDY2NjYtMjYuMDI2NjY2YzMuNDEzMzMzLTEwLjI0IDcuMjUzMzMzLTIwLjA1MzMzMyAxMS45NDY2NjYtMjkuNDQgMS4yOC0yLjU2IDIuMTMzMzMzLTUuMTIgMy40MTMzMzQtNy4yNTMzMzR2LTEuMjhoMC40MjY2NjZ2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMS43MDY2NjdoMC40MjY2NjZ2LTEuNzA2NjY3aDAuNDI2NjY3VjIyOC4yNjY2NjdoMC40MjY2Njd2LTEuNzA2NjY3aDAuNDI2NjY2di0xLjcwNjY2N2gwLjQyNjY2N3YtMS43MDY2NjZoMC44NTMzMzN2LTIuNTZoMC44NTMzMzR2LTEuMjhoMC40MjY2NjZ2LTAuODUzMzM0aDAuODUzMzM0di0xLjI4aDAuNDI2NjY2bDAuODUzMzM0LTEuMjh2LTAuODUzMzMzaDAuNDI2NjY2bDEuMjgtMi4xMzMzMzN2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjg1MzMzM3YtMC44NTMzMzNoMC40MjY2Njd2LTEuMjhoMC40MjY2Njd2LTAuODUzMzM0aDAuNDI2NjY2di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0xLjcwNjY2NmgwLjQyNjY2N2M0LjI2NjY2Ny01LjU0NjY2NyA4LjEwNjY2Ny0xMS4wOTMzMzMgMTIuOC0xNi4yMTMzMzQgNi44MjY2NjctOC41MzMzMzMgMTQuMDgtMTYuMjEzMzMzIDIxLjc2LTIzLjQ2NjY2Nmw0Ny43ODY2NjYgNDAuMTA2NjY2LTIwLjQ4IDI0Ljc0NjY2N2MtMTQuNTA2NjY3IDE3LjQ5MzMzMy0yNi44OCAzNi42OTMzMzMtMzYuMjY2NjY2IDU3LjZsLTEzLjIyNjY2NyAyOS4wMTMzMzN6IG0xMDAuNjkzMzM0LTEzNS42OGwtMjguNTg2NjY3LTU1LjQ2NjY2NmM5LjgxMzMzMy02LjQgMTkuNjI2NjY3LTExLjk0NjY2NyAzMC4yOTMzMzMtMTcuNDkzMzM0aDAuODUzMzM0di0wLjg1MzMzM2gxLjcwNjY2NnYtMC44NTMzMzNoMS43MDY2Njd2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDEuMjh2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzNGgxLjcwNjY2NmMxMy4yMjY2NjctNi40IDI2Ljg4LTExLjk0NjY2NyA0MS4zODY2NjctMTYuMjEzMzMzaDIuMTMzMzMzbDAuODUzMzM0LTAuODUzMzMzaDIuMTMzMzMzbDAuODUzMzMzLTAuODUzMzM0aDEuNzA2NjY3bDAuODUzMzMzLTAuODUzMzMzaDIuMTMzMzM0bDAuODUzMzMzLTAuODUzMzMzYzUuMTItMS4yOCAxMC4yNC0yLjU2IDE1Ljc4NjY2Ny0zLjg0IDEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny0zLjg0IDMxLjU3MzMzMy01LjEybDEyLjggNjEuMDEzMzMzLTMxLjE0NjY2NyA2LjRjLTIyLjE4NjY2NyA0LjY5MzMzMy00My45NDY2NjcgMTIuMzczMzMzLTY0IDIyLjYxMzMzM2wtMjguNTg2NjY2IDE0LjUwNjY2N3ogbTI4Ny41NzMzMzMtMi41NmwtMjguNTg2NjY3LTE0LjA4Yy0yMC40OC0xMC4yNC00Mi4yNC0xNy40OTMzMzMtNjQuNDI2NjY2LTIxLjc2bC0zMS41NzMzMzQtNS45NzMzMzMgMTEuOTQ2NjY3LTYxLjQ0YzEwLjY2NjY2NyAwLjg1MzMzMyAyMS4zMzMzMzMgMi41NiAzMS41NzMzMzMgNC4yNjY2NjcgMTcuOTIgMy40MTMzMzMgMzQuOTg2NjY3IDguNTMzMzMzIDUxLjYyNjY2NyAxNC41MDY2NjZsMS43MDY2NjcgMC44NTMzMzRoMC40MjY2NjZsMi45ODY2NjcgMS4yOGM4LjEwNjY2NyAzLjQxMzMzMyAxNi4yMTMzMzMgNi44MjY2NjcgMjMuODkzMzMzIDEwLjY2NjY2NiA5LjM4NjY2NyA0LjY5MzMzMyAxOC43NzMzMzMgOS44MTMzMzMgMjcuNzMzMzM0IDE1Ljc4NjY2N2wtMjcuNzMzMzM0IDU1Ljg5MzMzM3ogbTEwMi44MjY2NjcgMTMzLjk3MzMzNGwtMTMuNjUzMzM0LTI5LjAxMzMzNGMtOS44MTMzMzMtMjAuNDgtMjIuMTg2NjY3LTM5LjY4LTM3LjU0NjY2Ni01Ni43NDY2NjZsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmEzNTYuNDggMzU2LjQ4IDAgMCAxIDM4LjQgNDMuOTQ2NjY2djAuODUzMzM0aDAuODUzMzMzdjAuODUzMzMzaDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY3djEuMjhoMC44NTMzMzN2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MS43MDY2NjZoMC40MjY2NjZ2MS43MDY2NjdoMC40MjY2Njd2MS43MDY2NjdoMC40MjY2NjdjMTMuNjUzMzMzIDIwLjkwNjY2NyAyNC43NDY2NjcgNDMuMDkzMzMzIDMzLjI4IDY2Ljk4NjY2NmwtNTYuMzIgMjYuODh6IG01OC44OCAxODIuNjEzMzMzbC02MS4wMTMzMzQtMTMuNjUzMzMzIDYuODI2NjY3LTMxLjE0NjY2N2M0LjI2NjY2Ny0xOC4zNDY2NjcgNS45NzMzMzMtMzcuMTIgNS45NzMzMzMtNTUuODkzMzMzdi0xMS45NDY2NjdsLTEuMjgtMzIgNjIuMjkzMzM0LTIuOTg2NjY3YzEuNzA2NjY3IDEwLjI0IDIuNTYgMjAuOTA2NjY3IDIuOTg2NjY2IDMxLjU3MzMzNFY0MDEuNDkzMzMzYTMyMy44NCAzMjMuODQgMCAwIDEtMTUuNzg2NjY2IDg2LjYxMzMzNHogbS0xMjcuNTczMzM0IDE2Ni40bC0zOS4yNTMzMzMtNDguMjEzMzMzIDI0Ljc0NjY2Ny0yMC4wNTMzMzRjMTcuNDkzMzMzLTE0LjUwNjY2NyAzMy4yOC0zMS4xNDY2NjcgNDYuNTA2NjY2LTQ5LjQ5MzMzM2wxOC43NzMzMzQtMjYuMDI2NjY3IDUwLjc3MzMzMyAzNi4yNjY2NjdjLTUuMTIgOS4zODY2NjctMTEuMDkzMzMzIDE3LjkyLTE3LjA2NjY2NyAyNi44OC0xNi42NCAyMy40NjY2NjctMzYuMjY2NjY3IDQ0LjM3MzMzMy01OC4wMjY2NjYgNjIuMjkzMzMzLTguMTA2NjY3IDYuODI2NjY3LTE2LjY0IDEzLjIyNjY2Ny0yNS42IDE5LjJ6TTUxMiA3MDQuNDI2NjY3Yy04Ljk2IDAtMTcuOTIgMC0yNi40NTMzMzMtMS4yOGgtNi44MjY2Njd2LTAuODUzMzM0aC01Ljk3MzMzM3YtMC44NTMzMzNoLTQuNjkzMzM0di0wLjg1MzMzM2gtNS4xMmwtMC44NTMzMzMtMC44NTMzMzRoLTMuODR2LTAuODUzMzMzaC0zLjQxMzMzM2wtMC44NTMzMzQtMC44NTMzMzNoLTMuNDEzMzMzbC0wLjg1MzMzMy0wLjg1MzMzNGgtMi4xMzMzMzRsLTIuMTMzMzMzLTAuODUzMzMzaC0yLjk4NjY2N2wtMC44NTMzMzMtMC44NTMzMzNoLTIuMTMzMzMzdi0wLjg1MzMzNGgtMi45ODY2Njd2LTAuODUzMzMzaC0yLjk4NjY2N3YtMC44NTMzMzNoLTIuNTZ2LTAuODUzMzM0aC0yLjU2di0wLjg1MzMzM2gtMS4yOGMtMTAuMjQtMi45ODY2NjctMjAuNDgtNi40LTMwLjI5MzMzMy0xMC4yNGwxNi4yMTMzMzMtNjAuMTYgMzAuNzIgOC41MzMzMzNhMjU0LjI5MzMzMyAyNTQuMjkzMzMzIDAgMCAwIDY3LjQxMzMzNCA4Ljk2aDQuMjY2NjY2YzIzLjA0IDAgNDUuNjUzMzMzLTMuODQgNjcuNDEzMzM0LTEwLjI0bDMwLjcyLTguOTYgMTcuNDkzMzMzIDU5LjczMzMzNGMtOS44MTMzMzMgMy44NC0yMC4wNTMzMzMgNy42OC0zMC4yOTMzMzMgMTAuNjY2NjY2LTMuODQgMS4yOC03LjY4IDIuMTMzMzMzLTExLjUyIDIuOTg2NjY3aC0yLjEzMzMzNGwtMC44NTMzMzMgMC44NTMzMzNoLTIuMTMzMzMzbC0wLjg1MzMzNCAwLjg1MzMzNGgtMi4xMzMzMzNsLTAuODUzMzMzIDAuODUzMzMzaC0yLjk4NjY2N2MtMTEuMDkzMzMzIDIuOTg2NjY3LTIyLjYxMzMzMyA0LjY5MzMzMy0zNC4xMzMzMzMgNS45NzMzMzMtMTAuNjY2NjY3IDAuODUzMzMzLTIxLjMzMzMzMyAxLjcwNjY2Ny0zMiAxLjcwNjY2N3pNNTEyIDUwMC45MDY2NjdsMTA3LjUyLTE4Ni4wMjY2NjdINDA0LjkwNjY2N2wxMDcuNTIgMTg2LjAyNjY2N20wIDU5LjMwNjY2NmMtOC45NiAwLTE3LjQ5MzMzMy00LjI2NjY2Ny0yMi42MTMzMzQtMTMuMjI2NjY2TDM1My43MDY2NjcgMzExLjQ2NjY2N2MtMTAuMjQtMTcuNDkzMzMzIDIuNTYtMzkuMjUzMzMzIDIyLjYxMzMzMy0zOS4yNTMzMzRoMjcxLjc4NjY2N2MyMC4wNTMzMzMgMCAzMi44NTMzMzMgMjEuNzYgMjIuNjEzMzMzIDM5LjI1MzMzNGwtMTM2LjEwNjY2NyAyMzUuNTJhMjYuMzI1MzMzIDI2LjMyNTMzMyAwIDAgMS0yMi42MTMzMzMgMTMuMjI2NjY2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LWVycm9yIiB1bmljb2RlPSImIzU5MDIxOyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTU2Ny44OTMzMzMgMzcxLjYyNjY2N2wtMTAxLjEyIDEzMC45ODY2NjYtOTEuMzA2NjY2LTI3MC41MDY2NjYgMTAyLjQgMTMxLjg0IDEwNS44MTMzMzMtMTIwLjc0NjY2NyA2NC44NTMzMzMgMjkyLjY5MzMzMy04MC42NC0xNjQuMjY2NjY2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImxhbmUiIHVuaWNvZGU9IiYjNTkwMjI7IiBkPSJNODc0LjY2NjY2NyA2NjEuMzMzMzMzdi01NTQuNjY2NjY2aC03MjUuMzMzMzM0djU1NC42NjY2NjZoNzI1LjMzMzMzNE04OTYgNzI1LjMzMzMzM0gxMjhjLTIzLjQ2NjY2NyAwLTQyLjY2NjY2Ny0xOS4yLTQyLjY2NjY2Ny00Mi42NjY2NjZ2LTU5Ny4zMzMzMzRjMC0yMy40NjY2NjcgMTkuMi00Mi42NjY2NjcgNDIuNjY2NjY3LTQyLjY2NjY2Nmg3NjhjMjMuNDY2NjY3IDAgNDIuNjY2NjY3IDE5LjIgNDIuNjY2NjY3IDQyLjY2NjY2NlY2ODIuNjY2NjY3YzAgMjMuNDY2NjY3LTE5LjIgNDIuNjY2NjY3LTQyLjY2NjY2NyA0Mi42NjY2NjZ6TTI5OC42NjY2NjcgNTMuMzMzMzMzYy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJWNjgyLjY2NjY2N2MwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJzMzItMTQuNTA2NjY3IDMyLTMydi01OTcuMzMzMzM0YzAtMTcuNDkzMzMzLTE0LjUwNjY2Ny0zMi0zMi0zMnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtbiIgdW5pY29kZT0iJiM1OTAyNDsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhcnQtZXZlbnQtbm9uLWludGUxIiB1bmljb2RlPSImIzU5MDI1OyIgZD0iTTUxMiA4MTAuNjY2NjY3aC0yMC40OGMtMi45ODY2NjctMC40MjY2NjctNS45NzMzMzMtMC44NTMzMzMtOC45Ni0wLjg1MzMzNGgtNi40Yy0yNy4zMDY2NjctMi45ODY2NjctNTQuMTg2NjY3LTcuNjgtODAuMjEzMzMzLTE0LjkzMzMzM2wxMi4zNzMzMzMtNjEuNDQgMzEuNTczMzMzIDYuNEEzNjkuMDY2NjY3IDM2OS4wNjY2NjcgMCAwIDAgNTEyIDc0Ny4wOTMzMzNoMTUuMzZsMTUuMzYtMS4yOGMyNC4zMi0yLjEzMzMzMyA0OC4yMTMzMzMtNi40IDcxLjI1MzMzMy0xMy4yMjY2NjZsMzAuNzItOC45NiAxNy40OTMzMzQgNjAuMTZjLTEyLjM3MzMzMyA0LjY5MzMzMy0yNS4xNzMzMzMgOC45Ni0zNy45NzMzMzQgMTIuMzczMzMzaC0yLjEzMzMzM3YwLjg1MzMzM2gtMi41NlY3OTcuODY2NjY3aC0yLjU2djAuODUzMzMzaC0xLjI4Yy0yMS43NiA1LjU0NjY2Ny00NC4zNzMzMzMgOS4zODY2NjctNjcuNDEzMzMzIDExLjUyLTExLjUyIDAuODUzMzMzLTIzLjQ2NjY2NyAxLjI4LTM1LjQxMzMzNCAxLjI4eiBtLTE3NS43ODY2NjctMzcuOTczMzM0Yy05LjgxMzMzMy00LjI2NjY2Ny0xOS4yLTguOTYtMjguNTg2NjY2LTE0LjA4LTUuOTczMzMzLTMuNDEzMzMzLTExLjUyLTYuNC0xNy4wNjY2NjctOS44MTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTAuNDI2NjY3bC0yLjEzMzMzMy0xLjcwNjY2NmgtMC44NTMzMzR2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzbC0yLjU2LTIuMTMzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzRoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0wLjQyNjY2N2wtNS45NzMzMzMtNC42OTMzMzRjLTE2LjY0LTEyLjM3MzMzMy0zMi40MjY2NjctMjUuNi00Ny4zNi00MC4xMDY2NjZsNDAuNTMzMzMzLTQ4LjIxMzMzNCAyNC4zMiAyMC40OGMxOC4zNDY2NjcgMTUuNzg2NjY3IDM4LjQgMjkuNDQgNTkuNzMzMzMzIDQwLjk2bDI4LjE2IDE1LjM2LTMwLjI5MzMzMyA1NS4wNHpNMTcxLjUyIDY0MC44NTMzMzNjLTYuNC04LjUzMzMzMy0xMi4zNzMzMzMtMTcuMDY2NjY3LTE4LjM0NjY2Ny0yNi4wMjY2NjYtNS4xMi04LjEwNjY2Ny05LjgxMzMzMy0xNi4yMTMzMzMtMTQuNTA2NjY2LTI0LjMydi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMS43MDY2NjdoLTAuNDI2NjY2di0zLjg0aC0wLjQyNjY2N3YtNS45NzMzMzNIMTM2LjUzMzMzM3YtMC44NTMzMzNoLTAuNDI2NjY2Yy0xLjI4LTIuNTYtMi4xMzMzMzMtNC42OTMzMzMtMi45ODY2NjctNi44MjY2Njd2LTIuNTZoLTAuNDI2NjY3Yy0xLjI4LTIuMTMzMzMzLTIuMTMzMzMzLTQuNjkzMzMzLTMuNDEzMzMzLTYuODI2NjY3di0yLjU2cy0xLjI4LTMuNDEzMzMzLTIuMTMzMzMzLTQuNjkzMzMzVjU0NC40MjY2NjdsLTEuMjgtMi45ODY2Njd2LTAuODUzMzMzcy0xLjI4LTIuOTg2NjY3LTEuNzA2NjY3LTQuNjkzMzM0Yy0zLjg0LTkuODEzMzMzLTcuMjUzMzMzLTIwLjA1MzMzMy0xMC4yNC0zMC4yOTMzMzNsNTguNDUzMzMzLTIyLjYxMzMzMyAxMS41MiAyOS44NjY2NjZjOC41MzMzMzMgMjIuNjEzMzMzIDE5LjYyNjY2NyA0My45NDY2NjcgMzIuODUzMzM0IDY0LjQyNjY2N2wxNy40OTMzMzMgMjYuODgtNTIuOTA2NjY3IDM0LjEzMzMzM3ogbS04MS40OTMzMzMtMTk0LjU2Yy0xLjcwNjY2Ny0xMC4yNC0yLjU2LTIwLjkwNjY2Ny0zLjQxMzMzNC0zMS41NzMzMzMgMC01Ljk3MzMzMy0wLjg1MzMzMy0xMS45NDY2NjctMC44NTMzMzMtMTcuOTJWMzU2LjI2NjY2N2MwLTguNTMzMzMzIDAuODUzMzMzLTE2LjY0IDEuNzA2NjY3LTI0LjMydi03LjY4YzEuMjgtMTEuOTQ2NjY3IDMuNDEzMzMzLTIzLjQ2NjY2NyA1LjU0NjY2Ni0zNC45ODY2NjdsNjIuMjkzMzM0IDguMTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzM2MtMi4xMzMzMzMgMTUuMzYtMi45ODY2NjcgMzEuMTQ2NjY3LTIuOTg2NjY3IDQ2LjkzMzMzMyAwIDguNTMzMzMzIDAgMTcuMDY2NjY3IDAuODUzMzM0IDI1LjZsMi4xMzMzMzMgMzItNjIuNzIgNC4yNjY2Njd6IG03OC45MzMzMzMtMTgzLjg5MzMzM2wtNTcuMTczMzMzLTI2LjAyNjY2N2MzLjg0LTkuODEzMzMzIDcuNjgtMTkuNjI2NjY3IDExLjk0NjY2Ni0yOS40NCAyLjEzMzMzMy00LjY5MzMzMyA0LjI2NjY2Ny05LjM4NjY2NyA2LjQtMTMuNjUzMzMzdi00LjI2NjY2N2gwLjQyNjY2N2M5LjgxMzMzMy0xOS4yIDIwLjQ4LTM3LjEyIDMyLjg1MzMzMy01NC4xODY2NjZ2LTAuODUzMzM0aDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNjNi40LTguOTYgMTIuOC0xNy40OTMzMzMgMjAuMDUzMzMzLTI1LjZsNTAuNzczMzMzIDM3LjEyLTE4Ljc3MzMzMyAyNi4wMjY2NjZjLTE0LjA4IDE5LjYyNjY2Ny0yNi40NTMzMzMgNDAuNTMzMzMzLTM2LjY5MzMzMyA2Mi4yOTMzMzRsLTEzLjIyNjY2NyAyOS4wMTMzMzN6IG0xMDAuNjkzMzMzLTE0OS43NmwtMzcuNTQ2NjY2LTUwLjM0NjY2N2MxMi4zNzMzMzMtMTAuNjY2NjY3IDI1LjYtMjAuOTA2NjY3IDM5LjI1MzMzMy0zMC4yOTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDEuMjh2LTAuODUzMzM0aDEuMjh2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjg1MzMzM2MxNy4wNjY2NjctMTEuOTQ2NjY3IDM0Ljk4NjY2Ny0yMi4xODY2NjcgNTMuNzYtMzEuMTQ2NjY3IDkuMzg2NjY3LTQuNjkzMzMzIDE5LjItOC45NiAyOS4wMTMzMzMtMTIuOGwyNi44OCA1Ni43NDY2NjctMjkuMDEzMzMzIDEzLjY1MzMzM2MtMjEuNzYgMTAuMjQtNDIuNjY2NjY3IDIzLjA0LTYxLjg2NjY2NyAzNy41NDY2NjdsLTI1LjYgMTkuMnogbTE1OS41NzMzMzQtODMuMmwtOC45Ni02Mi4yOTMzMzNjMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTQuMjY2NjY3IDMxLjU3MzMzMy01LjU0NjY2NyAxMC42NjY2NjctMS43MDY2NjcgMjAuOTA2NjY3LTIuNTYgMzEuNTczMzMzLTMuNDEzMzMzaDEyLjM3MzMzNFYtNDIuNjY2NjY3aDMzLjcwNjY2NmMxMy4yMjY2NjcgMC40MjY2NjcgMjYuNDUzMzMzIDEuNzA2NjY3IDM5LjI1MzMzNCAzLjQxMzMzNGwtMy40MTMzMzQgNjIuNzItMzItMS43MDY2NjdjLTYuODI2NjY3IDAtMTQuMDgtMC40MjY2NjctMjAuOTA2NjY2LTAuNDI2NjY3LTE3LjA2NjY2NyAwLTM0LjU2IDEuMjgtNTEuMiAzLjQxMzMzNGwtMzEuNTczMzM0IDQuNjkzMzMzeiBtMzAyLjA4IDY0bC0yNy4zMDY2NjctMTcuMDY2NjY3Yy0yMC40OC0xMi44LTQyLjI0LTIzLjQ2NjY2Ny02NC44NTMzMzMtMzJsLTI5Ljg2NjY2Ny0xMS4wOTMzMzMgMjIuMTg2NjY3LTU4Ljg4YzEwLjI0IDIuOTg2NjY3IDIwLjQ4IDYuNCAzMC4yOTMzMzMgMTAuMjQgMjYuODggMTAuMjQgNTIuNDggMjIuNjEzMzMzIDc2LjM3MzMzMyAzNy45NzMzMzMgOC45NiA1Ljk3MzMzMyAxNy45MiAxMS41MiAyNi40NTMzMzQgMTcuOTJsLTMzLjI4IDUzLjMzMzMzNHogbTExMi42NCAxNDAuOGwtMTUuNzg2NjY3LTI3LjczMzMzM2MtMTEuOTQ2NjY3LTIwLjkwNjY2Ny0yNi4wMjY2NjctNDAuOTYtNDEuODEzMzMzLTU5LjMwNjY2N2wtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YzcuNjggNy42OCAxNC45MzMzMzMgMTUuMzYgMjEuNzYgMjMuMDQgMy40MTMzMzMgNC4yNjY2NjcgNi44MjY2NjcgOC4xMDY2NjcgOS44MTMzMzMgMTIuMzczMzMzdjAuODUzMzM0aDAuNDI2NjY3bDIuMTMzMzMzIDIuOTg2NjY2aDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3VjEyOGgwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM0g4NTMuMzMzMzMzdjAuODUzMzMzbDIuNTYgMy44NHYwLjg1MzMzNGMxNC45MzMzMzMgMjAuOTA2NjY3IDI3LjczMzMzMyA0My4wOTMzMzMgMzguNCA2Ni4xMzMzMzNsLTU0LjYxMzMzMyAzMC43MnogbTMxLjE0NjY2NiAxNzcuNDkzMzMzdi0zMmMtMC44NTMzMzMtMjQuMzItMy40MTMzMzMtNDguNjQtOC41MzMzMzMtNzIuMTA2NjY2bC02LjgyNjY2Ny0zMS4xNDY2NjcgNjEuNDQtMTMuMjI2NjY3YzExLjUyIDM4LjQgMTcuNDkzMzMzIDc4LjkzMzMzMyAxNy40OTMzMzQgMTIxLjE3MzMzNCAwIDguOTYgMCAxNy45Mi0wLjg1MzMzNCAyNi40NTMzMzNsLTYyLjcyIDAuODUzMzMzeiBtLTIuMTMzMzMzIDIwMC4xMDY2NjdsLTU1LjQ2NjY2Ny0yOS40NCAxNC45MzMzMzQtMjguMTZjMTEuNTItMjEuMzMzMzMzIDIwLjQ4LTQzLjk0NjY2NyAyNy4zMDY2NjYtNjYuOTg2NjY3bDguOTYtMzAuNzIgNjAuMTYgMTcuOTJjLTIuNTYgMTIuMzczMzMzLTUuOTczMzMzIDI0LjMyLTkuMzg2NjY2IDM2LjI2NjY2N1Y1MTkuMjUzMzMzYy0zLjQxMzMzMyAxMC4yNC03LjI1MzMzMyAyMC4wNTMzMzMtMTEuMDkzMzM0IDI5Ljg2NjY2N1Y1NTcuNjUzMzMzYy04LjUzMzMzMyAxOS42MjY2NjctMTguMzQ2NjY3IDM3Ljk3MzMzMy0yOS44NjY2NjYgNTUuODkzMzM0eiBtLTE1My4xNzMzMzMgMTQ1LjQ5MzMzM2wtMzQuNTYtNTIuNDggMjYuODgtMTcuNDkzMzMzYzIwLjA1MzMzMy0xMy4yMjY2NjcgMzguODI2NjY3LTI4LjU4NjY2NyA1Ni4zMi00NS42NTMzMzNsMjIuNjEzMzMzLTIyLjYxMzMzNCA0NC4zNzMzMzMgNDQuMzczMzM0YTQyMy4xNjggNDIzLjE2OCAwIDAgMS04NS4zMzMzMzMgNzUuNTJoLTAuODUzMzMzdjAuODUzMzMzaC0xLjI4djAuODUzMzMzaC0wLjQyNjY2N2MtOC45NiA2LjQtMTcuOTIgMTEuOTQ2NjY3LTI3LjMwNjY2NyAxNy4wNjY2Njd6TTUxMiA1MDAuOTA2NjY3bDEwNy41Mi0xODYuMDI2NjY3SDQwNC45MDY2NjdsMTA3LjUyIDE4Ni4wMjY2NjdtMCA1OS4zMDY2NjZjLTguOTYgMC0xNy40OTMzMzMtNC4yNjY2NjctMjIuNjEzMzM0LTEzLjIyNjY2NkwzNTMuNzA2NjY3IDMxMS40NjY2NjdjLTEwLjI0LTE3LjQ5MzMzMyAyLjU2LTM5LjI1MzMzMyAyMi42MTMzMzMtMzkuMjUzMzM0aDI3MS43ODY2NjdjMjAuMDUzMzMzIDAgMzIuODUzMzMzIDIxLjc2IDIyLjYxMzMzMyAzOS4yNTMzMzRsLTEzNi4xMDY2NjcgMjM1LjUyYTI2LjMyNTMzMyAyNi4zMjUzMzMgMCAwIDEtMjIuNjEzMzMzIDEzLjIyNjY2NnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsYW5lLWluc2VydC1iZWxvdyIgdW5pY29kZT0iJiM1OTAyNjsiIGQ9Ik04NjQgMjY0Ljk2SDE2MGMtMzYuMjY2NjY3IDAtNjUuNzA2NjY3IDI5LjQ0LTY1LjcwNjY2NyA2NS43MDY2Njd2MzYyLjY2NjY2NmMwIDM2LjI2NjY2NyAyOS40NCA2NS43MDY2NjcgNjUuNzA2NjY3IDY1LjcwNjY2N2g3MDRjMzYuMjY2NjY3IDAgNjUuNzA2NjY3LTI5LjQ0IDY1LjcwNjY2Ny02NS43MDY2Njd2LTM2Mi42NjY2NjZjMC0zNi4yNjY2NjctMjkuNDQtNjUuNzA2NjY3LTY1LjcwNjY2Ny02NS43MDY2Njd6IG0tMS43MDY2NjcgNDI4LjM3MzMzM2wtNzAyLjI5MzMzMy0xLjcwNjY2NiAxLjcwNjY2Ny0zNjAuOTYgNzAwLjU4NjY2NiAxLjcwNjY2NlY2OTMuMzMzMzMzek05NiAyNjUuMzg2NjY3aDY0di0xMDYuNjY2NjY3aC02NHpNODk4LjU2IDUzLjMzMzMzM0g3NTAuOTMzMzMzdjY0aDE0Ny42MjY2Njd2LTY0eiBtLTIwOC42NCAwaC0xNDcuMnY2NGgxNDcuMnYtNjR6IG0tMjA4LjY0IDBIMzM0LjA4djY0aDE0Ny4ydi02NHogbS0yMDguNjQgMEgxMjUuNDR2NjRoMTQ3LjJ2LTY0ek04NjQgMjY1LjM4NjY2N2g2NHYtMTA2LjY2NjY2N2gtNjR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZW5kLWV2ZW50LW5vbmUiIHVuaWNvZGU9IiYjNTkwMjc7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLXRocm93LWV2ZW50LXNpZ25hbCIgdW5pY29kZT0iJiM1OTAyODsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6TTQ4OS4zODY2NjcgNTQ2Ljk4NjY2N0wzNTMuMjggMzExLjQ2NjY2N2MtMTAuMjQtMTcuNDkzMzMzIDIuNTYtMzkuMjUzMzMzIDIyLjYxMzMzMy0zOS4yNTMzMzRoMjcxLjc4NjY2N2MyMC4wNTMzMzMgMCAzMi44NTMzMzMgMjEuNzYgMjIuNjEzMzMzIDM5LjI1MzMzNGwtMTM2LjEwNjY2NiAyMzUuNTJhMjYuMDI2NjY3IDI2LjAyNjY2NyAwIDAgMS00NS4yMjY2NjcgMHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZWNlaXZlLXRhc2siIHVuaWNvZGU9IiYjNTkwMzA7IiBkPSJNODc0LjY2NjY2NyA2NjEuMzMzMzMzdi01NTQuNjY2NjY2aC03MjUuMzMzMzM0djU1NC42NjY2NjZoNzI1LjMzMzMzNE04OTYgNzI1LjMzMzMzM0gxMjhjLTIzLjQ2NjY2NyAwLTQyLjY2NjY2Ny0xOS4yLTQyLjY2NjY2Ny00Mi42NjY2NjZ2LTU5Ny4zMzMzMzRjMC0yMy40NjY2NjcgMTkuMi00Mi42NjY2NjcgNDIuNjY2NjY3LTQyLjY2NjY2Nmg3NjhjMjMuNDY2NjY3IDAgNDIuNjY2NjY3IDE5LjIgNDIuNjY2NjY3IDQyLjY2NjY2NlY2ODIuNjY2NjY3YzAgMjMuNDY2NjY3LTE5LjIgNDIuNjY2NjY3LTQyLjY2NjY2NyA0Mi42NjY2NjZ6TTQ5MC4yNCAzNjQuOEgyMjcuNDEzMzMzYy0xOC4zNDY2NjcgMC0zMy4yOCAxNC45MzMzMzMtMzMuMjggMzMuMjhWNTgzLjI1MzMzM2MwIDE4LjM0NjY2NyAxNC45MzMzMzMgMzMuMjggMzMuMjggMzMuMjhoMjYzLjI1MzMzNGMxOC4zNDY2NjcgMCAzMy4yOC0xNC45MzMzMzMgMzMuMjgtMzMuMjh2LTE4NS42YzAtMTguMzQ2NjY3LTE0LjkzMzMzMy0zMy4yOC0zMy4yOC0zMy4yOHogbS0yNTcuNzA2NjY3IDM4LjRoMjUyLjU4NjY2N3YxNzQuOTMzMzMzSDIzMi41MzMzMzN2LTE3NC45MzMzMzN6TTM1OC44MjY2NjcgNDYxLjY1MzMzM2EyMC45MDY2NjcgMjAuOTA2NjY3IDAgMCAwLTExLjk0NjY2NyAzLjg0TDIxNy42IDU2NS43NmExOS4wNzIgMTkuMDcyIDAgMCAwLTMuNDEzMzMzIDI2Ljg4YzYuNCA4LjUzMzMzMyAxOC43NzMzMzMgOS44MTMzMzMgMjYuODggMy40MTMzMzNsMTI5LjI4LTEwMC4yNjY2NjZhMTkuMDcyIDE5LjA3MiAwIDAgMC0xMS45NDY2NjctMzQuMTMzMzM0ek0zNTguODI2NjY3IDQ2MS42NTMzMzNjLTUuNTQ2NjY3IDAtMTEuNTIgMi41Ni0xNS4zNiA3LjI1MzMzNC02LjQgOC41MzMzMzMtNS4xMiAyMC40OCAzLjQxMzMzMyAyNi44OGwxMjkuMjggMTAwLjI2NjY2NmM4LjUzMzMzMyA2LjQgMjAuNDggNS4xMiAyNi44OC0zLjQxMzMzMyA2LjQtOC41MzMzMzMgNS4xMi0yMC40OC0zLjQxMzMzMy0yNi44OGwtMTI5LjI4LTEwMC4yNjY2NjdjLTMuNDEzMzMzLTIuNTYtNy42OC0zLjg0LTExLjk0NjY2Ny0zLjg0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC10ZXJtaW5hdGUiIHVuaWNvZGU9IiYjNTkwMzI7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiAzODRtLTE3MC42NjY2NjcgMGExNzAuNjY2NjY3IDE3MC42NjY2NjcgMCAxIDEgMzQxLjMzMzMzNCAwIDE3MC42NjY2NjcgMTcwLjY2NjY2NyAwIDEgMS0zNDEuMzMzMzM0IDBaIiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm91bmRhcnktZXZlbnQtc2lnbmFsIiB1bmljb2RlPSImIzU5MDM0OyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA2NDBjMTQxLjIyNjY2NyAwIDI1Ni0xMTQuNzczMzMzIDI1Ni0yNTZzLTExNC43NzMzMzMtMjU2LTI1Ni0yNTYtMjU2IDExNC43NzMzMzMtMjU2IDI1NiAxMTQuNzczMzMzIDI1NiAyNTYgMjU2bTAgNjRjLTE3Ni42NCAwLTMyMC0xNDMuMzYtMzIwLTMyMHMxNDMuMzYtMzIwIDMyMC0zMjAgMzIwIDE0My4zNiAzMjAgMzIwLTE0My4zNiAzMjAtMzIwIDMyMHpNNTEyIDUwMC45MDY2NjdsMTA3LjUyLTE4Ni4wMjY2NjdINDA0LjkwNjY2N2wxMDcuNTIgMTg2LjAyNjY2N20wIDU5LjMwNjY2NmMtOC45NiAwLTE3LjQ5MzMzMy00LjI2NjY2Ny0yMi42MTMzMzQtMTMuMjI2NjY2TDM1My43MDY2NjcgMzExLjQ2NjY2N2MtMTAuMjQtMTcuNDkzMzMzIDIuNTYtMzkuMjUzMzMzIDIyLjYxMzMzMy0zOS4yNTMzMzRoMjcxLjc4NjY2N2MyMC4wNTMzMzMgMCAzMi44NTMzMzMgMjEuNzYgMjIuNjEzMzMzIDM5LjI1MzMzNGwtMTM2LjEwNjY2NyAyMzUuNTJhMjYuMzI1MzMzIDI2LjMyNTMzMyAwIDAgMS0yMi42MTMzMzMgMTMuMjI2NjY2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InNjcmlwdCIgdW5pY29kZT0iJiM1OTAxODsiIGQ9Ik02OTMuNzYgNzA0Yy0zOC44MjY2NjctNDQuOC02OC42OTMzMzMtMTAxLjEyLTY4LjY5MzMzMy0xNjcuNjggMC05My40NCA2MC4xNi0xNDIuMDggMTA4LjM3MzMzMy0xODEuMzMzMzMzIDQ5LjQ5MzMzMy00MC4xMDY2NjcgODguMzItNzEuNjggODguMzItMTUxLjA0IDAtMzAuMjkzMzMzLTU1LjQ2NjY2Ny03My44MTMzMzMtOTkuNDEzMzMzLTk3LjI4SDM2OS4wNjY2NjdjMjEuNzYgMjUuNiAzOC40IDUzLjc2IDQ5LjA2NjY2NiA4NC45MDY2NjYgMzcuMTIgMTA2LjY2NjY2Ny00NS42NTMzMzMgMTc5LjItMTA1LjgxMzMzMyAyMzIuMTA2NjY3QzI0NS4zMzMzMzMgNDgyLjU2IDIxNC42MTMzMzMgNTE2LjI2NjY2NyAyMjYuMTMzMzMzIDU2NC4wNTMzMzNjMzEuNTczMzMzIDg3Ljg5MzMzMyAxMTYuNDggMTI4Ljg1MzMzMyAxNDIuOTMzMzM0IDEzOS45NDY2NjdoMzI0LjY5MzMzM004MzcuMTIgNzY4SDM1Ny41NDY2NjdTMjEzLjMzMzMzMyA3MjEuNDkzMzMzIDE2NS4xMiA1ODIuODI2NjY3Yy00Ny4zNi0xNzcuNDkzMzMzIDI0MC42NC0yMzEuNjggMTkyLjQyNjY2Ny0zNzAuMzQ2NjY3LTI3LjczMzMzMy04MC4yMTMzMzMtMTAzLjY4LTEyNC41ODY2NjctMTYyLjEzMzMzNC0xNDcuNjI2NjY3LTEyLjM3MzMzMy00LjY5MzMzMy04LjUzMzMzMy0yMi4xODY2NjcgNC42OTMzMzQtMjIuMTg2NjY2aDUzNy4xNzMzMzNzMTQ4LjQ4IDY4LjY5MzMzMyAxNDguNDggMTYxLjI4YzAgMjAxLjM4NjY2Ny0xOTYuNjkzMzMzIDE5My43MDY2NjctMTk2LjY5MzMzMyAzMzIuOCAwIDk5LjQxMzMzMyA5OC45ODY2NjcgMTc1LjM2IDE1NC44OCAyMTAuMzQ2NjY2IDEwLjI0IDYuNCA1LjU0NjY2NyAyMS4zMzMzMzMtNi44MjY2NjcgMjEuMzMzMzM0ek01NDQgNTQ5LjU0NjY2N2gtMjEzLjMzMzMzM2MtMTQuNTA2NjY3IDAtMjYuNDUzMzMzIDExLjk0NjY2Ny0yNi40NTMzMzQgMjYuNDUzMzMzczExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzM0IDI2LjQ1MzMzM2gyMTMuMzMzMzMzYzE0LjUwNjY2NyAwIDI2LjQ1MzMzMy0xMS45NDY2NjcgMjYuNDUzMzMzLTI2LjQ1MzMzM3MtMTEuOTQ2NjY3LTI2LjQ1MzMzMy0yNi40NTMzMzMtMjYuNDUzMzMzek01NDQgNDM1LjYyNjY2N2gtMTcwLjY2NjY2N2MtMTQuNTA2NjY3IDAtMjYuNDUzMzMzIDExLjk0NjY2Ny0yNi40NTMzMzMgMjYuNDUzMzMzczExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzMzIDI2LjQ1MzMzM2gxNzAuNjY2NjY3YzE0LjUwNjY2NyAwIDI2LjQ1MzMzMy0xMS45NDY2NjcgMjYuNDUzMzMzLTI2LjQ1MzMzM3MtMTEuOTQ2NjY3LTI2LjQ1MzMzMy0yNi40NTMzMzMtMjYuNDUzMzMzek02MjkuMzMzMzMzIDMyMS43MDY2NjdoLTEyOGMtMTQuNTA2NjY3IDAtMjYuNDUzMzMzIDExLjk0NjY2Ny0yNi40NTMzMzMgMjYuNDUzMzMzczExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzMzIDI2LjQ1MzMzM2gxMjhjMTQuNTA2NjY3IDAgMjYuNDUzMzMzLTExLjk0NjY2NyAyNi40NTMzMzQtMjYuNDUzMzMzcy0xMS45NDY2NjctMjYuNDUzMzMzLTI2LjQ1MzMzNC0yNi40NTMzMzN6TTcxNC42NjY2NjcgMjA4LjIxMzMzM2gtMjEzLjMzMzMzNGMtMTQuNTA2NjY3IDAtMjYuNDUzMzMzIDExLjk0NjY2Ny0yNi40NTMzMzMgMjYuNDUzMzM0czExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzMzIDI2LjQ1MzMzM2gyMTMuMzMzMzM0YzE0LjUwNjY2NyAwIDI2LjQ1MzMzMy0xMS45NDY2NjcgMjYuNDUzMzMzLTI2LjQ1MzMzM3MtMTEuOTQ2NjY3LTI2LjQ1MzMzMy0yNi40NTMzMzMtMjYuNDUzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC1zaWduYWwiIHVuaWNvZGU9IiYjNTkwMzU7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTQ4OS4zODY2NjcgNTQ2Ljk4NjY2N0wzNTMuMjggMzExLjQ2NjY2N2MtMTAuMjQtMTcuNDkzMzMzIDIuNTYtMzkuMjUzMzMzIDIyLjYxMzMzMy0zOS4yNTMzMzRoMjcxLjc4NjY2N2MyMC4wNTMzMzMgMCAzMi44NTMzMzMgMjEuNzYgMjIuNjEzMzMzIDM5LjI1MzMzNGwtMTM2LjEwNjY2NiAyMzUuNTJhMjYuMDI2NjY3IDI2LjAyNjY2NyAwIDAgMS00NS4yMjY2NjcgMHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1zaWduYWwiIHVuaWNvZGU9IiYjNTkwMzY7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDUwMC45MDY2NjdsMTA3LjUyLTE4Ni4wMjY2NjdINDA0LjkwNjY2N2wxMDcuNTIgMTg2LjAyNjY2N20wIDU5LjMwNjY2NmMtOC45NiAwLTE3LjQ5MzMzMy00LjI2NjY2Ny0yMi42MTMzMzQtMTMuMjI2NjY2TDM1My43MDY2NjcgMzExLjQ2NjY2N2MtMTAuMjQtMTcuNDkzMzMzIDIuNTYtMzkuMjUzMzMzIDIyLjYxMzMzMy0zOS4yNTMzMzRoMjcxLjc4NjY2N2MyMC4wNTMzMzMgMCAzMi44NTMzMzMgMjEuNzYgMjIuNjEzMzMzIDM5LjI1MzMzNGwtMTM2LjEwNjY2NyAyMzUuNTJhMjYuMzI1MzMzIDI2LjMyNTMzMyAwIDAgMS0yMi42MTMzMzMgMTMuMjI2NjY2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9Imxvb3AtbWFya2VyIiB1bmljb2RlPSImIzU5MDM3OyIgZD0iTTU1NC42NjY2NjctMzJjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnMxNC41MDY2NjcgMzIgMzIgMzJjMTk0LjEzMzMzMyAwIDM1MiAxNTcuODY2NjY3IDM1MiAzNTJTNzQ4LjggNzM2IDU1NC42NjY2NjcgNzM2IDIwMi42NjY2NjcgNTc4LjEzMzMzMyAyMDIuNjY2NjY3IDM4NGMwLTUzLjc2IDExLjk0NjY2Ny0xMDUuMzg2NjY3IDM0Ljk4NjY2Ni0xNTMuMTczMzMzIDcuNjgtMTUuNzg2NjY3IDEuMjgtMzQuOTg2NjY3LTE0LjkzMzMzMy00Mi42NjY2NjctMTUuNzg2NjY3LTcuNjgtMzQuOTg2NjY3LTAuODUzMzMzLTQyLjY2NjY2NyAxNC45MzMzMzNhNDE1LjA2MTMzMyA0MTUuMDYxMzMzIDAgMCAwLTQxLjM4NjY2NiAxODEuMzMzMzM0YzAgMjI5LjEyIDE4Ni40NTMzMzMgNDE1LjU3MzMzMyA0MTYgNDE1LjU3MzMzM3M0MTYtMTg2LjQ1MzMzMyA0MTYtNDE2LTE4Ni40NTMzMzMtNDE2LTQxNi00MTZ6TTI0Ny4wNCAxMDIuODI2NjY3Yy0yLjU2IDAtNS4xMiAwLTcuNjggMC44NTMzMzNhMzIgMzIgMCAwIDAtMjMuNDY2NjY3IDM4LjgyNjY2N2w1MC43NzMzMzQgMjA3LjM2YTMyIDMyIDAgMSAwIDYyLjI5MzMzMy0xNS4zNmwtNTAuNzczMzMzLTIwNy4zNmMtMy40MTMzMzMtMTQuNTA2NjY3LTE2LjY0LTI0LjMyLTMxLjE0NjY2Ny0yNC4zMnpNMjQ2LjYxMzMzMyAxMDIuODI2NjY3Yy01LjU0NjY2NyAwLTExLjA5MzMzMyAxLjI4LTE1Ljc4NjY2NiA0LjI2NjY2NmwtMTg0Ljc0NjY2NyAxMDYuNjY2NjY3YTMxLjY1ODY2NyAzMS42NTg2NjcgMCAwIDAtMTEuNTIgNDMuNTJjOC45NiAxNS4zNiAyOC41ODY2NjcgMjAuNDggNDMuNTIgMTEuNTJsMTg0Ljc0NjY2Ny0xMDYuNjY2NjY3YTMxLjgyOTMzMyAzMS44MjkzMzMgMCAxIDAtMTYuMjEzMzM0LTU5LjMwNjY2NnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1jb21wZW5zYSIgdW5pY29kZT0iJiM1OTAzODsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek00NTIuMjY2NjY3IDQzMy40OTMzMzN2LTk4Ljk4NjY2NkwzODcuNDEzMzMzIDM4NGw2NC44NTMzMzQgNDkuNDkzMzMzbTI1LjYgNjkuMTJjLTMuNDEzMzMzIDAtNy4yNTMzMzMtMS4yOC0xMC4yNC0zLjQxMzMzM2wtMTMyLjY5MzMzNC0xMDEuMTJjLTguOTYtNi44MjY2NjctOC45Ni0yMC4wNTMzMzMgMC0yNi44OGwxMzIuNjkzMzM0LTEwMS4xMmMyLjk4NjY2Ny0yLjU2IDYuODI2NjY3LTMuNDEzMzMzIDEwLjI0LTMuNDEzMzMzIDguOTYgMCAxNy4wNjY2NjcgNi44MjY2NjcgMTcuMDY2NjY2IDE3LjA2NjY2NlY0ODYuNGMwIDEwLjI0LTguMTA2NjY3IDE3LjA2NjY2Ny0xNy4wNjY2NjYgMTcuMDY2NjY3ek02MTguNjY2NjY3IDQzMy40OTMzMzN2LTk4Ljk4NjY2Nkw1NTMuODEzMzMzIDM4NGw2NC44NTMzMzQgNDkuNDkzMzMzbTI1LjYgNjkuMTJjLTMuNDEzMzMzIDAtNy4yNTMzMzMtMS4yOC0xMC4yNC0zLjQxMzMzM2wtMTMyLjY5MzMzNC0xMDEuMTJjLTguOTYtNi44MjY2NjctOC45Ni0yMC4wNTMzMzMgMC0yNi44OGwxMzIuNjkzMzM0LTEwMS4xMmMyLjk4NjY2Ny0yLjU2IDYuODI2NjY3LTMuNDEzMzMzIDEwLjI0LTMuNDEzMzMzIDguOTYgMCAxNy4wNjY2NjcgNi44MjY2NjcgMTcuMDY2NjY2IDE3LjA2NjY2NlY0ODYuNGMwIDEwLjI0LTguMTA2NjY3IDE3LjA2NjY2Ny0xNy4wNjY2NjYgMTcuMDY2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImdhdGV3YXktY29tcGxleCIgdW5pY29kZT0iJiM1OTA0MDsiIGQ9Ik01MTIgNzY3LjU3MzMzM0w4OTUuNTczMzMzIDM4NCA1MTIgMC40MjY2NjcgMTI4LjQyNjY2NyAzODQgNTEyIDc2Ny41NzMzMzNtMCA3NS4wOTMzMzRjLTkuMzg2NjY3IDAtMTkuMi0zLjg0LTI2LjQ1MzMzMy0xMS4wOTMzMzRsLTQyMS4xMi00MjEuMTJhMzcuMTIgMzcuMTIgMCAwIDEgMC01Mi40OGw0MjEuNTQ2NjY2LTQyMS41NDY2NjZhMzcuMTIgMzcuMTIgMCAwIDEgNTIuOTA2NjY3IDBsNDIxLjU0NjY2NyA0MjEuNTQ2NjY2YTM3LjEyIDM3LjEyIDAgMCAxIDAgNTIuNDhsLTQyMS45NzMzMzQgNDIxLjEyYTM3LjEyIDM3LjEyIDAgMCAxLTI2LjQ1MzMzMyAxMS4wOTMzMzR6TTY4Mi42NjY2NjcgMzU3LjU0NjY2N0gzNDEuMzMzMzMzYy0xNC45MzMzMzMgMC0yNi40NTMzMzMgMTEuOTQ2NjY3LTI2LjQ1MzMzMyAyNi40NTMzMzNzMTEuOTQ2NjY3IDI2LjQ1MzMzMyAyNi40NTMzMzMgMjYuNDUzMzMzaDM0MS4zMzMzMzRjMTQuOTMzMzMzIDAgMjYuNDUzMzMzLTExLjk0NjY2NyAyNi40NTMzMzMtMjYuNDUzMzMzcy0xMS45NDY2NjctMjYuNDUzMzMzLTI2LjQ1MzMzMy0yNi40NTMzMzN6TTUxMiAxODYuODhjLTE0LjkzMzMzMyAwLTI2LjQ1MzMzMyAxMS45NDY2NjctMjYuNDUzMzMzIDI2LjQ1MzMzM1Y1NTQuNjY2NjY3YzAgMTQuNTA2NjY3IDExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzMzIDI2LjQ1MzMzM3MyNi40NTMzMzMtMTEuOTQ2NjY3IDI2LjQ1MzMzMy0yNi40NTMzMzN2LTM0MS4zMzMzMzRjMC0xNC41MDY2NjctMTEuOTQ2NjY3LTI2LjQ1MzMzMy0yNi40NTMzMzMtMjYuNDUzMzMzek02MzIuNzQ2NjY3IDIzNi44YTI2LjQ1MzMzMyAyNi40NTMzMzMgMCAwIDAtMTguNzczMzM0IDcuNjhMMzcyLjQ4IDQ4NS45NzMzMzNhMjYuNzk0NjY3IDI2Ljc5NDY2NyAwIDAgMCAwIDM3LjU0NjY2N2MxMC4yNCAxMC4yNCAyNy4zMDY2NjcgMTAuMjQgMzcuNTQ2NjY3IDBsMjQxLjQ5MzMzMy0yNDEuNDkzMzMzYzEwLjI0LTEwLjI0IDEwLjI0LTI3LjMwNjY2NyAwLTM3LjU0NjY2N2EyNi40NTMzMzMgMjYuNDUzMzMzIDAgMCAwLTE4Ljc3MzMzMy03LjY4ek0zOTEuMjUzMzMzIDIzNi44YTI2LjQ1MzMzMyAyNi40NTMzMzMgMCAwIDAtMTguNzczMzMzIDcuNjggMjYuNzk0NjY3IDI2Ljc5NDY2NyAwIDAgMCAwIDM3LjU0NjY2N2wyNDEuNDkzMzMzIDI0MS40OTMzMzNjMTAuMjQgMTAuMjQgMjcuMzA2NjY3IDEwLjI0IDM3LjU0NjY2NyAwczEwLjI0LTI3LjMwNjY2NyAwLTM3LjU0NjY2N2wtMjQxLjQ5MzMzMy0yNDEuNDkzMzMzYTI2LjQ1MzMzMyAyNi40NTMzMzMgMCAwIDAtMTguNzczMzM0LTcuNjh6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LWMxNSIgdW5pY29kZT0iJiM1OTA0MTsiIGQ9Ik01MTIgODEwLjY2NjY2N2gtMjAuNDhjLTIuOTg2NjY3LTAuNDI2NjY3LTUuOTczMzMzLTAuODUzMzMzLTguOTYtMC44NTMzMzRoLTYuNGMtMjcuMzA2NjY3LTIuOTg2NjY3LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDcuMDkzMzMzaDE1LjM2bDE1LjM2LTEuMjhjMjQuMzItMi4xMzMzMzMgNDguMjEzMzMzLTYuNCA3MS4yNTMzMzMtMTMuMjI2NjY2bDMwLjcyLTguOTYgMTcuNDkzMzM0IDYwLjE2Yy0xMi4zNzMzMzMgNC42OTMzMzMtMjUuMTczMzMzIDguOTYtMzcuOTczMzM0IDEyLjM3MzMzM2gtMi4xMzMzMzN2MC44NTMzMzNoLTIuNTZWNzk3Ljg2NjY2N2gtMi41NnYwLjg1MzMzM2gtMS4yOGMtMjEuNzYgNS41NDY2NjctNDQuMzczMzMzIDkuMzg2NjY3LTY3LjQxMzMzMyAxMS41Mi0xMS41MiAwLjg1MzMzMy0yMy40NjY2NjcgMS4yOC0zNS40MTMzMzQgMS4yOHogbS0xNzUuNzg2NjY3LTM3Ljk3MzMzNGMtOS44MTMzMzMtNC4yNjY2NjctMTkuMi04Ljk2LTI4LjU4NjY2Ni0xNC4wOC01Ljk3MzMzMy0zLjQxMzMzMy0xMS41Mi02LjQtMTcuMDY2NjY3LTkuODEzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0wLjQyNjY2N2wtMi4xMzMzMzMtMS43MDY2NjZoLTAuODUzMzM0di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM2wtMi41Ni0yLjEzMzMzM2gtMC44NTMzMzR2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjdsLTUuOTczMzMzLTQuNjkzMzM0Yy0xNi42NC0xMi4zNzMzMzMtMzIuNDI2NjY3LTI1LjYtNDcuMzYtNDAuMTA2NjY2bDQwLjUzMzMzMy00OC4yMTMzMzQgMjQuMzIgMjAuNDhjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzOC40IDI5LjQ0IDU5LjczMzMzMyA0MC45NmwyOC4xNiAxNS4zNi0zMC4yOTMzMzMgNTUuMDR6TTE3MS41MiA2NDAuODUzMzMzYy02LjQtOC41MzMzMzMtMTIuMzczMzMzLTE3LjA2NjY2Ny0xOC4zNDY2NjctMjYuMDI2NjY2LTUuMTItOC4xMDY2NjctOS44MTMzMzMtMTYuMjEzMzMzLTE0LjUwNjY2Ni0yNC4zMnYtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTEuNzA2NjY3aC0wLjQyNjY2NnYtMy44NGgtMC40MjY2Njd2LTUuOTczMzMzSDEzNi41MzMzMzN2LTAuODUzMzMzaC0wLjQyNjY2NmMtMS4yOC0yLjU2LTIuMTMzMzMzLTQuNjkzMzMzLTIuOTg2NjY3LTYuODI2NjY3di0yLjU2aC0wLjQyNjY2N2MtMS4yOC0yLjEzMzMzMy0yLjEzMzMzMy00LjY5MzMzMy0zLjQxMzMzMy02LjgyNjY2N3YtMi41NnMtMS4yOC0zLjQxMzMzMy0yLjEzMzMzMy00LjY5MzMzM1Y1NDQuNDI2NjY3bC0xLjI4LTIuOTg2NjY3di0wLjg1MzMzM3MtMS4yOC0yLjk4NjY2Ny0xLjcwNjY2Ny00LjY5MzMzNGMtMy44NC05LjgxMzMzMy03LjI1MzMzMy0yMC4wNTMzMzMtMTAuMjQtMzAuMjkzMzMzbDU4LjQ1MzMzMy0yMi42MTMzMzMgMTEuNTIgMjkuODY2NjY2YzguNTMzMzMzIDIyLjYxMzMzMyAxOS42MjY2NjcgNDMuOTQ2NjY3IDMyLjg1MzMzNCA2NC40MjY2NjdsMTcuNDkzMzMzIDI2Ljg4LTUyLjkwNjY2NyAzNC4xMzMzMzN6IG0tODEuNDkzMzMzLTE5NC41NmMtMS43MDY2NjctMTAuMjQtMi41Ni0yMC45MDY2NjctMy40MTMzMzQtMzEuNTczMzMzIDAtNS45NzMzMzMtMC44NTMzMzMtMTEuOTQ2NjY3LTAuODUzMzMzLTE3LjkyVjM1Ni4yNjY2NjdjMC04LjUzMzMzMyAwLjg1MzMzMy0xNi42NCAxLjcwNjY2Ny0yNC4zMnYtNy42OGMxLjI4LTExLjk0NjY2NyAzLjQxMzMzMy0yMy40NjY2NjcgNS41NDY2NjYtMzQuOTg2NjY3bDYyLjI5MzMzNCA4LjEwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzNjLTIuMTMzMzMzIDE1LjM2LTIuOTg2NjY3IDMxLjE0NjY2Ny0yLjk4NjY2NyA0Ni45MzMzMzMgMCA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwLjg1MzMzNCAyNS42bDIuMTMzMzMzIDMyLTYyLjcyIDQuMjY2NjY3eiBtNzguOTMzMzMzLTE4My44OTMzMzNsLTU3LjE3MzMzMy0yNi4wMjY2NjdjMy44NC05LjgxMzMzMyA3LjY4LTE5LjYyNjY2NyAxMS45NDY2NjYtMjkuNDQgMi4xMzMzMzMtNC42OTMzMzMgNC4yNjY2NjctOS4zODY2NjcgNi40LTEzLjY1MzMzM3YtNC4yNjY2NjdoMC40MjY2NjdjOS44MTMzMzMtMTkuMiAyMC40OC0zNy4xMiAzMi44NTMzMzMtNTQuMTg2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzYzYuNC04Ljk2IDEyLjgtMTcuNDkzMzMzIDIwLjA1MzMzMy0yNS42bDUwLjc3MzMzMyAzNy4xMi0xOC43NzMzMzMgMjYuMDI2NjY2Yy0xNC4wOCAxOS42MjY2NjctMjYuNDUzMzMzIDQwLjUzMzMzMy0zNi42OTMzMzMgNjIuMjkzMzM0bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzMy0xNDkuNzZsLTM3LjU0NjY2Ni01MC4zNDY2NjdjMTIuMzczMzMzLTEwLjY2NjY2NyAyNS42LTIwLjkwNjY2NyAzOS4yNTMzMzMtMzAuMjkzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gxLjI4di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC44NTMzMzNjMTcuMDY2NjY3LTExLjk0NjY2NyAzNC45ODY2NjctMjIuMTg2NjY3IDUzLjc2LTMxLjE0NjY2NyA5LjM4NjY2Ny00LjY5MzMzMyAxOS4yLTguOTYgMjkuMDEzMzMzLTEyLjhsMjYuODggNTYuNzQ2NjY3LTI5LjAxMzMzMyAxMy42NTMzMzNjLTIxLjc2IDEwLjI0LTQyLjY2NjY2NyAyMy4wNC02MS44NjY2NjcgMzcuNTQ2NjY3bC0yNS42IDE5LjJ6IG0xNTkuNTczMzM0LTgzLjJsLTguOTYtNjIuMjkzMzMzYzEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzMtNS41NDY2NjcgMTAuNjY2NjY3LTEuNzA2NjY3IDIwLjkwNjY2Ny0yLjU2IDMxLjU3MzMzMy0zLjQxMzMzM2gxMi4zNzMzMzRWLTQyLjY2NjY2N2gzMy43MDY2NjZjMTMuMjI2NjY3IDAuNDI2NjY3IDI2LjQ1MzMzMyAxLjcwNjY2NyAzOS4yNTMzMzQgMy40MTMzMzRsLTMuNDEzMzM0IDYyLjcyLTMyLTEuNzA2NjY3Yy02LjgyNjY2NyAwLTE0LjA4LTAuNDI2NjY3LTIwLjkwNjY2Ni0wLjQyNjY2Ny0xNy4wNjY2NjcgMC0zNC41NiAxLjI4LTUxLjIgMy40MTMzMzRsLTMxLjU3MzMzNCA0LjY5MzMzM3ogbTMwMi4wOCA2NGwtMjcuMzA2NjY3LTE3LjA2NjY2N2MtMjAuNDgtMTIuOC00Mi4yNC0yMy40NjY2NjctNjQuODUzMzMzLTMybC0yOS44NjY2NjctMTEuMDkzMzMzIDIyLjE4NjY2Ny01OC44OGMxMC4yNCAyLjk4NjY2NyAyMC40OCA2LjQgMzAuMjkzMzMzIDEwLjI0IDI2Ljg4IDEwLjI0IDUyLjQ4IDIyLjYxMzMzMyA3Ni4zNzMzMzMgMzcuOTczMzMzIDguOTYgNS45NzMzMzMgMTcuOTIgMTEuNTIgMjYuNDUzMzM0IDE3LjkybC0zMy4yOCA1My4zMzMzMzR6IG0xMTIuNjQgMTQwLjhsLTE1Ljc4NjY2Ny0yNy43MzMzMzNjLTExLjk0NjY2Ny0yMC45MDY2NjctMjYuMDI2NjY3LTQwLjk2LTQxLjgxMzMzMy01OS4zMDY2NjdsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmM3LjY4IDcuNjggMTQuOTMzMzMzIDE1LjM2IDIxLjc2IDIzLjA0IDMuNDEzMzMzIDQuMjY2NjY3IDYuODI2NjY3IDguMTA2NjY3IDkuODEzMzMzIDEyLjM3MzMzM3YwLjg1MzMzNGgwLjQyNjY2N2wyLjEzMzMzMyAyLjk4NjY2NmgwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N1YxMjhoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNIODUzLjMzMzMzM3YwLjg1MzMzM2wyLjU2IDMuODR2MC44NTMzMzRjMTQuOTMzMzMzIDIwLjkwNjY2NyAyNy43MzMzMzMgNDMuMDkzMzMzIDM4LjQgNjYuMTMzMzMzbC01NC42MTMzMzMgMzAuNzJ6IG0zMS4xNDY2NjYgMTc3LjQ5MzMzM3YtMzJjLTAuODUzMzMzLTI0LjMyLTMuNDEzMzMzLTQ4LjY0LTguNTMzMzMzLTcyLjEwNjY2NmwtNi44MjY2NjctMzEuMTQ2NjY3IDYxLjQ0LTEzLjIyNjY2N2MxMS41MiAzOC40IDE3LjQ5MzMzMyA3OC45MzMzMzMgMTcuNDkzMzM0IDEyMS4xNzMzMzQgMCA4Ljk2IDAgMTcuOTItMC44NTMzMzQgMjYuNDUzMzMzbC02Mi43MiAwLjg1MzMzM3ogbS0yLjEzMzMzMyAyMDAuMTA2NjY3bC01NS40NjY2NjctMjkuNDQgMTQuOTMzMzM0LTI4LjE2YzExLjUyLTIxLjMzMzMzMyAyMC40OC00My45NDY2NjcgMjcuMzA2NjY2LTY2Ljk4NjY2N2w4Ljk2LTMwLjcyIDYwLjE2IDE3LjkyYy0yLjU2IDEyLjM3MzMzMy01Ljk3MzMzMyAyNC4zMi05LjM4NjY2NiAzNi4yNjY2NjdWNTE5LjI1MzMzM2MtMy40MTMzMzMgMTAuMjQtNy4yNTMzMzMgMjAuMDUzMzMzLTExLjA5MzMzNCAyOS44NjY2NjdWNTU3LjY1MzMzM2MtOC41MzMzMzMgMTkuNjI2NjY3LTE4LjM0NjY2NyAzNy45NzMzMzMtMjkuODY2NjY2IDU1Ljg5MzMzNHogbS0xNTMuMTczMzMzIDE0NS40OTMzMzNsLTM0LjU2LTUyLjQ4IDI2Ljg4LTE3LjQ5MzMzM2MyMC4wNTMzMzMtMTMuMjI2NjY3IDM4LjgyNjY2Ny0yOC41ODY2NjcgNTYuMzItNDUuNjUzMzMzbDIyLjYxMzMzMy0yMi42MTMzMzQgNDQuMzczMzMzIDQ0LjM3MzMzNGE0MjMuMTY4IDQyMy4xNjggMCAwIDEtODUuMzMzMzMzIDc1LjUyaC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMC40MjY2NjdjLTguOTYgNi40LTE3LjkyIDExLjk0NjY2Ny0yNy4zMDY2NjcgMTcuMDY2NjY3ek0zNDAuMDUzMzMzIDY1NC4wOGMtOC45Ni01LjU0NjY2Ny0xNy40OTMzMzMtMTEuOTQ2NjY3LTI2LjAyNjY2Ni0xOC4zNDY2NjctMTguNzczMzMzLTE0LjkzMzMzMy0zNS44NC0zMS41NzMzMzMtNTAuNzczMzM0LTQ5LjkyaC0wLjQyNjY2NnYtMC44NTMzMzNoLTAuODUzMzM0di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNIMjYwLjI2NjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0wLjg1MzMzNGgtMC40MjY2Njd2LTEuMjhoLTAuNDI2NjY2Yy03LjY4LTEwLjI0LTE0LjkzMzMzMy0yMC45MDY2NjctMjEuNzYtMzJsNDkuOTItMzcuMTIgMTkuMiAyNS42YzEzLjY1MzMzMyAxOC4zNDY2NjcgMjkuNDQgMzQuNTYgNDcuMzYgNDkuMDY2NjY3bDI1LjE3MzMzMyAxOS42MjY2NjctMzguODI2NjY3IDQ5LjA2NjY2NnpNMjA5LjkyIDQ5MC4yNGMtOC45Ni0yNS42LTE0LjkzMzMzMy01Mi45MDY2NjctMTcuMDY2NjY3LTgxLjA2NjY2N1YzNzEuNjI2NjY3YzAtMTAuNjY2NjY3IDEuMjgtMjEuMzMzMzMzIDIuNTYtMzJMMjU3LjI4IDM0MS4zMzMzMzN2MzkuMjUzMzM0Yy0wLjQyNjY2NyAyMC40OCAxLjcwNjY2NyA0MC41MzMzMzMgNi40IDYwLjE2bDcuNjggMzEuMTQ2NjY2LTYwLjU4NjY2NyAxNC41MDY2Njd6IG01NS44OTMzMzMtMTgzLjQ2NjY2N2wtNTYuNzQ2NjY2LTI2LjAyNjY2NmMzLjQxMzMzMy0xMC4yNCA3LjI1MzMzMy0yMC4wNTMzMzMgMTEuOTQ2NjY2LTI5LjQ0IDEuMjgtMi41NiAyLjEzMzMzMy01LjEyIDMuNDEzMzM0LTcuMjUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTEuNzA2NjY3aDAuNDI2NjY2di0xLjcwNjY2N2gwLjQyNjY2N1YyMjguMjY2NjY3aDAuNDI2NjY3di0xLjcwNjY2N2gwLjQyNjY2NnYtMS43MDY2NjdoMC40MjY2Njd2LTEuNzA2NjY2aDAuODUzMzMzdi0yLjU2aDAuODUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzNGgwLjg1MzMzNHYtMS4yOGgwLjQyNjY2NmwwLjg1MzMzNC0xLjI4di0wLjg1MzMzM2gwLjQyNjY2NmwxLjI4LTIuMTMzMzMzdi0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDAuNDI2NjY3di0xLjI4aDAuNDI2NjY3di0wLjg1MzMzNGgwLjQyNjY2NnYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMS43MDY2NjZoMC40MjY2NjdjNC4yNjY2NjctNS41NDY2NjcgOC4xMDY2NjctMTEuMDkzMzMzIDEyLjgtMTYuMjEzMzM0IDYuODI2NjY3LTguNTMzMzMzIDE0LjA4LTE2LjIxMzMzMyAyMS43Ni0yMy40NjY2NjZsNDcuNzg2NjY2IDQwLjEwNjY2Ni0yMC40OCAyNC43NDY2NjdjLTE0LjUwNjY2NyAxNy40OTMzMzMtMjYuODggMzYuNjkzMzMzLTM2LjI2NjY2NiA1Ny42bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzNC0xMzUuNjhsLTI4LjU4NjY2Ny01NS40NjY2NjZjOS44MTMzMzMtNi40IDE5LjYyNjY2Ny0xMS45NDY2NjcgMzAuMjkzMzMzLTE3LjQ5MzMzNGgwLjg1MzMzNHYtMC44NTMzMzNoMS43MDY2NjZ2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gxLjI4di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS43MDY2NjZjMTMuMjI2NjY3LTYuNCAyNi44OC0xMS45NDY2NjcgNDEuMzg2NjY3LTE2LjIxMzMzM2gyLjEzMzMzM2wwLjg1MzMzNC0wLjg1MzMzM2gyLjEzMzMzM2wwLjg1MzMzMy0wLjg1MzMzNGgxLjcwNjY2N2wwLjg1MzMzMy0wLjg1MzMzM2gyLjEzMzMzNGwwLjg1MzMzMy0wLjg1MzMzM2M1LjEyLTEuMjggMTAuMjQtMi41NiAxNS43ODY2NjctMy44NCAxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctMy44NCAzMS41NzMzMzMtNS4xMmwxMi44IDYxLjAxMzMzMy0zMS4xNDY2NjcgNi40Yy0yMi4xODY2NjcgNC42OTMzMzMtNDMuOTQ2NjY3IDEyLjM3MzMzMy02NCAyMi42MTMzMzNsLTI4LjU4NjY2NiAxNC41MDY2Njd6IG0yODcuNTczMzMzLTIuNTZsLTI4LjU4NjY2Ny0xNC4wOGMtMjAuNDgtMTAuMjQtNDIuMjQtMTcuNDkzMzMzLTY0LjQyNjY2Ni0yMS43NmwtMzEuNTczMzM0LTUuOTczMzMzIDExLjk0NjY2Ny02MS40NGMxMC42NjY2NjcgMC44NTMzMzMgMjEuMzMzMzMzIDIuNTYgMzEuNTczMzMzIDQuMjY2NjY3IDE3LjkyIDMuNDEzMzMzIDM0Ljk4NjY2NyA4LjUzMzMzMyA1MS42MjY2NjcgMTQuNTA2NjY2bDEuNzA2NjY3IDAuODUzMzM0aDAuNDI2NjY2bDIuOTg2NjY3IDEuMjhjOC4xMDY2NjcgMy40MTMzMzMgMTYuMjEzMzMzIDYuODI2NjY3IDIzLjg5MzMzMyAxMC42NjY2NjYgOS4zODY2NjcgNC42OTMzMzMgMTguNzczMzMzIDkuODEzMzMzIDI3LjczMzMzNCAxNS43ODY2NjdsLTI3LjczMzMzNCA1NS44OTMzMzN6IG0xMDIuODI2NjY3IDEzMy45NzMzMzRsLTEzLjY1MzMzNC0yOS4wMTMzMzRjLTkuODEzMzMzLTIwLjQ4LTIyLjE4NjY2Ny0zOS42OC0zNy41NDY2NjYtNTYuNzQ2NjY2bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZhMzU2LjQ4IDM1Ni40OCAwIDAgMSAzOC40IDQzLjk0NjY2NnYwLjg1MzMzNGgwLjg1MzMzM3YwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2N3YxLjI4aDAuODUzMzMzdjAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djEuNzA2NjY2aDAuNDI2NjY2djEuNzA2NjY3aDAuNDI2NjY3djEuNzA2NjY3aDAuNDI2NjY3YzEzLjY1MzMzMyAyMC45MDY2NjcgMjQuNzQ2NjY3IDQzLjA5MzMzMyAzMy4yOCA2Ni45ODY2NjZsLTU2LjMyIDI2Ljg4eiBtNTguODggMTgyLjYxMzMzM2wtNjEuMDEzMzM0LTEzLjY1MzMzMyA2LjgyNjY2Ny0zMS4xNDY2NjdjNC4yNjY2NjctMTguMzQ2NjY3IDUuOTczMzMzLTM3LjEyIDUuOTczMzMzLTU1Ljg5MzMzM3YtMTEuOTQ2NjY3bC0xLjI4LTMyIDYyLjI5MzMzNC0yLjk4NjY2N2MxLjcwNjY2NyAxMC4yNCAyLjU2IDIwLjkwNjY2NyAyLjk4NjY2NiAzMS41NzMzMzRWNDAxLjQ5MzMzM2EzMjMuODQgMzIzLjg0IDAgMCAxLTE1Ljc4NjY2NiA4Ni42MTMzMzR6IG0tMTI3LjU3MzMzNCAxNjYuNGwtMzkuMjUzMzMzLTQ4LjIxMzMzMyAyNC43NDY2NjctMjAuMDUzMzM0YzE3LjQ5MzMzMy0xNC41MDY2NjcgMzMuMjgtMzEuMTQ2NjY3IDQ2LjUwNjY2Ni00OS40OTMzMzNsMTguNzczMzM0LTI2LjAyNjY2NyA1MC43NzMzMzMgMzYuMjY2NjY3Yy01LjEyIDkuMzg2NjY3LTExLjA5MzMzMyAxNy45Mi0xNy4wNjY2NjcgMjYuODgtMTYuNjQgMjMuNDY2NjY3LTM2LjI2NjY2NyA0NC4zNzMzMzMtNTguMDI2NjY2IDYyLjI5MzMzMy04LjEwNjY2NyA2LjgyNjY2Ny0xNi42NCAxMy4yMjY2NjctMjUuNiAxOS4yek01MTIgNzA0LjQyNjY2N2MtOC45NiAwLTE3LjkyIDAtMjYuNDUzMzMzLTEuMjhoLTYuODI2NjY3di0wLjg1MzMzNGgtNS45NzMzMzN2LTAuODUzMzMzaC00LjY5MzMzNHYtMC44NTMzMzNoLTUuMTJsLTAuODUzMzMzLTAuODUzMzM0aC0zLjg0di0wLjg1MzMzM2gtMy40MTMzMzNsLTAuODUzMzM0LTAuODUzMzMzaC0zLjQxMzMzM2wtMC44NTMzMzMtMC44NTMzMzRoLTIuMTMzMzM0bC0yLjEzMzMzMy0wLjg1MzMzM2gtMi45ODY2NjdsLTAuODUzMzMzLTAuODUzMzMzaC0yLjEzMzMzM3YtMC44NTMzMzRoLTIuOTg2NjY3di0wLjg1MzMzM2gtMi45ODY2Njd2LTAuODUzMzMzaC0yLjU2di0wLjg1MzMzNGgtMi41NnYtMC44NTMzMzNoLTEuMjhjLTEwLjI0LTIuOTg2NjY3LTIwLjQ4LTYuNC0zMC4yOTMzMzMtMTAuMjRsMTYuMjEzMzMzLTYwLjE2IDMwLjcyIDguNTMzMzMzYTI1NC4yOTMzMzMgMjU0LjI5MzMzMyAwIDAgMCA2Ny40MTMzMzQgOC45Nmg0LjI2NjY2NmMyMy4wNCAwIDQ1LjY1MzMzMy0zLjg0IDY3LjQxMzMzNC0xMC4yNGwzMC43Mi04Ljk2IDE3LjQ5MzMzMyA1OS43MzMzMzRjLTkuODEzMzMzIDMuODQtMjAuMDUzMzMzIDcuNjgtMzAuMjkzMzMzIDEwLjY2NjY2Ni0zLjg0IDEuMjgtNy42OCAyLjEzMzMzMy0xMS41MiAyLjk4NjY2N2gtMi4xMzMzMzRsLTAuODUzMzMzIDAuODUzMzMzaC0yLjEzMzMzM2wtMC44NTMzMzQgMC44NTMzMzRoLTIuMTMzMzMzbC0wLjg1MzMzMyAwLjg1MzMzM2gtMi45ODY2NjdjLTExLjA5MzMzMyAyLjk4NjY2Ny0yMi42MTMzMzMgNC42OTMzMzMtMzQuMTMzMzMzIDUuOTczMzMzLTEwLjY2NjY2NyAwLjg1MzMzMy0yMS4zMzMzMzMgMS43MDY2NjctMzIgMS43MDY2Njd6TTYxNy4zODY2NjcgMjE3LjZINDA3LjA0Yy0xMC42NjY2NjcgMC0xOS4yIDguNTMzMzMzLTE5LjIgMTkuMnYyOTQuNGMwIDEwLjY2NjY2NyA4LjUzMzMzMyAxOS4yIDE5LjIgMTkuMmgyMTAuMzQ2NjY3YzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ydi0yOTQuNGMwLTEwLjY2NjY2Ny04LjUzMzMzMy0xOS4yLTE5LjItMTkuMnpNNDI2LjI0IDI1NmgxNzEuOTQ2NjY3VjUxMkg0MjYuMjR2LTI1NnpNNTU4LjkzMzMzMyA0MzIuNjRoLTkzLjQ0Yy0xMC42NjY2NjcgMC0xOS4yIDguNTMzMzMzLTE5LjIgMTkuMnM4LjUzMzMzMyAxOS4yIDE5LjIgMTkuMmg5My40NGMxMC42NjY2NjcgMCAxOS4yLTguNTMzMzMzIDE5LjItMTkuMnMtOC41MzMzMzMtMTkuMi0xOS4yLTE5LjJ6TTU1OC45MzMzMzMgMzY0LjhoLTkzLjQ0Yy0xMC42NjY2NjcgMC0xOS4yIDguNTMzMzMzLTE5LjIgMTkuMnM4LjUzMzMzMyAxOS4yIDE5LjIgMTkuMmg5My40NGMxMC42NjY2NjcgMCAxOS4yLTguNTMzMzMzIDE5LjItMTkuMnMtOC41MzMzMzMtMTkuMi0xOS4yLTE5LjJ6TTU1OC45MzMzMzMgMjk2Ljk2aC05My40NGMtMTAuNjY2NjY3IDAtMTkuMiA4LjUzMzMzMy0xOS4yIDE5LjJzOC41MzMzMzMgMTkuMiAxOS4yIDE5LjJoOTMuNDRjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJzLTguNTMzMzMzLTE5LjItMTkuMi0xOS4yeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImRhdGEtb3V0cHV0IiB1bmljb2RlPSImIzU5MDQzOyIgZD0iTTgwOS44MTMzMzMgNTIwLjk2aC0yMTQuMTg2NjY2Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJWNzY3LjE0NjY2N2g2NHYtMTgyLjE4NjY2N2gxODIuMTg2NjY2di02NHpNODEwLjY2NjY2NyAxMC42NjY2NjdIMjEzLjMzMzMzM2MtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjc2OGMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJoMzgzLjE0NjY2N2M4LjUzMzMzMyAwIDE2LjY0LTMuNDEzMzMzIDIyLjYxMzMzMy05LjM4NjY2N2wyMTQuMTg2NjY3LTIxNC4xODY2NjZjNS45NzMzMzMtNS45NzMzMzMgOS4zODY2NjctMTQuMDggOS4zODY2NjctMjIuNjEzMzM0VjQyLjY2NjY2N2MwLTE3LjQ5MzMzMy0xNC41MDY2NjctMzItMzItMzJ6IG0tNTY1LjMzMzMzNCA2NGg1MzMuMzMzMzM0VjU0MC41ODY2NjdsLTE5NS40MTMzMzQgMTk1LjQxMzMzM0gyNDUuMzMzMzMzdi02NjEuMzMzMzMzek00MTAuODggNjkwLjc3MzMzM1Y2MzUuNzMzMzMzSDI5OC42NjY2Njd2LTQ3Ljc4NjY2NmgxMTIuMjEzMzMzdi01NS4wNGw4NC4wNTMzMzMgNzguOTMzMzMzLTg0LjA1MzMzMyA3OC45MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LWM3LWJhayIgdW5pY29kZT0iJiM1OTA0NjsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6TTY0MCAzNTJIMzg0Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJzMTQuNTA2NjY3IDMyIDMyIDMyaDI1NmMxNy40OTMzMzMgMCAzMi0xNC41MDY2NjcgMzItMzJzLTE0LjUwNjY2Ny0zMi0zMi0zMnpNNTEyIDIyNGMtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjUxMmMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJzMzItMTQuNTA2NjY3IDMyLTMydi0yNTZjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImludGVybWVkaWF0ZS1ldmVudC1jMTEiIHVuaWNvZGU9IiYjNTkwMTY7IiBkPSJNNTEyIDgxMC42NjY2NjdoLTIwLjQ4Yy0yLjk4NjY2Ny0wLjQyNjY2Ny01Ljk3MzMzMy0wLjg1MzMzMy04Ljk2LTAuODUzMzM0aC02LjRjLTI3LjMwNjY2Ny0yLjk4NjY2Ny01NC4xODY2NjctNy42OC04MC4yMTMzMzMtMTQuOTMzMzMzbDEyLjM3MzMzMy02MS40NCAzMS41NzMzMzMgNi40QTM2OS4wNjY2NjcgMzY5LjA2NjY2NyAwIDAgMCA1MTIgNzQ3LjA5MzMzM2gxNS4zNmwxNS4zNi0xLjI4YzI0LjMyLTIuMTMzMzMzIDQ4LjIxMzMzMy02LjQgNzEuMjUzMzMzLTEzLjIyNjY2NmwzMC43Mi04Ljk2IDE3LjQ5MzMzNCA2MC4xNmMtMTIuMzczMzMzIDQuNjkzMzMzLTI1LjE3MzMzMyA4Ljk2LTM3Ljk3MzMzNCAxMi4zNzMzMzNoLTIuMTMzMzMzdjAuODUzMzMzaC0yLjU2Vjc5Ny44NjY2NjdoLTIuNTZ2MC44NTMzMzNoLTEuMjhjLTIxLjc2IDUuNTQ2NjY3LTQ0LjM3MzMzMyA5LjM4NjY2Ny02Ny40MTMzMzMgMTEuNTItMTEuNTIgMC44NTMzMzMtMjMuNDY2NjY3IDEuMjgtMzUuNDEzMzM0IDEuMjh6IG0tMTc1Ljc4NjY2Ny0zNy45NzMzMzRjLTkuODEzMzMzLTQuMjY2NjY3LTE5LjItOC45Ni0yOC41ODY2NjYtMTQuMDgtNS45NzMzMzMtMy40MTMzMzMtMTEuNTItNi40LTE3LjA2NjY2Ny05LjgxMzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMC40MjY2NjdsLTIuMTMzMzMzLTEuNzA2NjY2aC0wLjg1MzMzNHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzNsLTIuNTYtMi4xMzMzMzNoLTAuODUzMzM0di0wLjg1MzMzNGgtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuNDI2NjY3bC01Ljk3MzMzMy00LjY5MzMzNGMtMTYuNjQtMTIuMzczMzMzLTMyLjQyNjY2Ny0yNS42LTQ3LjM2LTQwLjEwNjY2Nmw0MC41MzMzMzMtNDguMjEzMzM0IDI0LjMyIDIwLjQ4YzE4LjM0NjY2NyAxNS43ODY2NjcgMzguNCAyOS40NCA1OS43MzMzMzMgNDAuOTZsMjguMTYgMTUuMzYtMzAuMjkzMzMzIDU1LjA0ek0xNzEuNTIgNjQwLjg1MzMzM2MtNi40LTguNTMzMzMzLTEyLjM3MzMzMy0xNy4wNjY2NjctMTguMzQ2NjY3LTI2LjAyNjY2Ni01LjEyLTguMTA2NjY3LTkuODEzMzMzLTE2LjIxMzMzMy0xNC41MDY2NjYtMjQuMzJ2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0xLjcwNjY2N2gtMC40MjY2NjZ2LTMuODRoLTAuNDI2NjY3di01Ljk3MzMzM0gxMzYuNTMzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjZjLTEuMjgtMi41Ni0yLjEzMzMzMy00LjY5MzMzMy0yLjk4NjY2Ny02LjgyNjY2N3YtMi41NmgtMC40MjY2NjdjLTEuMjgtMi4xMzMzMzMtMi4xMzMzMzMtNC42OTMzMzMtMy40MTMzMzMtNi44MjY2Njd2LTIuNTZzLTEuMjgtMy40MTMzMzMtMi4xMzMzMzMtNC42OTMzMzNWNTQ0LjQyNjY2N2wtMS4yOC0yLjk4NjY2N3YtMC44NTMzMzNzLTEuMjgtMi45ODY2NjctMS43MDY2NjctNC42OTMzMzRjLTMuODQtOS44MTMzMzMtNy4yNTMzMzMtMjAuMDUzMzMzLTEwLjI0LTMwLjI5MzMzM2w1OC40NTMzMzMtMjIuNjEzMzMzIDExLjUyIDI5Ljg2NjY2NmM4LjUzMzMzMyAyMi42MTMzMzMgMTkuNjI2NjY3IDQzLjk0NjY2NyAzMi44NTMzMzQgNjQuNDI2NjY3bDE3LjQ5MzMzMyAyNi44OC01Mi45MDY2NjcgMzQuMTMzMzMzeiBtLTgxLjQ5MzMzMy0xOTQuNTZjLTEuNzA2NjY3LTEwLjI0LTIuNTYtMjAuOTA2NjY3LTMuNDEzMzM0LTMxLjU3MzMzMyAwLTUuOTczMzMzLTAuODUzMzMzLTExLjk0NjY2Ny0wLjg1MzMzMy0xNy45MlYzNTYuMjY2NjY3YzAtOC41MzMzMzMgMC44NTMzMzMtMTYuNjQgMS43MDY2NjctMjQuMzJ2LTcuNjhjMS4yOC0xMS45NDY2NjcgMy40MTMzMzMtMjMuNDY2NjY3IDUuNTQ2NjY2LTM0Ljk4NjY2N2w2Mi4yOTMzMzQgOC4xMDY2NjctNC4yNjY2NjcgMzEuNTczMzMzYy0yLjEzMzMzMyAxNS4zNi0yLjk4NjY2NyAzMS4xNDY2NjctMi45ODY2NjcgNDYuOTMzMzMzIDAgOC41MzMzMzMgMCAxNy4wNjY2NjcgMC44NTMzMzQgMjUuNmwyLjEzMzMzMyAzMi02Mi43MiA0LjI2NjY2N3ogbTc4LjkzMzMzMy0xODMuODkzMzMzbC01Ny4xNzMzMzMtMjYuMDI2NjY3YzMuODQtOS44MTMzMzMgNy42OC0xOS42MjY2NjcgMTEuOTQ2NjY2LTI5LjQ0IDIuMTMzMzMzLTQuNjkzMzMzIDQuMjY2NjY3LTkuMzg2NjY3IDYuNC0xMy42NTMzMzN2LTQuMjY2NjY3aDAuNDI2NjY3YzkuODEzMzMzLTE5LjIgMjAuNDgtMzcuMTIgMzIuODUzMzMzLTU0LjE4NjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2M2LjQtOC45NiAxMi44LTE3LjQ5MzMzMyAyMC4wNTMzMzMtMjUuNmw1MC43NzMzMzMgMzcuMTItMTguNzczMzMzIDI2LjAyNjY2NmMtMTQuMDggMTkuNjI2NjY3LTI2LjQ1MzMzMyA0MC41MzMzMzMtMzYuNjkzMzMzIDYyLjI5MzMzNGwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzMtMTQ5Ljc2bC0zNy41NDY2NjYtNTAuMzQ2NjY3YzEyLjM3MzMzMy0xMC42NjY2NjcgMjUuNi0yMC45MDY2NjcgMzkuMjUzMzMzLTMwLjI5MzMzM2gwLjg1MzMzM3YtMC44NTMzMzNoMS4yOHYtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzYzE3LjA2NjY2Ny0xMS45NDY2NjcgMzQuOTg2NjY3LTIyLjE4NjY2NyA1My43Ni0zMS4xNDY2NjcgOS4zODY2NjctNC42OTMzMzMgMTkuMi04Ljk2IDI5LjAxMzMzMy0xMi44bDI2Ljg4IDU2Ljc0NjY2Ny0yOS4wMTMzMzMgMTMuNjUzMzMzYy0yMS43NiAxMC4yNC00Mi42NjY2NjcgMjMuMDQtNjEuODY2NjY3IDM3LjU0NjY2N2wtMjUuNiAxOS4yeiBtMTU5LjU3MzMzNC04My4ybC04Ljk2LTYyLjI5MzMzM2MxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctNC4yNjY2NjcgMzEuNTczMzMzLTUuNTQ2NjY3IDEwLjY2NjY2Ny0xLjcwNjY2NyAyMC45MDY2NjctMi41NiAzMS41NzMzMzMtMy40MTMzMzNoMTIuMzczMzM0Vi00Mi42NjY2NjdoMzMuNzA2NjY2YzEzLjIyNjY2NyAwLjQyNjY2NyAyNi40NTMzMzMgMS43MDY2NjcgMzkuMjUzMzM0IDMuNDEzMzM0bC0zLjQxMzMzNCA2Mi43Mi0zMi0xLjcwNjY2N2MtNi44MjY2NjcgMC0xNC4wOC0wLjQyNjY2Ny0yMC45MDY2NjYtMC40MjY2NjctMTcuMDY2NjY3IDAtMzQuNTYgMS4yOC01MS4yIDMuNDEzMzM0bC0zMS41NzMzMzQgNC42OTMzMzN6IG0zMDIuMDggNjRsLTI3LjMwNjY2Ny0xNy4wNjY2NjdjLTIwLjQ4LTEyLjgtNDIuMjQtMjMuNDY2NjY3LTY0Ljg1MzMzMy0zMmwtMjkuODY2NjY3LTExLjA5MzMzMyAyMi4xODY2NjctNTguODhjMTAuMjQgMi45ODY2NjcgMjAuNDggNi40IDMwLjI5MzMzMyAxMC4yNCAyNi44OCAxMC4yNCA1Mi40OCAyMi42MTMzMzMgNzYuMzczMzMzIDM3Ljk3MzMzMyA4Ljk2IDUuOTczMzMzIDE3LjkyIDExLjUyIDI2LjQ1MzMzNCAxNy45MmwtMzMuMjggNTMuMzMzMzM0eiBtMTEyLjY0IDE0MC44bC0xNS43ODY2NjctMjcuNzMzMzMzYy0xMS45NDY2NjctMjAuOTA2NjY3LTI2LjAyNjY2Ny00MC45Ni00MS44MTMzMzMtNTkuMzA2NjY3bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZjNy42OCA3LjY4IDE0LjkzMzMzMyAxNS4zNiAyMS43NiAyMy4wNCAzLjQxMzMzMyA0LjI2NjY2NyA2LjgyNjY2NyA4LjEwNjY2NyA5LjgxMzMzMyAxMi4zNzMzMzN2MC44NTMzMzRoMC40MjY2NjdsMi4xMzMzMzMgMi45ODY2NjZoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2NjdWMTI4aDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzSDg1My4zMzMzMzN2MC44NTMzMzNsMi41NiAzLjg0djAuODUzMzM0YzE0LjkzMzMzMyAyMC45MDY2NjcgMjcuNzMzMzMzIDQzLjA5MzMzMyAzOC40IDY2LjEzMzMzM2wtNTQuNjEzMzMzIDMwLjcyeiBtMzEuMTQ2NjY2IDE3Ny40OTMzMzN2LTMyYy0wLjg1MzMzMy0yNC4zMi0zLjQxMzMzMy00OC42NC04LjUzMzMzMy03Mi4xMDY2NjZsLTYuODI2NjY3LTMxLjE0NjY2NyA2MS40NC0xMy4yMjY2NjdjMTEuNTIgMzguNCAxNy40OTMzMzMgNzguOTMzMzMzIDE3LjQ5MzMzNCAxMjEuMTczMzM0IDAgOC45NiAwIDE3LjkyLTAuODUzMzM0IDI2LjQ1MzMzM2wtNjIuNzIgMC44NTMzMzN6IG0tMi4xMzMzMzMgMjAwLjEwNjY2N2wtNTUuNDY2NjY3LTI5LjQ0IDE0LjkzMzMzNC0yOC4xNmMxMS41Mi0yMS4zMzMzMzMgMjAuNDgtNDMuOTQ2NjY3IDI3LjMwNjY2Ni02Ni45ODY2NjdsOC45Ni0zMC43MiA2MC4xNiAxNy45MmMtMi41NiAxMi4zNzMzMzMtNS45NzMzMzMgMjQuMzItOS4zODY2NjYgMzYuMjY2NjY3VjUxOS4yNTMzMzNjLTMuNDEzMzMzIDEwLjI0LTcuMjUzMzMzIDIwLjA1MzMzMy0xMS4wOTMzMzQgMjkuODY2NjY3VjU1Ny42NTMzMzNjLTguNTMzMzMzIDE5LjYyNjY2Ny0xOC4zNDY2NjcgMzcuOTczMzMzLTI5Ljg2NjY2NiA1NS44OTMzMzR6IG0tMTUzLjE3MzMzMyAxNDUuNDkzMzMzbC0zNC41Ni01Mi40OCAyNi44OC0xNy40OTMzMzNjMjAuMDUzMzMzLTEzLjIyNjY2NyAzOC44MjY2NjctMjguNTg2NjY3IDU2LjMyLTQ1LjY1MzMzM2wyMi42MTMzMzMtMjIuNjEzMzM0IDQ0LjM3MzMzMyA0NC4zNzMzMzRhNDIzLjE2OCA0MjMuMTY4IDAgMCAxLTg1LjMzMzMzMyA3NS41MmgtMC44NTMzMzN2MC44NTMzMzNoLTEuMjh2MC44NTMzMzNoLTAuNDI2NjY3Yy04Ljk2IDYuNC0xNy45MiAxMS45NDY2NjctMjcuMzA2NjY3IDE3LjA2NjY2N3pNMzQwLjA1MzMzMyA2NTQuMDhjLTguOTYtNS41NDY2NjctMTcuNDkzMzMzLTExLjk0NjY2Ny0yNi4wMjY2NjYtMTguMzQ2NjY3LTE4Ljc3MzMzMy0xNC45MzMzMzMtMzUuODQtMzEuNTczMzMzLTUwLjc3MzMzNC00OS45MmgtMC40MjY2NjZ2LTAuODUzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzSDI2MC4yNjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMC44NTMzMzRoLTAuNDI2NjY3di0xLjI4aC0wLjQyNjY2NmMtNy42OC0xMC4yNC0xNC45MzMzMzMtMjAuOTA2NjY3LTIxLjc2LTMybDQ5LjkyLTM3LjEyIDE5LjIgMjUuNmMxMy42NTMzMzMgMTguMzQ2NjY3IDI5LjQ0IDM0LjU2IDQ3LjM2IDQ5LjA2NjY2N2wyNS4xNzMzMzMgMTkuNjI2NjY3LTM4LjgyNjY2NyA0OS4wNjY2NjZ6TTIwOS45MiA0OTAuMjRjLTguOTYtMjUuNi0xNC45MzMzMzMtNTIuOTA2NjY3LTE3LjA2NjY2Ny04MS4wNjY2NjdWMzcxLjYyNjY2N2MwLTEwLjY2NjY2NyAxLjI4LTIxLjMzMzMzMyAyLjU2LTMyTDI1Ny4yOCAzNDEuMzMzMzMzdjM5LjI1MzMzNGMtMC40MjY2NjcgMjAuNDggMS43MDY2NjcgNDAuNTMzMzMzIDYuNCA2MC4xNmw3LjY4IDMxLjE0NjY2Ni02MC41ODY2NjcgMTQuNTA2NjY3eiBtNTUuODkzMzMzLTE4My40NjY2NjdsLTU2Ljc0NjY2Ni0yNi4wMjY2NjZjMy40MTMzMzMtMTAuMjQgNy4yNTMzMzMtMjAuMDUzMzMzIDExLjk0NjY2Ni0yOS40NCAxLjI4LTIuNTYgMi4xMzMzMzMtNS4xMiAzLjQxMzMzNC03LjI1MzMzNHYtMS4yOGgwLjQyNjY2NnYtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0xLjcwNjY2N2gwLjQyNjY2NnYtMS43MDY2NjdoMC40MjY2NjdWMjI4LjI2NjY2N2gwLjQyNjY2N3YtMS43MDY2NjdoMC40MjY2NjZ2LTEuNzA2NjY3aDAuNDI2NjY3di0xLjcwNjY2NmgwLjg1MzMzM3YtMi41NmgwLjg1MzMzNHYtMS4yOGgwLjQyNjY2NnYtMC44NTMzMzRoMC44NTMzMzR2LTEuMjhoMC40MjY2NjZsMC44NTMzMzQtMS4yOHYtMC44NTMzMzNoMC40MjY2NjZsMS4yOC0yLjEzMzMzM3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjQyNjY2N3YtMS4yOGgwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2NjZ2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTEuNzA2NjY2aDAuNDI2NjY3YzQuMjY2NjY3LTUuNTQ2NjY3IDguMTA2NjY3LTExLjA5MzMzMyAxMi44LTE2LjIxMzMzNCA2LjgyNjY2Ny04LjUzMzMzMyAxNC4wOC0xNi4yMTMzMzMgMjEuNzYtMjMuNDY2NjY2bDQ3Ljc4NjY2NiA0MC4xMDY2NjYtMjAuNDggMjQuNzQ2NjY3Yy0xNC41MDY2NjcgMTcuNDkzMzMzLTI2Ljg4IDM2LjY5MzMzMy0zNi4yNjY2NjYgNTcuNmwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzQtMTM1LjY4bC0yOC41ODY2NjctNTUuNDY2NjY2YzkuODEzMzMzLTYuNCAxOS42MjY2NjctMTEuOTQ2NjY3IDMwLjI5MzMzMy0xNy40OTMzMzRoMC44NTMzMzR2LTAuODUzMzMzaDEuNzA2NjY2di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMS4yOHYtMC44NTMzMzNoMS43MDY2Njd2LTAuODUzMzM0aDEuNzA2NjY2YzEzLjIyNjY2Ny02LjQgMjYuODgtMTEuOTQ2NjY3IDQxLjM4NjY2Ny0xNi4yMTMzMzNoMi4xMzMzMzNsMC44NTMzMzQtMC44NTMzMzNoMi4xMzMzMzNsMC44NTMzMzMtMC44NTMzMzRoMS43MDY2NjdsMC44NTMzMzMtMC44NTMzMzNoMi4xMzMzMzRsMC44NTMzMzMtMC44NTMzMzNjNS4xMi0xLjI4IDEwLjI0LTIuNTYgMTUuNzg2NjY3LTMuODQgMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTMuODQgMzEuNTczMzMzLTUuMTJsMTIuOCA2MS4wMTMzMzMtMzEuMTQ2NjY3IDYuNGMtMjIuMTg2NjY3IDQuNjkzMzMzLTQzLjk0NjY2NyAxMi4zNzMzMzMtNjQgMjIuNjEzMzMzbC0yOC41ODY2NjYgMTQuNTA2NjY3eiBtMjg3LjU3MzMzMy0yLjU2bC0yOC41ODY2NjctMTQuMDhjLTIwLjQ4LTEwLjI0LTQyLjI0LTE3LjQ5MzMzMy02NC40MjY2NjYtMjEuNzZsLTMxLjU3MzMzNC01Ljk3MzMzMyAxMS45NDY2NjctNjEuNDRjMTAuNjY2NjY3IDAuODUzMzMzIDIxLjMzMzMzMyAyLjU2IDMxLjU3MzMzMyA0LjI2NjY2NyAxNy45MiAzLjQxMzMzMyAzNC45ODY2NjcgOC41MzMzMzMgNTEuNjI2NjY3IDE0LjUwNjY2NmwxLjcwNjY2NyAwLjg1MzMzNGgwLjQyNjY2NmwyLjk4NjY2NyAxLjI4YzguMTA2NjY3IDMuNDEzMzMzIDE2LjIxMzMzMyA2LjgyNjY2NyAyMy44OTMzMzMgMTAuNjY2NjY2IDkuMzg2NjY3IDQuNjkzMzMzIDE4Ljc3MzMzMyA5LjgxMzMzMyAyNy43MzMzMzQgMTUuNzg2NjY3bC0yNy43MzMzMzQgNTUuODkzMzMzeiBtMTAyLjgyNjY2NyAxMzMuOTczMzM0bC0xMy42NTMzMzQtMjkuMDEzMzM0Yy05LjgxMzMzMy0yMC40OC0yMi4xODY2NjctMzkuNjgtMzcuNTQ2NjY2LTU2Ljc0NjY2NmwtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YTM1Ni40OCAzNTYuNDggMCAwIDEgMzguNCA0My45NDY2NjZ2MC44NTMzMzRoMC44NTMzMzN2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2Njd2MS4yOGgwLjg1MzMzM3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YxLjcwNjY2NmgwLjQyNjY2NnYxLjcwNjY2N2gwLjQyNjY2N3YxLjcwNjY2N2gwLjQyNjY2N2MxMy42NTMzMzMgMjAuOTA2NjY3IDI0Ljc0NjY2NyA0My4wOTMzMzMgMzMuMjggNjYuOTg2NjY2bC01Ni4zMiAyNi44OHogbTU4Ljg4IDE4Mi42MTMzMzNsLTYxLjAxMzMzNC0xMy42NTMzMzMgNi44MjY2NjctMzEuMTQ2NjY3YzQuMjY2NjY3LTE4LjM0NjY2NyA1Ljk3MzMzMy0zNy4xMiA1Ljk3MzMzMy01NS44OTMzMzN2LTExLjk0NjY2N2wtMS4yOC0zMiA2Mi4yOTMzMzQtMi45ODY2NjdjMS43MDY2NjcgMTAuMjQgMi41NiAyMC45MDY2NjcgMi45ODY2NjYgMzEuNTczMzM0VjQwMS40OTMzMzNhMzIzLjg0IDMyMy44NCAwIDAgMS0xNS43ODY2NjYgODYuNjEzMzM0eiBtLTEyNy41NzMzMzQgMTY2LjRsLTM5LjI1MzMzMy00OC4yMTMzMzMgMjQuNzQ2NjY3LTIwLjA1MzMzNGMxNy40OTMzMzMtMTQuNTA2NjY3IDMzLjI4LTMxLjE0NjY2NyA0Ni41MDY2NjYtNDkuNDkzMzMzbDE4Ljc3MzMzNC0yNi4wMjY2NjcgNTAuNzczMzMzIDM2LjI2NjY2N2MtNS4xMiA5LjM4NjY2Ny0xMS4wOTMzMzMgMTcuOTItMTcuMDY2NjY3IDI2Ljg4LTE2LjY0IDIzLjQ2NjY2Ny0zNi4yNjY2NjcgNDQuMzczMzMzLTU4LjAyNjY2NiA2Mi4yOTMzMzMtOC4xMDY2NjcgNi44MjY2NjctMTYuNjQgMTMuMjI2NjY3LTI1LjYgMTkuMnpNNTEyIDcwNC40MjY2NjdjLTguOTYgMC0xNy45MiAwLTI2LjQ1MzMzMy0xLjI4aC02LjgyNjY2N3YtMC44NTMzMzRoLTUuOTczMzMzdi0wLjg1MzMzM2gtNC42OTMzMzR2LTAuODUzMzMzaC01LjEybC0wLjg1MzMzMy0wLjg1MzMzNGgtMy44NHYtMC44NTMzMzNoLTMuNDEzMzMzbC0wLjg1MzMzNC0wLjg1MzMzM2gtMy40MTMzMzNsLTAuODUzMzMzLTAuODUzMzM0aC0yLjEzMzMzNGwtMi4xMzMzMzMtMC44NTMzMzNoLTIuOTg2NjY3bC0wLjg1MzMzMy0wLjg1MzMzM2gtMi4xMzMzMzN2LTAuODUzMzM0aC0yLjk4NjY2N3YtMC44NTMzMzNoLTIuOTg2NjY3di0wLjg1MzMzM2gtMi41NnYtMC44NTMzMzRoLTIuNTZ2LTAuODUzMzMzaC0xLjI4Yy0xMC4yNC0yLjk4NjY2Ny0yMC40OC02LjQtMzAuMjkzMzMzLTEwLjI0bDE2LjIxMzMzMy02MC4xNiAzMC43MiA4LjUzMzMzM2EyNTQuMjkzMzMzIDI1NC4yOTMzMzMgMCAwIDAgNjcuNDEzMzM0IDguOTZoNC4yNjY2NjZjMjMuMDQgMCA0NS42NTMzMzMtMy44NCA2Ny40MTMzMzQtMTAuMjRsMzAuNzItOC45NiAxNy40OTMzMzMgNTkuNzMzMzM0Yy05LjgxMzMzMyAzLjg0LTIwLjA1MzMzMyA3LjY4LTMwLjI5MzMzMyAxMC42NjY2NjYtMy44NCAxLjI4LTcuNjggMi4xMzMzMzMtMTEuNTIgMi45ODY2NjdoLTIuMTMzMzM0bC0wLjg1MzMzMyAwLjg1MzMzM2gtMi4xMzMzMzNsLTAuODUzMzM0IDAuODUzMzM0aC0yLjEzMzMzM2wtMC44NTMzMzMgMC44NTMzMzNoLTIuOTg2NjY3Yy0xMS4wOTMzMzMgMi45ODY2NjctMjIuNjEzMzMzIDQuNjkzMzMzLTM0LjEzMzMzMyA1Ljk3MzMzMy0xMC42NjY2NjcgMC44NTMzMzMtMjEuMzMzMzMzIDEuNzA2NjY3LTMyIDEuNzA2NjY3ek01MTIgNDk3LjQ5MzMzM2wxMTAuOTMzMzMzLTgwLjY0LTQyLjI0LTEzMC41NmgtMTM3LjM4NjY2NmwtNDIuMjQgMTMwLjU2TDUxMiA0OTcuNDkzMzMzbTAgNjEuODY2NjY3Yy0zLjg0IDAtNy4yNTMzMzMtMS4yOC0xMC42NjY2NjctMy40MTMzMzNsLTE1Mi43NDY2NjYtMTEwLjkzMzMzNGMtNi40LTQuNjkzMzMzLTguOTYtMTIuOC02LjQtMjAuMDUzMzMzbDU4LjQ1MzMzMy0xNzkuNjI2NjY3YzIuNTYtNy4yNTMzMzMgOS4zODY2NjctMTIuMzczMzMzIDE3LjA2NjY2Ny0xMi4zNzMzMzNoMTg4LjU4NjY2NmM3LjY4IDAgMTQuNTA2NjY3IDUuMTIgMTcuMDY2NjY3IDEyLjM3MzMzM2w1OC40NTMzMzMgMTc5LjYyNjY2N2MyLjU2IDcuMjUzMzMzIDAgMTUuMzYtNi40IDIwLjA1MzMzM2wtMTUyLjc0NjY2NiAxMTAuOTMzMzM0YTE4LjY4OCAxOC42ODggMCAwIDEtMTAuNjY2NjY3IDMuNDEzMzMzeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImJvdW5kYXJ5LWV2ZW50LW1lc3NhZ2UiIHVuaWNvZGU9IiYjNTkwNDc7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek02NTguNzczMzMzIDUwMy4wNEgzNjUuNjUzMzMzYy04LjUzMzMzMyAwLTE1LjM2LTYuODI2NjY3LTE1LjM2LTE1LjM2di0yMDYuOTMzMzMzYzAtOC41MzMzMzMgNi44MjY2NjctMTUuMzYgMTUuMzYtMTUuMzZoMjkzLjEyYzguNTMzMzMzIDAgMTUuMzYgNi44MjY2NjcgMTUuMzYgMTUuMzZWNDg3LjY4YzAgOC41MzMzMzMtNi44MjY2NjcgMTUuMzYtMTUuMzYgMTUuMzZ6TTUxMiA0MDMuMmwtOTAuODggNTcuMTczMzMzaDE4MS43Nkw1MTIgNDAzLjJ6IG0tMTE5LjQ2NjY2Ny05NS4xNDY2Njd2MTE5Ljg5MzMzNGwxMDcuOTQ2NjY3LTY4LjI2NjY2N2gwLjg1MzMzM2MzLjQxMzMzMy0xLjcwNjY2NyA2LjgyNjY2Ny0yLjk4NjY2NyAxMC42NjY2NjctMi45ODY2NjdzNy4yNTMzMzMgMS4yOCAxMC42NjY2NjcgMi45ODY2NjdoMC44NTMzMzNsMTA3Ljk0NjY2NyA2OC4yNjY2Njd2LTExOS44OTMzMzRIMzkyLjUzMzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJib3VuZGFyeS1ldmVudC1tZXNzYWdlLWludGUiIHVuaWNvZGU9IiYjNTkwMTQ7IiBkPSJNNTEyIDgxMC42NjY2NjdoLTIwLjQ4Yy0yLjk4NjY2Ny0wLjQyNjY2Ny01Ljk3MzMzMy0wLjg1MzMzMy04Ljk2LTAuODUzMzM0aC02LjRjLTI3LjMwNjY2Ny0yLjk4NjY2Ny01NC4xODY2NjctNy42OC04MC4yMTMzMzMtMTQuOTMzMzMzbDEyLjM3MzMzMy02MS40NCAzMS41NzMzMzMgNi40QTM2OS4wNjY2NjcgMzY5LjA2NjY2NyAwIDAgMCA1MTIgNzQ3LjA5MzMzM2gxNS4zNmwxNS4zNi0xLjI4YzI0LjMyLTIuMTMzMzMzIDQ4LjIxMzMzMy02LjQgNzEuMjUzMzMzLTEzLjIyNjY2NmwzMC43Mi04Ljk2IDE3LjQ5MzMzNCA2MC4xNmMtMTIuMzczMzMzIDQuNjkzMzMzLTI1LjE3MzMzMyA4Ljk2LTM3Ljk3MzMzNCAxMi4zNzMzMzNoLTIuMTMzMzMzdjAuODUzMzMzaC0yLjU2Vjc5Ny44NjY2NjdoLTIuNTZ2MC44NTMzMzNoLTEuMjhjLTIxLjc2IDUuNTQ2NjY3LTQ0LjM3MzMzMyA5LjM4NjY2Ny02Ny40MTMzMzMgMTEuNTItMTEuNTIgMC44NTMzMzMtMjMuNDY2NjY3IDEuMjgtMzUuNDEzMzM0IDEuMjh6IG0tMTc1Ljc4NjY2Ny0zNy45NzMzMzRjLTkuODEzMzMzLTQuMjY2NjY3LTE5LjItOC45Ni0yOC41ODY2NjYtMTQuMDgtNS45NzMzMzMtMy40MTMzMzMtMTEuNTItNi40LTE3LjA2NjY2Ny05LjgxMzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMC40MjY2NjdsLTIuMTMzMzMzLTEuNzA2NjY2aC0wLjg1MzMzNHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzNsLTIuNTYtMi4xMzMzMzNoLTAuODUzMzM0di0wLjg1MzMzNGgtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuNDI2NjY3bC01Ljk3MzMzMy00LjY5MzMzNGMtMTYuNjQtMTIuMzczMzMzLTMyLjQyNjY2Ny0yNS42LTQ3LjM2LTQwLjEwNjY2Nmw0MC41MzMzMzMtNDguMjEzMzM0IDI0LjMyIDIwLjQ4YzE4LjM0NjY2NyAxNS43ODY2NjcgMzguNCAyOS40NCA1OS43MzMzMzMgNDAuOTZsMjguMTYgMTUuMzYtMzAuMjkzMzMzIDU1LjA0ek0xNzEuNTIgNjQwLjg1MzMzM2MtNi40LTguNTMzMzMzLTEyLjM3MzMzMy0xNy4wNjY2NjctMTguMzQ2NjY3LTI2LjAyNjY2Ni01LjEyLTguMTA2NjY3LTkuODEzMzMzLTE2LjIxMzMzMy0xNC41MDY2NjYtMjQuMzJ2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0xLjcwNjY2N2gtMC40MjY2NjZ2LTMuODRoLTAuNDI2NjY3di01Ljk3MzMzM0gxMzYuNTMzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjZjLTEuMjgtMi41Ni0yLjEzMzMzMy00LjY5MzMzMy0yLjk4NjY2Ny02LjgyNjY2N3YtMi41NmgtMC40MjY2NjdjLTEuMjgtMi4xMzMzMzMtMi4xMzMzMzMtNC42OTMzMzMtMy40MTMzMzMtNi44MjY2Njd2LTIuNTZzLTEuMjgtMy40MTMzMzMtMi4xMzMzMzMtNC42OTMzMzNWNTQ0LjQyNjY2N2wtMS4yOC0yLjk4NjY2N3YtMC44NTMzMzNzLTEuMjgtMi45ODY2NjctMS43MDY2NjctNC42OTMzMzRjLTMuODQtOS44MTMzMzMtNy4yNTMzMzMtMjAuMDUzMzMzLTEwLjI0LTMwLjI5MzMzM2w1OC40NTMzMzMtMjIuNjEzMzMzIDExLjUyIDI5Ljg2NjY2NmM4LjUzMzMzMyAyMi42MTMzMzMgMTkuNjI2NjY3IDQzLjk0NjY2NyAzMi44NTMzMzQgNjQuNDI2NjY3bDE3LjQ5MzMzMyAyNi44OC01Mi45MDY2NjcgMzQuMTMzMzMzeiBtLTgxLjQ5MzMzMy0xOTQuNTZjLTEuNzA2NjY3LTEwLjI0LTIuNTYtMjAuOTA2NjY3LTMuNDEzMzM0LTMxLjU3MzMzMyAwLTUuOTczMzMzLTAuODUzMzMzLTExLjk0NjY2Ny0wLjg1MzMzMy0xNy45MlYzNTYuMjY2NjY3YzAtOC41MzMzMzMgMC44NTMzMzMtMTYuNjQgMS43MDY2NjctMjQuMzJ2LTcuNjhjMS4yOC0xMS45NDY2NjcgMy40MTMzMzMtMjMuNDY2NjY3IDUuNTQ2NjY2LTM0Ljk4NjY2N2w2Mi4yOTMzMzQgOC4xMDY2NjctNC4yNjY2NjcgMzEuNTczMzMzYy0yLjEzMzMzMyAxNS4zNi0yLjk4NjY2NyAzMS4xNDY2NjctMi45ODY2NjcgNDYuOTMzMzMzIDAgOC41MzMzMzMgMCAxNy4wNjY2NjcgMC44NTMzMzQgMjUuNmwyLjEzMzMzMyAzMi02Mi43MiA0LjI2NjY2N3ogbTc4LjkzMzMzMy0xODMuODkzMzMzbC01Ny4xNzMzMzMtMjYuMDI2NjY3YzMuODQtOS44MTMzMzMgNy42OC0xOS42MjY2NjcgMTEuOTQ2NjY2LTI5LjQ0IDIuMTMzMzMzLTQuNjkzMzMzIDQuMjY2NjY3LTkuMzg2NjY3IDYuNC0xMy42NTMzMzN2LTQuMjY2NjY3aDAuNDI2NjY3YzkuODEzMzMzLTE5LjIgMjAuNDgtMzcuMTIgMzIuODUzMzMzLTU0LjE4NjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2M2LjQtOC45NiAxMi44LTE3LjQ5MzMzMyAyMC4wNTMzMzMtMjUuNmw1MC43NzMzMzMgMzcuMTItMTguNzczMzMzIDI2LjAyNjY2NmMtMTQuMDggMTkuNjI2NjY3LTI2LjQ1MzMzMyA0MC41MzMzMzMtMzYuNjkzMzMzIDYyLjI5MzMzNGwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzMtMTQ5Ljc2bC0zNy41NDY2NjYtNTAuMzQ2NjY3YzEyLjM3MzMzMy0xMC42NjY2NjcgMjUuNi0yMC45MDY2NjcgMzkuMjUzMzMzLTMwLjI5MzMzM2gwLjg1MzMzM3YtMC44NTMzMzNoMS4yOHYtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzYzE3LjA2NjY2Ny0xMS45NDY2NjcgMzQuOTg2NjY3LTIyLjE4NjY2NyA1My43Ni0zMS4xNDY2NjcgOS4zODY2NjctNC42OTMzMzMgMTkuMi04Ljk2IDI5LjAxMzMzMy0xMi44bDI2Ljg4IDU2Ljc0NjY2Ny0yOS4wMTMzMzMgMTMuNjUzMzMzYy0yMS43NiAxMC4yNC00Mi42NjY2NjcgMjMuMDQtNjEuODY2NjY3IDM3LjU0NjY2N2wtMjUuNiAxOS4yeiBtMTU5LjU3MzMzNC04My4ybC04Ljk2LTYyLjI5MzMzM2MxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctNC4yNjY2NjcgMzEuNTczMzMzLTUuNTQ2NjY3IDEwLjY2NjY2Ny0xLjcwNjY2NyAyMC45MDY2NjctMi41NiAzMS41NzMzMzMtMy40MTMzMzNoMTIuMzczMzM0Vi00Mi42NjY2NjdoMzMuNzA2NjY2YzEzLjIyNjY2NyAwLjQyNjY2NyAyNi40NTMzMzMgMS43MDY2NjcgMzkuMjUzMzM0IDMuNDEzMzM0bC0zLjQxMzMzNCA2Mi43Mi0zMi0xLjcwNjY2N2MtNi44MjY2NjcgMC0xNC4wOC0wLjQyNjY2Ny0yMC45MDY2NjYtMC40MjY2NjctMTcuMDY2NjY3IDAtMzQuNTYgMS4yOC01MS4yIDMuNDEzMzM0bC0zMS41NzMzMzQgNC42OTMzMzN6IG0zMDIuMDggNjRsLTI3LjMwNjY2Ny0xNy4wNjY2NjdjLTIwLjQ4LTEyLjgtNDIuMjQtMjMuNDY2NjY3LTY0Ljg1MzMzMy0zMmwtMjkuODY2NjY3LTExLjA5MzMzMyAyMi4xODY2NjctNTguODhjMTAuMjQgMi45ODY2NjcgMjAuNDggNi40IDMwLjI5MzMzMyAxMC4yNCAyNi44OCAxMC4yNCA1Mi40OCAyMi42MTMzMzMgNzYuMzczMzMzIDM3Ljk3MzMzMyA4Ljk2IDUuOTczMzMzIDE3LjkyIDExLjUyIDI2LjQ1MzMzNCAxNy45MmwtMzMuMjggNTMuMzMzMzM0eiBtMTEyLjY0IDE0MC44bC0xNS43ODY2NjctMjcuNzMzMzMzYy0xMS45NDY2NjctMjAuOTA2NjY3LTI2LjAyNjY2Ny00MC45Ni00MS44MTMzMzMtNTkuMzA2NjY3bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZjNy42OCA3LjY4IDE0LjkzMzMzMyAxNS4zNiAyMS43NiAyMy4wNCAzLjQxMzMzMyA0LjI2NjY2NyA2LjgyNjY2NyA4LjEwNjY2NyA5LjgxMzMzMyAxMi4zNzMzMzN2MC44NTMzMzRoMC40MjY2NjdsMi4xMzMzMzMgMi45ODY2NjZoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2NjdWMTI4aDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzSDg1My4zMzMzMzN2MC44NTMzMzNsMi41NiAzLjg0djAuODUzMzM0YzE0LjkzMzMzMyAyMC45MDY2NjcgMjcuNzMzMzMzIDQzLjA5MzMzMyAzOC40IDY2LjEzMzMzM2wtNTQuNjEzMzMzIDMwLjcyeiBtMzEuMTQ2NjY2IDE3Ny40OTMzMzN2LTMyYy0wLjg1MzMzMy0yNC4zMi0zLjQxMzMzMy00OC42NC04LjUzMzMzMy03Mi4xMDY2NjZsLTYuODI2NjY3LTMxLjE0NjY2NyA2MS40NC0xMy4yMjY2NjdjMTEuNTIgMzguNCAxNy40OTMzMzMgNzguOTMzMzMzIDE3LjQ5MzMzNCAxMjEuMTczMzM0IDAgOC45NiAwIDE3LjkyLTAuODUzMzM0IDI2LjQ1MzMzM2wtNjIuNzIgMC44NTMzMzN6IG0tMi4xMzMzMzMgMjAwLjEwNjY2N2wtNTUuNDY2NjY3LTI5LjQ0IDE0LjkzMzMzNC0yOC4xNmMxMS41Mi0yMS4zMzMzMzMgMjAuNDgtNDMuOTQ2NjY3IDI3LjMwNjY2Ni02Ni45ODY2NjdsOC45Ni0zMC43MiA2MC4xNiAxNy45MmMtMi41NiAxMi4zNzMzMzMtNS45NzMzMzMgMjQuMzItOS4zODY2NjYgMzYuMjY2NjY3VjUxOS4yNTMzMzNjLTMuNDEzMzMzIDEwLjI0LTcuMjUzMzMzIDIwLjA1MzMzMy0xMS4wOTMzMzQgMjkuODY2NjY3VjU1Ny42NTMzMzNjLTguNTMzMzMzIDE5LjYyNjY2Ny0xOC4zNDY2NjcgMzcuOTczMzMzLTI5Ljg2NjY2NiA1NS44OTMzMzR6IG0tMTUzLjE3MzMzMyAxNDUuNDkzMzMzbC0zNC41Ni01Mi40OCAyNi44OC0xNy40OTMzMzNjMjAuMDUzMzMzLTEzLjIyNjY2NyAzOC44MjY2NjctMjguNTg2NjY3IDU2LjMyLTQ1LjY1MzMzM2wyMi42MTMzMzMtMjIuNjEzMzM0IDQ0LjM3MzMzMyA0NC4zNzMzMzRhNDIzLjE2OCA0MjMuMTY4IDAgMCAxLTg1LjMzMzMzMyA3NS41MmgtMC44NTMzMzN2MC44NTMzMzNoLTEuMjh2MC44NTMzMzNoLTAuNDI2NjY3Yy04Ljk2IDYuNC0xNy45MiAxMS45NDY2NjctMjcuMzA2NjY3IDE3LjA2NjY2N3pNMzQwLjA1MzMzMyA2NTQuMDhjLTguOTYtNS41NDY2NjctMTcuNDkzMzMzLTExLjk0NjY2Ny0yNi4wMjY2NjYtMTguMzQ2NjY3LTE4Ljc3MzMzMy0xNC45MzMzMzMtMzUuODQtMzEuNTczMzMzLTUwLjc3MzMzNC00OS45MmgtMC40MjY2NjZ2LTAuODUzMzMzaC0wLjg1MzMzNHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzNGgtMC40MjY2Njd2LTAuODUzMzMzSDI2MC4yNjY2Njd2LTAuODUzMzMzaC0wLjQyNjY2N3YtMC44NTMzMzRoLTAuNDI2NjY3di0xLjI4aC0wLjQyNjY2NmMtNy42OC0xMC4yNC0xNC45MzMzMzMtMjAuOTA2NjY3LTIxLjc2LTMybDQ5LjkyLTM3LjEyIDE5LjIgMjUuNmMxMy42NTMzMzMgMTguMzQ2NjY3IDI5LjQ0IDM0LjU2IDQ3LjM2IDQ5LjA2NjY2N2wyNS4xNzMzMzMgMTkuNjI2NjY3LTM4LjgyNjY2NyA0OS4wNjY2NjZ6TTIwOS45MiA0OTAuMjRjLTguOTYtMjUuNi0xNC45MzMzMzMtNTIuOTA2NjY3LTE3LjA2NjY2Ny04MS4wNjY2NjdWMzcxLjYyNjY2N2MwLTEwLjY2NjY2NyAxLjI4LTIxLjMzMzMzMyAyLjU2LTMyTDI1Ny4yOCAzNDEuMzMzMzMzdjM5LjI1MzMzNGMtMC40MjY2NjcgMjAuNDggMS43MDY2NjcgNDAuNTMzMzMzIDYuNCA2MC4xNmw3LjY4IDMxLjE0NjY2Ni02MC41ODY2NjcgMTQuNTA2NjY3eiBtNTUuODkzMzMzLTE4My40NjY2NjdsLTU2Ljc0NjY2Ni0yNi4wMjY2NjZjMy40MTMzMzMtMTAuMjQgNy4yNTMzMzMtMjAuMDUzMzMzIDExLjk0NjY2Ni0yOS40NCAxLjI4LTIuNTYgMi4xMzMzMzMtNS4xMiAzLjQxMzMzNC03LjI1MzMzNHYtMS4yOGgwLjQyNjY2NnYtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0xLjcwNjY2N2gwLjQyNjY2NnYtMS43MDY2NjdoMC40MjY2NjdWMjI4LjI2NjY2N2gwLjQyNjY2N3YtMS43MDY2NjdoMC40MjY2NjZ2LTEuNzA2NjY3aDAuNDI2NjY3di0xLjcwNjY2NmgwLjg1MzMzM3YtMi41NmgwLjg1MzMzNHYtMS4yOGgwLjQyNjY2NnYtMC44NTMzMzRoMC44NTMzMzR2LTEuMjhoMC40MjY2NjZsMC44NTMzMzQtMS4yOHYtMC44NTMzMzNoMC40MjY2NjZsMS4yOC0yLjEzMzMzM3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gwLjQyNjY2N3YtMS4yOGgwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2NjZ2LTAuODUzMzMzaDAuODUzMzM0di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2gwLjQyNjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTEuNzA2NjY2aDAuNDI2NjY3YzQuMjY2NjY3LTUuNTQ2NjY3IDguMTA2NjY3LTExLjA5MzMzMyAxMi44LTE2LjIxMzMzNCA2LjgyNjY2Ny04LjUzMzMzMyAxNC4wOC0xNi4yMTMzMzMgMjEuNzYtMjMuNDY2NjY2bDQ3Ljc4NjY2NiA0MC4xMDY2NjYtMjAuNDggMjQuNzQ2NjY3Yy0xNC41MDY2NjcgMTcuNDkzMzMzLTI2Ljg4IDM2LjY5MzMzMy0zNi4yNjY2NjYgNTcuNmwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzQtMTM1LjY4bC0yOC41ODY2NjctNTUuNDY2NjY2YzkuODEzMzMzLTYuNCAxOS42MjY2NjctMTEuOTQ2NjY3IDMwLjI5MzMzMy0xNy40OTMzMzRoMC44NTMzMzR2LTAuODUzMzMzaDEuNzA2NjY2di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMS4yOHYtMC44NTMzMzNoMS43MDY2Njd2LTAuODUzMzM0aDEuNzA2NjY2YzEzLjIyNjY2Ny02LjQgMjYuODgtMTEuOTQ2NjY3IDQxLjM4NjY2Ny0xNi4yMTMzMzNoMi4xMzMzMzNsMC44NTMzMzQtMC44NTMzMzNoMi4xMzMzMzNsMC44NTMzMzMtMC44NTMzMzRoMS43MDY2NjdsMC44NTMzMzMtMC44NTMzMzNoMi4xMzMzMzRsMC44NTMzMzMtMC44NTMzMzNjNS4xMi0xLjI4IDEwLjI0LTIuNTYgMTUuNzg2NjY3LTMuODQgMTAuMjQtMi4xMzMzMzMgMjAuOTA2NjY3LTMuODQgMzEuNTczMzMzLTUuMTJsMTIuOCA2MS4wMTMzMzMtMzEuMTQ2NjY3IDYuNGMtMjIuMTg2NjY3IDQuNjkzMzMzLTQzLjk0NjY2NyAxMi4zNzMzMzMtNjQgMjIuNjEzMzMzbC0yOC41ODY2NjYgMTQuNTA2NjY3eiBtMjg3LjU3MzMzMy0yLjU2bC0yOC41ODY2NjctMTQuMDhjLTIwLjQ4LTEwLjI0LTQyLjI0LTE3LjQ5MzMzMy02NC40MjY2NjYtMjEuNzZsLTMxLjU3MzMzNC01Ljk3MzMzMyAxMS45NDY2NjctNjEuNDRjMTAuNjY2NjY3IDAuODUzMzMzIDIxLjMzMzMzMyAyLjU2IDMxLjU3MzMzMyA0LjI2NjY2NyAxNy45MiAzLjQxMzMzMyAzNC45ODY2NjcgOC41MzMzMzMgNTEuNjI2NjY3IDE0LjUwNjY2NmwxLjcwNjY2NyAwLjg1MzMzNGgwLjQyNjY2NmwyLjk4NjY2NyAxLjI4YzguMTA2NjY3IDMuNDEzMzMzIDE2LjIxMzMzMyA2LjgyNjY2NyAyMy44OTMzMzMgMTAuNjY2NjY2IDkuMzg2NjY3IDQuNjkzMzMzIDE4Ljc3MzMzMyA5LjgxMzMzMyAyNy43MzMzMzQgMTUuNzg2NjY3bC0yNy43MzMzMzQgNTUuODkzMzMzeiBtMTAyLjgyNjY2NyAxMzMuOTczMzM0bC0xMy42NTMzMzQtMjkuMDEzMzM0Yy05LjgxMzMzMy0yMC40OC0yMi4xODY2NjctMzkuNjgtMzcuNTQ2NjY2LTU2Ljc0NjY2NmwtMjAuOTA2NjY3LTI0LjMyIDQ3LjM2LTQwLjk2YTM1Ni40OCAzNTYuNDggMCAwIDEgMzguNCA0My45NDY2NjZ2MC44NTMzMzRoMC44NTMzMzN2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2Njd2MS4yOGgwLjg1MzMzM3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YxLjcwNjY2NmgwLjQyNjY2NnYxLjcwNjY2N2gwLjQyNjY2N3YxLjcwNjY2N2gwLjQyNjY2N2MxMy42NTMzMzMgMjAuOTA2NjY3IDI0Ljc0NjY2NyA0My4wOTMzMzMgMzMuMjggNjYuOTg2NjY2bC01Ni4zMiAyNi44OHogbTU4Ljg4IDE4Mi42MTMzMzNsLTYxLjAxMzMzNC0xMy42NTMzMzMgNi44MjY2NjctMzEuMTQ2NjY3YzQuMjY2NjY3LTE4LjM0NjY2NyA1Ljk3MzMzMy0zNy4xMiA1Ljk3MzMzMy01NS44OTMzMzN2LTExLjk0NjY2N2wtMS4yOC0zMiA2Mi4yOTMzMzQtMi45ODY2NjdjMS43MDY2NjcgMTAuMjQgMi41NiAyMC45MDY2NjcgMi45ODY2NjYgMzEuNTczMzM0VjQwMS40OTMzMzNhMzIzLjg0IDMyMy44NCAwIDAgMS0xNS43ODY2NjYgODYuNjEzMzM0eiBtLTEyNy41NzMzMzQgMTY2LjRsLTM5LjI1MzMzMy00OC4yMTMzMzMgMjQuNzQ2NjY3LTIwLjA1MzMzNGMxNy40OTMzMzMtMTQuNTA2NjY3IDMzLjI4LTMxLjE0NjY2NyA0Ni41MDY2NjYtNDkuNDkzMzMzbDE4Ljc3MzMzNC0yNi4wMjY2NjcgNTAuNzczMzMzIDM2LjI2NjY2N2MtNS4xMiA5LjM4NjY2Ny0xMS4wOTMzMzMgMTcuOTItMTcuMDY2NjY3IDI2Ljg4LTE2LjY0IDIzLjQ2NjY2Ny0zNi4yNjY2NjcgNDQuMzczMzMzLTU4LjAyNjY2NiA2Mi4yOTMzMzMtOC4xMDY2NjcgNi44MjY2NjctMTYuNjQgMTMuMjI2NjY3LTI1LjYgMTkuMnpNNTEyIDcwNC40MjY2NjdjLTguOTYgMC0xNy45MiAwLTI2LjQ1MzMzMy0xLjI4aC02LjgyNjY2N3YtMC44NTMzMzRoLTUuOTczMzMzdi0wLjg1MzMzM2gtNC42OTMzMzR2LTAuODUzMzMzaC01LjEybC0wLjg1MzMzMy0wLjg1MzMzNGgtMy44NHYtMC44NTMzMzNoLTMuNDEzMzMzbC0wLjg1MzMzNC0wLjg1MzMzM2gtMy40MTMzMzNsLTAuODUzMzMzLTAuODUzMzM0aC0yLjEzMzMzNGwtMi4xMzMzMzMtMC44NTMzMzNoLTIuOTg2NjY3bC0wLjg1MzMzMy0wLjg1MzMzM2gtMi4xMzMzMzN2LTAuODUzMzM0aC0yLjk4NjY2N3YtMC44NTMzMzNoLTIuOTg2NjY3di0wLjg1MzMzM2gtMi41NnYtMC44NTMzMzRoLTIuNTZ2LTAuODUzMzMzaC0xLjI4Yy0xMC4yNC0yLjk4NjY2Ny0yMC40OC02LjQtMzAuMjkzMzMzLTEwLjI0bDE2LjIxMzMzMy02MC4xNiAzMC43MiA4LjUzMzMzM2EyNTQuMjkzMzMzIDI1NC4yOTMzMzMgMCAwIDAgNjcuNDEzMzM0IDguOTZoNC4yNjY2NjZjMjMuMDQgMCA0NS42NTMzMzMtMy44NCA2Ny40MTMzMzQtMTAuMjRsMzAuNzItOC45NiAxNy40OTMzMzMgNTkuNzMzMzM0Yy05LjgxMzMzMyAzLjg0LTIwLjA1MzMzMyA3LjY4LTMwLjI5MzMzMyAxMC42NjY2NjYtMy44NCAxLjI4LTcuNjggMi4xMzMzMzMtMTEuNTIgMi45ODY2NjdoLTIuMTMzMzM0bC0wLjg1MzMzMyAwLjg1MzMzM2gtMi4xMzMzMzNsLTAuODUzMzM0IDAuODUzMzM0aC0yLjEzMzMzM2wtMC44NTMzMzMgMC44NTMzMzNoLTIuOTg2NjY3Yy0xMS4wOTMzMzMgMi45ODY2NjctMjIuNjEzMzMzIDQuNjkzMzMzLTM0LjEzMzMzMyA1Ljk3MzMzMy0xMC42NjY2NjcgMC44NTMzMzMtMjEuMzMzMzMzIDEuNzA2NjY3LTMyIDEuNzA2NjY3ek02NTguNzczMzMzIDUwMy4wNEgzNjUuNjUzMzMzYy04LjUzMzMzMyAwLTE1LjM2LTYuODI2NjY3LTE1LjM2LTE1LjM2di0yMDYuOTMzMzMzYzAtOC41MzMzMzMgNi44MjY2NjctMTUuMzYgMTUuMzYtMTUuMzZoMjkzLjEyYzguNTMzMzMzIDAgMTUuMzYgNi44MjY2NjcgMTUuMzYgMTUuMzZWNDg3LjY4YzAgOC41MzMzMzMtNi44MjY2NjcgMTUuMzYtMTUuMzYgMTUuMzZ6TTUxMiA0MDMuMmwtOTAuODggNTcuMTczMzMzaDE4MS43Nkw1MTIgNDAzLjJ6IG0tMTE5LjQ2NjY2Ny05NS4xNDY2Njd2MTE5Ljg5MzMzNGwxMDcuOTQ2NjY3LTY3Ljg0aDAuODUzMzMzYzMuNDEzMzMzLTEuNzA2NjY3IDYuODI2NjY3LTIuOTg2NjY3IDEwLjY2NjY2Ny0yLjk4NjY2N3M3LjI1MzMzMyAxLjI4IDEwLjY2NjY2NyAyLjk4NjY2N2gwLjg1MzMzM2wxMDcuOTQ2NjY3IDY3Ljg0di0xMTkuODkzMzM0SDM5Mi41MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VuZCIgdW5pY29kZT0iJiM1OTAxMzsiIGQ9Ik05MzguMjQgNjA3LjU3MzMzM2wtNDA2LjE4NjY2Ny0yMTcuMTczMzMzYy0xNi4yMTMzMzMtOC41MzMzMzMtMzUuNDEzMzMzLTguNTMzMzMzLTUxLjYyNjY2NiAwTDg1LjMzMzMzMyA2MDEuNnYzMy43MDY2NjdjMCAzOS42OCAzNC41NiA3Mi4xMDY2NjcgNzcuNjUzMzM0IDcyLjEwNjY2Nmg2OTguMDI2NjY2YzQyLjY2NjY2NyAwIDc3LjY1MzMzMy0zMiA3Ny42NTMzMzQtNzIuMTA2NjY2di0yNy43MzMzMzR6IG0wLTYzLjU3MzMzM3YtNDIxLjEyYzAtMzguNC0zNC41Ni02OS41NDY2NjctNzcuNjUzMzMzLTY5LjU0NjY2N0gxNjIuOTg2NjY3Yy00Mi42NjY2NjcgMC03Ny42NTMzMzMgMzEuMTQ2NjY3LTc3LjY1MzMzNCA2OS41NDY2NjdWNTM4LjAyNjY2N2w0MDEuOTItMjA3Ljc4NjY2N2MxMy42NTMzMzMtNy4yNTMzMzMgMzAuMjkzMzMzLTUuOTczMzMzIDQyLjI0IDIuMTMzMzMzLTE3LjQ5MzMzMy03LjI1MzMzMyA0MDguNzQ2NjY3IDIxMS42MjY2NjcgNDA4Ljc0NjY2NyAyMTEuNjI2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImludGVybWVkaWF0ZS1ldmVudC1jMiIgdW5pY29kZT0iJiM1OTA0ODsiIGQ9Ik01MTIgNzQ2LjY2NjY2N2MyMDAuMTA2NjY3IDAgMzYyLjY2NjY2Ny0xNjIuNTYgMzYyLjY2NjY2Ny0zNjIuNjY2NjY3cy0xNjIuNTYtMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2NyAxNjIuNTYtMzYyLjY2NjY2NyAzNjIuNjY2NjY3UzMxMS44OTMzMzMgNzQ2LjY2NjY2NyA1MTIgNzQ2LjY2NjY2N001MTIgODEwLjY2NjY2N0MyNzYuNDggODEwLjY2NjY2NyA4NS4zMzMzMzMgNjE5LjUyIDg1LjMzMzMzMyAzODRzMTkxLjE0NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3IDE5MS4xNDY2NjcgNDI2LjY2NjY2NyA0MjYuNjY2NjY3Uzc0Ny41MiA4MTAuNjY2NjY3IDUxMiA4MTAuNjY2NjY3ek01MTIgNjQwYzE0MS4yMjY2NjcgMCAyNTYtMTE0Ljc3MzMzMyAyNTYtMjU2cy0xMTQuNzczMzMzLTI1Ni0yNTYtMjU2LTI1NiAxMTQuNzczMzMzLTI1NiAyNTYgMTE0Ljc3MzMzMyAyNTYgMjU2IDI1Nm0wIDY0Yy0xNzYuNjQgMC0zMjAtMTQzLjM2LTMyMC0zMjBzMTQzLjM2LTMyMCAzMjAtMzIwIDMyMCAxNDMuMzYgMzIwIDMyMC0xNDMuMzYgMzIwLTMyMCAzMjB6TTUzMy4zMzMzMzMgMjI2LjEzMzMzM2MtMi41NiAwLTUuMTIgMC03LjI1MzMzMyAxLjI4YTIxLjE2MjY2NyAyMS4xNjI2NjcgMCAwIDAtMTQuMDggMjAuMDUzMzM0djQ5LjA2NjY2NkgzNzUuNDY2NjY3Yy0xMS45NDY2NjcgMC0yMS4zMzMzMzMgOS4zODY2NjctMjEuMzMzMzM0IDIxLjMzMzMzNHYxMzIuNjkzMzMzYzAgMTEuOTQ2NjY3IDkuMzg2NjY3IDIxLjMzMzMzMyAyMS4zMzMzMzQgMjEuMzMzMzMzSDUxMlY1MjAuOTZhMjEuMTYyNjY3IDIxLjE2MjY2NyAwIDAgMCAzNy41NDY2NjcgMTMuNjUzMzMzbDExNS4yLTEzNi41MzMzMzNjNi44MjY2NjctOC4xMDY2NjcgNi44MjY2NjctMTkuNjI2NjY3IDAtMjcuMzA2NjY3bC0xMTUuMi0xMzYuNTMzMzMzYy00LjI2NjY2Ny01LjEyLTEwLjI0LTcuNjgtMTYuMjEzMzM0LTcuNjh6IG0tMTM2LjUzMzMzMyAxMTMuMDY2NjY3aDEzNi41MzMzMzNjMTEuOTQ2NjY3IDAgMjEuMzMzMzMzLTkuMzg2NjY3IDIxLjMzMzMzNC0yMS4zMzMzMzN2LTExLjk0NjY2N0w2MjAuMzczMzMzIDM4NCA1NTQuNjY2NjY3IDQ2Mi4wOHYtMTEuOTQ2NjY3YzAtMTEuOTQ2NjY3LTkuMzg2NjY3LTIxLjMzMzMzMy0yMS4zMzMzMzQtMjEuMzMzMzMzSDM5Ni44di05MC4wMjY2Njd6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLXRocm93LWV2ZW50LW1lc3NhZ2UiIHVuaWNvZGU9IiYjNTkwNDk7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek02NzUuODQgNDc1LjczMzMzM2wtMTY0LjI2NjY2Ny05NC43Mi0xNjAgOTIuMTZ2MTMuNjUzMzM0YzAgMTYuMjEzMzMzIDEzLjIyNjY2NyAyOS40NCAyOS40NCAyOS40NGgyNjUuMzg2NjY3YzE2LjIxMzMzMyAwIDI5LjQ0LTEzLjIyNjY2NyAyOS40NC0yOS40NHYtMTEuNTJ6IG0wLTM0LjEzMzMzM3YtMTYwLjg1MzMzM2MwLTE2LjIxMzMzMy0xMy4yMjY2NjctMjkuNDQtMjkuNDQtMjkuNDRIMzgxLjQ0Yy0xNi4yMTMzMzMgMC0yOS40NCAxMy4yMjY2NjctMjkuNDQgMjkuNDR2MTU4LjI5MzMzM2wxNTIuNzQ2NjY3LTg4LjMyYzUuMTItMi45ODY2NjcgMTEuNTItMi41NiAxNi4yMTMzMzMgMC44NTMzMzNoMC40MjY2NjdsMTU0Ljg4IDg5LjZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2VxdWVudGlhbC1taS1tYXJrZXIiIHVuaWNvZGU9IiYjNTkwNTA7IiBkPSJNODc0LjY2NjY2NyA2NzJoLTY4Mi42NjY2NjdjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMnMxNC41MDY2NjcgMzIgMzIgMzJoNjgyLjY2NjY2N2MxNy40OTMzMzMgMCAzMi0xNC41MDY2NjcgMzItMzJzLTE0LjUwNjY2Ny0zMi0zMi0zMnpNODc0LjY2NjY2NyAzOTQuNjY2NjY3aC02ODIuNjY2NjY3Yy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJzMTQuNTA2NjY3IDMyIDMyIDMyaDY4Mi42NjY2NjdjMTcuNDkzMzMzIDAgMzItMTQuNTA2NjY3IDMyLTMycy0xNC41MDY2NjctMzItMzItMzJ6TTg3NC42NjY2NjcgMTE3LjMzMzMzM2gtNjgyLjY2NjY2N2MtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyczE0LjUwNjY2NyAzMiAzMiAzMmg2ODIuNjY2NjY3YzE3LjQ5MzMzMyAwIDMyLTE0LjUwNjY2NyAzMi0zMnMtMTQuNTA2NjY3LTMyLTMyLTMyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImJvdW5kYXJ5LWV2ZW50LXRpbWUtaW50ZSIgdW5pY29kZT0iJiM1OTAxNTsiIGQ9Ik01MTIgODEwLjY2NjY2N2gtMjAuNDhjLTIuOTg2NjY3LTAuNDI2NjY3LTUuOTczMzMzLTAuODUzMzMzLTguOTYtMC44NTMzMzRoLTYuNGMtMjcuMzA2NjY3LTIuOTg2NjY3LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDcuMDkzMzMzaDE1LjM2bDE1LjM2LTEuMjhjMjQuMzItMi4xMzMzMzMgNDguMjEzMzMzLTYuNCA3MS4yNTMzMzMtMTMuMjI2NjY2bDMwLjcyLTguOTYgMTcuNDkzMzM0IDYwLjE2Yy0xMi4zNzMzMzMgNC42OTMzMzMtMjUuMTczMzMzIDguOTYtMzcuOTczMzM0IDEyLjM3MzMzM2gtMi4xMzMzMzN2MC44NTMzMzNoLTIuNTZWNzk3Ljg2NjY2N2gtMi41NnYwLjg1MzMzM2gtMS4yOGMtMjEuNzYgNS41NDY2NjctNDQuMzczMzMzIDkuMzg2NjY3LTY3LjQxMzMzMyAxMS41Mi0xMS41MiAwLjg1MzMzMy0yMy40NjY2NjcgMS4yOC0zNS40MTMzMzQgMS4yOHogbS0xNzUuNzg2NjY3LTM3Ljk3MzMzNGMtOS44MTMzMzMtNC4yNjY2NjctMTkuMi04Ljk2LTI4LjU4NjY2Ni0xNC4wOC01Ljk3MzMzMy0zLjQxMzMzMy0xMS41Mi02LjQtMTcuMDY2NjY3LTkuODEzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0wLjQyNjY2N2wtMi4xMzMzMzMtMS43MDY2NjZoLTAuODUzMzM0di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM2wtMi41Ni0yLjEzMzMzM2gtMC44NTMzMzR2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjdsLTUuOTczMzMzLTQuNjkzMzM0Yy0xNi42NC0xMi4zNzMzMzMtMzIuNDI2NjY3LTI1LjYtNDcuMzYtNDAuMTA2NjY2bDQwLjUzMzMzMy00OC4yMTMzMzQgMjQuMzIgMjAuNDhjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzOC40IDI5LjQ0IDU5LjczMzMzMyA0MC45NmwyOC4xNiAxNS4zNi0zMC4yOTMzMzMgNTUuMDR6TTE3MS41MiA2NDAuODUzMzMzYy02LjQtOC41MzMzMzMtMTIuMzczMzMzLTE3LjA2NjY2Ny0xOC4zNDY2NjctMjYuMDI2NjY2LTUuMTItOC4xMDY2NjctOS44MTMzMzMtMTYuMjEzMzMzLTE0LjUwNjY2Ni0yNC4zMnYtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTEuNzA2NjY3aC0wLjQyNjY2NnYtMy44NGgtMC40MjY2Njd2LTUuOTczMzMzSDEzNi41MzMzMzN2LTAuODUzMzMzaC0wLjQyNjY2NmMtMS4yOC0yLjU2LTIuMTMzMzMzLTQuNjkzMzMzLTIuOTg2NjY3LTYuODI2NjY3di0yLjU2aC0wLjQyNjY2N2MtMS4yOC0yLjEzMzMzMy0yLjEzMzMzMy00LjY5MzMzMy0zLjQxMzMzMy02LjgyNjY2N3YtMi41NnMtMS4yOC0zLjQxMzMzMy0yLjEzMzMzMy00LjY5MzMzM1Y1NDQuNDI2NjY3bC0xLjI4LTIuOTg2NjY3di0wLjg1MzMzM3MtMS4yOC0yLjk4NjY2Ny0xLjcwNjY2Ny00LjY5MzMzNGMtMy44NC05LjgxMzMzMy03LjI1MzMzMy0yMC4wNTMzMzMtMTAuMjQtMzAuMjkzMzMzbDU4LjQ1MzMzMy0yMi42MTMzMzMgMTEuNTIgMjkuODY2NjY2YzguNTMzMzMzIDIyLjYxMzMzMyAxOS42MjY2NjcgNDMuOTQ2NjY3IDMyLjg1MzMzNCA2NC40MjY2NjdsMTcuNDkzMzMzIDI2Ljg4LTUyLjkwNjY2NyAzNC4xMzMzMzN6IG0tODEuNDkzMzMzLTE5NC41NmMtMS43MDY2NjctMTAuMjQtMi41Ni0yMC45MDY2NjctMy40MTMzMzQtMzEuNTczMzMzIDAtNS45NzMzMzMtMC44NTMzMzMtMTEuOTQ2NjY3LTAuODUzMzMzLTE3LjkyVjM1Ni4yNjY2NjdjMC04LjUzMzMzMyAwLjg1MzMzMy0xNi42NCAxLjcwNjY2Ny0yNC4zMnYtNy42OGMxLjI4LTExLjk0NjY2NyAzLjQxMzMzMy0yMy40NjY2NjcgNS41NDY2NjYtMzQuOTg2NjY3bDYyLjI5MzMzNCA4LjEwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzNjLTIuMTMzMzMzIDE1LjM2LTIuOTg2NjY3IDMxLjE0NjY2Ny0yLjk4NjY2NyA0Ni45MzMzMzMgMCA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwLjg1MzMzNCAyNS42bDIuMTMzMzMzIDMyLTYyLjcyIDQuMjY2NjY3eiBtNzguOTMzMzMzLTE4My44OTMzMzNsLTU3LjE3MzMzMy0yNi4wMjY2NjdjMy44NC05LjgxMzMzMyA3LjY4LTE5LjYyNjY2NyAxMS45NDY2NjYtMjkuNDQgMi4xMzMzMzMtNC42OTMzMzMgNC4yNjY2NjctOS4zODY2NjcgNi40LTEzLjY1MzMzM3YtNC4yNjY2NjdoMC40MjY2NjdjOS44MTMzMzMtMTkuMiAyMC40OC0zNy4xMiAzMi44NTMzMzMtNTQuMTg2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzYzYuNC04Ljk2IDEyLjgtMTcuNDkzMzMzIDIwLjA1MzMzMy0yNS42bDUwLjc3MzMzMyAzNy4xMi0xOC43NzMzMzMgMjYuMDI2NjY2Yy0xNC4wOCAxOS42MjY2NjctMjYuNDUzMzMzIDQwLjUzMzMzMy0zNi42OTMzMzMgNjIuMjkzMzM0bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzMy0xNDkuNzZsLTM3LjU0NjY2Ni01MC4zNDY2NjdjMTIuMzczMzMzLTEwLjY2NjY2NyAyNS42LTIwLjkwNjY2NyAzOS4yNTMzMzMtMzAuMjkzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gxLjI4di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC44NTMzMzNjMTcuMDY2NjY3LTExLjk0NjY2NyAzNC45ODY2NjctMjIuMTg2NjY3IDUzLjc2LTMxLjE0NjY2NyA5LjM4NjY2Ny00LjY5MzMzMyAxOS4yLTguOTYgMjkuMDEzMzMzLTEyLjhsMjYuODggNTYuNzQ2NjY3LTI5LjAxMzMzMyAxMy42NTMzMzNjLTIxLjc2IDEwLjI0LTQyLjY2NjY2NyAyMy4wNC02MS44NjY2NjcgMzcuNTQ2NjY3bC0yNS42IDE5LjJ6IG0xNTkuNTczMzM0LTgzLjJsLTguOTYtNjIuMjkzMzMzYzEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzMtNS41NDY2NjcgMTAuNjY2NjY3LTEuNzA2NjY3IDIwLjkwNjY2Ny0yLjU2IDMxLjU3MzMzMy0zLjQxMzMzM2gxMi4zNzMzMzRWLTQyLjY2NjY2N2gzMy43MDY2NjZjMTMuMjI2NjY3IDAuNDI2NjY3IDI2LjQ1MzMzMyAxLjcwNjY2NyAzOS4yNTMzMzQgMy40MTMzMzRsLTMuNDEzMzM0IDYyLjcyLTMyLTEuNzA2NjY3Yy02LjgyNjY2NyAwLTE0LjA4LTAuNDI2NjY3LTIwLjkwNjY2Ni0wLjQyNjY2Ny0xNy4wNjY2NjcgMC0zNC41NiAxLjI4LTUxLjIgMy40MTMzMzRsLTMxLjU3MzMzNCA0LjY5MzMzM3ogbTMwMi4wOCA2NGwtMjcuMzA2NjY3LTE3LjA2NjY2N2MtMjAuNDgtMTIuOC00Mi4yNC0yMy40NjY2NjctNjQuODUzMzMzLTMybC0yOS44NjY2NjctMTEuMDkzMzMzIDIyLjE4NjY2Ny01OC44OGMxMC4yNCAyLjk4NjY2NyAyMC40OCA2LjQgMzAuMjkzMzMzIDEwLjI0IDI2Ljg4IDEwLjI0IDUyLjQ4IDIyLjYxMzMzMyA3Ni4zNzMzMzMgMzcuOTczMzMzIDguOTYgNS45NzMzMzMgMTcuOTIgMTEuNTIgMjYuNDUzMzM0IDE3LjkybC0zMy4yOCA1My4zMzMzMzR6IG0xMTIuNjQgMTQwLjhsLTE1Ljc4NjY2Ny0yNy43MzMzMzNjLTExLjk0NjY2Ny0yMC45MDY2NjctMjYuMDI2NjY3LTQwLjk2LTQxLjgxMzMzMy01OS4zMDY2NjdsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmM3LjY4IDcuNjggMTQuOTMzMzMzIDE1LjM2IDIxLjc2IDIzLjA0IDMuNDEzMzMzIDQuMjY2NjY3IDYuODI2NjY3IDguMTA2NjY3IDkuODEzMzMzIDEyLjM3MzMzM3YwLjg1MzMzNGgwLjQyNjY2N2wyLjEzMzMzMyAyLjk4NjY2NmgwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N1YxMjhoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNIODUzLjMzMzMzM3YwLjg1MzMzM2wyLjU2IDMuODR2MC44NTMzMzRjMTQuOTMzMzMzIDIwLjkwNjY2NyAyNy43MzMzMzMgNDMuMDkzMzMzIDM4LjQgNjYuMTMzMzMzbC01NC42MTMzMzMgMzAuNzJ6IG0zMS4xNDY2NjYgMTc3LjQ5MzMzM3YtMzJjLTAuODUzMzMzLTI0LjMyLTMuNDEzMzMzLTQ4LjY0LTguNTMzMzMzLTcyLjEwNjY2NmwtNi44MjY2NjctMzEuMTQ2NjY3IDYxLjQ0LTEzLjIyNjY2N2MxMS41MiAzOC40IDE3LjQ5MzMzMyA3OC45MzMzMzMgMTcuNDkzMzM0IDEyMS4xNzMzMzQgMCA4Ljk2IDAgMTcuOTItMC44NTMzMzQgMjYuNDUzMzMzbC02Mi43MiAwLjg1MzMzM3ogbS0yLjEzMzMzMyAyMDAuMTA2NjY3bC01NS40NjY2NjctMjkuNDQgMTQuOTMzMzM0LTI4LjE2YzExLjUyLTIxLjMzMzMzMyAyMC40OC00My45NDY2NjcgMjcuMzA2NjY2LTY2Ljk4NjY2N2w4Ljk2LTMwLjcyIDYwLjE2IDE3LjkyYy0yLjU2IDEyLjM3MzMzMy01Ljk3MzMzMyAyNC4zMi05LjM4NjY2NiAzNi4yNjY2NjdWNTE5LjI1MzMzM2MtMy40MTMzMzMgMTAuMjQtNy4yNTMzMzMgMjAuMDUzMzMzLTExLjA5MzMzNCAyOS44NjY2NjdWNTU3LjY1MzMzM2MtOC41MzMzMzMgMTkuNjI2NjY3LTE4LjM0NjY2NyAzNy45NzMzMzMtMjkuODY2NjY2IDU1Ljg5MzMzNHogbS0xNTMuMTczMzMzIDE0NS40OTMzMzNsLTM0LjU2LTUyLjQ4IDI2Ljg4LTE3LjQ5MzMzM2MyMC4wNTMzMzMtMTMuMjI2NjY3IDM4LjgyNjY2Ny0yOC41ODY2NjcgNTYuMzItNDUuNjUzMzMzbDIyLjYxMzMzMy0yMi42MTMzMzQgNDQuMzczMzMzIDQ0LjM3MzMzNGE0MjMuMTY4IDQyMy4xNjggMCAwIDEtODUuMzMzMzMzIDc1LjUyaC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMC40MjY2NjdjLTguOTYgNi40LTE3LjkyIDExLjk0NjY2Ny0yNy4zMDY2NjcgMTcuMDY2NjY3ek0zNDAuMDUzMzMzIDY1NC4wOGMtOC45Ni01LjU0NjY2Ny0xNy40OTMzMzMtMTEuOTQ2NjY3LTI2LjAyNjY2Ni0xOC4zNDY2NjctMTguNzczMzMzLTE0LjkzMzMzMy0zNS44NC0zMS41NzMzMzMtNTAuNzczMzM0LTQ5LjkyaC0wLjQyNjY2NnYtMC44NTMzMzNoLTAuODUzMzM0di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNIMjYwLjI2NjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0wLjg1MzMzNGgtMC40MjY2Njd2LTEuMjhoLTAuNDI2NjY2Yy03LjY4LTEwLjI0LTE0LjkzMzMzMy0yMC45MDY2NjctMjEuNzYtMzJsNDkuOTItMzcuMTIgMTkuMiAyNS42YzEzLjY1MzMzMyAxOC4zNDY2NjcgMjkuNDQgMzQuNTYgNDcuMzYgNDkuMDY2NjY3bDI1LjE3MzMzMyAxOS42MjY2NjctMzguODI2NjY3IDQ5LjA2NjY2NnpNMjA5LjkyIDQ5MC4yNGMtOC45Ni0yNS42LTE0LjkzMzMzMy01Mi45MDY2NjctMTcuMDY2NjY3LTgxLjA2NjY2N1YzNzEuNjI2NjY3YzAtMTAuNjY2NjY3IDEuMjgtMjEuMzMzMzMzIDIuNTYtMzJMMjU3LjI4IDM0MS4zMzMzMzN2MzkuMjUzMzM0Yy0wLjQyNjY2NyAyMC40OCAxLjcwNjY2NyA0MC41MzMzMzMgNi40IDYwLjE2bDcuNjggMzEuMTQ2NjY2LTYwLjU4NjY2NyAxNC41MDY2Njd6IG01NS44OTMzMzMtMTgzLjQ2NjY2N2wtNTYuNzQ2NjY2LTI2LjAyNjY2NmMzLjQxMzMzMy0xMC4yNCA3LjI1MzMzMy0yMC4wNTMzMzMgMTEuOTQ2NjY2LTI5LjQ0IDEuMjgtMi41NiAyLjEzMzMzMy01LjEyIDMuNDEzMzM0LTcuMjUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTEuNzA2NjY3aDAuNDI2NjY2di0xLjcwNjY2N2gwLjQyNjY2N1YyMjguMjY2NjY3aDAuNDI2NjY3di0xLjcwNjY2N2gwLjQyNjY2NnYtMS43MDY2NjdoMC40MjY2Njd2LTEuNzA2NjY2aDAuODUzMzMzdi0yLjU2aDAuODUzMzM0di0xLjI4aDAuNDI2NjY2di0wLjg1MzMzNGgwLjg1MzMzNHYtMS4yOGgwLjQyNjY2NmwwLjg1MzMzNC0xLjI4di0wLjg1MzMzM2gwLjQyNjY2NmwxLjI4LTIuMTMzMzMzdi0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC44NTMzMzN2LTAuODUzMzMzaDAuNDI2NjY3di0xLjI4aDAuNDI2NjY3di0wLjg1MzMzNGgwLjQyNjY2NnYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMS43MDY2NjZoMC40MjY2NjdjNC4yNjY2NjctNS41NDY2NjcgOC4xMDY2NjctMTEuMDkzMzMzIDEyLjgtMTYuMjEzMzM0IDYuODI2NjY3LTguNTMzMzMzIDE0LjA4LTE2LjIxMzMzMyAyMS43Ni0yMy40NjY2NjZsNDcuNzg2NjY2IDQwLjEwNjY2Ni0yMC40OCAyNC43NDY2NjdjLTE0LjUwNjY2NyAxNy40OTMzMzMtMjYuODggMzYuNjkzMzMzLTM2LjI2NjY2NiA1Ny42bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzNC0xMzUuNjhsLTI4LjU4NjY2Ny01NS40NjY2NjZjOS44MTMzMzMtNi40IDE5LjYyNjY2Ny0xMS45NDY2NjcgMzAuMjkzMzMzLTE3LjQ5MzMzNGgwLjg1MzMzNHYtMC44NTMzMzNoMS43MDY2NjZ2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gxLjI4di0wLjg1MzMzM2gxLjcwNjY2N3YtMC44NTMzMzRoMS43MDY2NjZjMTMuMjI2NjY3LTYuNCAyNi44OC0xMS45NDY2NjcgNDEuMzg2NjY3LTE2LjIxMzMzM2gyLjEzMzMzM2wwLjg1MzMzNC0wLjg1MzMzM2gyLjEzMzMzM2wwLjg1MzMzMy0wLjg1MzMzNGgxLjcwNjY2N2wwLjg1MzMzMy0wLjg1MzMzM2gyLjEzMzMzNGwwLjg1MzMzMy0wLjg1MzMzM2M1LjEyLTEuMjggMTAuMjQtMi41NiAxNS43ODY2NjctMy44NCAxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctMy44NCAzMS41NzMzMzMtNS4xMmwxMi44IDYxLjAxMzMzMy0zMS4xNDY2NjcgNi40Yy0yMi4xODY2NjcgNC42OTMzMzMtNDMuOTQ2NjY3IDEyLjM3MzMzMy02NCAyMi42MTMzMzNsLTI4LjU4NjY2NiAxNC41MDY2Njd6IG0yODcuNTczMzMzLTIuNTZsLTI4LjU4NjY2Ny0xNC4wOGMtMjAuNDgtMTAuMjQtNDIuMjQtMTcuNDkzMzMzLTY0LjQyNjY2Ni0yMS43NmwtMzEuNTczMzM0LTUuOTczMzMzIDExLjk0NjY2Ny02MS40NGMxMC42NjY2NjcgMC44NTMzMzMgMjEuMzMzMzMzIDIuNTYgMzEuNTczMzMzIDQuMjY2NjY3IDE3LjkyIDMuNDEzMzMzIDM0Ljk4NjY2NyA4LjUzMzMzMyA1MS42MjY2NjcgMTQuNTA2NjY2bDEuNzA2NjY3IDAuODUzMzM0aDAuNDI2NjY2bDIuOTg2NjY3IDEuMjhjOC4xMDY2NjcgMy40MTMzMzMgMTYuMjEzMzMzIDYuODI2NjY3IDIzLjg5MzMzMyAxMC42NjY2NjYgOS4zODY2NjcgNC42OTMzMzMgMTguNzczMzMzIDkuODEzMzMzIDI3LjczMzMzNCAxNS43ODY2NjdsLTI3LjczMzMzNCA1NS44OTMzMzN6IG0xMDIuODI2NjY3IDEzMy45NzMzMzRsLTEzLjY1MzMzNC0yOS4wMTMzMzRjLTkuODEzMzMzLTIwLjQ4LTIyLjE4NjY2Ny0zOS42OC0zNy41NDY2NjYtNTYuNzQ2NjY2bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZhMzU2LjQ4IDM1Ni40OCAwIDAgMSAzOC40IDQzLjk0NjY2NnYwLjg1MzMzNGgwLjg1MzMzM3YwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2N3YxLjI4aDAuODUzMzMzdjAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djEuNzA2NjY2aDAuNDI2NjY2djEuNzA2NjY3aDAuNDI2NjY3djEuNzA2NjY3aDAuNDI2NjY3YzEzLjY1MzMzMyAyMC45MDY2NjcgMjQuNzQ2NjY3IDQzLjA5MzMzMyAzMy4yOCA2Ni45ODY2NjZsLTU2LjMyIDI2Ljg4eiBtNTguODggMTgyLjYxMzMzM2wtNjEuMDEzMzM0LTEzLjY1MzMzMyA2LjgyNjY2Ny0zMS4xNDY2NjdjNC4yNjY2NjctMTguMzQ2NjY3IDUuOTczMzMzLTM3LjEyIDUuOTczMzMzLTU1Ljg5MzMzM3YtMTEuOTQ2NjY3bC0xLjI4LTMyIDYyLjI5MzMzNC0yLjk4NjY2N2MxLjcwNjY2NyAxMC4yNCAyLjU2IDIwLjkwNjY2NyAyLjk4NjY2NiAzMS41NzMzMzRWNDAxLjQ5MzMzM2EzMjMuODQgMzIzLjg0IDAgMCAxLTE1Ljc4NjY2NiA4Ni42MTMzMzR6IG0tMTI3LjU3MzMzNCAxNjYuNGwtMzkuMjUzMzMzLTQ4LjIxMzMzMyAyNC43NDY2NjctMjAuMDUzMzM0YzE3LjQ5MzMzMy0xNC41MDY2NjcgMzMuMjgtMzEuMTQ2NjY3IDQ2LjUwNjY2Ni00OS40OTMzMzNsMTguNzczMzM0LTI2LjAyNjY2NyA1MC43NzMzMzMgMzYuMjY2NjY3Yy01LjEyIDkuMzg2NjY3LTExLjA5MzMzMyAxNy45Mi0xNy4wNjY2NjcgMjYuODgtMTYuNjQgMjMuNDY2NjY3LTM2LjI2NjY2NyA0NC4zNzMzMzMtNTguMDI2NjY2IDYyLjI5MzMzMy04LjEwNjY2NyA2LjgyNjY2Ny0xNi42NCAxMy4yMjY2NjctMjUuNiAxOS4yek01MTIgNzA0LjQyNjY2N2MtOC45NiAwLTE3LjkyIDAtMjYuNDUzMzMzLTEuMjhoLTYuODI2NjY3di0wLjg1MzMzNGgtNS45NzMzMzN2LTAuODUzMzMzaC00LjY5MzMzNHYtMC44NTMzMzNoLTUuMTJsLTAuODUzMzMzLTAuODUzMzM0aC0zLjg0di0wLjg1MzMzM2gtMy40MTMzMzNsLTAuODUzMzM0LTAuODUzMzMzaC0zLjQxMzMzM2wtMC44NTMzMzMtMC44NTMzMzRoLTIuMTMzMzM0bC0yLjEzMzMzMy0wLjg1MzMzM2gtMi45ODY2NjdsLTAuODUzMzMzLTAuODUzMzMzaC0yLjEzMzMzM3YtMC44NTMzMzRoLTIuOTg2NjY3di0wLjg1MzMzM2gtMi45ODY2Njd2LTAuODUzMzMzaC0yLjU2di0wLjg1MzMzNGgtMi41NnYtMC44NTMzMzNoLTEuMjhjLTEwLjI0LTIuOTg2NjY3LTIwLjQ4LTYuNC0zMC4yOTMzMzMtMTAuMjRsMTYuMjEzMzMzLTYwLjE2IDMwLjcyIDguNTMzMzMzYTI1NC4yOTMzMzMgMjU0LjI5MzMzMyAwIDAgMCA2Ny40MTMzMzQgOC45Nmg0LjI2NjY2NmMyMy4wNCAwIDQ1LjY1MzMzMy0zLjg0IDY3LjQxMzMzNC0xMC4yNGwzMC43Mi04Ljk2IDE3LjQ5MzMzMyA1OS43MzMzMzRjLTkuODEzMzMzIDMuODQtMjAuMDUzMzMzIDcuNjgtMzAuMjkzMzMzIDEwLjY2NjY2Ni0zLjg0IDEuMjgtNy42OCAyLjEzMzMzMy0xMS41MiAyLjk4NjY2N2gtMi4xMzMzMzRsLTAuODUzMzMzIDAuODUzMzMzaC0yLjEzMzMzM2wtMC44NTMzMzQgMC44NTMzMzRoLTIuMTMzMzMzbC0wLjg1MzMzMyAwLjg1MzMzM2gtMi45ODY2NjdjLTExLjA5MzMzMyAyLjk4NjY2Ny0yMi42MTMzMzMgNC42OTMzMzMtMzQuMTMzMzMzIDUuOTczMzMzLTEwLjY2NjY2NyAwLjg1MzMzMy0yMS4zMzMzMzMgMS43MDY2NjctMzIgMS43MDY2Njd6TTUxMiA1MDkuODY2NjY3YTEyNS44MjQgMTI1LjgyNCAwIDEgMCAwLTI1MS43MzMzMzQgMTI1LjgyNCAxMjUuODI0IDAgMSAwIDAgMjUxLjczMzMzNG0wIDUzLjMzMzMzM2ExNzkuMiAxNzkuMiAwIDEgMS0wLjA0MjY2Ny0zNTguMzU3MzMzQTE3OS4yIDE3OS4yIDAgMCAxIDUxMiA1NjMuMnpNNTU4LjkzMzMzMyAzNDYuMDI2NjY3SDUxMmMtMTEuOTQ2NjY3IDAtMjEuMzMzMzMzIDkuMzg2NjY3LTIxLjMzMzMzMyAyMS4zMzMzMzN2NzUuMDkzMzMzYzAgMTEuOTQ2NjY3IDkuMzg2NjY3IDIxLjMzMzMzMyAyMS4zMzMzMzMgMjEuMzMzMzM0czIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzMtMjEuMzMzMzM0di01My43NmgyNS42YzExLjk0NjY2NyAwIDIxLjMzMzMzMy05LjM4NjY2NyAyMS4zMzMzMzQtMjEuMzMzMzMzcy05LjM4NjY2Ny0yMS4zMzMzMzMtMjEuMzMzMzM0LTIxLjMzMzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsYW5lLWRpdmlkZS10aHJlZSIgdW5pY29kZT0iJiM1OTA1MTsiIGQ9Ik04NzQuNjY2NjY3IDY2MS4zMzMzMzN2LTU1NC42NjY2NjZoLTcyNS4zMzMzMzR2NTU0LjY2NjY2Nmg3MjUuMzMzMzM0TTg5NiA3MjUuMzMzMzMzSDEyOGMtMjMuNDY2NjY3IDAtNDIuNjY2NjY3LTE5LjItNDIuNjY2NjY3LTQyLjY2NjY2NnYtNTk3LjMzMzMzNGMwLTIzLjQ2NjY2NyAxOS4yLTQyLjY2NjY2NyA0Mi42NjY2NjctNDIuNjY2NjY2aDc2OGMyMy40NjY2NjcgMCA0Mi42NjY2NjcgMTkuMiA0Mi42NjY2NjcgNDIuNjY2NjY2VjY4Mi42NjY2NjdjMCAyMy40NjY2NjctMTkuMiA0Mi42NjY2NjctNDIuNjY2NjY3IDQyLjY2NjY2NnpNMTI4IDUzOC40NTMzMzNoNDIuNjY2NjY3di01My4zMzMzMzNIMTI4ek04MTAuNjY2NjY3IDQ4NS41NDY2NjdoLTg1LjMzMzMzNFY1MzguODhoODUuMzMzMzM0di01My4zMzMzMzN6IG0tMTI4IDBoLTg1LjMzMzMzNFY1MzguODhoODUuMzMzMzM0di01My4zMzMzMzN6IG0tMTI4IDBoLTg1LjMzMzMzNFY1MzguODhoODUuMzMzMzM0di01My4zMzMzMzN6IG0tMTI4IDBIMzQxLjMzMzMzM1Y1MzguODhoODUuMzMzMzM0di01My4zMzMzMzN6IG0tMTI4IDBIMjEzLjMzMzMzM1Y1MzguODhoODUuMzMzMzM0di01My4zMzMzMzN6TTg1My4zMzMzMzMgNTM4LjQ1MzMzM2g0Mi42NjY2Njd2LTUzLjMzMzMzM2gtNDIuNjY2NjY3ek0xMjggMzI1LjEyaDQyLjY2NjY2N3YtNTMuMzMzMzMzSDEyOHpNODEwLjY2NjY2NyAyNzIuMjEzMzMzaC04NS4zMzMzMzR2NTMuMzMzMzM0aDg1LjMzMzMzNHYtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzR2NTMuMzMzMzM0aDg1LjMzMzMzNHYtNTMuMzMzMzM0eiBtLTEyOCAwaC04NS4zMzMzMzR2NTMuMzMzMzM0aDg1LjMzMzMzNHYtNTMuMzMzMzM0eiBtLTEyOCAwSDM0MS4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzNHYtNTMuMzMzMzM0eiBtLTEyOCAwSDIxMy4zMzMzMzN2NTMuMzMzMzM0aDg1LjMzMzMzNHYtNTMuMzMzMzM0ek04NTMuMzMzMzMzIDMyNS4xMmg0Mi42NjY2Njd2LTUzLjMzMzMzM2gtNDIuNjY2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImNhbGwtYWN0aXZpdHkiIHVuaWNvZGU9IiYjNTkwNTI7IiBkPSJNODM1LjQxMzMzMyA2MDAuNzQ2NjY3di00MzMuNDkzMzM0SDE4OC41ODY2NjdWNjAwLjc0NjY2N2g2NDYuODI2NjY2bTYxLjg2NjY2NyAxMDMuMjUzMzMzSDEyNi43MmE0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2Ny00MS4zODY2Njd2LTU1Ny4yMjY2NjZjMC0yMi42MTMzMzMgMTguMzQ2NjY3LTQxLjM4NjY2NyA0MS4zODY2NjctNDEuMzg2NjY3aDc3MC41NmMyMi42MTMzMzMgMCA0MS4zODY2NjcgMTguMzQ2NjY3IDQxLjM4NjY2NyA0MS4zODY2NjdWNjYyLjYxMzMzM2E0MS4zODY2NjcgNDEuMzg2NjY3IDAgMCAxLTQxLjM4NjY2NyA0MS4zODY2Njd6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZW5kLWV2ZW50LWxpbmsiIHVuaWNvZGU9IiYjNTkwNTM7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUzNC42MTMzMzMgNTI5LjA2NjY2N3YtNzQuNjY2NjY3SDM2Ni45MzMzMzN2LTE0MC44aDE2Ny42OHYtNzQuNjY2NjY3YzQwLjk2IDQ4LjIxMzMzMyA4MS40OTMzMzMgOTYuODUzMzMzIDEyMi40NTMzMzQgMTQ1LjA2NjY2N2wtMTIyLjQ1MzMzNCAxNDUuMDY2NjY3eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InRyYW5zYWN0aW9uIiB1bmljb2RlPSImIzU5MDU0OyIgZD0iTTg3Ni4zNzMzMzMgNjQ0LjI2NjY2N3YtNDg3LjY4aC03MjUuMzMzMzMzVjY0NC4yNjY2NjdoNzI1LjMzMzMzM20yMy40NjY2NjcgNjRIMTI3LjU3MzMzM2MtMjIuMTg2NjY3IDAtNDAuNTMzMzMzLTE4LjM0NjY2Ny00MC41MzMzMzMtNDAuNTMzMzM0di01MzQuNjEzMzMzYzAtMjIuMTg2NjY3IDE4LjM0NjY2Ny00MC41MzMzMzMgNDAuNTMzMzMzLTQwLjUzMzMzM2g3NzIuMjY2NjY3YzIyLjE4NjY2NyAwIDQwLjUzMzMzMyAxOC4zNDY2NjcgNDAuNTMzMzMzIDQwLjUzMzMzM1Y2NjcuNzMzMzMzYzAgMjIuMTg2NjY3LTE4LjM0NjY2NyA0MC41MzMzMzMtNDAuNTMzMzMzIDQwLjUzMzMzNHpNNzQ4LjM3MzMzMyA1MzguODh2LTI3Ni40OGgtNDY5LjMzMzMzM1Y1MzguODhoNDY5LjMzMzMzM20zNi42OTMzMzQgNjRIMjQyLjM0NjY2N2MtMTUuMzYgMC0yNy4zMDY2NjctMTIuMzczMzMzLTI3LjMwNjY2Ny0yNy4zMDY2Njd2LTM0OS40NGMwLTE1LjM2IDEyLjM3MzMzMy0yNy4zMDY2NjcgMjcuMzA2NjY3LTI3LjMwNjY2Nmg1NDIuMjkzMzMzYzE1LjM2IDAgMjcuMzA2NjY3IDEyLjM3MzMzMyAyNy4zMDY2NjcgMjcuMzA2NjY2VjU3NS4xNDY2NjdjMCAxNS4zNi0xMi4zNzMzMzMgMjcuMzA2NjY3LTI3LjMwNjY2NyAyNy4zMDY2NjZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW50ZXJtZWRpYXRlLWV2ZW50LXQxIiB1bmljb2RlPSImIzU5MDU1OyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA2NDBjMTQxLjIyNjY2NyAwIDI1Ni0xMTQuNzczMzMzIDI1Ni0yNTZzLTExNC43NzMzMzMtMjU2LTI1Ni0yNTYtMjU2IDExNC43NzMzMzMtMjU2IDI1NiAxMTQuNzczMzMzIDI1NiAyNTYgMjU2bTAgNjRjLTE3Ni42NCAwLTMyMC0xNDMuMzYtMzIwLTMyMHMxNDMuMzYtMzIwIDMyMC0zMjAgMzIwIDE0My4zNiAzMjAgMzIwLTE0My4zNiAzMjAtMzIwIDMyMHpNNTEyIDU2OS4xNzMzMzNjLTQzLjUyLTEyMS42LTcxLjY4LTI0OC4zMi0xMTUuMi0zNjkuOTIgNDAuMTA2NjY3IDM5LjY4IDc1LjA5MzMzMyA4NC40OCAxMTUuMiAxMjQuNTg2NjY3bDExNS4yLTEyNC41ODY2NjdjLTM5LjI1MzMzMyAxMjMuMzA2NjY3LTc1Ljk0NjY2NyAyNDcuMDQtMTE1LjIgMzY5LjkyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImludGVybWVkaWF0ZS10aHJvdy1ldmVudC1jb21wZW5zYXRpb24iIHVuaWNvZGU9IiYjNTkwNTY7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek0zMzkuMiAzNzAuNzczMzMzbDEyOS4yOC05OC41NmMxMS4wOTMzMzMtOC41MzMzMzMgMjYuNDUzMzMzLTAuNDI2NjY3IDI2LjQ1MzMzMyAxMy4yMjY2NjdWNDgyLjU2YzAgMTMuNjUzMzMzLTE1Ljc4NjY2NyAyMS4zMzMzMzMtMjYuNDUzMzMzIDEzLjIyNjY2N2wtMTI5LjI4LTk4LjU2Yy04LjUzMzMzMy02LjgyNjY2Ny04LjUzMzMzMy0xOS42MjY2NjcgMC0yNi40NTMzMzR6TTUwMS4zMzMzMzMgMzcwLjc3MzMzM2wxMjkuMjgtOTguNTZjMTEuMDkzMzMzLTguNTMzMzMzIDI2LjQ1MzMzMy0wLjQyNjY2NyAyNi40NTMzMzQgMTMuMjI2NjY3VjQ4Mi41NmMwIDEzLjY1MzMzMy0xNS43ODY2NjcgMjEuMzMzMzMzLTI2LjQ1MzMzNCAxMy4yMjY2NjdsLTEyOS4yOC05OC41NmMtOC41MzMzMzMtNi44MjY2NjctOC41MzMzMzMtMTkuNjI2NjY3IDAtMjYuNDUzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImdhdGV3YXktcGFyYWxsZWwiIHVuaWNvZGU9IiYjNTkwNTc7IiBkPSJNNTEyIDc2Ny41NzMzMzNMODk1LjU3MzMzMyAzODQgNTEyIDAuNDI2NjY3IDEyOC40MjY2NjcgMzg0IDUxMiA3NjcuNTczMzMzbTAgNzUuMDkzMzM0Yy05LjM4NjY2NyAwLTE5LjItMy44NC0yNi40NTMzMzMtMTEuMDkzMzM0bC00MjEuMTItNDIxLjEyYTM3LjEyIDM3LjEyIDAgMCAxIDAtNTIuNDhsNDIxLjU0NjY2Ni00MjEuNTQ2NjY2YTM3LjEyIDM3LjEyIDAgMCAxIDUyLjkwNjY2NyAwbDQyMS41NDY2NjcgNDIxLjU0NjY2NmEzNy4xMiAzNy4xMiAwIDAgMSAwIDUyLjQ4bC00MjEuOTczMzM0IDQyMS4xMmEzNy4xMiAzNy4xMiAwIDAgMS0yNi40NTMzMzMgMTEuMDkzMzM0ek02ODIuNjY2NjY3IDM1Ny41NDY2NjdIMzQxLjMzMzMzM2MtMTQuOTMzMzMzIDAtMjYuNDUzMzMzIDExLjk0NjY2Ny0yNi40NTMzMzMgMjYuNDUzMzMzczExLjk0NjY2NyAyNi40NTMzMzMgMjYuNDUzMzMzIDI2LjQ1MzMzM2gzNDEuMzMzMzM0YzE0LjkzMzMzMyAwIDI2LjQ1MzMzMy0xMS45NDY2NjcgMjYuNDUzMzMzLTI2LjQ1MzMzM3MtMTEuOTQ2NjY3LTI2LjQ1MzMzMy0yNi40NTMzMzMtMjYuNDUzMzMzek01MTIgMTg2Ljg4Yy0xNC45MzMzMzMgMC0yNi40NTMzMzMgMTEuOTQ2NjY3LTI2LjQ1MzMzMyAyNi40NTMzMzNWNTU0LjY2NjY2N2MwIDE0LjUwNjY2NyAxMS45NDY2NjcgMjYuNDUzMzMzIDI2LjQ1MzMzMyAyNi40NTMzMzNzMjYuNDUzMzMzLTExLjk0NjY2NyAyNi40NTMzMzMtMjYuNDUzMzMzdi0zNDEuMzMzMzM0YzAtMTQuNTA2NjY3LTExLjk0NjY2Ny0yNi40NTMzMzMtMjYuNDUzMzMzLTI2LjQ1MzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnRlcm1lZGlhdGUtZXZlbnQtYzEiIHVuaWNvZGU9IiYjNTkwNTg7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTEyIDY0MGMxNDEuMjI2NjY3IDAgMjU2LTExNC43NzMzMzMgMjU2LTI1NnMtMTE0Ljc3MzMzMy0yNTYtMjU2LTI1Ni0yNTYgMTE0Ljc3MzMzMy0yNTYgMjU2IDExNC43NzMzMzMgMjU2IDI1NiAyNTZtMCA2NGMtMTc2LjY0IDAtMzIwLTE0My4zNi0zMjAtMzIwczE0My4zNi0zMjAgMzIwLTMyMCAzMjAgMTQzLjM2IDMyMCAzMjAtMTQzLjM2IDMyMC0zMjAgMzIwek02MTguNjY2NjY3IDE5MS4xNDY2NjdjLTUuOTczMzMzIDAtMTEuNTIgMi4xMzMzMzMtMTUuNzg2NjY3IDYuODI2NjY2bC05MS4zMDY2NjcgOTguNTZjLTEyLjgtMTMuMjI2NjY3LTI0Ljc0NjY2Ny0yNi44OC0zNy4xMi00MC45Ni0xNy40OTMzMzMtMjAuMDUzMzMzLTM1LjQxMzMzMy0zOS42OC01NC4xODY2NjYtNTguNDUzMzMzYTIxLjMzMzMzMyAyMS4zMzMzMzMgMCAwIDAtMjYuNDUzMzM0LTIuOTg2NjY3IDIxLjEyIDIxLjEyIDAgMCAwLTguNTMzMzMzIDI1LjE3MzMzNGMyMC4wNTMzMzMgNTUuODkzMzMzIDM2LjY5MzMzMyAxMTMuOTIgNTIuOTA2NjY3IDE2OS44MTMzMzMgMTYuMjEzMzMzIDU2Ljc0NjY2NyAzMy4yOCAxMTUuNjI2NjY3IDUzLjc2IDE3Mi44IDIuOTg2NjY3IDguNTMzMzMzIDExLjA5MzMzMyAxNC4wOCAyMC4wNTMzMzMgMTQuMDggOC45NiAwIDE3LjA2NjY2Ny01Ljk3MzMzMyAyMC4wNTMzMzMtMTQuOTMzMzMzIDE3LjkyLTU3LjE3MzMzMyAzNS44NC0xMTMuOTIgNTMuMzMzMzM0LTE3MS4wOTMzMzQgMTcuNDkzMzMzLTU3LjE3MzMzMyAzNS40MTMzMzMtMTE0LjM0NjY2NyA1My4zMzMzMzMtMTcxLjUyYTIxLjEyIDIxLjEyIDAgMCAwLTIwLjA1MzMzMy0yNy43MzMzMzN6IG0tMTA2LjY2NjY2NyAxNTcuODY2NjY2aDAuNDI2NjY3YzUuNTQ2NjY3IDAgMTEuMDkzMzMzLTIuNTYgMTUuMzYtNi44MjY2NjZsNDIuMjQtNDUuNjUzMzM0Yy04LjUzMzMzMyAyNi44OC0xNi42NCA1NC4xODY2NjctMjUuMTczMzM0IDgxLjQ5MzMzNC0xMS4wOTMzMzMgMzYuMjY2NjY3LTIyLjE4NjY2NyA3Mi4xMDY2NjctMzMuNzA2NjY2IDEwOC4zNzMzMzMtMTEuNTItMzYuMjY2NjY3LTIxLjc2LTcyLjUzMzMzMy0zMi0xMDguMzczMzMzLTcuMjUzMzMzLTI2LjAyNjY2Ny0xNC45MzMzMzMtNTIuMDUzMzMzLTIzLjA0LTc4LjUwNjY2NyAxMy4yMjY2NjcgMTQuOTMzMzMzIDI2Ljg4IDI5LjQ0IDQwLjk2IDQzLjUyYTIxLjc2IDIxLjc2IDAgMCAwIDE0LjkzMzMzMyA2LjR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm91bmRhcnktZXZlbnQtY29tcGVuc2F0aW9uIiB1bmljb2RlPSImIzU5MDU5OyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA2NDBjMTQxLjIyNjY2NyAwIDI1Ni0xMTQuNzczMzMzIDI1Ni0yNTZzLTExNC43NzMzMzMtMjU2LTI1Ni0yNTYtMjU2IDExNC43NzMzMzMtMjU2IDI1NiAxMTQuNzczMzMzIDI1NiAyNTYgMjU2bTAgNjRjLTE3Ni42NCAwLTMyMC0xNDMuMzYtMzIwLTMyMHMxNDMuMzYtMzIwIDMyMC0zMjAgMzIwIDE0My4zNiAzMjAgMzIwLTE0My4zNiAzMjAtMzIwIDMyMHpNNDUyLjI2NjY2NyA0MzMuNDkzMzMzdi05OC45ODY2NjZMMzg3LjQxMzMzMyAzODRsNjQuODUzMzM0IDQ5LjQ5MzMzM20yNS42IDY5LjEyYy0zLjQxMzMzMyAwLTcuMjUzMzMzLTEuMjgtMTAuMjQtMy40MTMzMzNsLTEzMi42OTMzMzQtMTAxLjEyYy04Ljk2LTYuODI2NjY3LTguOTYtMjAuMDUzMzMzIDAtMjYuODhsMTMyLjY5MzMzNC0xMDEuMTJjMi45ODY2NjctMi41NiA2LjgyNjY2Ny0zLjQxMzMzMyAxMC4yNC0zLjQxMzMzMyA4Ljk2IDAgMTcuMDY2NjY3IDYuODI2NjY3IDE3LjA2NjY2NiAxNy4wNjY2NjZWNDg2LjRjMCAxMC4yNC04LjEwNjY2NyAxNy4wNjY2NjctMTcuMDY2NjY2IDE3LjA2NjY2N3pNNjE4LjY2NjY2NyA0MzMuNDkzMzMzdi05OC45ODY2NjZMNTUzLjgxMzMzMyAzODRsNjQuODUzMzM0IDQ5LjQ5MzMzM20yNS42IDY5LjEyYy0zLjQxMzMzMyAwLTcuMjUzMzMzLTEuMjgtMTAuMjQtMy40MTMzMzNsLTEzMi42OTMzMzQtMTAxLjEyYy04Ljk2LTYuODI2NjY3LTguOTYtMjAuMDUzMzMzIDAtMjYuODhsMTMyLjY5MzMzNC0xMDEuMTJjMi45ODY2NjctMi41NiA2LjgyNjY2Ny0zLjQxMzMzMyAxMC4yNC0zLjQxMzMzMyA4Ljk2IDAgMTcuMDY2NjY3IDYuODI2NjY3IDE3LjA2NjY2NiAxNy4wNjY2NjZWNDg2LjRjMCAxMC4yNC04LjEwNjY2NyAxNy4wNjY2NjctMTcuMDY2NjY2IDE3LjA2NjY2N3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnYXRld2F5LW9yIiB1bmljb2RlPSImIzU5MDYwOyIgZD0iTTUxMiA3NjcuNTczMzMzTDg5NS41NzMzMzMgMzg0IDUxMiAwLjQyNjY2NyAxMjguNDI2NjY3IDM4NCA1MTIgNzY3LjU3MzMzM20wIDc1LjA5MzMzNGMtOS4zODY2NjcgMC0xOS4yLTMuODQtMjYuNDUzMzMzLTExLjA5MzMzNGwtNDIxLjEyLTQyMS4xMmEzNy4xMiAzNy4xMiAwIDAgMSAwLTUyLjQ4bDQyMS41NDY2NjYtNDIxLjU0NjY2NmEzNy4xMiAzNy4xMiAwIDAgMSA1Mi45MDY2NjcgMGw0MjEuNTQ2NjY3IDQyMS41NDY2NjZhMzcuMTIgMzcuMTIgMCAwIDEgMCA1Mi40OGwtNDIxLjk3MzMzNCA0MjEuMTJhMzcuMTIgMzcuMTIgMCAwIDEtMjYuNDUzMzMzIDExLjA5MzMzNHpNNTEyIDUyMi42NjY2NjdjNzYuMzczMzMzIDAgMTM4LjY2NjY2Ny02Mi4yOTMzMzMgMTM4LjY2NjY2Ny0xMzguNjY2NjY3cy02Mi4yOTMzMzMtMTM4LjY2NjY2Ny0xMzguNjY2NjY3LTEzOC42NjY2NjdTMzczLjMzMzMzMyAzMDcuNjI2NjY3IDM3My4zMzMzMzMgMzg0IDQzNS42MjY2NjcgNTIyLjY2NjY2NyA1MTIgNTIyLjY2NjY2N20wIDUzLjMzMzMzM2MtMTA2LjI0IDAtMTkyLTg1Ljc2LTE5Mi0xOTJzODUuNzYtMTkyIDE5Mi0xOTIgMTkyIDg1Ljc2IDE5MiAxOTItODUuNzYgMTkyLTE5MiAxOTJ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZGF0YS1vYmplY3QiIHVuaWNvZGU9IiYjNTkwNjE7IiBkPSJNODUyLjQ4IDUyMC45NmgtMjE0LjE4NjY2N2MtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjc2Ny4xNDY2NjdoNjR2LTE4Mi4xODY2NjdoMTgyLjE4NjY2N3YtNjR6TTg1My4zMzMzMzMgMTAuNjY2NjY3SDI1NmMtMTcuNDkzMzMzIDAtMzIgMTQuNTA2NjY3LTMyIDMyVjc2OGMwIDE3LjQ5MzMzMyAxNC41MDY2NjcgMzIgMzIgMzJoMzgzLjE0NjY2N2M4LjUzMzMzMyAwIDE2LjY0LTMuNDEzMzMzIDIyLjYxMzMzMy05LjM4NjY2N2wyMTQuMTg2NjY3LTIxNC4xODY2NjZjNS45NzMzMzMtNS45NzMzMzMgOS4zODY2NjctMTQuMDggOS4zODY2NjYtMjIuNjEzMzM0VjQyLjY2NjY2N2MwLTE3LjQ5MzMzMy0xNC41MDY2NjctMzItMzItMzJ6IG0tNTY1LjMzMzMzMyA2NGg1MzMuMzMzMzMzVjU0MC41ODY2NjdsLTE5NS40MTMzMzMgMTk1LjQxMzMzM0gyODh2LTY2MS4zMzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2F0ZXdheS1ub25lIiB1bmljb2RlPSImIzU5MDYyOyIgZD0iTTUxMiA3NjcuNTczMzMzTDg5NS41NzMzMzMgMzg0IDUxMiAwLjQyNjY2NyAxMjguNDI2NjY3IDM4NCA1MTIgNzY3LjU3MzMzM20wIDc1LjA5MzMzNGMtOS4zODY2NjcgMC0xOS4yLTMuODQtMjYuNDUzMzMzLTExLjA5MzMzNGwtNDIxLjEyLTQyMS4xMmEzNy4xMiAzNy4xMiAwIDAgMSAwLTUyLjQ4bDQyMS41NDY2NjYtNDIxLjU0NjY2NmEzNy4xMiAzNy4xMiAwIDAgMSA1Mi45MDY2NjcgMGw0MjEuNTQ2NjY3IDQyMS41NDY2NjZhMzcuMTIgMzcuMTIgMCAwIDEgMCA1Mi40OGwtNDIxLjk3MzMzNCA0MjEuMTJhMzcuMTIgMzcuMTIgMCAwIDEtMjYuNDUzMzMzIDExLjA5MzMzNHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbmQtZXZlbnQtbWVzc2FnZSIgdW5pY29kZT0iJiM1OTA2MzsiIGQ9Ik01MTIgNjgyLjY2NjY2N2MxNjQuNjkzMzMzIDAgMjk4LjY2NjY2Ny0xMzMuOTczMzMzIDI5OC42NjY2NjctMjk4LjY2NjY2N3MtMTMzLjk3MzMzMy0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2Ny0yOTguNjY2NjY3IDEzMy45NzMzMzMtMjk4LjY2NjY2NyAyOTguNjY2NjY3IDEzMy45NzMzMzMgMjk4LjY2NjY2NyAyOTguNjY2NjY3IDI5OC42NjY2NjdtMCAxMjhDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNjc1Ljg0IDQ3NS43MzMzMzNsLTE2NC4yNjY2NjctOTQuNzItMTYwIDkyLjE2djEzLjY1MzMzNGMwIDE2LjIxMzMzMyAxMy4yMjY2NjcgMjkuNDQgMjkuNDQgMjkuNDRoMjY1LjM4NjY2N2MxNi4yMTMzMzMgMCAyOS40NC0xMy4yMjY2NjcgMjkuNDQtMjkuNDR2LTExLjUyeiBtMC0zNC4xMzMzMzN2LTE2MC44NTMzMzNjMC0xNi4yMTMzMzMtMTMuMjI2NjY3LTI5LjQ0LTI5LjQ0LTI5LjQ0SDM4MS40NGMtMTYuMjEzMzMzIDAtMjkuNDQgMTMuMjI2NjY3LTI5LjQ0IDI5LjQ0djE1OC4yOTMzMzNsMTUyLjc0NjY2Ny04OC4zMmM1LjEyLTIuOTg2NjY3IDExLjUyLTIuNTYgMTYuMjEzMzMzIDAuODUzMzMzaDAuNDI2NjY3bDE1NC44OCA4OS42eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LW5vbi1pbnRlMyIgdW5pY29kZT0iJiM1OTA2NDsiIGQ9Ik01MTIgODEwLjY2NjY2N2gtMjAuNDhjLTIuOTg2NjY3LTAuNDI2NjY3LTUuOTczMzMzLTAuODUzMzMzLTguOTYtMC44NTMzMzRoLTYuNGMtMjcuMzA2NjY3LTIuOTg2NjY3LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDcuMDkzMzMzaDE1LjM2bDE1LjM2LTEuMjhjMjQuMzItMi4xMzMzMzMgNDguMjEzMzMzLTYuNCA3MS4yNTMzMzMtMTMuMjI2NjY2bDMwLjcyLTguOTYgMTcuNDkzMzM0IDYwLjE2Yy0xMi4zNzMzMzMgNC42OTMzMzMtMjUuMTczMzMzIDguOTYtMzcuOTczMzM0IDEyLjM3MzMzM2gtMi4xMzMzMzN2MC44NTMzMzNoLTIuNTZWNzk3Ljg2NjY2N2gtMi41NnYwLjg1MzMzM2gtMS4yOGMtMjEuNzYgNS41NDY2NjctNDQuMzczMzMzIDkuMzg2NjY3LTY3LjQxMzMzMyAxMS41Mi0xMS41MiAwLjg1MzMzMy0yMy40NjY2NjcgMS4yOC0zNS40MTMzMzQgMS4yOHogbS0xNzUuNzg2NjY3LTM3Ljk3MzMzNGMtOS44MTMzMzMtNC4yNjY2NjctMTkuMi04Ljk2LTI4LjU4NjY2Ni0xNC4wOC01Ljk3MzMzMy0zLjQxMzMzMy0xMS41Mi02LjQtMTcuMDY2NjY3LTkuODEzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0wLjQyNjY2N2wtMi4xMzMzMzMtMS43MDY2NjZoLTAuODUzMzM0di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMS4yOHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM2wtMi41Ni0yLjEzMzMzM2gtMC44NTMzMzR2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjdsLTUuOTczMzMzLTQuNjkzMzM0Yy0xNi42NC0xMi4zNzMzMzMtMzIuNDI2NjY3LTI1LjYtNDcuMzYtNDAuMTA2NjY2bDQwLjUzMzMzMy00OC4yMTMzMzQgMjQuMzIgMjAuNDhjMTguMzQ2NjY3IDE1Ljc4NjY2NyAzOC40IDI5LjQ0IDU5LjczMzMzMyA0MC45NmwyOC4xNiAxNS4zNi0zMC4yOTMzMzMgNTUuMDR6TTE3MS41MiA2NDAuODUzMzMzYy02LjQtOC41MzMzMzMtMTIuMzczMzMzLTE3LjA2NjY2Ny0xOC4zNDY2NjctMjYuMDI2NjY2LTUuMTItOC4xMDY2NjctOS44MTMzMzMtMTYuMjEzMzMzLTE0LjUwNjY2Ni0yNC4zMnYtMC44NTMzMzRoLTAuNDI2NjY3di0wLjg1MzMzM2gtMC40MjY2Njd2LTEuNzA2NjY3aC0wLjQyNjY2NnYtMy44NGgtMC40MjY2Njd2LTUuOTczMzMzSDEzNi41MzMzMzN2LTAuODUzMzMzaC0wLjQyNjY2NmMtMS4yOC0yLjU2LTIuMTMzMzMzLTQuNjkzMzMzLTIuOTg2NjY3LTYuODI2NjY3di0yLjU2aC0wLjQyNjY2N2MtMS4yOC0yLjEzMzMzMy0yLjEzMzMzMy00LjY5MzMzMy0zLjQxMzMzMy02LjgyNjY2N3YtMi41NnMtMS4yOC0zLjQxMzMzMy0yLjEzMzMzMy00LjY5MzMzM1Y1NDQuNDI2NjY3bC0xLjI4LTIuOTg2NjY3di0wLjg1MzMzM3MtMS4yOC0yLjk4NjY2Ny0xLjcwNjY2Ny00LjY5MzMzNGMtMy44NC05LjgxMzMzMy03LjI1MzMzMy0yMC4wNTMzMzMtMTAuMjQtMzAuMjkzMzMzbDU4LjQ1MzMzMy0yMi42MTMzMzMgMTEuNTIgMjkuODY2NjY2YzguNTMzMzMzIDIyLjYxMzMzMyAxOS42MjY2NjcgNDMuOTQ2NjY3IDMyLjg1MzMzNCA2NC40MjY2NjdsMTcuNDkzMzMzIDI2Ljg4LTUyLjkwNjY2NyAzNC4xMzMzMzN6IG0tODEuNDkzMzMzLTE5NC41NmMtMS43MDY2NjctMTAuMjQtMi41Ni0yMC45MDY2NjctMy40MTMzMzQtMzEuNTczMzMzIDAtNS45NzMzMzMtMC44NTMzMzMtMTEuOTQ2NjY3LTAuODUzMzMzLTE3LjkyVjM1Ni4yNjY2NjdjMC04LjUzMzMzMyAwLjg1MzMzMy0xNi42NCAxLjcwNjY2Ny0yNC4zMnYtNy42OGMxLjI4LTExLjk0NjY2NyAzLjQxMzMzMy0yMy40NjY2NjcgNS41NDY2NjYtMzQuOTg2NjY3bDYyLjI5MzMzNCA4LjEwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzNjLTIuMTMzMzMzIDE1LjM2LTIuOTg2NjY3IDMxLjE0NjY2Ny0yLjk4NjY2NyA0Ni45MzMzMzMgMCA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwLjg1MzMzNCAyNS42bDIuMTMzMzMzIDMyLTYyLjcyIDQuMjY2NjY3eiBtNzguOTMzMzMzLTE4My44OTMzMzNsLTU3LjE3MzMzMy0yNi4wMjY2NjdjMy44NC05LjgxMzMzMyA3LjY4LTE5LjYyNjY2NyAxMS45NDY2NjYtMjkuNDQgMi4xMzMzMzMtNC42OTMzMzMgNC4yNjY2NjctOS4zODY2NjcgNi40LTEzLjY1MzMzM3YtNC4yNjY2NjdoMC40MjY2NjdjOS44MTMzMzMtMTkuMiAyMC40OC0zNy4xMiAzMi44NTMzMzMtNTQuMTg2NjY2di0wLjg1MzMzNGgwLjQyNjY2N3YtMC44NTMzMzNoMC40MjY2Njd2LTAuODUzMzMzYzYuNC04Ljk2IDEyLjgtMTcuNDkzMzMzIDIwLjA1MzMzMy0yNS42bDUwLjc3MzMzMyAzNy4xMi0xOC43NzMzMzMgMjYuMDI2NjY2Yy0xNC4wOCAxOS42MjY2NjctMjYuNDUzMzMzIDQwLjUzMzMzMy0zNi42OTMzMzMgNjIuMjkzMzM0bC0xMy4yMjY2NjcgMjkuMDEzMzMzeiBtMTAwLjY5MzMzMy0xNDkuNzZsLTM3LjU0NjY2Ni01MC4zNDY2NjdjMTIuMzczMzMzLTEwLjY2NjY2NyAyNS42LTIwLjkwNjY2NyAzOS4yNTMzMzMtMzAuMjkzMzMzaDAuODUzMzMzdi0wLjg1MzMzM2gxLjI4di0wLjg1MzMzNGgxLjI4di0wLjg1MzMzM2gwLjg1MzMzNHYtMC44NTMzMzNoMC44NTMzMzNjMTcuMDY2NjY3LTExLjk0NjY2NyAzNC45ODY2NjctMjIuMTg2NjY3IDUzLjc2LTMxLjE0NjY2NyA5LjM4NjY2Ny00LjY5MzMzMyAxOS4yLTguOTYgMjkuMDEzMzMzLTEyLjhsMjYuODggNTYuNzQ2NjY3LTI5LjAxMzMzMyAxMy42NTMzMzNjLTIxLjc2IDEwLjI0LTQyLjY2NjY2NyAyMy4wNC02MS44NjY2NjcgMzcuNTQ2NjY3bC0yNS42IDE5LjJ6IG0xNTkuNTczMzM0LTgzLjJsLTguOTYtNjIuMjkzMzMzYzEwLjI0LTIuMTMzMzMzIDIwLjkwNjY2Ny00LjI2NjY2NyAzMS41NzMzMzMtNS41NDY2NjcgMTAuNjY2NjY3LTEuNzA2NjY3IDIwLjkwNjY2Ny0yLjU2IDMxLjU3MzMzMy0zLjQxMzMzM2gxMi4zNzMzMzRWLTQyLjY2NjY2N2gzMy43MDY2NjZjMTMuMjI2NjY3IDAuNDI2NjY3IDI2LjQ1MzMzMyAxLjcwNjY2NyAzOS4yNTMzMzQgMy40MTMzMzRsLTMuNDEzMzM0IDYyLjcyLTMyLTEuNzA2NjY3Yy02LjgyNjY2NyAwLTE0LjA4LTAuNDI2NjY3LTIwLjkwNjY2Ni0wLjQyNjY2Ny0xNy4wNjY2NjcgMC0zNC41NiAxLjI4LTUxLjIgMy40MTMzMzRsLTMxLjU3MzMzNCA0LjY5MzMzM3ogbTMwMi4wOCA2NGwtMjcuMzA2NjY3LTE3LjA2NjY2N2MtMjAuNDgtMTIuOC00Mi4yNC0yMy40NjY2NjctNjQuODUzMzMzLTMybC0yOS44NjY2NjctMTEuMDkzMzMzIDIyLjE4NjY2Ny01OC44OGMxMC4yNCAyLjk4NjY2NyAyMC40OCA2LjQgMzAuMjkzMzMzIDEwLjI0IDI2Ljg4IDEwLjI0IDUyLjQ4IDIyLjYxMzMzMyA3Ni4zNzMzMzMgMzcuOTczMzMzIDguOTYgNS45NzMzMzMgMTcuOTIgMTEuNTIgMjYuNDUzMzM0IDE3LjkybC0zMy4yOCA1My4zMzMzMzR6IG0xMTIuNjQgMTQwLjhsLTE1Ljc4NjY2Ny0yNy43MzMzMzNjLTExLjk0NjY2Ny0yMC45MDY2NjctMjYuMDI2NjY3LTQwLjk2LTQxLjgxMzMzMy01OS4zMDY2NjdsLTIwLjkwNjY2Ny0yNC4zMiA0Ny4zNi00MC45NmM3LjY4IDcuNjggMTQuOTMzMzMzIDE1LjM2IDIxLjc2IDIzLjA0IDMuNDEzMzMzIDQuMjY2NjY3IDYuODI2NjY3IDguMTA2NjY3IDkuODEzMzMzIDEyLjM3MzMzM3YwLjg1MzMzNGgwLjQyNjY2N2wyLjEzMzMzMyAyLjk4NjY2NmgwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N3YwLjg1MzMzM2gwLjQyNjY2NnYwLjg1MzMzM2gwLjQyNjY2N3YwLjg1MzMzNGgwLjQyNjY2N1YxMjhoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNIODUzLjMzMzMzM3YwLjg1MzMzM2wyLjU2IDMuODR2MC44NTMzMzRjMTQuOTMzMzMzIDIwLjkwNjY2NyAyNy43MzMzMzMgNDMuMDkzMzMzIDM4LjQgNjYuMTMzMzMzbC01NC42MTMzMzMgMzAuNzJ6IG0zMS4xNDY2NjYgMTc3LjQ5MzMzM3YtMzJjLTAuODUzMzMzLTI0LjMyLTMuNDEzMzMzLTQ4LjY0LTguNTMzMzMzLTcyLjEwNjY2NmwtNi44MjY2NjctMzEuMTQ2NjY3IDYxLjQ0LTEzLjIyNjY2N2MxMS41MiAzOC40IDE3LjQ5MzMzMyA3OC45MzMzMzMgMTcuNDkzMzM0IDEyMS4xNzMzMzQgMCA4Ljk2IDAgMTcuOTItMC44NTMzMzQgMjYuNDUzMzMzbC02Mi43MiAwLjg1MzMzM3ogbS0yLjEzMzMzMyAyMDAuMTA2NjY3bC01NS40NjY2NjctMjkuNDQgMTQuOTMzMzM0LTI4LjE2YzExLjUyLTIxLjMzMzMzMyAyMC40OC00My45NDY2NjcgMjcuMzA2NjY2LTY2Ljk4NjY2N2w4Ljk2LTMwLjcyIDYwLjE2IDE3LjkyYy0yLjU2IDEyLjM3MzMzMy01Ljk3MzMzMyAyNC4zMi05LjM4NjY2NiAzNi4yNjY2NjdWNTE5LjI1MzMzM2MtMy40MTMzMzMgMTAuMjQtNy4yNTMzMzMgMjAuMDUzMzMzLTExLjA5MzMzNCAyOS44NjY2NjdWNTU3LjY1MzMzM2MtOC41MzMzMzMgMTkuNjI2NjY3LTE4LjM0NjY2NyAzNy45NzMzMzMtMjkuODY2NjY2IDU1Ljg5MzMzNHogbS0xNTMuMTczMzMzIDE0NS40OTMzMzNsLTM0LjU2LTUyLjQ4IDI2Ljg4LTE3LjQ5MzMzM2MyMC4wNTMzMzMtMTMuMjI2NjY3IDM4LjgyNjY2Ny0yOC41ODY2NjcgNTYuMzItNDUuNjUzMzMzbDIyLjYxMzMzMy0yMi42MTMzMzQgNDQuMzczMzMzIDQ0LjM3MzMzNGE0MjMuMTY4IDQyMy4xNjggMCAwIDEtODUuMzMzMzMzIDc1LjUyaC0wLjg1MzMzM3YwLjg1MzMzM2gtMS4yOHYwLjg1MzMzM2gtMC40MjY2NjdjLTguOTYgNi40LTE3LjkyIDExLjk0NjY2Ny0yNy4zMDY2NjcgMTcuMDY2NjY3ek02NTguNzczMzMzIDUwMy4wNEgzNjUuNjUzMzMzYy04LjUzMzMzMyAwLTE1LjM2LTYuODI2NjY3LTE1LjM2LTE1LjM2di0yMDYuOTMzMzMzYzAtOC41MzMzMzMgNi44MjY2NjctMTUuMzYgMTUuMzYtMTUuMzZoMjkzLjEyYzguNTMzMzMzIDAgMTUuMzYgNi44MjY2NjcgMTUuMzYgMTUuMzZWNDg3LjY4YzAgOC41MzMzMzMtNi44MjY2NjcgMTUuMzYtMTUuMzYgMTUuMzZ6TTUxMiA0MDMuMmwtOTAuODggNTcuMTczMzMzaDE4MS43Nkw1MTIgNDAzLjJ6IG0tMTE5LjQ2NjY2Ny05NS4xNDY2Njd2MTE5Ljg5MzMzNGwxMDcuOTQ2NjY3LTY3Ljg0aDAuODUzMzMzYzMuNDEzMzMzLTEuNzA2NjY3IDYuODI2NjY3LTIuOTg2NjY3IDEwLjY2NjY2Ny0yLjk4NjY2N3M3LjI1MzMzMyAxLjI4IDEwLjY2NjY2NyAyLjk4NjY2N2gwLjg1MzMzM2wxMDcuOTQ2NjY3IDY3Ljg0di0xMTkuODkzMzM0SDM5Mi41MzMzMzN6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tcGVuc2F0aW9uLW1hcmtlciIgdW5pY29kZT0iJiM1OTA2NjsiIGQ9Ik00NDQuNTg2NjY3IDEzOC42NjY2NjdjLTEzLjY1MzMzMyAwLTI3LjMwNjY2NyA0LjI2NjY2Ny0zOC44MjY2NjcgMTMuMjI2NjY2bC0yNDcuNDY2NjY3IDE4OS4wMTMzMzRjLTE1Ljc4NjY2NyAxMi4zNzMzMzMtMjUuMTczMzMzIDMwLjcyLTI1LjE3MzMzMyA1MC43NzMzMzNzOC45NiAzOC40IDI1LjE3MzMzMyA1MC43NzMzMzNsMjQ3LjQ2NjY2NyAxODkuMDEzMzM0YzE5LjYyNjY2NyAxNC45MzMzMzMgNDUuMjI2NjY3IDE3LjQ5MzMzMyA2Ni45ODY2NjcgNi40czM1LjQxMzMzMy0zMi44NTMzMzMgMzUuNDEzMzMzLTU3LjE3MzMzNHYtMzc4LjAyNjY2NmMwLTI0LjMyLTEzLjY1MzMzMy00Ni41MDY2NjctMzUuNDEzMzMzLTU3LjE3MzMzNC04Ljk2LTQuMjY2NjY3LTE4Ljc3MzMzMy02LjgyNjY2Ny0yOC41ODY2NjctNi44MjY2NjZ6IG0tMjQ3LjA0IDI1My4wMTMzMzNsMjQ3LjA0LTE4OS4wMTMzMzNWNTgwLjY5MzMzM2wtMjQ3LjA0LTE4OS4wMTMzMzN6TTc4Mi4wOCAxMzguNjY2NjY3Yy0xMy42NTMzMzMgMC0yNy4zMDY2NjcgNC4yNjY2NjctMzguODI2NjY3IDEzLjIyNjY2NmwtMjQ3LjQ2NjY2NiAxODkuMDEzMzM0Yy0xNS43ODY2NjcgMTIuMzczMzMzLTI1LjE3MzMzMyAzMC43Mi0yNS4xNzMzMzQgNTAuNzczMzMzczguOTYgMzguNCAyNS4xNzMzMzQgNTAuNzczMzMzbDI0Ny40NjY2NjYgMTg5LjAxMzMzNGMxOS42MjY2NjcgMTQuOTMzMzMzIDQ1LjIyNjY2NyAxNy4wNjY2NjcgNjYuOTg2NjY3IDYuNHMzNS40MTMzMzMtMzIuODUzMzMzIDM1LjQxMzMzMy01Ny4xNzMzMzR2LTM3OC4wMjY2NjZjMC0yNC4zMi0xMy42NTMzMzMtNDYuNTA2NjY3LTM1LjQxMzMzMy01Ny4xNzMzMzQtOC45Ni00LjI2NjY2Ny0xOC43NzMzMzMtNi44MjY2NjctMjguNTg2NjY3LTYuODI2NjY2eiBtLTI0Ny4wNCAyNTMuMDEzMzMzbDI0Ny4wNC0xODkuMDEzMzMzVjU4MC42OTMzMzNsLTI0Ny4wNC0xODkuMDEzMzMzeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC1jYW5jZWwiIHVuaWNvZGU9IiYjNTkwNjc7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTYzMi43NDY2NjcgMjIwLjU4NjY2N2MtMTEuMDkzMzMzIDAtMjEuNzYgNC4yNjY2NjctMzAuMjkzMzM0IDEyLjM3MzMzM0wzNjAuOTYgNDc0LjQ1MzMzM2E0Mi40OTYgNDIuNDk2IDAgMSAwIDYwLjE2IDYwLjE2bDI0MS40OTMzMzMtMjQxLjQ5MzMzM2E0Mi40OTYgNDIuNDk2IDAgMCAwLTMwLjI5MzMzMy03Mi41MzMzMzN6TTM5MS4yNTMzMzMgMjIwLjU4NjY2N2MtMTEuMDkzMzMzIDAtMjEuNzYgNC4yNjY2NjctMzAuMjkzMzMzIDEyLjM3MzMzM2E0Mi40OTYgNDIuNDk2IDAgMCAwIDAgNjAuMTZsMjQxLjQ5MzMzMyAyNDEuNDkzMzMzYTQyLjQ5NiA0Mi40OTYgMCAxIDAgNjAuMTYtNjAuMTZsLTI0MS40OTMzMzMtMjQxLjQ5MzMzM2MtOC41MzMzMzMtOC41MzMzMzMtMTkuMi0xMi4zNzMzMzMtMzAuMjkzMzMzLTEyLjM3MzMzM3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1ub24taW50ZTUiIHVuaWNvZGU9IiYjNTkwNjk7IiBkPSJNMzM2LjIxMzMzMyA3NzIuNjkzMzMzYy0yMy40NjY2NjctMTAuNjY2NjY3LTQ2LjA4LTIzLjQ2NjY2Ny02Ni45ODY2NjYtMzcuOTczMzMzcy00LjI2NjY2Ny0yLjk4NjY2Ny02LjQtNC4yNjY2NjdoLTAuODUzMzM0di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzSDI2MC4yNjY2NjdsLTIuNTYtMi4xMzMzMzRoLTAuODUzMzM0di0wLjg1MzMzM0gyNTZ2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzRoLTAuODUzMzM0di0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzRIMjUxLjczMzMzM3YtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM2gtMC44NTMzMzN2LTAuODUzMzM0aC0wLjg1MzMzNHYtMC44NTMzMzNoLTAuODUzMzMzdi0wLjg1MzMzM0gyNDcuNDY2NjY3di0wLjg1MzMzNGgtMC44NTMzMzR2LTAuODUzMzMzbC0xLjcwNjY2Ni0xLjI4aC0wLjg1MzMzNHYtMC44NTMzMzNIMjQzLjJ2LTAuODUzMzM0aC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuODUzMzM0bC0xMS4wOTMzMzMtOS44MTMzMzNjLTguMTA2NjY3LTcuMjUzMzMzLTE1Ljc4NjY2Ny0xNC41MDY2NjctMjMuMDQtMjIuMTg2NjY3bDQxLjM4NjY2Ny00Ni45MzMzMzMgMjMuODkzMzMzIDIxLjMzMzMzM2MxOC4zNDY2NjcgMTUuNzg2NjY3IDM3Ljk3MzMzMyAzMC4yOTMzMzMgNTguODggNDIuMjRsMS4yOCAwLjg1MzMzM2gwLjQyNjY2N2wxLjcwNjY2NiAxLjI4aDAuODUzMzM0bDAuODUzMzMzIDAuODUzMzM0IDEuNzA2NjY3IDAuODUzMzMzIDI4LjE2IDE1LjM2LTMwLjI5MzMzNCA1NS4wNHpNMTY1Ljk3MzMzMyA2MzMuMTczMzMzYy0xNC4wOC0xOS4yLTI2LjAyNjY2Ny0zOS42OC0zNi42OTMzMzMtNjEuMDEzMzMzdi0wLjg1MzMzM2wtMi41Ni01LjEyVjU1Ny42NTMzMzNsLTAuODUzMzMzLTIuMTMzMzMzVjU0Ni4xMzMzMzNsLTEuNzA2NjY3LTQuMjY2NjY2di0xLjI4SDEyMy43MzMzMzNjLTYuODI2NjY3LTE3LjA2NjY2Ny0xMi4zNzMzMzMtMzQuNTYtMTcuMDY2NjY2LTUyLjQ4bDU5LjMwNjY2Ni0yMC4wNTMzMzQgMTAuMjQgMzAuMjkzMzM0YzcuNjggMjIuNjEzMzMzIDE3LjkyIDQ0LjggMjkuODY2NjY3IDY1LjcwNjY2NmwwLjg1MzMzMyAxLjI4IDAuODUzMzM0IDIuMTMzMzM0djAuODUzMzMzbDAuODUzMzMzIDAuODUzMzMzIDAuODUzMzMzIDEuNzA2NjY3IDE2LjY0IDI3LjMwNjY2Ny01My4zMzMzMzMgMzIuODUzMzMzeiBtLTc4LjA4LTIwNS42NTMzMzNjLTEuMjgtMTQuMDgtMi4xMzMzMzMtMjguNTg2NjY3LTIuMTMzMzMzLTQzLjUyIDAtOS4zODY2NjcgMC0xOC43NzMzMzMgMC44NTMzMzMtMjcuNzMzMzMzdi0zLjQxMzMzNGMwLTIuNTYgMC00LjY5MzMzMyAwLjQyNjY2Ny03LjI1MzMzM3YtMC44NTMzMzNjMC40MjY2NjctNC42OTMzMzMgMC44NTMzMzMtOS44MTMzMzMgMS43MDY2NjctMTQuNTA2NjY3VjMyMi45ODY2NjdoMC40MjY2NjZWMzA4LjA1MzMzM2MwLjQyNjY2Ny00LjI2NjY2NyAxLjI4LTguMTA2NjY3IDIuMTMzMzM0LTExLjUyIDIuMTMzMzMzLTEwLjY2NjY2NyA0LjY5MzMzMy0yMC45MDY2NjcgNy4yNTMzMzMtMzEuMTQ2NjY2bDYxLjQ0IDExLjk0NjY2Ni01Ljk3MzMzMyAzMS41NzMzMzRjLTQuNjkzMzMzIDIzLjA0LTYuODI2NjY3IDQ2LjUwNjY2Ny02LjgyNjY2NyA3MC40djkuODEzMzMzbDAuODUzMzMzIDMyTDg1LjMzMzMzMyA0MjIuODI2NjY3ek0xNDkuNzYgMzg0eiBtMjguMTYtMTQ0LjIxMzMzM2wtNTUuMDQtMjkuODY2NjY3YzE0LjUwNjY2Ny0zMiAzMi40MjY2NjctNjIuMjkzMzMzIDU0LjE4NjY2Ny04OS42aDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY2di0wLjg1MzMzM2gwLjQyNjY2N3YtMC44NTMzMzRjMy40MTMzMzMtNC42OTMzMzMgNy4yNTMzMzMtOC45NiAxMS4wOTMzMzMtMTMuMjI2NjY2IDYuODI2NjY3LTguMTA2NjY3IDE0LjA4LTE1Ljc4NjY2NyAyMS43Ni0yMy40NjY2NjdsNDcuMzYgNDEuMzg2NjY3LTIwLjkwNjY2NiAyNC4zMmMtMTUuNzg2NjY3IDE4LjM0NjY2Ny0yOS44NjY2NjcgMzcuOTczMzMzLTQxLjgxMzMzNCA1OC44OGwtMC44NTMzMzMgMS4yOC0wLjg1MzMzMyAyLjEzMzMzM3YwLjg1MzMzM2wtMC44NTMzMzQgMC44NTMzMzQtMC44NTMzMzMgMS43MDY2NjYtMTUuMzYgMjguMTZ6IG0xMTYuNDgtMTQ3LjYyNjY2N2wtMzIuODUzMzMzLTUzLjMzMzMzM2MyMC40OC0xNC45MzMzMzMgNDIuMjQtMjguMTYgNjUuMjgtMzkuMjUzMzM0aDAuNDI2NjY2YzIuNTYtMS43MDY2NjcgNS41NDY2NjctMi45ODY2NjcgOC4xMDY2NjctNC4yNjY2NjZoMS4yOHYtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMS4yOHYtMC44NTMzMzNoMC40MjY2NjdsNC4yNjY2NjYtMi4xMzMzMzRoMS4yOHYtMC44NTMzMzNoMS43MDY2Njd2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzNGgxLjcwNjY2NnYtMC44NTMzMzNoMS4yOGwxLjcwNjY2Ny0xLjI4aDEuNzA2NjY3di0wLjg1MzMzM2gxLjcwNjY2NnYtMC44NTMzMzRoMS43MDY2Njd2LTAuODUzMzMzaDEuNzA2NjY3di0wLjg1MzMzM2gxLjcwNjY2NnYtMC44NTMzMzRsMTAuMjQtMy44NGM5LjgxMzMzMy0zLjQxMzMzMyAyMC4wNTMzMzMtNi40IDMwLjI5MzMzNC05LjM4NjY2NmwyMC40OCA1OS4zMDY2NjYtMzAuMjkzMzM0IDEwLjI0YTM1MS41NzMzMzMgMzUxLjU3MzMzMyAwIDAgMC02NS43MDY2NjYgMzAuMjkzMzM0bC0xLjI4IDAuODUzMzMzaC0wLjQyNjY2N2wtMS43MDY2NjcgMS4yOGgtMC44NTMzMzNsLTAuODUzMzMzIDAuODUzMzMzLTEuNzA2NjY3IDAuODUzMzM0LTI3LjMwNjY2NyAxNi42NHogbTMxNy44NjY2NjctNTguNDUzMzMzbC0zMS41NzMzMzQtNS45NzMzMzRjLTIyLjYxMzMzMy00LjI2NjY2Ny00NS42NTMzMzMtNi40LTY4LjY5MzMzMy02LjRoLTExLjUybC0zMiAxLjI4LTIuMTMzMzMzLTYyLjcyYzE0LjkzMzMzMy0xLjcwNjY2NyAzMC4yOTMzMzMtMi41NiA0NS42NTMzMzMtMi41NiA4LjUzMzMzMyAwIDE3LjA2NjY2NyAwIDI1LjYgMC44NTMzMzRoNy4yNTMzMzNjMTYuMjEzMzMzIDEuNzA2NjY3IDMyLjQyNjY2NyAzLjg0IDQ3Ljc4NjY2NyA2LjgyNjY2NiAxMC4yNCAyLjEzMzMzMyAyMC45MDY2NjcgNC4yNjY2NjcgMzAuNzIgNy4yNTMzMzRsLTExLjk0NjY2NyA2MS44NjY2NjZ6IG0xNjEuMjggOTYuNDI2NjY2bC0yNC4zMi0yMC45MDY2NjZjLTE4LjM0NjY2Ny0xNS43ODY2NjctMzguNC0yOS44NjY2NjctNTkuMzA2NjY3LTQxLjgxMzMzNGwtMS4yOC0wLjg1MzMzM2gtMC40MjY2NjdsLTEuNzA2NjY2LTEuMjhoLTAuODUzMzM0bC0wLjg1MzMzMy0wLjg1MzMzMy0xLjcwNjY2Ny0wLjg1MzMzNC0yOC4xNi0xNS4zNiAyOS40NC01NS40NjY2NjZjMzQuMTMzMzMzIDE0LjkzMzMzMyA2NS43MDY2NjcgMzQuNTYgOTQuNzIgNTcuNmgwLjg1MzMzNHYwLjg1MzMzM2gwLjg1MzMzM3YwLjg1MzMzM2gwLjg1MzMzM3YwLjg1MzMzNGgwLjg1MzMzNHYwLjg1MzMzM2gwLjQyNjY2NmMyLjU2IDIuNTYgNS41NDY2NjcgNS4xMiA4LjEwNjY2NyA3LjI1MzMzMyA4LjEwNjY2NyA3LjI1MzMzMyAxNS43ODY2NjcgMTQuNTA2NjY3IDIzLjA0IDIxLjc2bC00MC45NiA0Ny4zNnogbTkxLjczMzMzMyAxNjMuODRsLTEwLjY2NjY2Ny0zMC4yOTMzMzNjLTguMTA2NjY3LTIyLjYxMzMzMy0xOC4zNDY2NjctNDQuOC0zMC43Mi02NS43MDY2NjdsLTAuODUzMzMzLTEuMjgtMC44NTMzMzMtMi4xMzMzMzN2LTAuODUzMzMzbC0wLjg1MzMzNC0wLjg1MzMzNC0wLjg1MzMzMy0xLjcwNjY2Ni0xNy4wNjY2NjctMjcuMzA2NjY3IDUzLjMzMzMzNC0zMy4yOGMxNC4wOCAxOS4yIDI2LjQ1MzMzMyAzOS4yNTMzMzMgMzcuMTIgNjAuNTg2NjY3djYuODI2NjY2aDAuODUzMzMzdjcuNjhjNC4yNjY2NjcgOS44MTMzMzMgOC41MzMzMzMgMTkuMiAxMi4zNzMzMzMgMjkuNDR2Mi41NmwxLjI4IDMuODR2MS43MDY2NjdjMy40MTMzMzMgMTAuMjQgNi44MjY2NjcgMjAuNDggOS4zODY2NjcgMzEuMTQ2NjY3bC01OS4zMDY2NjcgMjAuOTA2NjY2eiBtNTkuMzA2NjY3IDE5OS42OGwtNjEuODY2NjY3LTExLjUyIDUuOTczMzMzLTMxLjU3MzMzM2M0LjI2NjY2Ny0yMS43NiA1Ljk3MzMzMy00NC4zNzMzMzMgNS45NzMzMzQtNjYuOTg2NjY3di0xMy42NTMzMzNsLTEuMjgtMzIgNjIuNzItMi4xMzMzMzNjMS43MDY2NjcgMTUuNzg2NjY3IDIuNTYgMzEuNTczMzMzIDIuNTYgNDcuNzg2NjY2IDAgNy42OCAwIDE1Ljc4NjY2Ny0wLjQyNjY2NyAyMy40NjY2Njd2MTQuMDhjLTIuMTMzMzMzIDI1LjE3MzMzMy02LjQgNDkuNDkzMzMzLTEyLjggNzMuMzg2NjY3ek04MTQuOTMzMzMzIDY4NC4zNzMzMzNsLTQ3Ljc4NjY2Ni00MC45NiAyMC45MDY2NjYtMjQuMzJjMTUuNzg2NjY3LTE4LjM0NjY2NyAyOS40NC0zOC40IDQxLjM4NjY2Ny01OS4zMDY2NjZsMC44NTMzMzMtMS4yOCAwLjg1MzMzNC0yLjEzMzMzNHYtMC44NTMzMzNsMC44NTMzMzMtMC44NTMzMzMgMC44NTMzMzMtMS43MDY2NjcgMTQuOTMzMzM0LTI4LjE2IDU1LjQ2NjY2NiAyOS40NGMtOS4zODY2NjcgMjEuNzYtMjAuOTA2NjY3IDQyLjY2NjY2Ny0zMy43MDY2NjYgNjIuNzItMi4xMzMzMzMgMy40MTMzMzMtNC4yNjY2NjcgNi40LTYuNCA5LjgxMzMzM3YwLjg1MzMzNGgtMC40MjY2Njd2MC44NTMzMzNoLTAuNDI2NjY3djAuODUzMzMzaC0wLjQyNjY2NnYwLjg1MzMzNGwtMi4xMzMzMzQgMi41NnYwLjg1MzMzM2gtMC40MjY2NjZ2MC44NTMzMzNoLTAuNDI2NjY3djAuODUzMzM0aC0wLjQyNjY2N3YwLjg1MzMzM2gtMC40MjY2NjZ2MC44NTMzMzNzLTEuNzA2NjY3IDIuOTg2NjY3LTIuOTg2NjY3IDMuODR2MC44NTMzMzRoLTAuNDI2NjY3djAuODUzMzMzaC0wLjQyNjY2NmEzNzYuOTYgMzc2Ljk2IDAgMCAxLTM2LjI2NjY2NyA0Mi42NjY2Njd6IG0tMTkwLjI5MzMzMyAxMTAuOTMzMzM0bC0yMC45MDY2NjctNTkuMzA2NjY3IDMwLjI5MzMzNC0xMC42NjY2NjdjMjIuNjEzMzMzLTguMTA2NjY3IDQ0LjgtMTguMzQ2NjY3IDY1LjI4LTMxLjE0NjY2NmwxLjI4LTAuODUzMzM0aDAuNDI2NjY2bDEuNzA2NjY3LTEuMjhoMC44NTMzMzNsMC44NTMzMzQtMC44NTMzMzMgMS43MDY2NjYtMC44NTMzMzMgMjYuODgtMTcuMDY2NjY3IDMzLjcwNjY2NyA1Mi45MDY2NjdjLTE4Ljc3MzMzMyAxNC4wOC0zOS4yNTMzMzMgMjYuNDUzMzMzLTYwLjE2IDM3LjU0NjY2NmwtMTUuMzYgNy42OGgtMS4yOFY3NzIuMjY2NjY3aC0wLjg1MzMzM2MtMi4xMzMzMzMgMS4yOC00LjI2NjY2NyAyLjEzMzMzMy02LjgyNjY2NyAzLjQxMzMzM2gtMS4yOFY3NzYuNTMzMzMzaC0xLjcwNjY2N3YwLjg1MzMzNGgtMS43MDY2NjZ2MC44NTMzMzNoLTEuNzA2NjY3bC0zLjQxMzMzMyAyLjEzMzMzM2gtMS43MDY2Njd2MC44NTMzMzRoLTEuNzA2NjY3djAuODUzMzMzaC0xLjcwNjY2NnYwLjg1MzMzM2gtMS43MDY2Njd2MC44NTMzMzRoLTEuNzA2NjY3bC0yLjU2IDEuMjhoLTEuNzA2NjY2djAuODUzMzMzaC0xLjcwNjY2N3YwLjg1MzMzM2gtMS43MDY2Njd2MC44NTMzMzRoLTEuNzA2NjY2Yy05LjgxMzMzMyAzLjg0LTIwLjA1MzMzMyA3LjI1MzMzMy0zMC4yOTMzMzQgMTAuMjR6TTUxMiA4MTAuMjRjLTEwLjY2NjY2NyAwLTIxLjMzMzMzMyAwLTMyLTEuMjhoLTMuODRjLTI3LjMwNjY2Ny0yLjU2LTU0LjE4NjY2Ny03LjY4LTgwLjIxMzMzMy0xNC45MzMzMzNsMTIuMzczMzMzLTYxLjQ0IDMxLjU3MzMzMyA2LjRBMzY5LjA2NjY2NyAzNjkuMDY2NjY3IDAgMCAwIDUxMiA3NDYuMjRoMTUuMzZsMzItMS43MDY2NjcgMi41NiA2Mi43MmMtMTYuMjEzMzMzIDEuNzA2NjY3LTMyLjg1MzMzMyAyLjk4NjY2Ny00OS45MiAyLjk4NjY2N3pNNTYyLjc3MzMzMyAyMjEuODY2NjY3aC0xMDEuNTQ2NjY2Yy0xMS45NDY2NjcgMC0yMS4zMzMzMzMgOS4zODY2NjctMjEuMzMzMzM0IDIxLjMzMzMzM3Y2OC42OTMzMzNIMzcxLjJjLTExLjk0NjY2NyAwLTIxLjMzMzMzMyA5LjM4NjY2Ny0yMS4zMzMzMzMgMjEuMzMzMzM0djEwMS41NDY2NjZjMCAxMS45NDY2NjcgOS4zODY2NjcgMjEuMzMzMzMzIDIxLjMzMzMzMyAyMS4zMzMzMzRoNjguNjkzMzMzVjUyNC44YzAgMTEuOTQ2NjY3IDkuMzg2NjY3IDIxLjMzMzMzMyAyMS4zMzMzMzQgMjEuMzMzMzMzaDEwMS41NDY2NjZjMTEuOTQ2NjY3IDAgMjEuMzMzMzMzLTkuMzg2NjY3IDIxLjMzMzMzNC0yMS4zMzMzMzN2LTY4LjY5MzMzM2g2OC42OTMzMzNjMTEuOTQ2NjY3IDAgMjEuMzMzMzMzLTkuMzg2NjY3IDIxLjMzMzMzMy0yMS4zMzMzMzR2LTEwMS41NDY2NjZjMC0xMS45NDY2NjctOS4zODY2NjctMjEuMzMzMzMzLTIxLjMzMzMzMy0yMS4zMzMzMzRoLTY4LjY5MzMzM3YtNjguNjkzMzMzYzAtMTEuOTQ2NjY3LTkuMzg2NjY3LTIxLjMzMzMzMy0yMS4zMzMzMzQtMjEuMzMzMzMzeiBtLTgwLjIxMzMzMyA0Mi42NjY2NjZoNTguODh2NjguNjkzMzM0YzAgMTEuOTQ2NjY3IDkuMzg2NjY3IDIxLjMzMzMzMyAyMS4zMzMzMzMgMjEuMzMzMzMzaDY4LjY5MzMzNHY1OC44OGgtNjguNjkzMzM0Yy0xMS45NDY2NjcgMC0yMS4zMzMzMzMgOS4zODY2NjctMjEuMzMzMzMzIDIxLjMzMzMzM1Y1MDMuNDY2NjY3aC01OC44OHYtNjguNjkzMzM0YzAtMTEuOTQ2NjY3LTkuMzg2NjY3LTIxLjMzMzMzMy0yMS4zMzMzMzMtMjEuMzMzMzMzSDM5Mi41MzMzMzN2LTU4Ljg4aDY4LjY5MzMzNGMxMS45NDY2NjcgMCAyMS4zMzMzMzMtOS4zODY2NjcgMjEuMzMzMzMzLTIxLjMzMzMzM3YtNjguNjkzMzM0eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImdhdGV3YXkteG9yIiB1bmljb2RlPSImIzU5MDcwOyIgZD0iTTUxMiA3NjcuNTczMzMzTDg5NS41NzMzMzMgMzg0IDUxMiAwLjQyNjY2NyAxMjguNDI2NjY3IDM4NCA1MTIgNzY3LjU3MzMzM20wIDc1LjA5MzMzNGMtOS4zODY2NjcgMC0xOS4yLTMuODQtMjYuNDUzMzMzLTExLjA5MzMzNGwtNDIxLjEyLTQyMS4xMmEzNy4xMiAzNy4xMiAwIDAgMSAwLTUyLjQ4bDQyMS41NDY2NjYtNDIxLjU0NjY2NmEzNy4xMiAzNy4xMiAwIDAgMSA1Mi45MDY2NjcgMGw0MjEuNTQ2NjY3IDQyMS41NDY2NjZhMzcuMTIgMzcuMTIgMCAwIDEgMCA1Mi40OGwtNDIxLjk3MzMzNCA0MjEuMTJhMzcuMTIgMzcuMTIgMCAwIDEtMjYuNDUzMzMzIDExLjA5MzMzNHpNNjMyLjc0NjY2NyAyMzYuOGEyNi40NTMzMzMgMjYuNDUzMzMzIDAgMCAwLTE4Ljc3MzMzNCA3LjY4TDM3Mi40OCA0ODUuOTczMzMzYy0xMC4yNCAxMC4yNC0xMC4yNCAyNy4zMDY2NjcgMCAzNy41NDY2NjdzMjcuMzA2NjY3IDEwLjI0IDM3LjU0NjY2NyAwbDI0MS40OTMzMzMtMjQxLjQ5MzMzM2MxMC4yNC0xMC4yNCAxMC4yNC0yNy4zMDY2NjcgMC0zNy41NDY2NjdhMjYuNDUzMzMzIDI2LjQ1MzMzMyAwIDAgMC0xOC43NzMzMzMtNy42OHpNMzkxLjI1MzMzMyAyMzYuOGEyNi40NTMzMzMgMjYuNDUzMzMzIDAgMCAwLTE4Ljc3MzMzMyA3LjY4IDI2Ljc5NDY2NyAyNi43OTQ2NjcgMCAwIDAgMCAzNy41NDY2NjdsMjQxLjQ5MzMzMyAyNDEuNDkzMzMzYzEwLjI0IDEwLjI0IDI3LjMwNjY2NyAxMC4yNCAzNy41NDY2NjcgMHMxMC4yNC0yNy4zMDY2NjcgMC0zNy41NDY2NjdsLTI0MS40OTMzMzMtMjQxLjQ5MzMzM2EyNi40NTMzMzMgMjYuNDUzMzMzIDAgMCAwLTE4Ljc3MzMzNC03LjY4eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InVzZXIiIHVuaWNvZGU9IiYjNTk0MDA7IiBkPSJNNjYwLjkwNjY2NyA0NDUuMDEzMzMzYy01Ljk3MzMzMyAyLjk4NjY2Ny0xMi4zNzMzMzMgNS41NDY2NjctMTguMzQ2NjY3IDcuNjggNDMuNTIgMzcuOTczMzMzIDY5Ljk3MzMzMyA5My44NjY2NjcgNjkuOTczMzMzIDE1NC40NTMzMzQgMCAxMTMuNDkzMzMzLTkyLjE2IDIwNS42NTMzMzMtMjA1LjY1MzMzMyAyMDUuNjUzMzMzLTgzLjIgMC0xNTcuNDQtNDkuNDkzMzMzLTE4OS40NC0xMjYuMjkzMzMzLTEwLjY2NjY2Ny0yNS4xNzMzMzMtMTUuNzg2NjY3LTUxLjYyNjY2Ny0xNS43ODY2NjctNzkuMzYgMC02MC41ODY2NjcgMjYuNDUzMzMzLTExNi40OCA2OS41NDY2NjctMTU0LjQ1MzMzNC01Ljk3MzMzMy0yLjEzMzMzMy0xMS45NDY2NjctNC42OTMzMzMtMTcuOTItNy4yNTMzMzMtMTMzLjk3MzMzMy02MS4wMTMzMzMtMjIxLjAxMzMzMy0xOTUuNDEzMzMzLTIyMS4wMTMzMzMtMzQyLjE4NjY2N1Y0Mi42NjY2NjdjMC0xNy40OTMzMzMgMTQuNTA2NjY3LTMyIDMyLTMyaDY4NS42NTMzMzNjMTcuNDkzMzMzIDAgMzIgMTQuNTA2NjY3IDMyIDMydjYwLjU4NjY2NmMwIDE0Ny4yLTg2LjYxMzMzMyAyODEuMTczMzMzLTIyMC41ODY2NjcgMzQxLjc2ek0zNjUuMjI2NjY3IDYwNy41NzMzMzNjMCAxOC43NzMzMzMgMy44NCAzNy4xMiAxMS4wOTMzMzMgNTQuNjEzMzM0IDIuNTYgNS45NzMzMzMgNS41NDY2NjcgMTEuNTIgOC41MzMzMzMgMTcuMDY2NjY2IDI5LjAxMzMzMyAxNC4wOCA2NC44NTMzMzMgMjkuMDEzMzMzIDg2LjE4NjY2NyAyOS4wMTMzMzQgMTguMzQ2NjY3IDAgMzYuMjY2NjY3LTguMTA2NjY3IDUxLjItMTcuNDkzMzM0IDI3LjczMzMzMy0xNy4wNjY2NjcgNjEuMDEzMzMzLTI0LjMyIDkzLjAxMzMzMy0xNi4yMTMzMzMgNS4xMiAxLjI4IDguOTYgMi41NiAxMy4yMjY2NjcgNC4yNjY2NjcgMTIuMzczMzMzLTIwLjkwNjY2NyAyMC4wNTMzMzMtNDUuMjI2NjY3IDIwLjA1MzMzMy03MS4yNTMzMzQgMC02MS44NjY2NjctMzkuNjgtMTE2LjA1MzMzMy05OC45ODY2NjYtMTM0LjgyNjY2Ni0xNC4wOC00LjI2NjY2Ny0yMy40NjY2NjctMTcuOTItMjIuMTg2NjY3LTMyLjg1MzMzNCAxLjI4LTE0LjkzMzMzMyAxMi4zNzMzMzMtMjYuODggMjYuODgtMjkuMDEzMzMzIDIwLjA1MzMzMy0yLjk4NjY2NyAzOS42OC04LjEwNjY2NyA1OC40NTMzMzMtMTQuOTMzMzMzLTEuNzA2NjY3LTYuNC0zLjg0LTEyLjM3MzMzMy02LjQtMTcuOTItMC44NTMzMzMtMS43MDY2NjctMS43MDY2NjctMi45ODY2NjctMi41Ni00LjY5MzMzNC0yLjEzMzMzMy00LjI2NjY2Ny00LjI2NjY2Ny04LjEwNjY2Ny02LjgyNjY2Ni0xMS45NDY2NjYtMS4yOC0yLjEzMzMzMy0yLjk4NjY2Ny0zLjg0LTQuMjY2NjY3LTUuNTQ2NjY3LTIuNTYtMi45ODY2NjctNS4xMi01Ljk3MzMzMy04LjEwNjY2Ny04Ljk2LTEuNzA2NjY3LTEuNzA2NjY3LTMuODQtMy40MTMzMzMtNS41NDY2NjYtNS4xMi0yLjk4NjY2Ny0yLjU2LTUuOTczMzMzLTUuMTItOC45Ni03LjI1MzMzMy0yLjEzMzMzMy0xLjI4LTQuMjY2NjY3LTIuOTg2NjY3LTYuNC00LjI2NjY2Ny0zLjQxMzMzMy0yLjEzMzMzMy02LjgyNjY2Ny0zLjg0LTEwLjY2NjY2Ny01LjU0NjY2Ny0yLjEzMzMzMy0wLjg1MzMzMy00LjY5MzMzMy0yLjEzMzMzMy02LjgyNjY2Ny0yLjk4NjY2Ni00LjI2NjY2Ny0xLjcwNjY2Ny04LjUzMzMzMy0yLjU2LTEyLjgtMy44NC0yLjEzMzMzMy0wLjQyNjY2Ny00LjI2NjY2Ny0xLjI4LTYuNC0xLjcwNjY2Ny02LjQtMS4yOC0xMy4yMjY2NjctMi4xMzMzMzMtMjAuMDUzMzMzLTIuMTMzMzMzcy0xMy42NTMzMzMgMC44NTMzMzMtMjAuMDUzMzMzIDIuMTMzMzMzYy0yLjEzMzMzMyAwLTQuMjY2NjY3IDEuMjgtNi40IDEuNzA2NjY3LTQuMjY2NjY3IDAuODUzMzMzLTguNTMzMzMzIDIuMTMzMzMzLTEyLjM3MzMzNCAzLjg0LTIuNTYgMC44NTMzMzMtNC42OTMzMzMgMi4xMzMzMzMtNi44MjY2NjYgMi45ODY2NjZsLTEwLjI0IDUuMTJjLTIuMTMzMzMzIDEuMjgtNC42OTMzMzMgMi45ODY2NjctNi44MjY2NjcgNC4yNjY2NjctMi45ODY2NjcgMi4xMzMzMzMtNS45NzMzMzMgNC4yNjY2NjctOC45NiA2LjgyNjY2Ny0yLjEzMzMzMyAxLjcwNjY2Ny0zLjg0IDMuNDEzMzMzLTUuOTczMzMzIDUuNTQ2NjY2LTIuNTYgMi41Ni01LjEyIDUuNTQ2NjY3LTcuNjggOC41MzMzMzRsLTQuNjkzMzM0IDUuOTczMzMzYy0yLjU2IDMuODQtNC42OTMzMzMgNy42OC02LjgyNjY2NiAxMS41Mi0wLjg1MzMzMyAxLjcwNjY2Ny0yLjEzMzMzMyAzLjQxMzMzMy0yLjk4NjY2NyA1LjEyLTIuNTYgNS41NDY2NjctNC42OTMzMzMgMTEuNTItNi40IDE3LjkyIDE4Ljc3MzMzMyA2LjgyNjY2NyAzNy45NzMzMzMgMTEuNTIgNTcuNiAxNC41MDY2NjcgMTQuNTA2NjY3IDIuMTMzMzMzIDI2LjAyNjY2NyAxNC41MDY2NjcgMjYuODggMjkuMDEzMzMzcy04LjEwNjY2NyAyOC41ODY2NjctMjIuMTg2NjY3IDMyLjg1MzMzM2ExNDEuMDk4NjY3IDE0MS4wOTg2NjcgMCAwIDAtOTguNTYgMTM0LjgyNjY2N3ogbTQ1Mi4yNjY2NjYtNTMyLjkwNjY2NmgtOTkuNDEzMzMzdjEyOS4yOGMwIDE2LjY0LTEzLjY1MzMzMyAzMC4yOTMzMzMtMzAuMjkzMzMzIDMwLjI5MzMzM3MtMzAuMjkzMzMzLTEzLjY1MzMzMy0zMC4yOTMzMzQtMzAuMjkzMzMzdi0xMjkuMjhIMzU0Ljk4NjY2N3YxMjkuMjhjMCAxNi42NC0xMy42NTMzMzMgMzAuMjkzMzMzLTMwLjI5MzMzNCAzMC4yOTMzMzNzLTMwLjI5MzMzMy0xMy42NTMzMzMtMzAuMjkzMzMzLTMwLjI5MzMzM3YtMTI5LjI4SDE5NS40MTMzMzN2MjguNTg2NjY2YTMxMi4zMiAzMTIuMzIgMCAwIDAgMTQ3LjIgMjY0LjUzMzMzNGMxLjI4LTMuODQgMi45ODY2NjctNy4yNTMzMzMgNC42OTMzMzQtMTEuMDkzMzM0IDEuMjgtMi45ODY2NjcgMi41Ni02LjQgNC4yNjY2NjYtOS4zODY2NjYgMy40MTMzMzMtNy4yNTMzMzMgNy42OC0xNC4wOCAxMS45NDY2NjctMjAuNDggMS4yOC0xLjcwNjY2NyAyLjEzMzMzMy0zLjQxMzMzMyAzLjQxMzMzMy01LjEyIDUuOTczMzMzLTguMTA2NjY3IDEyLjM3MzMzMy0xNS4zNiAxOS42MjY2NjctMjIuMTg2NjY3IDEuNzA2NjY3LTEuNzA2NjY3IDMuODQtMy40MTMzMzMgNS45NzMzMzMtNS4xMiA1LjU0NjY2Ny00LjY5MzMzMyAxMS4wOTMzMzMtOS4zODY2NjcgMTcuMDY2NjY3LTEzLjY1MzMzMyAyLjk4NjY2Ny0yLjEzMzMzMyA1Ljk3MzMzMy0zLjg0IDguOTYtNS41NDY2NjcgNS41NDY2NjctMy40MTMzMzMgMTEuNTItNi40IDE3LjQ5MzMzMy04Ljk2IDMuNDEzMzMzLTEuMjggNi40LTIuOTg2NjY3IDkuODEzMzM0LTQuMjY2NjY3IDYuNC0yLjU2IDEzLjIyNjY2Ny00LjI2NjY2NyAyMC4wNTMzMzMtNS45NzMzMzMgMi45ODY2NjctMC44NTMzMzMgNi40LTEuNzA2NjY3IDkuMzg2NjY3LTIuMTMzMzMzIDEwLjI0LTEuNzA2NjY3IDIwLjQ4LTIuOTg2NjY3IDMxLjE0NjY2Ni0yLjk4NjY2N3MyMC45MDY2NjcgMS4yOCAzMS4xNDY2NjcgMi45ODY2NjdjMy40MTMzMzMgMC40MjY2NjcgNi40IDEuNzA2NjY3IDkuMzg2NjY3IDIuMTMzMzMzIDYuODI2NjY3IDEuNzA2NjY3IDEzLjY1MzMzMyAzLjQxMzMzMyAyMC4wNTMzMzMgNS45NzMzMzMgMy40MTMzMzMgMS4yOCA2LjgyNjY2NyAyLjU2IDEwLjI0IDQuMjY2NjY3IDUuOTczMzMzIDIuNTYgMTEuOTQ2NjY3IDUuNTQ2NjY3IDE3LjQ5MzMzMyA4Ljk2IDIuOTg2NjY3IDEuNzA2NjY3IDUuOTczMzMzIDMuNDEzMzMzIDguOTYgNS41NDY2NjcgNS45NzMzMzMgNC4yNjY2NjcgMTEuOTQ2NjY3IDguNTMzMzMzIDE3LjA2NjY2NyAxMy42NTMzMzMgMi4xMzMzMzMgMS43MDY2NjcgMy44NCAyLjk4NjY2NyA1Ljk3MzMzMyA1LjEyIDcuMjUzMzMzIDYuODI2NjY3IDEzLjY1MzMzMyAxNC41MDY2NjcgMTkuNjI2NjY3IDIyLjE4NjY2NyAxLjI4IDEuNzA2NjY3IDIuMTMzMzMzIDMuNDEzMzMzIDIuOTg2NjY3IDQuNjkzMzMzIDQuNjkzMzMzIDYuODI2NjY3IDguNTMzMzMzIDEzLjY1MzMzMyAxMi4zNzMzMzMgMjAuOTA2NjY3bDMuODQgOC45NmMxLjcwNjY2NyAzLjg0IDMuNDEzMzMzIDcuMjUzMzMzIDQuNjkzMzMzIDExLjA5MzMzM2EzMTIuMTQ5MzMzIDMxMi4xNDkzMzMgMCAwIDAgMTQ3LjItMjY0LjEwNjY2N3YtMjguNTg2NjY2eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVuZC1ldmVudC1lcnJvciIgdW5pY29kZT0iJiM1OTA3MTsiIGQ9Ik01MTIgNjgyLjY2NjY2N2MxNjQuNjkzMzMzIDAgMjk4LjY2NjY2Ny0xMzMuOTczMzMzIDI5OC42NjY2NjctMjk4LjY2NjY2N3MtMTMzLjk3MzMzMy0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2Ny0yOTguNjY2NjY3IDEzMy45NzMzMzMtMjk4LjY2NjY2NyAyOTguNjY2NjY3IDEzMy45NzMzMzMgMjk4LjY2NjY2NyAyOTguNjY2NjY3IDI5OC42NjY2NjdtMCAxMjhDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3pNNTY3Ljg5MzMzMyAzNzEuNjI2NjY3bC0xMDEuMTIgMTMwLjk4NjY2Ni05MS4zMDY2NjYtMjcwLjUwNjY2NiAxMDIuNCAxMzEuODQgMTA1LjgxMzMzMy0xMjAuNzQ2NjY3IDY0Ljg1MzMzMyAyOTIuNjkzMzMzLTgwLjY0LTE2NC4yNjY2NjZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZW5kLWV2ZW50LWVzY2FsYXRpb24iIHVuaWNvZGU9IiYjNTkwNzI7IiBkPSJNNTEyIDY4Mi42NjY2NjdjMTY0LjY5MzMzMyAwIDI5OC42NjY2NjctMTMzLjk3MzMzMyAyOTguNjY2NjY3LTI5OC42NjY2NjdzLTEzMy45NzMzMzMtMjk4LjY2NjY2Ny0yOTguNjY2NjY3LTI5OC42NjY2NjctMjk4LjY2NjY2NyAxMzMuOTczMzMzLTI5OC42NjY2NjcgMjk4LjY2NjY2NyAxMzMuOTczMzMzIDI5OC42NjY2NjcgMjk4LjY2NjY2NyAyOTguNjY2NjY3bTAgMTI4QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTUxMiA1NjkuMTczMzMzYy00My41Mi0xMjEuNi03MS42OC0yNDguMzItMTE1LjItMzY5LjkyIDQwLjEwNjY2NyAzOS42OCA3NS4wOTMzMzMgODQuNDggMTE1LjIgMTI0LjU4NjY2N2wxMTUuMi0xMjQuNTg2NjY3Yy0zOS4yNTMzMzMgMTIzLjMwNjY2Ny03NS45NDY2NjcgMjQ3LjA0LTExNS4yIDM2OS45MnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFydC1ldmVudC1ub24taW50ZTQiIHVuaWNvZGU9IiYjNTkwNzQ7IiBkPSJNNTEyIDgxMC42NjY2NjdoLTIwLjQ4Yy0yLjk4NjY2Ny0wLjQyNjY2Ny01Ljk3MzMzMy0wLjg1MzMzMy04Ljk2LTAuODUzMzM0aC02LjRjLTI3LjMwNjY2Ny0yLjk4NjY2Ny01NC4xODY2NjctNy42OC04MC4yMTMzMzMtMTQuOTMzMzMzbDEyLjM3MzMzMy02MS40NCAzMS41NzMzMzMgNi40QTM2OS4wNjY2NjcgMzY5LjA2NjY2NyAwIDAgMCA1MTIgNzQ3LjA5MzMzM2gxNS4zNmwxNS4zNi0xLjI4YzI0LjMyLTIuMTMzMzMzIDQ4LjIxMzMzMy02LjQgNzEuMjUzMzMzLTEzLjIyNjY2NmwzMC43Mi04Ljk2IDE3LjQ5MzMzNCA2MC4xNmMtMTIuMzczMzMzIDQuNjkzMzMzLTI1LjE3MzMzMyA4Ljk2LTM3Ljk3MzMzNCAxMi4zNzMzMzNoLTIuMTMzMzMzdjAuODUzMzMzaC0yLjU2Vjc5Ny44NjY2NjdoLTIuNTZ2MC44NTMzMzNoLTEuMjhjLTIxLjc2IDUuNTQ2NjY3LTQ0LjM3MzMzMyA5LjM4NjY2Ny02Ny40MTMzMzMgMTEuNTItMTEuNTIgMC44NTMzMzMtMjMuNDY2NjY3IDEuMjgtMzUuNDEzMzM0IDEuMjh6IG0tMTc1Ljc4NjY2Ny0zNy45NzMzMzRjLTkuODEzMzMzLTQuMjY2NjY3LTE5LjItOC45Ni0yOC41ODY2NjYtMTQuMDgtNS45NzMzMzMtMy40MTMzMzMtMTEuNTItNi40LTE3LjA2NjY2Ny05LjgxMzMzM2gtMC44NTMzMzN2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzNGgtMC40MjY2NjdsLTIuMTMzMzMzLTEuNzA2NjY2aC0wLjg1MzMzNHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzRoLTEuMjh2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMS4yOHYtMC44NTMzMzNoLTEuMjh2LTAuODUzMzM0aC0xLjI4di0wLjg1MzMzM2gtMC44NTMzMzNsLTIuNTYtMi4xMzMzMzNoLTAuODUzMzM0di0wLjg1MzMzNGgtMC44NTMzMzN2LTAuODUzMzMzaC0wLjg1MzMzM3YtMC44NTMzMzNoLTAuNDI2NjY3bC01Ljk3MzMzMy00LjY5MzMzNGMtMTYuNjQtMTIuMzczMzMzLTMyLjQyNjY2Ny0yNS42LTQ3LjM2LTQwLjEwNjY2Nmw0MC41MzMzMzMtNDguMjEzMzM0IDI0LjMyIDIwLjQ4YzE4LjM0NjY2NyAxNS43ODY2NjcgMzguNCAyOS40NCA1OS43MzMzMzMgNDAuOTZsMjguMTYgMTUuMzYtMzAuMjkzMzMzIDU1LjA0ek0xNzEuNTIgNjQwLjg1MzMzM2MtNi40LTguNTMzMzMzLTEyLjM3MzMzMy0xNy4wNjY2NjctMTguMzQ2NjY3LTI2LjAyNjY2Ni01LjEyLTguMTA2NjY3LTkuODEzMzMzLTE2LjIxMzMzMy0xNC41MDY2NjYtMjQuMzJ2LTAuODUzMzM0aC0wLjQyNjY2N3YtMC44NTMzMzNoLTAuNDI2NjY3di0xLjcwNjY2N2gtMC40MjY2NjZ2LTMuODRoLTAuNDI2NjY3di01Ljk3MzMzM0gxMzYuNTMzMzMzdi0wLjg1MzMzM2gtMC40MjY2NjZjLTEuMjgtMi41Ni0yLjEzMzMzMy00LjY5MzMzMy0yLjk4NjY2Ny02LjgyNjY2N3YtMi41NmgtMC40MjY2NjdjLTEuMjgtMi4xMzMzMzMtMi4xMzMzMzMtNC42OTMzMzMtMy40MTMzMzMtNi44MjY2Njd2LTIuNTZzLTEuMjgtMy40MTMzMzMtMi4xMzMzMzMtNC42OTMzMzNWNTQ0LjQyNjY2N2wtMS4yOC0yLjk4NjY2N3YtMC44NTMzMzNzLTEuMjgtMi45ODY2NjctMS43MDY2NjctNC42OTMzMzRjLTMuODQtOS44MTMzMzMtNy4yNTMzMzMtMjAuMDUzMzMzLTEwLjI0LTMwLjI5MzMzM2w1OC40NTMzMzMtMjIuNjEzMzMzIDExLjUyIDI5Ljg2NjY2NmM4LjUzMzMzMyAyMi42MTMzMzMgMTkuNjI2NjY3IDQzLjk0NjY2NyAzMi44NTMzMzQgNjQuNDI2NjY3bDE3LjQ5MzMzMyAyNi44OC01Mi45MDY2NjcgMzQuMTMzMzMzeiBtLTgxLjQ5MzMzMy0xOTQuNTZjLTEuNzA2NjY3LTEwLjI0LTIuNTYtMjAuOTA2NjY3LTMuNDEzMzM0LTMxLjU3MzMzMyAwLTUuOTczMzMzLTAuODUzMzMzLTExLjk0NjY2Ny0wLjg1MzMzMy0xNy45MlYzNTYuMjY2NjY3YzAtOC41MzMzMzMgMC44NTMzMzMtMTYuNjQgMS43MDY2NjctMjQuMzJ2LTcuNjhjMS4yOC0xMS45NDY2NjcgMy40MTMzMzMtMjMuNDY2NjY3IDUuNTQ2NjY2LTM0Ljk4NjY2N2w2Mi4yOTMzMzQgOC4xMDY2NjctNC4yNjY2NjcgMzEuNTczMzMzYy0yLjEzMzMzMyAxNS4zNi0yLjk4NjY2NyAzMS4xNDY2NjctMi45ODY2NjcgNDYuOTMzMzMzIDAgOC41MzMzMzMgMCAxNy4wNjY2NjcgMC44NTMzMzQgMjUuNmwyLjEzMzMzMyAzMi02Mi43MiA0LjI2NjY2N3ogbTc4LjkzMzMzMy0xODMuODkzMzMzbC01Ny4xNzMzMzMtMjYuMDI2NjY3YzMuODQtOS44MTMzMzMgNy42OC0xOS42MjY2NjcgMTEuOTQ2NjY2LTI5LjQ0IDIuMTMzMzMzLTQuNjkzMzMzIDQuMjY2NjY3LTkuMzg2NjY3IDYuNC0xMy42NTMzMzN2LTQuMjY2NjY3aDAuNDI2NjY3YzkuODEzMzMzLTE5LjIgMjAuNDgtMzcuMTIgMzIuODUzMzMzLTU0LjE4NjY2NnYtMC44NTMzMzRoMC40MjY2Njd2LTAuODUzMzMzaDAuNDI2NjY3di0wLjg1MzMzM2M2LjQtOC45NiAxMi44LTE3LjQ5MzMzMyAyMC4wNTMzMzMtMjUuNmw1MC43NzMzMzMgMzcuMTItMTguNzczMzMzIDI2LjAyNjY2NmMtMTQuMDggMTkuNjI2NjY3LTI2LjQ1MzMzMyA0MC41MzMzMzMtMzYuNjkzMzMzIDYyLjI5MzMzNGwtMTMuMjI2NjY3IDI5LjAxMzMzM3ogbTEwMC42OTMzMzMtMTQ5Ljc2bC0zNy41NDY2NjYtNTAuMzQ2NjY3YzEyLjM3MzMzMy0xMC42NjY2NjcgMjUuNi0yMC45MDY2NjcgMzkuMjUzMzMzLTMwLjI5MzMzM2gwLjg1MzMzM3YtMC44NTMzMzNoMS4yOHYtMC44NTMzMzRoMS4yOHYtMC44NTMzMzNoMC44NTMzMzR2LTAuODUzMzMzaDAuODUzMzMzYzE3LjA2NjY2Ny0xMS45NDY2NjcgMzQuOTg2NjY3LTIyLjE4NjY2NyA1My43Ni0zMS4xNDY2NjcgOS4zODY2NjctNC42OTMzMzMgMTkuMi04Ljk2IDI5LjAxMzMzMy0xMi44bDI2Ljg4IDU2Ljc0NjY2Ny0yOS4wMTMzMzMgMTMuNjUzMzMzYy0yMS43NiAxMC4yNC00Mi42NjY2NjcgMjMuMDQtNjEuODY2NjY3IDM3LjU0NjY2N2wtMjUuNiAxOS4yeiBtMTU5LjU3MzMzNC04My4ybC04Ljk2LTYyLjI5MzMzM2MxMC4yNC0yLjEzMzMzMyAyMC45MDY2NjctNC4yNjY2NjcgMzEuNTczMzMzLTUuNTQ2NjY3IDEwLjY2NjY2Ny0xLjcwNjY2NyAyMC45MDY2NjctMi41NiAzMS41NzMzMzMtMy40MTMzMzNoMTIuMzczMzM0Vi00Mi42NjY2NjdoMzMuNzA2NjY2YzEzLjIyNjY2NyAwLjQyNjY2NyAyNi40NTMzMzMgMS43MDY2NjcgMzkuMjUzMzM0IDMuNDEzMzM0bC0zLjQxMzMzNCA2Mi43Mi0zMi0xLjcwNjY2N2MtNi44MjY2NjcgMC0xNC4wOC0wLjQyNjY2Ny0yMC45MDY2NjYtMC40MjY2NjctMTcuMDY2NjY3IDAtMzQuNTYgMS4yOC01MS4yIDMuNDEzMzM0bC0zMS41NzMzMzQgNC42OTMzMzN6IG0zMDIuMDggNjRsLTI3LjMwNjY2Ny0xNy4wNjY2NjdjLTIwLjQ4LTEyLjgtNDIuMjQtMjMuNDY2NjY3LTY0Ljg1MzMzMy0zMmwtMjkuODY2NjY3LTExLjA5MzMzMyAyMi4xODY2NjctNTguODhjMTAuMjQgMi45ODY2NjcgMjAuNDggNi40IDMwLjI5MzMzMyAxMC4yNCAyNi44OCAxMC4yNCA1Mi40OCAyMi42MTMzMzMgNzYuMzczMzMzIDM3Ljk3MzMzMyA4Ljk2IDUuOTczMzMzIDE3LjkyIDExLjUyIDI2LjQ1MzMzNCAxNy45MmwtMzMuMjggNTMuMzMzMzM0eiBtMTEyLjY0IDE0MC44bC0xNS43ODY2NjctMjcuNzMzMzMzYy0xMS45NDY2NjctMjAuOTA2NjY3LTI2LjAyNjY2Ny00MC45Ni00MS44MTMzMzMtNTkuMzA2NjY3bC0yMC45MDY2NjctMjQuMzIgNDcuMzYtNDAuOTZjNy42OCA3LjY4IDE0LjkzMzMzMyAxNS4zNiAyMS43NiAyMy4wNCAzLjQxMzMzMyA0LjI2NjY2NyA2LjgyNjY2NyA4LjEwNjY2NyA5LjgxMzMzMyAxMi4zNzMzMzN2MC44NTMzMzRoMC40MjY2NjdsMi4xMzMzMzMgMi45ODY2NjZoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2Njd2MC44NTMzMzNoMC40MjY2NjZ2MC44NTMzMzNoMC40MjY2Njd2MC44NTMzMzRoMC40MjY2NjdWMTI4aDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzaDAuNDI2NjY2djAuODUzMzMzaDAuNDI2NjY3djAuODUzMzM0aDAuNDI2NjY3djAuODUzMzMzSDg1My4zMzMzMzN2MC44NTMzMzNsMi41NiAzLjg0djAuODUzMzM0YzE0LjkzMzMzMyAyMC45MDY2NjcgMjcuNzMzMzMzIDQzLjA5MzMzMyAzOC40IDY2LjEzMzMzM2wtNTQuNjEzMzMzIDMwLjcyeiBtMzEuMTQ2NjY2IDE3Ny40OTMzMzN2LTMyYy0wLjg1MzMzMy0yNC4zMi0zLjQxMzMzMy00OC42NC04LjUzMzMzMy03Mi4xMDY2NjZsLTYuODI2NjY3LTMxLjE0NjY2NyA2MS40NC0xMy4yMjY2NjdjMTEuNTIgMzguNCAxNy40OTMzMzMgNzguOTMzMzMzIDE3LjQ5MzMzNCAxMjEuMTczMzM0IDAgOC45NiAwIDE3LjkyLTAuODUzMzM0IDI2LjQ1MzMzM2wtNjIuNzIgMC44NTMzMzN6IG0tMi4xMzMzMzMgMjAwLjEwNjY2N2wtNTUuNDY2NjY3LTI5LjQ0IDE0LjkzMzMzNC0yOC4xNmMxMS41Mi0yMS4zMzMzMzMgMjAuNDgtNDMuOTQ2NjY3IDI3LjMwNjY2Ni02Ni45ODY2NjdsOC45Ni0zMC43MiA2MC4xNiAxNy45MmMtMi41NiAxMi4zNzMzMzMtNS45NzMzMzMgMjQuMzItOS4zODY2NjYgMzYuMjY2NjY3VjUxOS4yNTMzMzNjLTMuNDEzMzMzIDEwLjI0LTcuMjUzMzMzIDIwLjA1MzMzMy0xMS4wOTMzMzQgMjkuODY2NjY3VjU1Ny42NTMzMzNjLTguNTMzMzMzIDE5LjYyNjY2Ny0xOC4zNDY2NjcgMzcuOTczMzMzLTI5Ljg2NjY2NiA1NS44OTMzMzR6IG0tMTUzLjE3MzMzMyAxNDUuNDkzMzMzbC0zNC41Ni01Mi40OCAyNi44OC0xNy40OTMzMzNjMjAuMDUzMzMzLTEzLjIyNjY2NyAzOC44MjY2NjctMjguNTg2NjY3IDU2LjMyLTQ1LjY1MzMzM2wyMi42MTMzMzMtMjIuNjEzMzM0IDQ0LjM3MzMzMyA0NC4zNzMzMzRhNDIzLjE2OCA0MjMuMTY4IDAgMCAxLTg1LjMzMzMzMyA3NS41MmgtMC44NTMzMzN2MC44NTMzMzNoLTEuMjh2MC44NTMzMzNoLTAuNDI2NjY3Yy04Ljk2IDYuNC0xNy45MiAxMS45NDY2NjctMjcuMzA2NjY3IDE3LjA2NjY2N3pNNjE3LjM4NjY2NyAyMTcuNkg0MDcuMDRjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4ydjI5NC40YzAgMTAuNjY2NjY3IDguNTMzMzMzIDE5LjIgMTkuMiAxOS4yaDIxMC4zNDY2NjdjMTAuNjY2NjY3IDAgMTkuMi04LjUzMzMzMyAxOS4yLTE5LjJ2LTI5NC40YzAtMTAuNjY2NjY3LTguNTMzMzMzLTE5LjItMTkuMi0xOS4yek00MjYuMjQgMjU2aDE3MS45NDY2NjdWNTEySDQyNi4yNHYtMjU2ek01NTguOTMzMzMzIDQzMi42NGgtOTMuNDRjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4yczguNTMzMzMzIDE5LjIgMTkuMiAxOS4yaDkzLjQ0YzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ycy04LjUzMzMzMy0xOS4yLTE5LjItMTkuMnpNNTU4LjkzMzMzMyAzNjQuOGgtOTMuNDRjLTEwLjY2NjY2NyAwLTE5LjIgOC41MzMzMzMtMTkuMiAxOS4yczguNTMzMzMzIDE5LjIgMTkuMiAxOS4yaDkzLjQ0YzEwLjY2NjY2NyAwIDE5LjItOC41MzMzMzMgMTkuMi0xOS4ycy04LjUzMzMzMy0xOS4yLTE5LjItMTkuMnpNNTU4LjkzMzMzMyAyOTYuOTZoLTkzLjQ0Yy0xMC42NjY2NjcgMC0xOS4yIDguNTMzMzMzLTE5LjIgMTkuMnM4LjUzMzMzMyAxOS4yIDE5LjIgMTkuMmg5My40NGMxMC42NjY2NjcgMCAxOS4yLTguNTMzMzMzIDE5LjItMTkuMnMtOC41MzMzMzMtMTkuMi0xOS4yLTE5LjJ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWQtaG9jLW1hcmtlciIgdW5pY29kZT0iJiM1OTA4NzsiIGQ9Ik04NS4zMzMzMzMgNDAyLjM0NjY2N2MzNS40MTMzMzMgODQuMDUzMzMzIDgyLjM0NjY2NyAxNzEuOTQ2NjY3IDE2Mi41NiAyMTkuMzA2NjY2IDU5LjczMzMzMyAzNS40MTMzMzMgMTMzLjEyIDEzLjY1MzMzMyAxODguMTYtMjEuMzMzMzMzIDg0LjA1MzMzMy01Mi4wNTMzMzMgMTUwLjE4NjY2Ny0xMjkuMjggMjMzLjM4NjY2Ny0xODIuNjEzMzMzIDUwLjM0NjY2Ny0yOS40NCAxMTIuNjQtNS4xMiAxNDkuMzMzMzMzIDM1LjQxMzMzMyA0My45NDY2NjcgNTEuNjI2NjY3IDk0LjcyIDk5Ljg0IDEyMC4zMiAxNjQuNjkzMzMzdi0yMDAuOTZjLTM3LjU0NjY2Ny03NC4yNC04NS4zMzMzMzMtMTUxLjQ2NjY2Ny0xNjIuNTYtMTg3LjMwNjY2Ni02Mi43Mi0yNi44OC0xMzYuMTA2NjY3LTEwLjY2NjY2Ny0xOTAuMjkzMzMzIDI4LjU4NjY2Ni03OS43ODY2NjcgNTMuNzYtMTM4LjY2NjY2NyAxMzYuNTMzMzMzLTIyNS4yOCAxNzkuNjI2NjY3LTQyLjI0IDIxLjc2LTk2IDE2LjY0LTEzMS40MTMzMzMtMTYuMjEzMzMzLTYzLjU3MzMzMy01Ni4zMi0xMDAuMjY2NjY3LTEzNi4xMDY2NjctMTQzLjc4NjY2Ny0yMDguMjEzMzM0djE4OS4wMTMzMzR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXNlci0xIiB1bmljb2RlPSImIzU5MDY1OyIgZD0iTTc3OC4yNCA0Ny43ODY2NjdIMjU1LjU3MzMzM2MtMzguNCAwLTY5LjEyIDMxLjE0NjY2Ny02OS4xMiA2OS4xMiAwIDEyMC43NDY2NjcgOTguMTMzMzMzIDIxOC40NTMzMzMgMjE4LjQ1MzMzNCAyMTguNDUzMzMzaDIyNGMxMjAuNzQ2NjY3IDAgMjE4LjQ1MzMzMy05OC4xMzMzMzMgMjE4LjQ1MzMzMy0yMTguNDUzMzMzIDAtMzguNC0zMS4xNDY2NjctNjkuMTItNjkuMTItNjkuMTJ6IG0tMzczLjMzMzMzMyAyMjRjLTg1LjMzMzMzMyAwLTE1NC40NTMzMzMtNjkuNTQ2NjY3LTE1NC40NTMzMzQtMTU0LjQ1MzMzNCAwLTIuOTg2NjY3IDIuNTYtNS4xMiA1LjEyLTUuMTJoNTIyLjY2NjY2N2MyLjk4NjY2NyAwIDUuMTIgMi41NiA1LjEyIDUuMTIgMCA4NS4zMzMzMzMtNjkuNTQ2NjY3IDE1NC40NTMzMzMtMTU0LjQ1MzMzMyAxNTQuNDUzMzM0SDQwNC45MDY2Njd6IG0xMTEuNzg2NjY2IDE0OS4zMzMzMzNjLTk5Ljg0IDAtMTgxLjMzMzMzMyA4MS40OTMzMzMtMTgxLjMzMzMzMyAxODEuMzMzMzMzczgxLjQ5MzMzMyAxODEuMzMzMzMzIDE4MS4zMzMzMzMgMTgxLjMzMzMzNCAxODEuMzMzMzMzLTgxLjQ5MzMzMyAxODEuMzMzMzM0LTE4MS4zMzMzMzQtODEuNDkzMzMzLTE4MS4zMzMzMzMtMTgxLjMzMzMzNC0xODEuMzMzMzMzeiBtMCAyOTguNjY2NjY3Yy02NC44NTMzMzMgMC0xMTcuMzMzMzMzLTUyLjQ4LTExNy4zMzMzMzMtMTE3LjMzMzMzNHM1Mi40OC0xMTcuMzMzMzMzIDExNy4zMzMzMzMtMTE3LjMzMzMzMyAxMTcuMzMzMzMzIDUyLjQ4IDExNy4zMzMzMzQgMTE3LjMzMzMzMy01Mi40OCAxMTcuMzMzMzMzLTExNy4zMzMzMzQgMTE3LjMzMzMzNHoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwYXJhbGxlbC1taS1tYXJrZXIiIHVuaWNvZGU9IiYjNTkwMzk7IiBkPSJNODEwLjY2NjY2NyA1My4zMzMzMzNjLTE3LjQ5MzMzMyAwLTMyIDE0LjUwNjY2Ny0zMiAzMlY3NjhjMCAxNy40OTMzMzMgMTQuNTA2NjY3IDMyIDMyIDMyczMyLTE0LjUwNjY2NyAzMi0zMnYtNjgyLjY2NjY2N2MwLTE3LjQ5MzMzMy0xNC41MDY2NjctMzItMzItMzJ6TTUzMy4zMzMzMzMgNTMuMzMzMzMzYy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJWNzY4YzAgMTcuNDkzMzMzIDE0LjUwNjY2NyAzMiAzMiAzMnMzMi0xNC41MDY2NjcgMzItMzJ2LTY4Mi42NjY2NjdjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyek0yNTYgNTMuMzMzMzMzYy0xNy40OTMzMzMgMC0zMiAxNC41MDY2NjctMzIgMzJWNzY4YzAgMTcuNDkzMzMzIDE0LjUwNjY2NyAzMiAzMiAzMnMzMi0xNC41MDY2NjcgMzItMzJ2LTY4Mi42NjY2NjdjMC0xNy40OTMzMzMtMTQuNTA2NjY3LTMyLTMyLTMyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LWVzY2FsYXRpIiB1bmljb2RlPSImIzU5MDkxOyIgZD0iTTUxMiA3NDYuNjY2NjY3YzIwMC4xMDY2NjcgMCAzNjIuNjY2NjY3LTE2Mi41NiAzNjIuNjY2NjY3LTM2Mi42NjY2NjdzLTE2Mi41Ni0zNjIuNjY2NjY3LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3IDE2Mi41Ni0zNjIuNjY2NjY3IDM2Mi42NjY2NjdTMzExLjg5MzMzMyA3NDYuNjY2NjY3IDUxMiA3NDYuNjY2NjY3TTUxMiA4MTAuNjY2NjY3QzI3Ni40OCA4MTAuNjY2NjY3IDg1LjMzMzMzMyA2MTkuNTIgODUuMzMzMzMzIDM4NHMxOTEuMTQ2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2Ny00MjYuNjY2NjY3IDQyNi42NjY2NjcgMTkxLjE0NjY2NyA0MjYuNjY2NjY3IDQyNi42NjY2NjdTNzQ3LjUyIDgxMC42NjY2NjcgNTEyIDgxMC42NjY2Njd6TTYxOC42NjY2NjcgMTkxLjE0NjY2N2MtNS45NzMzMzMgMC0xMS41MiAyLjEzMzMzMy0xNS43ODY2NjcgNi44MjY2NjZsLTkxLjMwNjY2NyA5OC41NmMtMTIuOC0xMy4yMjY2NjctMjQuNzQ2NjY3LTI2Ljg4LTM3LjEyLTQwLjk2LTE3LjQ5MzMzMy0yMC4wNTMzMzMtMzUuNDEzMzMzLTM5LjY4LTU0LjE4NjY2Ni01OC40NTMzMzMtNy4yNTMzMzMtNi44MjY2NjctMTcuOTItOC4xMDY2NjctMjYuNDUzMzM0LTIuOTg2NjY3YTIxLjEyIDIxLjEyIDAgMCAwLTguNTMzMzMzIDI1LjE3MzMzNGMyMC4wNTMzMzMgNTUuODkzMzMzIDM2LjY5MzMzMyAxMTMuOTIgNTIuOTA2NjY3IDE3MC4yNCAxNi4yMTMzMzMgNTYuNzQ2NjY3IDMzLjI4IDExNS42MjY2NjcgNTMuNzYgMTcyLjggMi45ODY2NjcgOC41MzMzMzMgMTEuMDkzMzMzIDE0LjA4IDIwLjA1MzMzMyAxNC4wOCA4Ljk2IDAgMTcuMDY2NjY3LTUuOTczMzMzIDIwLjA1MzMzMy0xNC45MzMzMzQgMTcuOTItNTcuMTczMzMzIDM1Ljg0LTExNC4zNDY2NjcgNTMuMzMzMzM0LTE3MS41MiAxNy40OTMzMzMtNTcuMTczMzMzIDM0Ljk4NjY2Ny0xMTQuMzQ2NjY3IDUzLjMzMzMzMy0xNzEuMDkzMzMzYTIxLjEyIDIxLjEyIDAgMCAwLTIwLjA1MzMzMy0yNy43MzMzMzN6IG0tMTA2LjY2NjY2NyAxNTcuODY2NjY2aDAuNDI2NjY3YzUuNTQ2NjY3IDAgMTEuMDkzMzMzLTIuNTYgMTUuMzYtNi44MjY2NjZsNDIuMjQtNDUuNjUzMzM0Yy04LjUzMzMzMyAyNi44OC0xNi42NCA1NC4xODY2NjctMjUuMTczMzM0IDgxLjA2NjY2Ny0xMS4wOTMzMzMgMzYuMjY2NjY3LTIyLjE4NjY2NyA3Mi41MzMzMzMtMzMuNzA2NjY2IDEwOC44LTExLjUyLTM2LjI2NjY2Ny0yMS43Ni03Mi41MzMzMzMtMzItMTA4LjM3MzMzMy03LjI1MzMzMy0yNi4wMjY2NjctMTQuOTMzMzMzLTUyLjA1MzMzMy0yMy4wNC03OC41MDY2NjcgMTMuMjI2NjY3IDE0LjkzMzMzMyAyNi44OCAyOS40NCA0MC45NiA0My41MmEyMS43NiAyMS43NiAwIDAgMCAxNC45MzMzMzMgNi40eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJ0LWV2ZW50LW5vbmUiIHVuaWNvZGU9IiYjNTkwODY7IiBkPSJNNTEyIDc0Ni42NjY2NjdjMjAwLjEwNjY2NyAwIDM2Mi42NjY2NjctMTYyLjU2IDM2Mi42NjY2NjctMzYyLjY2NjY2N3MtMTYyLjU2LTM2Mi42NjY2NjctMzYyLjY2NjY2Ny0zNjIuNjY2NjY3LTM2Mi42NjY2NjcgMTYyLjU2LTM2Mi42NjY2NjcgMzYyLjY2NjY2N1MzMTEuODkzMzMzIDc0Ni42NjY2NjcgNTEyIDc0Ni42NjY2NjdNNTEyIDgxMC42NjY2NjdDMjc2LjQ4IDgxMC42NjY2NjcgODUuMzMzMzMzIDYxOS41MiA4NS4zMzMzMzMgMzg0czE5MS4xNDY2NjctNDI2LjY2NjY2NyA0MjYuNjY2NjY3LTQyNi42NjY2NjcgNDI2LjY2NjY2NyAxOTEuMTQ2NjY3IDQyNi42NjY2NjcgNDI2LjY2NjY2N1M3NDcuNTIgODEwLjY2NjY2NyA1MTIgODEwLjY2NjY2N3oiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsaW5rIiB1bmljb2RlPSImIzU5MDAzOyIgZD0iTTIzNy4xOTc1MDUtMTIwLjk2MDg5NmEyMjkuMjUzNDUzIDIyOS4yNTM0NTMgMCAwIDAtMTYyLjg5MDYxMSA2Ny4yNjc3OSAyMzEuMDYzMzQ5IDIzMS4wNjMzNDkgMCAwIDAgMCAzMjUuNzgxMjIzbDEzMC45MTU3ODggMTMwLjkxNTc4OGEyMzEuMDYzMzQ5IDIzMS4wNjMzNDkgMCAwIDAgMjMwLjc2MTY5OSA1Ny4wMTE3MTQgMjMxLjA2MzM0OSAyMzEuMDYzMzQ5IDAgMCAwIDU3LjAxMTcxNCAyMzAuNzYxNjk5bDEzMC45MTU3ODggMTMwLjkxNTc4OGEyMzAuNDYwMDUgMjMwLjQ2MDA1IDAgMSAwIDMyNi4wODI4NzItMzI1Ljc4MTIyM2wtMTMxLjIxNzQzNy0xMzAuOTE1Nzg4YTIzMS4zNjQ5OTggMjMxLjM2NDk5OCAwIDAgMC0yMzAuNzYxNjk5LTU3LjAxMTcxNCAyMzEuMDYzMzQ5IDIzMS4wNjMzNDkgMCAwIDAtNTcuMDExNzE0LTIzMC43NjE2OTlsLTEzMC45MTU3ODgtMTMwLjkxNTc4OGEyMjkuODU2NzUyIDIyOS44NTY3NTIgMCAwIDAtMTYyLjg5MDYxMi02Ny4yNjc3OXogbS05OC45NDA5NjQgMTMxLjIxNzQzN2ExNDAuNTY4NTY1IDE0MC41Njg1NjUgMCAwIDEgMTk3Ljg4MTkyOCAwbDEzMC45MTU3ODggMTMwLjkxNTc4OGExNDAuNTY4NTY1IDE0MC41Njg1NjUgMCAwIDEgMjYuNTQ1MTM3IDE2MC40Nzc0MTdMNDI2LjAyOTk1NSAyMzMuMTc1MzZBNDUuMjQ3MzkyIDQ1LjI0NzM5MiAwIDAgMCAzNjEuMTc1MzYgMjk4LjAyOTk1NWw2Ny41Njk0MzkgNjcuNTY5NDM5YTE0MC4yNjY5MTUgMTQwLjI2NjkxNSAwIDAgMS0xNTguMDY0MjIzLTI2Ljg0Njc4NmwtMTMwLjkxNTc4OC0xMzAuNjE0MTM5YTE0MC41Njg1NjUgMTQwLjU2ODU2NSAwIDAgMSAwLTE5Ny44ODE5Mjh6IG00NTYuMDkzNzEzIDM5Mi4xNDQwNjVhMTM5LjY2MzYxNyAxMzkuNjYzNjE3IDAgMCAxIDE2MC40Nzc0MTcgMjYuODQ2Nzg2bDEzMC45MTU3ODggMTMwLjYxNDEzOWExMzkuOTY1MjY2IDEzOS45NjUyNjYgMCAwIDEtMTk3Ljg4MTkyOCAxOTcuODgxOTI4TDU1Ni45NDU3NDMgNjI1LjMxOTQyNGExNDAuNTY4NTY1IDE0MC41Njg1NjUgMCAwIDEtMjYuNTQ1MTM3LTE2MC40Nzc0MTdMNTcyLjMyOTg1NiA1MDcuNjc2MjA1YTQ1LjI0NzM5MiA0NS4yNDczOTIgMCAwIDAgNjMuMzQ2MzQ5LTYzLjM0NjM0OXogbTE5Mi40NTIyNDEtNS40Mjk2ODd6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibG9jayIgdW5pY29kZT0iJiM1OTAyOTsiIGQ9Ik04MTguNTUyMTk5LTExNi42ODM3MzJIMjA1LjQ0NzgwMWE5NS4zMTk0OTQgOTUuMzE5NDk0IDAgMCAwLTk1LjAyNTI5NyA5NC4xNDI3MVY0ODkuMzU5OTYyYTk1LjMxOTQ5NCA5NS4zMTk0OTQgMCAwIDAgOTUuMDI1Mjk3IDk1LjMxOTQ5NGg1OC44MzkxOTR2NjIuMDc1MzQ5YTI0OC4zMDEzOTcgMjQ4LjMwMTM5NyAwIDEgMCA0OTYuNjAyNzk0IDB2LTYyLjA3NTM0OWg1OC44MzkxOTRhOTUuMzE5NDk0IDk1LjMxOTQ5NCAwIDAgMCA5NS4wMjUyOTctOTUuMzE5NDk0Vi0yMi41NDEwMjJhOTUuMzE5NDk0IDk1LjMxOTQ5NCAwIDAgMC05Ni4yMDIwODEtOTQuMTQyNzF6TTIwNS40NDc4MDEgNDk2LjQyMDY2NmE2Ljc2NjUwNyA2Ljc2NjUwNyAwIDAgMS02Ljc2NjUwNy03LjA2MDcwNFYtMjIuNTQxMDIyYTYuNzY2NTA3IDYuNzY2NTA3IDAgMCAxIDYuNzY2NTA3LTcuMDYwNzAzaDYxMy4xMDQzOThhNi43NjY1MDcgNi43NjY1MDcgMCAwIDEgNi43NjY1MDcgNy4wNjA3MDNWNDg5LjM1OTk2MmE2Ljc2NjUwNyA2Ljc2NjUwNyAwIDAgMS02Ljc2NjUwNyA3LjA2MDcwNHogbTE0Ny4wOTc5ODQgODguMjU4NzloMzE5LjQ5NjgyMnY2Mi4wNzUzNDlhMTYwLjA0MjYwNyAxNjAuMDQyNjA3IDAgMSAxLTMyMC4wODUyMTQgMHpNNTEyIDg3Ljc4MjQ2NmE0NC4xMjkzOTUgNDQuMTI5Mzk1IDAgMCAwLTQ0LjEyOTM5NSA0NC4xMjkzOTV2MTUuMjk4MTkxYTEyMC42MjAzNDcgMTIwLjYyMDM0NyAwIDEgMCA4OC4yNTg3OSAxMC4wMDI2NjJ2LTI1LjMwMDg1M2E0NC4xMjkzOTUgNDQuMTI5Mzk1IDAgMCAwLTQ0LjEyOTM5NS00NC4xMjkzOTV6IG0tMTIuNjUwNDI3IDIwOC41ODQ5NDFhMzIuNjU1NzUyIDMyLjY1NTc1MiAwIDEgMSAzMi4zNjE1NTctMzIuNjU1NzUyIDMyLjY1NTc1MiAzMi42NTU3NTIgMCAwIDEtMzIuMzYxNTU3IDMyLjY1NTc1MnoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmxvY2siIHVuaWNvZGU9IiYjNTkwOTc7IiBkPSJNODE4LjU1MjE5OS0xMTYuNjgzNzMySDIwNS40NDc4MDFhOTUuMzE5NDk0IDk1LjMxOTQ5NCAwIDAgMC05NS4wMjUyOTcgOTQuMTQyNzFWNDg5LjM1OTk2MmE5NS4zMTk0OTQgOTUuMzE5NDk0IDAgMCAwIDk1LjAyNTI5NyA5NS4zMTk0OTRoNTguODM5MTk0djYyLjA3NTM0OWEyNDguMzAxMzk3IDI0OC4zMDEzOTcgMCAwIDAgNDcwLjcxMzU0OSAxMTAuMzIzNDg4IDQ0LjEyOTM5NSA0NC4xMjkzOTUgMCAxIDAtNzkuMTM4NzE2LTM5LjEyODA2MyAxNjAuMDQyNjA3IDE2MC4wNDI2MDcgMCAwIDEtMzAzLjYxMDIzOS03MS4xOTU0MjV2LTYyLjA3NTM0OWg0NjYuMzAwNjFhOTUuMzE5NDk0IDk1LjMxOTQ5NCAwIDAgMCA5NS4wMjUyOTctOTUuMzE5NDk0Vi0yMi41NDEwMjJhOTUuMzE5NDk0IDk1LjMxOTQ5NCAwIDAgMC05NS4wMjUyOTctOTQuMTQyNzF6TTIwNS40NDc4MDEgNDk2LjQyMDY2NmE2Ljc2NjUwNyA2Ljc2NjUwNyAwIDAgMS02Ljc2NjUwNy03LjA2MDcwNFYtMjIuNTQxMDIyYTYuNzY2NTA3IDYuNzY2NTA3IDAgMCAxIDYuNzY2NTA3LTcuMDYwNzAzaDYxMy4xMDQzOThhNi43NjY1MDcgNi43NjY1MDcgMCAwIDEgNi43NjY1MDcgNy4wNjA3MDNWNDg5LjM1OTk2MmE2Ljc2NjUwNyA2Ljc2NjUwNyAwIDAgMS02Ljc2NjUwNyA3LjA2MDcwNHpNNTEyIDg3Ljc4MjQ2NmE0NC4xMjkzOTUgNDQuMTI5Mzk1IDAgMCAwLTQ0LjEyOTM5NSA0NC4xMjkzOTV2MTUuMjk4MTkxYTEyMC42MjAzNDcgMTIwLjYyMDM0NyAwIDEgMCA4OC4yNTg3OSAxMC4wMDI2NjJ2LTI1LjMwMDg1M2E0NC4xMjkzOTUgNDQuMTI5Mzk1IDAgMCAwLTQ0LjEyOTM5NS00NC4xMjkzOTV6IG0tMTIuNjUwNDI3IDIwOC41ODQ5NDFhMzIuNjU1NzUyIDMyLjY1NTc1MiAwIDEgMSAwLTY1LjAxNzMwOSAzMi42NTU3NTIgMzIuNjU1NzUyIDAgMCAxIDAgNjUuMDE3MzA5eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImVkaXQiIHVuaWNvZGU9IiYjNTkwMjM7IiBkPSJNNzU0LjYwMDYzMSA0MzcuNTM0MDU4YTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAtNDAuMTUwNTQ0IDQwLjE1MDU0M3YxODcuMzY5MjAzYTYuMTU2NDE3IDYuMTU2NDE3IDAgMCAxLTYuMTU2NDE3IDYuMTU2NDE3aC0xMzkuNDU2MjIxYTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAgMCA4MC4zMDEwODdINzA5LjYzMjAyMmE4Ni40NTc1MDQgODYuNDU3NTA0IDAgMCAwIDg2LjQ1NzUwNC04Ni40NTc1MDR2LTE4Ny4zNjkyMDNhNDAuMTUwNTQzIDQwLjE1MDU0MyAwIDAgMC00MS40ODg4OTUtNDAuMTUwNTQzek03MDkuNjMyMDIyLTc0LjI1MTUzNkgxNTAuNzM2NDU3YTg2LjcyNTE3NCA4Ni43MjUxNzQgMCAwIDAtODYuNzI1MTc0IDg2LjQ1NzUwM1Y2NjIuOTEyNDQyYTg2LjcyNTE3NCA4Ni43MjUxNzQgMCAwIDAgODYuNzI1MTc0IDg2LjQ1NzUwNGgxMzkuMTg4NTVhNDAuMTUwNTQzIDQwLjE1MDU0MyAwIDAgMCAwLTgwLjMwMTA4N2gtMTM5LjE4ODU1YTYuMTU2NDE3IDYuMTU2NDE3IDAgMCAxLTYuNDI0MDg3LTYuMTU2NDE3di02NTAuNzA2NDc1YTYuMTU2NDE3IDYuMTU2NDE3IDAgMCAxIDYuNDI0MDg3LTYuMTU2NDE2SDcwOS42MzIwMjJhNi4xNTY0MTcgNi4xNTY0MTcgMCAwIDEgNi4xNTY0MTcgNi4xNTY0MTZ2MTg2LjAzMDg1MmE0MC4xNTA1NDMgNDAuMTUwNTQzIDAgMCAwIDgwLjMwMTA4NyAwdi0xODcuMzY5MjAzQTg2LjQ1NzUwNCA4Ni40NTc1MDQgMCAwIDAgNzA5LjYzMjAyMi03NC4yNTE1MzZ6TTY5OC45MjUyMSAxMTEuNTExNjQ1aC0xMzAuMDg3NzYxYTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAtNDAuMTUwNTQzIDQwLjE1MDU0M3YxMzAuMDg3NzYxYTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAgMTEuNzc3NDkzIDI4LjM3MzA1MWwyMjguMDU1MDg3IDIyOC4wNTUwODdhODYuNzI1MTc0IDg2LjcyNTE3NCAwIDAgMCAxMjEuNTIyMzExIDBsNjUuMzExNTUxLTY1LjMxMTU1MWE4Ni45OTI4NDQgODYuOTkyODQ0IDAgMCAwIDAtMTIxLjI1NDY0MWwtMjI4LjU5MDQyNy0yMjguMzIyNzU3YTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAtMjcuODM3NzExLTExLjc3NzQ5M3ogbS04OS45MzcyMTcgODAuMzAxMDg3SDY4Mi44NjQ5OTNsMjE2LjI3NzU5NCAyMTYuMjc3NTk0YTYuNDI0MDg3IDYuNDI0MDg3IDAgMCAxIDAgOC41NjU0NDlsLTY1LjA0Mzg4IDY0Ljc3NjIxMWE2LjE1NjQxNyA2LjE1NjQxNyAwIDAgMS04LjU2NTQ1IDBsLTIxNi4wMDk5MjQtMjE2LjAwOTkyNHogbS00MC4xNTA1NDQgMzg0LjM3NDUzNkgyODkuOTI1MDA3YTQwLjE1MDU0MyA0MC4xNTA1NDMgMCAwIDAtNDAuMTUwNTQzIDQwLjE1MDU0NHYxMzkuNDU2MjIxYTg2LjcyNTE3NCA4Ni43MjUxNzQgMCAwIDAgODYuNzI1MTc0IDg2LjQ1NzUwM0g1MjIuMjYyODE5YTg2LjcyNTE3NCA4Ni43MjUxNzQgMCAwIDAgODYuNzI1MTc0LTg2LjQ1NzUwM3YtMTM5LjQ1NjIyMWE0MC4xNTA1NDMgNDAuMTUwNTQzIDAgMCAwLTQwLjE1MDU0NC00MC4xNTA1NDR6IG0tMjM4Ljc2MTg5OCA4MC4zMDEwODdoMTk4LjYxMTM1NXY5OS4zMDU2NzhhNi4xNTY0MTcgNi4xNTY0MTcgMCAwIDEtNi40MjQwODcgNi4xNTY0MTZoLTE4NS43NjMxODFhNi4xNTY0MTcgNi4xNTY0MTcgMCAwIDEtNi40MjQwODctNi4xNTY0MTZ6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2FuY2VsIiB1bmljb2RlPSImIzU5MDMxOyIgZD0iTTY5LjMxMzg1NS0xMTMuNzAwOTkzYTUzLjE4MTAyIDUzLjE4MTAyIDAgMCAwLTM4Ljg3NzE2IDE2LjEzNzY4OCA1NC42NDgwODMgNTQuNjQ4MDgzIDAgMCAwIDAgNzcuNzU0MzE5TDkxNS40NDIyMiA4NjUuNTYzMzA1QTU1LjAxNDg0OCA1NS4wMTQ4NDggMCAwIDAgOTkzLjU2MzMwNSA3ODcuNDQyMjJMMTA4LjU1Nzc4LTk3LjU2MzMwNWE1NC4yODEzMTcgNTQuMjgxMzE3IDAgMCAwLTM5LjI0MzkyNS0xNi4xMzc2ODh6TTk1NC42ODYxNDUtMTEzLjcwMDk5M2E1My45MTQ1NTEgNTMuOTE0NTUxIDAgMCAwLTM5LjI0MzkyNSAxNi4xMzc2ODhMMzAuNDM2Njk1IDc4Ny40NDIyMkE1NS4wMTQ4NDggNTUuMDE0ODQ4IDAgMCAwIDEwOC41NTc3OCA4NjUuNTYzMzA1TDk5My41NjMzMDUtMTkuNDQyMjJhNTQuNjQ4MDgzIDU0LjY0ODA4MyAwIDAgMCAwLTc3Ljc1NDMxOSA1My4xODEwMiA1My4xODEwMiAwIDAgMC0zOC44NzcxNi0xNi41MDQ0NTR6IiAgaG9yaXotYWR2LXg9IjEwMjQiIC8+CiAgICAgIAogICAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ib2siIHVuaWNvZGU9IiYjNTkwMzM7IiBkPSJNMzgxLjc1MTQ2MiA0NS43Nzg4NTRhNDQuOTM0MjI4IDQ0LjkzNDIyOCAwIDAgMC0zMi4xODI2MjMgMTMuMzU4ODI1TDI0LjQwMjkwOCAzODRhNDUuNTQxNDQ3IDQ1LjU0MTQ0NyAwIDAgMCA2NC4zNjUyNDUgNjQuMzY1MjQ1bDI5Mi45ODMzMDktMjkyLjk4MzMwOUw5MzUuMjMxODQ3IDcwOC44NjIzMjFhNDUuNTQxNDQ3IDQ1LjU0MTQ0NyAwIDAgMCA2NC4zNjUyNDUtNjQuMzY1MjQ1TDQxMy45MzQwODQgNTkuMTM3Njc5YTQ0LjAyMzM5OSA0NC4wMjMzOTkgMCAwIDAtMzIuMTgyNjIyLTEzLjM1ODgyNXoiICBob3Jpei1hZHYteD0iMTAyNCIgLz4KICAgICAgCiAgICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmFzaCIgdW5pY29kZT0iJiM1NTAyMzsiIGQ9Ik03NjEuNzQ4OTkzLTEwOC41OTI0ODRIMjYyLjI1MTAwN2E5My4yMjQyNzggOTMuMjI0Mjc4IDAgMCAwLTkzLjIyNDI3OCA5Mi45MzY1NVY1OTAuNTg5NjA1aC01Ny41NDU4NTFhNDMuMTU5Mzg4IDQzLjE1OTM4OCAwIDAgMCAwIDg2LjMxODc3NmgxNTYuODEyNDQ0djEwNi43NDc1NTNhOTIuOTM2NTQ5IDkyLjkzNjU0OSAwIDAgMCA5Mi45MzY1NDkgOTIuOTM2NTVoMzAwLjY3NzA3MWE5Mi45MzY1NDkgOTIuOTM2NTQ5IDAgMCAwIDkyLjkzNjU0OS05Mi45MzY1NXYtMTA2Ljc0NzU1M2gxNTYuODEyNDQzYTQzLjE1OTM4OCA0My4xNTkzODggMCAwIDAgMC04Ni4zMTg3NzZoLTU3LjU0NTg1MXYtNjA2LjI0NTUzOWE5Mi45MzY1NDkgOTIuOTM2NTQ5IDAgMCAwLTkyLjM2MTA5LTkyLjkzNjU1eiBtLTUwNi40MDM0ODggNjk5LjE4MjA4OXYtNjA2LjI0NTUzOWE2LjYxNzc3MyA2LjYxNzc3MyAwIDAgMSA2LjkwNTUwMi02LjYxNzc3M2g0OTkuNDk3OTg2YTYuNjE3NzczIDYuNjE3NzczIDAgMCAxIDYuNjE3NzczIDYuNjE3NzczVjU5MC41ODk2MDV6IG0xMDAuMTI5NzgxIDg2LjMxODc3NmgzMTMuMDQ5NDI4djEwNi43NDc1NTNhNi42MTc3NzMgNi42MTc3NzMgMCAwIDEtNi42MTc3NzIgNi42MTc3NzNIMzYyLjA5MzA1OGE2LjYxNzc3MyA2LjYxNzc3MyAwIDAgMS02LjYxNzc3Mi02LjYxNzc3M3ogbTI1Ni4zNjY3NjUtNTg1LjgxNjc2MmE0My4xNTkzODggNDMuMTU5Mzg4IDAgMCAwLTQzLjE1OTM4OCA0My4xNTkzODhWNDM0LjA2NDg5YTQzLjE1OTM4OCA0My4xNTkzODggMCAwIDAgODYuMzE4Nzc2IDB2LTI5OS44MTM4ODNhNDMuMTU5Mzg4IDQzLjE1OTM4OCAwIDAgMC00My4xNTkzODgtNDMuMTU5Mzg4eiBtLTE5OS42ODQxMDIgMGE0My4xNTkzODggNDMuMTU5Mzg4IDAgMCAwLTQzLjE1OTM4OCA0My4xNTkzODhWNDM0LjA2NDg5YTQzLjE1OTM4OCA0My4xNTkzODggMCAwIDAgODYuMzE4Nzc2IDB2LTI5OS44MTM4ODNhNDMuMTU5Mzg4IDQzLjE1OTM4OCAwIDAgMC00My4xNTkzODgtNDMuMTU5Mzg4eiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9ImxlZnQiIHVuaWNvZGU9IiYjNTkwODg7IiBkPSJNMzQxLjE5NjggMzU0LjMwNGwyODkuNzkyLTI1My4zMzc2QTM5LjMyMTYgMzkuMzIxNiAwIDAgMSA2OTYuMzIgMTMwLjY2MjRWNjM3LjMzNzZhMzkuMzIxNiAzOS4zMjE2IDAgMCAxLTY1LjMzMTIgMjkuNjk2TDM0MS4xOTY4IDQxMy42OTZhMzkuMzIxNiAzOS4zMjE2IDAgMCAxIDAtNTkuMzkyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InJpZ2h0IiB1bmljb2RlPSImIzU5MDkwOyIgZD0iTTY4Mi44MDMyIDQxMy42OTZMMzkzLjAxMTIgNjY3LjAzMzZBMzkuMzIxNiAzOS4zMjE2IDAgMCAxIDMyNy42OCA2MzcuMzM3NnYtNTA2LjY3NTJhMzkuMzIxNiAzOS4zMjE2IDAgMCAxIDY1LjMzMTItMjkuNjk2bDI4OS43OTIgMjUzLjMzNzZhMzkuMzIxNiAzOS4zMjE2IDAgMCAxIDAgNTkuMzkyeiIgIGhvcml6LWFkdi14PSIxMDI0IiAvPgogICAgICAKICAgICAgPGdseXBoIGdseXBoLW5hbWU9InNldHRpbmciIHVuaWNvZGU9IiYjNTkwNDQ7IiBkPSJNNTc4LjI0MjI0LTEyOGgtMTA2LjI0YTEwMS4xMiAxMDEuMTIgMCAwIDAtMTAwLjggMTAxLjEydjMzLjZhNC44IDQuOCAwIDAgMS0zLjIgNC40OGwtNS4xMiAxLjkyYTQuOCA0LjggMCAwIDEtNS43NiAwbC0yMS43Ni0yMS43NkExMDEuNDQgMTAxLjQ0IDAgMCAwIDE5Mi4wMDIyNC05LjZMMTE3LjQ0MjI0IDY0YTEwMS40NCAxMDEuNDQgMCAwIDAgMCAxNDMuMDRsMjEuNzYgMjEuNzZhNS4xMiA1LjEyIDAgMCAxIDAgNS40NCAxNS4wNCAxNS4wNCAwIDAgMC0xLjkyIDQuOCA1Ljc2IDUuNzYgMCAwIDEtNC44IDMuMmgtMzJBMTAxLjQ0IDEwMS40NCAwIDAgMCAwLjAwMjI0IDM0NC4zMnYxMDUuOTJhMTAxLjQ0IDEwMS40NCAwIDAgMCAxMDEuMTIgMTAxLjEyaDMyYTQuOCA0LjggMCAwIDEgNC40OCAzLjJsMS45MiA1LjEyYTQuNDggNC40OCAwIDAgMSAwIDUuNDRsLTIxLjc2IDIyLjA4YTk4LjI0IDk4LjI0IDAgMCAwLTI5Ljc2IDcxLjY4IDk5Ljg0IDk5Ljg0IDAgMCAwIDI5Ljc2IDcxLjM2TDE5Mi4wMDIyNCA4MDUuNzZhMTAzLjY4IDEwMy42OCAwIDAgMCAxNDMuMDQgMGwyMS43Ni0yMS43NmE1LjEyIDUuMTIgMCAwIDEgNS43NiAwbDQuOCAxLjkyYTQuOCA0LjggMCAwIDEgMy41MiA0Ljh2NC4xNkExMDEuMTIgMTAxLjEyIDAgMCAwIDQ3Mi4wMDIyNCA4OTZoMTA2LjI0YTEwMS40NCAxMDEuNDQgMCAwIDAgMTAxLjEyLTEwMS4xMnYtMzJhNC44IDQuOCAwIDAgMSAzLjItNC44bDUuNzYtMi4yNGE0LjggNC44IDAgMCAxIDUuNzYgMGwyMi4wOCAyMS43NmE5OC44OCA5OC44OCAwIDAgMCA3MS4zNiAyOS43NiAxMDEuMTIgMTAxLjEyIDAgMCAwIDcxLjM2LTI5LjQ0TDkzNC43MjIyNCA3MDRhMTAxLjEyIDEwMS4xMiAwIDAgMCAwLTE0My4wNGwtMjEuNzYtMjEuNzZhNC44IDQuOCAwIDAgMSAwLTUuNzZsMS45Mi00LjhhNC44IDQuOCAwIDAgMSA0LjQ4LTMuNTJoMzJhMTAwLjggMTAwLjggMCAwIDAgMTAwLjgtMTAwLjh2LTEwNi4yNGExMDEuMTIgMTAxLjEyIDAgMCAwLTEwMC44LTEwMS4xMkg5MTUuMjAyMjRhNS4xMiA1LjEyIDAgMCAxLTQuNDgtMy4yIDEzLjQ0IDEzLjQ0IDAgMCAwLTEuOTItNC40OCA0LjggNC44IDAgMCAxIDAtNS4xMmwyMi4wOC0yMS43NmExMDEuMTIgMTAxLjEyIDAgMCAwIDAtMTQzLjA0bC03NC4yNC03My45MmExMDEuMTIgMTAxLjEyIDAgMCAwLTE0Mi43MiAwbC0yMS43NiAyMS40NGE1LjQ0IDUuNDQgMCAwIDEtNS43NiAwIDEwLjg4IDEwLjg4IDAgMCAwLTQuOC0xLjkyIDQuNDggNC40OCAwIDAgMS0yLjg4LTQuNDh2LTguMzJBMTAxLjQ0IDEwMS40NCAwIDAgMCA1NzguMjQyMjQtMTI4eiBtLTE3Ni4zMiAyMjkuMTJhMTAxLjEyIDEwMS4xMiAwIDAgMCA2NC05NC4wOHYtMzMuOTJhNS4xMiA1LjEyIDAgMCAxIDQuOC01LjEyaDEwNi4yNGE1LjEyIDUuMTIgMCAwIDEgNS4xMiA1LjEydjguNjRhMTA0Ljk2IDEwNC45NiAwIDAgMCAxNzcuMjggNzIuNjRsMjEuNzYtMjEuNDRhNS4xMiA1LjEyIDAgMCAxIDcuMDQgMEw4NjQuMDAyMjQgMTA3LjJhNC44IDQuOCAwIDAgMSAwIDMuNTIgNC4xNiA0LjE2IDAgMCAxIDAgMy4ybC0yMS43NiAyMS43NmExMDQuNjQgMTA0LjY0IDAgMCAwIDcyLjk2IDE3Ni45NmgzNC4yNGE1LjEyIDUuMTIgMCAwIDEgNC44IDUuMTJ2MTA2LjI0YTQuOCA0LjggMCAwIDEtNC44IDQuOGgtMzJhMTAxLjc2IDEwMS43NiAwIDAgMC05NiA2NCAxMDEuMTIgMTAxLjEyIDAgMCAwIDIzLjY4IDExNS4ybDIxLjQ0IDIxLjQ0YTUuNDQgNS40NCAwIDAgMSAwIDcuMzZsLTc1LjUyIDc1LjJhNC44IDQuOCAwIDAgMS0zLjUyIDAgNC4xNiA0LjE2IDAgMCAxLTMuMiAwbC0yMi4wOC0yMi4wOGExMDEuMTIgMTAxLjEyIDAgMCAwLTExMi4zMi0yMS4xMiAxMDAuNDggMTAwLjQ4IDAgMCAwLTY2LjU2IDk2djMyYTUuMTIgNS4xMiAwIDAgMS01LjEyIDMuMmgtMTA2LjI0YTUuMTIgNS4xMiAwIDAgMS00LjgtNS4xMnYtNS43NmExMDEuNzYgMTAxLjc2IDAgMCAwLTY0LTk2QTEwMS43NiAxMDEuNzYgMCAwIDAgMjg4LjAwMjI0IDcxNi4xNkwyNjcuNTIyMjQgNzM2YTUuNDQgNS40NCAwIDAgMS03LjM2IDBMMTg0LjAwMjI0IDY2Mi4wOGE0LjQ4IDQuNDggMCAwIDEgMC0zLjUyIDQuMTYgNC4xNiAwIDAgMSAwLTMuMmwyMi4wOC0yMi4wOGExMDEuMTIgMTAxLjEyIDAgMCAwIDIxLjEyLTExMi42NCAxMDEuNDQgMTAxLjQ0IDAgMCAwLTk0LjA4LTY0aC0zMmE1LjEyIDUuMTIgMCAwIDEtNS4xMi01LjEydi0xMDUuOTJhNS4xMiA1LjEyIDAgMCAxIDUuMTItNS4xMmgzMmExMDEuMTIgMTAxLjEyIDAgMCAwIDk2LTY0IDEwMS4xMiAxMDEuMTIgMCAwIDAtMjIuNC0xMTYuNDhsLTIxLjQ0LTIxLjQ0YTQuMTYgNC4xNiAwIDAgMSAwLTMuNTIgNC44IDQuOCAwIDAgMSAwLTMuNTJsNzQuODgtNzQuNTZhNC44IDQuOCAwIDAgMSA3LjA0IDBMMjg4LjAwMjI0IDgwYTEwMS40NCAxMDEuNDQgMCAwIDAgMTEzLjkyIDIxLjEyeiBtMTIzLjIgNzUuODRBMjA3LjA0IDIwNy4wNCAwIDEgMCA3MzIuMTYyMjQgMzg0YTIwNy4wNCAyMDcuMDQgMCAwIDAtMjA3LjA0LTIwNy4wNHogbTAgMzE4LjA4QTExMS4wNCAxMTEuMDQgMCAxIDEgNjM2LjE2MjI0IDM4NGExMTEuMDQgMTExLjA0IDAgMCAxLTExMS4wNCAxMTEuMDR6IiAgaG9yaXotYWR2LXg9IjEwNTIiIC8+CiAgICAgIAogICAgPC9mb250PgogIDwvZGVmcz4KPC9zdmc+Cg==') format('svg'); +} + +.icon-ddei-flow { + font-family: "icon-ddei-flow" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-ddei-flow-start-event-compensa-non-inte:before { + content: "\\e6c3"; +} + +.icon-ddei-flow-intermediate-event-c7:before { + content: "\\e6a5"; +} + +.icon-ddei-flow-send-task:before { + content: "\\e6a2"; +} + +.icon-ddei-flow-start-event-message:before { + content: "\\e6bc"; +} + +.icon-ddei-flow-intermediate-event-t2:before { + content: "\\e6c1"; +} + +.icon-ddei-flow-intermediate-event-c12:before { + content: "\\e683"; +} + +.icon-ddei-flow-data-input:before { + content: "\\e6c4"; +} + +.icon-ddei-flow-end-event-compensati:before { + content: "\\e6c5"; +} + +.icon-ddei-flow-service:before { + content: "\\e6c6"; +} + +.icon-ddei-flow-user-task1:before { + content: "\\e6c7"; +} + +.icon-ddei-flow-lane-divide-two:before { + content: "\\e6c9"; +} + +.icon-ddei-flow-start-event-non-inte:before { + content: "\\e6ca"; +} + +.icon-ddei-flow-boundary-event-time:before { + content: "\\e6cb"; +} + +.icon-ddei-flow-intermediate-event-c9:before { + content: "\\e6d1"; +} + +.icon-ddei-flow-lane-insert-above:before { + content: "\\e6d8"; +} + +.icon-ddei-flow-group:before { + content: "\\e6da"; +} + +.icon-ddei-flow-intermediate-event-t5:before { + content: "\\e6dc"; +} + +.icon-ddei-flow-boundary-event-cancel:before { + content: "\\e6dd"; +} + +.icon-ddei-flow-sub-process-marker:before { + content: "\\e6de"; +} + +.icon-ddei-flow-send-task-bak:before { + content: "\\e6df"; +} + +.icon-ddei-flow-script-task:before { + content: "\\e682"; +} + +.icon-ddei-flow-service-task:before { + content: "\\e6e0"; +} + +.icon-ddei-flow-tab:before { + content: "\\e6e1"; +} + +.icon-ddei-flow-comment:before { + content: "\\e6e2"; +} + +.icon-ddei-flow-manual-task:before { + content: "\\e681"; +} + +.icon-ddei-flow-sequence:before { + content: "\\e6e3"; +} + +.icon-ddei-flow-data-store:before { + content: "\\e6e4"; +} + +.icon-ddei-flow-manual:before { + content: "\\e6e5"; +} + +.icon-ddei-flow-business-rule-task:before { + content: "\\e6e6"; +} + +.icon-ddei-flow-business-rule:before { + content: "\\e6e7"; +} + +.icon-ddei-flow-start-event-parallel:before { + content: "\\e6e9"; +} + +.icon-ddei-flow-receive:before { + content: "\\e6ec"; +} + +.icon-ddei-flow-sub-process-expand-marker:before { + content: "\\e6f2"; +} + +.icon-ddei-flow-start-event-conditio:before { + content: "\\e6f5"; +} + +.icon-ddei-flow-intermediate-event-c3:before { + content: "\\e6f6"; +} + +.icon-ddei-flow-end-event-message1:before { + content: "\\e6f7"; +} + +.icon-ddei-flow-start-event-non-inte2:before { + content: "\\e6f8"; +} + +.icon-ddei-flow-start-event-non-inte6:before { + content: "\\e6f9"; +} + +.icon-ddei-flow-start-event-timer:before { + content: "\\e6fa"; +} + +.icon-ddei-flow-gateway-eventbased:before { + content: "\\e6fb"; +} + +.icon-ddei-flow-user-task:before { + content: "\\e6fc"; +} + +.icon-ddei-flow-end-event-multiple:before { + content: "\\e6fd"; +} + +.icon-ddei-flow-intermediate-event-t3:before { + content: "\\e6fe"; +} + +.icon-ddei-flow-user-icon:before { + content: "\\e6ff"; +} + +.icon-ddei-flow-intermediate-event-c14:before { + content: "\\e701"; +} + +.icon-ddei-flow-start-event-multiple:before { + content: "\\e702"; +} + +.icon-ddei-flow-chore:before { + content: "\\e703"; +} + +.icon-ddei-flow-boundary-event-error:before { + content: "\\e68b"; +} + +.icon-ddei-flow-intermediate-event-c4:before { + content: "\\e68c"; +} + +.icon-ddei-flow-start-event-error:before { + content: "\\e68d"; +} + +.icon-ddei-flow-lane:before { + content: "\\e68e"; +} + +.icon-ddei-flow-intermediate-event-n:before { + content: "\\e690"; +} + +.icon-ddei-flow-start-event-non-inte1:before { + content: "\\e691"; +} + +.icon-ddei-flow-lane-insert-below:before { + content: "\\e692"; +} + +.icon-ddei-flow-end-event-none:before { + content: "\\e693"; +} + +.icon-ddei-flow-intermediate-throw-event-signal:before { + content: "\\e694"; +} + +.icon-ddei-flow-receive-task:before { + content: "\\e696"; +} + +.icon-ddei-flow-end-event-terminate:before { + content: "\\e698"; +} + +.icon-ddei-flow-boundary-event-signal:before { + content: "\\e69a"; +} + +.icon-ddei-flow-script:before { + content: "\\e68a"; +} + +.icon-ddei-flow-end-event-signal:before { + content: "\\e69b"; +} + +.icon-ddei-flow-start-event-signal:before { + content: "\\e69c"; +} + +.icon-ddei-flow-loop-marker:before { + content: "\\e69d"; +} + +.icon-ddei-flow-start-event-compensa:before { + content: "\\e69e"; +} + +.icon-ddei-flow-gateway-complex:before { + content: "\\e6a0"; +} + +.icon-ddei-flow-intermediate-event-c15:before { + content: "\\e6a1"; +} + +.icon-ddei-flow-data-output:before { + content: "\\e6a3"; +} + +.icon-ddei-flow-intermediate-event-c7-bak:before { + content: "\\e6a6"; +} + +.icon-ddei-flow-intermediate-event-c11:before { + content: "\\e688"; +} + +.icon-ddei-flow-boundary-event-message:before { + content: "\\e6a7"; +} + +.icon-ddei-flow-boundary-event-message-inte:before { + content: "\\e686"; +} + +.icon-ddei-flow-send:before { + content: "\\e685"; +} + +.icon-ddei-flow-intermediate-event-c2:before { + content: "\\e6a8"; +} + +.icon-ddei-flow-intermediate-throw-event-message:before { + content: "\\e6a9"; +} + +.icon-ddei-flow-sequential-mi-marker:before { + content: "\\e6aa"; +} + +.icon-ddei-flow-boundary-event-time-inte:before { + content: "\\e687"; +} + +.icon-ddei-flow-lane-divide-three:before { + content: "\\e6ab"; +} + +.icon-ddei-flow-call-activity:before { + content: "\\e6ac"; +} + +.icon-ddei-flow-end-event-link:before { + content: "\\e6ad"; +} + +.icon-ddei-flow-transaction:before { + content: "\\e6ae"; +} + +.icon-ddei-flow-intermediate-event-t1:before { + content: "\\e6af"; +} + +.icon-ddei-flow-intermediate-throw-event-compensation:before { + content: "\\e6b0"; +} + +.icon-ddei-flow-gateway-parallel:before { + content: "\\e6b1"; +} + +.icon-ddei-flow-intermediate-event-c1:before { + content: "\\e6b2"; +} + +.icon-ddei-flow-boundary-event-compensation:before { + content: "\\e6b3"; +} + +.icon-ddei-flow-gateway-or:before { + content: "\\e6b4"; +} + +.icon-ddei-flow-data-object:before { + content: "\\e6b5"; +} + +.icon-ddei-flow-gateway-none:before { + content: "\\e6b6"; +} + +.icon-ddei-flow-end-event-message:before { + content: "\\e6b7"; +} + +.icon-ddei-flow-start-event-non-inte3:before { + content: "\\e6b8"; +} + +.icon-ddei-flow-compensation-marker:before { + content: "\\e6ba"; +} + +.icon-ddei-flow-end-event-cancel:before { + content: "\\e6bb"; +} + +.icon-ddei-flow-start-event-non-inte5:before { + content: "\\e6bd"; +} + +.icon-ddei-flow-gateway-xor:before { + content: "\\e6be"; +} + +.icon-ddei-flow-user:before { + content: "\\e808"; +} + +.icon-ddei-flow-end-event-error:before { + content: "\\e6bf"; +} + +.icon-ddei-flow-end-event-escalation:before { + content: "\\e6c0"; +} + +.icon-ddei-flow-start-event-non-inte4:before { + content: "\\e6c2"; +} + +.icon-ddei-flow-ad-hoc-marker:before { + content: "\\e6cf"; +} + +.icon-ddei-flow-user-1:before { + content: "\\e6b9"; +} + +.icon-ddei-flow-parallel-mi-marker:before { + content: "\\e69f"; +} + +.icon-ddei-flow-start-event-escalati:before { + content: "\\e6d3"; +} + +.icon-ddei-flow-start-event-none:before { + content: "\\e6ce"; +} + +.icon-ddei-flow-link:before { + content: "\\e67b"; +} + +.icon-ddei-flow-lock:before { + content: "\\e695"; +} + +.icon-ddei-flow-unlock:before { + content: "\\e6d9"; +} + +.icon-ddei-flow-edit:before { + content: "\\e68f"; +} + +.icon-ddei-flow-cancel:before { + content: "\\e697"; +} + +.icon-ddei-flow-ok:before { + content: "\\e699"; +} + +.icon-ddei-flow-trash:before { + content: "\\d6ef"; +} + +.icon-ddei-flow-left:before { + content: "\\e6d0"; +} + +.icon-ddei-flow-right:before { + content: "\\e6d2"; +} + +.icon-ddei-flow-setting:before { + content: "\\e6a4"; +} + +.ddei-flow-bpmn-viewer-inclusive-gateway[data-v-aa8661cf] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-inclusive-gateway .icon-ddei-flow[data-v-aa8661cf] { + width: 100%; + height: 100%; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-boundary-event[data-v-7f22a8f2] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-boundary-event .icon-ddei-flow[data-v-7f22a8f2] { + margin-left: -3px; + margin-top: -3px; + width: calc(100% + 6px); + height: calc(100% + 6px); + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-businessrule-task[data-v-44e6c2a4] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-businessrule-task .title[data-v-44e6c2a4] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-businessrule-task .title .icon-ddei-flow[data-v-44e6c2a4] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-businessrule-task .title .text[data-v-44e6c2a4] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-businessrule-task .markers[data-v-44e6c2a4] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-businessrule-task .markers .icon-ddei-flow[data-v-44e6c2a4] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-callactivity-task[data-v-ec0e7c21] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-callactivity-task .title[data-v-ec0e7c21] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-callactivity-task .title .icon-ddei-flow[data-v-ec0e7c21] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-callactivity-task .title .text[data-v-ec0e7c21] { + flex: 1; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-callactivity-task .view[data-v-ec0e7c21] { + display: flex; + justify-content: center; + align-items: center; + height: calc(100% - 20px); + background-repeat: no-repeat; + background-position: center; + background-size: contain; +} +.ddei-flow-bpmn-viewer-callactivity-task .view .text[data-v-ec0e7c21] { + flex: 1; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-callactivity-task .markers[data-v-ec0e7c21] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-callactivity-task .markers .icon-ddei-flow[data-v-ec0e7c21] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-subprocess[data-v-8b8a1ced] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-chore-subprocess .content[data-v-8b8a1ced] { + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .text[data-v-8b8a1ced] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .top[data-v-8b8a1ced] { + flex: 0 0 20px; + width: 100%; + border-bottom: var(--borderWidth) var(--borderType) var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .bottom[data-v-8b8a1ced] { + flex: 0 0 20px; + width: 100%; + border-top: var(--borderWidth) var(--borderType) var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .middle[data-v-8b8a1ced] { + flex: 1; + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + position: relative; +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .middle-locked[data-v-8b8a1ced] { + width: 12px; + height: 12px; + font-size: 12px; + opacity: 0.5; + right: 10px; + top: 10px; + position: absolute; + color: var(--fontColor); +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .middle .markers[data-v-8b8a1ced] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-chore-subprocess .content .middle .markers .icon-ddei-flow[data-v-8b8a1ced] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-task[data-v-547a6caf] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-chore-task .content[data-v-547a6caf] { + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-chore-task .content .text[data-v-547a6caf] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-chore-task .content .top[data-v-547a6caf] { + flex: 0 0 20px; + width: 100%; + border-bottom: var(--borderWidth) var(--borderType) var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-task .content .bottom[data-v-547a6caf] { + flex: 0 0 20px; + width: 100%; + border-top: var(--borderWidth) var(--borderType) var(--borderColor); +} +.ddei-flow-bpmn-viewer-chore-task .content .middle[data-v-547a6caf] { + flex: 1; + height: 100%; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + position: relative; +} +.ddei-flow-bpmn-viewer-chore-task .content .middle .markers[data-v-547a6caf] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-chore-task .content .middle .markers .icon-ddei-flow[data-v-547a6caf] { + width: 16px; + height: 16px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-complex-gateway[data-v-e6c1fdb1] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-complex-gateway .icon-ddei-flow[data-v-e6c1fdb1] { + width: 100%; + height: 100%; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-end-event[data-v-8f354e18] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-end-event .icon-ddei-flow[data-v-8f354e18] { + margin-left: -3px; + margin-top: -3px; + width: calc(100% + 6px); + height: calc(100% + 6px); + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-eventbased-gateway[data-v-6f4a01e3] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-eventbased-gateway .icon-ddei-flow[data-v-6f4a01e3] { + width: 100%; + height: 100%; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-exclusive-gateway[data-v-7986eca0] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-exclusive-gateway .icon-ddei-flow[data-v-7986eca0] { + width: 100%; + height: 100%; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-group[data-v-b5dc3b04] { + position: absolute; + font-size: 14px; + pointer-events: none; + user-select: none; + display: none; + color: black; + font-family: var(--fontFamily); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-group .content-header-locked[data-v-b5dc3b04] { + width: 12px; + height: 12px; + font-size: 12px; + opacity: 0.5; + color: var(--fontColor); + position: absolute; + right: 5px; + top: 5px; +} +.ddei-flow-bpmn-viewer-group .border-svg[data-v-b5dc3b04] { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} +.ddei-flow-bpmn-viewer-group .border-svg rect[data-v-b5dc3b04] { + fill: none; + stroke: var(--borderColor); + stroke-width: 2px; + stroke-dasharray: 10,5,1,5; +} +.ddei-flow-bpmn-viewer-group .title[data-v-b5dc3b04] { + font-size: 16px; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + padding: 0 5px; + word-break: break-word; + text-overflow: ellipsis; +} +.ddei-flow-bpmn-viewer-group .title-expand[data-v-b5dc3b04] { + font-size: 16px; + width: 100%; + height: 24px; + padding: 10px; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.ddei-flow-bpmn-viewer-inter-catch-event[data-v-e679db61] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-inter-catch-event .icon-ddei-flow[data-v-e679db61] { + margin-left: -3px; + margin-top: -3px; + width: calc(100% + 6px); + height: calc(100% + 6px); + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-inter-throw-event[data-v-c8fcaa16] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-inter-throw-event .icon-ddei-flow[data-v-c8fcaa16] { + margin-left: -3px; + margin-top: -3px; + width: calc(100% + 6px); + height: calc(100% + 6px); + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-manual-task[data-v-3083fc81] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-manual-task .title[data-v-3083fc81] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-manual-task .title .icon-ddei-flow[data-v-3083fc81] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-manual-task .title .text[data-v-3083fc81] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-manual-task .markers[data-v-3083fc81] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-manual-task .markers .icon-ddei-flow[data-v-3083fc81] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-message[data-v-58a6b5ba] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-message .icon-ddei-flow[data-v-58a6b5ba] { + margin-top: -8px; + margin-left: -8px; + width: calc(100% + 16px); + height: calc(100% + 16px); +} +.ddei-flow-bpmn-viewer-parallel-gateway[data-v-4d21627c] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-parallel-gateway .icon-ddei-flow[data-v-4d21627c] { + width: 100%; + height: 100%; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-receive-task[data-v-e2cb14b8] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-receive-task .title[data-v-e2cb14b8] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-receive-task .title .icon-ddei-flow[data-v-e2cb14b8] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-receive-task .title .text[data-v-e2cb14b8] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-receive-task .markers[data-v-e2cb14b8] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-receive-task .markers .icon-ddei-flow[data-v-e2cb14b8] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-script-task[data-v-10d59418] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-script-task .title[data-v-10d59418] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-script-task .title .icon-ddei-flow[data-v-10d59418] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-script-task .title .text[data-v-10d59418] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-script-task .markers[data-v-10d59418] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-script-task .markers .icon-ddei-flow[data-v-10d59418] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-send-task[data-v-451d2857] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-send-task .title[data-v-451d2857] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-send-task .title .icon-ddei-flow[data-v-451d2857] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-send-task .title .text[data-v-451d2857] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-send-task .markers[data-v-451d2857] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-send-task .markers .icon-ddei-flow[data-v-451d2857] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-sequence-flow-icon[data-v-f97bf8f3] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-sequence-flow-icon .icon-svg[data-v-f97bf8f3] { + width: 100%; + height: 100%; + position: absolute; +} +.ddei-flow-bpmn-viewer-service-task[data-v-1f1f502d] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-service-task .title[data-v-1f1f502d] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-service-task .title .icon-ddei-flow[data-v-1f1f502d] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-service-task .title .text[data-v-1f1f502d] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-service-task .markers[data-v-1f1f502d] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-service-task .markers .icon-ddei-flow[data-v-1f1f502d] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-start-event[data-v-81a6686d] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-start-event .icon-ddei-flow[data-v-81a6686d] { + margin-left: -3px; + margin-top: -3px; + width: calc(100% + 6px); + height: calc(100% + 6px); + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-subprocess[data-v-9fa95600] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-subprocess-event[data-v-9fa95600] { + border-style: dashed !important; +} +.ddei-flow-bpmn-viewer-subprocess-event .trans[data-v-9fa95600] { + border-style: dashed !important; +} +.ddei-flow-bpmn-viewer-subprocess .trans[data-v-9fa95600] { + width: calc(100% - 10px); + height: calc(100% - 10px); + position: absolute; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + left: 5px; + top: 5px; +} +.ddei-flow-bpmn-viewer-subprocess .markers[data-v-9fa95600] { + height: 24px; + width: 100%; + display: flex; + justify-content: center; + align-items: start; + padding-top: 4px; +} +.ddei-flow-bpmn-viewer-subprocess .markers-transaction[data-v-9fa95600] { + padding-top: 2px !important; +} +.ddei-flow-bpmn-viewer-subprocess .markers .icon-ddei-flow[data-v-9fa95600] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-subprocess .title[data-v-9fa95600] { + font-size: 13px; + height: calc(100% - 24px); + width: 100%; + display: flex; + border-bottom: var(--borderWidth) var(--borderType) var(--borderColor); + justify-content: center; + align-items: center; + overflow: hidden; + padding: 0 2px; + word-break: break-word; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-subprocess .title-transaction[data-v-9fa95600] { + width: calc(100% - 10px) !important; + margin-left: 5px !important; +} +.ddei-flow-bpmn-viewer-subprocess .content[data-v-9fa95600] { + height: calc(100% - 24px); + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} +.ddei-flow-bpmn-viewer-subprocess .content-header[data-v-9fa95600] { + padding: 10px; + flex: 0 0 30px; + height: 20px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-subprocess .content-header-title[data-v-9fa95600] { + flex: 1; + height: 20px; + font-size: 12px; + opacity: 0.5; + overflow: hidden; + word-break: break-word; + text-overflow: ellipsis; + text-align: left; + color: var(--fontColor); + font-family: var(--fontFamily); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-subprocess .content-header-locked[data-v-9fa95600] { + flex: 0 0 12px; + height: 12px; + font-size: 12px; + opacity: 0.5; + color: var(--fontColor); +} +.ddei-flow-bpmn-viewer-subprocess .content-elements[data-v-9fa95600] { + flex: 1; +} +.ddei-flow-bpmn-viewer-user-task[data-v-0b07ef9d] { + background: var(--fillColor); + position: absolute; + color: var(--text); + font-size: 14px; + border: var(--borderWidth) var(--borderType) var(--borderColor); + border-radius: var(--borderRound); + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-user-task .title[data-v-0b07ef9d] { + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-user-task .title .icon-ddei-flow[data-v-0b07ef9d] { + position: absolute; + left: 0px; + top: 0px; + width: 24px; + height: 24px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-user-task .title .text[data-v-0b07ef9d] { + flex: 1; + text-align: center; + white-space: nowrap; + padding: 2px; + overflow: hidden; + text-overflow: ellipsis; + color: var(--fontColor); + font-family: var(--fontFamily); + font-size: var(--fontSize); + font-style: var(--fontStyle); + font-weight: var(--fontWeight); + text-decoration: var(--textDecoration); +} +.ddei-flow-bpmn-viewer-user-task .markers[data-v-0b07ef9d] { + position: absolute; + left: 0px; + bottom: 0px; + width: 100%; + height: 20px; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-bpmn-viewer-user-task .markers .icon-ddei-flow[data-v-0b07ef9d] { + width: 14px; + height: 14px; + fill: var(--borderColor); +} +.ddei-flow-bpmn-viewer-user[data-v-9e90d175] { + position: absolute; + pointer-events: none; + user-select: none; + display: none; +} +.ddei-flow-bpmn-viewer-user .icon-ddei-flow[data-v-9e90d175] { + margin-left: -10px; + margin-top: -13px; + width: calc(100% + 20px); + height: calc(100% + 28px); +} +.ddei-flow-element-setting-dialog[data-v-8bd76064] { + width: 200px; + background: var(--panel-background); + display: none; + position: absolute; + z-index: 99901; + border: 1px solid var(--panel-border); + box-shadow: 0px 2px 24px 0px hsla(0, 0%, 0%, 0.25); + border-radius: 6px; + color: black; +} +.ddei-flow-element-setting-dialog .content[data-v-8bd76064] { + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + display: flex; + flex-direction: column; + justify-content: start; + align-items: center; +} +.ddei-flow-element-setting-dialog .content .row[data-v-8bd76064] { + flex: 0 1 20px; + margin: 0 5px; + width: 100%; +} +.ddei-flow-element-setting-dialog .content .row[data-v-8bd76064]:hover { + background: #e6e4e4; + cursor: pointer; +} +.ddei-flow-element-setting-dialog .content .row .icon-ddei-flow[data-v-8bd76064] { + opacity: 0.5; +} +.ddei-flow-element-setting-dialog .content .row .icon-ddei-flow[data-v-8bd76064]:hover { + opacity: 1; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-sub-type[data-v-8bd76064] { + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + height: 20px; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-sub-type-text[data-v-8bd76064] { + flex: 1; + text-wrap: nowrap; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-sub-type .icon-ddei-flow[data-v-8bd76064] { + flex: 0 0 12px; + margin: 0 10px; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-marker[data-v-8bd76064] { + font-size: 12px; + height: 20px; + width: 150px; + margin-left: 18px; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-marker .chk_state[data-v-8bd76064] { + border: 1px solid var(--panel-title); + width: 12px; + height: 12px; + margin-top: 4px; + float: left; + box-sizing: border-box; + background: var(--panel-background); +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-marker .chk_state_checked[data-v-8bd76064] { + border: 1px solid var(--panel-title); + width: 12px; + height: 12px; + margin-top: 4px; + float: left; + background-color: var(--dot); + box-sizing: border-box; + color: #fff; +} +.ddei-flow-element-setting-dialog .content .row .change-bpmn-marker .chk_state_checked span[data-v-8bd76064] { + margin-top: -3.5px; + margin-left: 0.5px; + display: block; + font-size: 11px; +} +.ddei-flow-element-setting-dialog .content .row .quick-button[data-v-8bd76064] { + height: 20px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-element-setting-dialog .content .row .quick-button .icon[data-v-8bd76064] { + width: 14px; + height: 14px; + opacity: 0.5; +} +.ddei-flow-element-setting-dialog .content .row .quick-button .icon[data-v-8bd76064]:hover { + opacity: 1; +} +.ddei-flow-element-setting-dialog .content .row .quick-button-text[data-v-8bd76064] { + margin-right: 5px; + color: black; + font-size: 12px; +} +.ddei-flow-element-setting-dialog .content .row .change-point-type[data-v-8bd76064] { + height: 20px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-element-setting-dialog .content .row .change-point-type .icon-ddei-flow[data-v-8bd76064] { + width: 14px; + height: 14px; +} +.ddei-flow-element-setting-dialog .content .row .change-point-type-title[data-v-8bd76064] { + margin-right: 5px; + color: black; + font-size: 12px; +} +.ddei-flow-element-setting-dialog .content .row .change-point-type-text[data-v-8bd76064] { + color: black; + font-size: 12px; +} +.ddei-flow-element-setting-dialog .content .row .change-property-text[data-v-8bd76064] { + height: 20px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-element-setting-dialog .content .row .change-property-text-title[data-v-8bd76064] { + flex: 0 0 40px; + color: black; + font-size: 12px; +} +.ddei-flow-element-setting-dialog .content .row .change-property-text-input[data-v-8bd76064] { + flex: 1; + color: black; + font-size: 12px; + text-align: left; +} +.ddei-flow-element-setting-dialog .content .row .change-property-text-input input[data-v-8bd76064] { + width: 95%; + height: 18px; +} +.ddei-flow-element-setting-dialog .content .row .change-property-textarea[data-v-8bd76064] { + height: 60px; + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.ddei-flow-element-setting-dialog .content .row .change-property-textarea-title[data-v-8bd76064] { + flex: 0 0 40px; + color: black; + font-size: 12px; +} +.ddei-flow-element-setting-dialog .content .row .change-property-textarea-input[data-v-8bd76064] { + flex: 1; + color: black; + font-size: 12px; + text-align: left; +} +.ddei-flow-element-setting-dialog .content .row .change-property-textarea-input textarea[data-v-8bd76064] { + width: 95%; + height: 55px; +} +.ddei-flow-setting-button-dialog[data-v-09abda49] { + display: none; + position: absolute; + z-index: 99900; +} +.ddei-flow-setting-button-dialog .content[data-v-09abda49] { + width: 100%; + height: 100%; + display: flex; + justify-content: start; + align-items: center; +} +.ddei-flow-setting-button-dialog .content .icon-ddei-flow[data-v-09abda49] { + width: 11px; + height: 11px; + opacity: 0.5; + margin-bottom: 2px; + margin-right: 2px; +} +.ddei-flow-setting-button-dialog .content .icon-ddei-flow[data-v-09abda49]:hover { + opacity: 1; + cursor: pointer; +} +`; + document.head.appendChild(__vite_style__); + const en_US = { + ddei: { + flow: { + startevent: "Start", + endevent: "End", + boundaryevent: "Bound", + intermediatecatchevent: "InCatch", + intermediatethrowevent: "InThrow", + time: "Time", + timeduration: "During", + timecron: "CRON", + errorcode: "ECode", + condition: "Cond", + conditionexpress: "Cond Express", + startnode: "Start", + exchange: "Exchange", + endnode: "End", + overview: "Overview", + unlimited: "Unlimited", + ordering: "Ordering", + loop: "Loop", + message: "Message", + messagename: "Message Name", + signal: "Signal", + signalname: "Signal Name", + multiins: "Multi Instance", + insnum: "InsNum", + parallel: "Parallel", + notInterrupting: "No Interrupt", + compensation: "Compensation", + datacoll: "Data Collection", + busicls: "Class", + dataobj: "DataObj", + datastore: "DataStore", + user: "User", + complexgateway: "Complex", + parallelgateway: "Parallel", + exclusivegateway: "Exclusive", + inclusivegateway: "Inclusive", + eventbasedgateway: "Event", + group: "Group", + sequence: "Sequence", + task: "Task", + usertask: "User", + servicetask: "Service", + sendtask: "Send", + scripttask: "Script", + receivetask: "Receive", + manualtask: "Manual", + choretask: "Chore", + subprocess: "SubProc", + eventsubprocess: "Event SubProcess", + transsubprocess: "Transaction", + choresubprocess: "ChoreProc", + calltask: "Call", + busitask: "BusiRule", + loading: "Loading", + property: { + notInterrupting: "No Interrupt", + dataType: "DataType", + capacity: "Capacity", + language: "Script Language", + script: "Script", + humanperformer: "Performer", + potentialowner: "Potential", + sender: "Sender", + receiver: "Receiver", + custom: "Custom", + ds: { + timedate: "TimeDate", + timeduration: "Duration", + timecron: "CRON", + timer: "Timer", + message: "Message", + signal: "Signal", + link: "Link", + parallel: "Parallel", + multiple: "Multiple", + compensation: "Compensation", + default: "Default", + error: "Error", + escalation: "Escalation", + condition: "Condition", + defaultcondition: "Default Condition", + association: "Association", + cancel: "Cancel", + stop: "Stop", + input: "Input", + output: "Output", + string: "String", + integer: "Integer", + long: "Long", + float: "Float", + double: "Double", + boolean: "Boolean", + datetime: "DateTime", + custom: "Custom", + noninit: "Non-Init", + event: "Event", + transaction: "Transaction" + } + }, + groups: { + bpmn: "BPMN", + bpmndesc: "The process shape defined by the BPMN standard is used to draw standard workflows such as Activiti and JBPM" + } + } + } + }; + const __vite_glob_0_0$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: en_US + }, Symbol.toStringTag, { value: "Module" })); + const zh_CN = { + ddei: { + flow: { + startevent: "开始事件", + endevent: "结束事件", + boundaryevent: "边界事件", + intermediatecatchevent: "中间捕获", + intermediatethrowevent: "中间抛出", + time: "时间", + timeduration: "周期", + timecron: "CRON", + errorcode: "错误码", + condition: "条件", + conditionexpress: "条件表达式", + startnode: "起点", + exchange: "交换", + endnode: "终点", + overview: "预览", + unlimited: "无限容量", + ordering: "顺序执行", + loop: "循环", + message: "消息", + messagename: "消息名称", + signal: "信号", + signalname: "信号名称", + multiins: "多实例", + insnum: "实例数", + parallel: "并行", + notInterrupting: "非中断", + compensation: "补偿", + datacoll: "数据集合", + busicls: "业务类", + dataobj: "数据对象", + datastore: "数据存储", + user: "用户", + complexgateway: "复杂网关", + parallelgateway: "并行网关", + exclusivegateway: "排他网关", + inclusivegateway: "包容网关", + eventbasedgateway: "事件网关", + group: "分组", + sequence: "控制流", + task: "任务", + usertask: "用户任务", + servicetask: "服务任务", + sendtask: "发送任务", + scripttask: "脚本任务", + receivetask: "接收任务", + manualtask: "手工任务", + choretask: "编排任务", + subprocess: "子流程", + eventsubprocess: "事件子流程", + transsubprocess: "事务子流程", + choresubprocess: "编排子流程", + calltask: "调用", + busitask: "业务规则", + loading: "加载中", + property: { + notInterrupting: "非中断", + dataType: "数据类型", + capacity: "容量", + language: "语言", + script: "脚本", + humanperformer: "执行人", + potentialowner: "候选人", + sender: "发送人", + receiver: "接收人", + custom: "自定义", + ds: { + timer: "定时器", + timedate: "固定时间", + timeduration: "周期执行", + timecron: "CRON", + message: "消息", + signal: "信号", + link: "链接", + parallel: "并行", + multiple: "多次", + compensation: "补偿", + default: "默认", + error: "错误", + escalation: "升级", + condition: "条件", + defaultcondition: "缺省条件", + association: "协会", + cancel: "取消", + stop: "终止", + input: "输入", + output: "输出", + string: "字符串", + integer: "整数", + long: "长整数", + float: "单精度", + double: "双精度", + boolean: "布尔", + datetime: "时间", + custom: "自定义", + noninit: "未初始化", + event: "事件", + transaction: "事务" + } + }, + groups: { + bpmn: "BPMN", + bpmndesc: "BPMN标准定义的流程形状,用于绘制标准的Activiti、JBPM等工作流" + } + } + } + }; + const __vite_glob_0_1$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: zh_CN + }, Symbol.toStringTag, { value: "Module" })); + const iconfont = ""; + window._iconfont_svg_string_4654254 = '', ((c) => { + var h = (v = (v = document.getElementsByTagName("script"))[v.length - 1]).getAttribute("data-injectcss"), v = v.getAttribute("data-disable-injectsvg"); + if (!v) { + var l, a, m, z, o, s = function(h2, v2) { + v2.parentNode.insertBefore(h2, v2); + }; + if (h && !c.__iconfont__svg__cssinject__) { + c.__iconfont__svg__cssinject__ = true; + try { + document.write(""); + } catch (h2) { + console && console.log(h2); + } + } + l = function() { + var h2, v2 = document.createElement("div"); + v2.innerHTML = c._iconfont_svg_string_4654254, (v2 = v2.getElementsByTagName("svg")[0]) && (v2.setAttribute("aria-hidden", "true"), v2.style.position = "absolute", v2.style.width = 0, v2.style.height = 0, v2.style.overflow = "hidden", v2 = v2, (h2 = document.body).firstChild ? s(v2, h2.firstChild) : h2.appendChild(v2)); + }, document.addEventListener ? ~["complete", "loaded", "interactive"].indexOf(document.readyState) ? setTimeout(l, 0) : (a = function() { + document.removeEventListener("DOMContentLoaded", a, false), l(); + }, document.addEventListener("DOMContentLoaded", a, false)) : document.attachEvent && (m = l, z = c.document, o = false, t(), z.onreadystatechange = function() { + "complete" == z.readyState && (z.onreadystatechange = null, e()); + }); + } + function e() { + o || (o = true, m()); + } + function t() { + try { + z.documentElement.doScroll("left"); + } catch (h2) { + return void setTimeout(t, 50); + } + e(); + } + })(window); + const _sfc_main$q = { + name: "ddei-flow-bpmn-viewer-inclusive-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnInclusiveGatewayViewer_vue_vue_type_style_index_0_scoped_aa8661cf_lang = ""; + const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; + } + return target; + }; + const _hoisted_1$q = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-inclusive-gateway", + title: "包容网关" + }; + function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$q, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-gateway-or" }) + ], -1) + ]), 512); + } + const BpmnInclusiveGatewayViewer = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$q], ["__scopeId", "data-v-aa8661cf"]]); + const InclusiveGateway = { + id: "1000203", + name: "ddei.flow.inclusivegateway", + code: "inclusive_gateway", + desc: "bpmn中的InclusiveGateway", + from: "100040", + subject: "bpmn", + define: { + width: 50, + height: 50, + bpmnBaseType: "Gateway", + bpmnType: "InclusiveGateway", + ext: { + sample: { + eqrat: true + }, + attrs: [ + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + viewer: BpmnInclusiveGatewayViewer, + icon: `` + }; + const __vite_glob_0_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: InclusiveGateway + }, Symbol.toStringTag, { value: "Module" })); + const showSettingButton = function(operate, data2, ddInstance, evt) { + var _a; + let rs = new ddeiEditor.DDeiFuncCallResult(); + rs.state = 2; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor) { + let model = data2.model; + if (((_a = editor.ddInstance.stage.selectedModels) == null ? void 0 : _a.size) > 0) { + if (!editor.ddInstance.stage.selectedModels.has(model.id)) { + if (editor.ddInstance.stage.selectedModels.size == 1) { + model = Array.from(editor.ddInstance.stage.selectedModels.values())[0]; + } else { + return rs; + } + } + } + editor.tempOperateModel = model; + let stageRatio = model.getStageRatio(); + let modelPos = ddeiEditor.DDeiUtil.getModelsDomAbsPosition([model]); + let editorEle = document.getElementById(editor.id); + let editorPos = ddeiEditor.DDeiUtil.getDomAbsPosition(editorEle); + let left = modelPos.left + modelPos.width + 6.5 * (stageRatio - 1) - editorPos.left; + let top = modelPos.top + 6.5 * (stageRatio - 1) - editorPos.top; + if (model.bpmnBaseType == "Event") { + left = modelPos.left + modelPos.width + 12 * (stageRatio - 1) - editorPos.left; + } + let settingBtnEle = document.getElementById(editor.id + "_ddei-flow-setting-button-dialog"); + if (!settingBtnEle || settingBtnEle.style.display == "none" || editor.tempPopData && editor.tempPopData["ddei-flow-setting-button-dialog"] && editor.tempPopData["ddei-flow-setting-button-dialog"].model != model) { + ddeiEditor.DDeiEditorUtil.showDialog(editor, "ddei-flow-setting-button-dialog", { + group: "ddei-flow-setting-button", + model + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + } + return rs; + }; + const changeSettingButtonPos = function(operate, data2, ddInstance, evt) { + var _a; + let rs = new ddeiEditor.DDeiFuncCallResult(); + rs.state = 2; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor) { + let model = data2.model; + if (((_a = editor.ddInstance.stage.selectedModels) == null ? void 0 : _a.size) > 0) { + if (!editor.ddInstance.stage.selectedModels.has(model.id)) { + if (editor.ddInstance.stage.selectedModels.size == 1) { + model = Array.from(editor.ddInstance.stage.selectedModels.values())[0]; + } else { + return rs; + } + } + } + let stageRatio = model.getStageRatio(); + let modelPos = ddeiEditor.DDeiUtil.getModelsDomAbsPosition([model]); + let editorEle = document.getElementById(editor.id); + let editorPos = ddeiEditor.DDeiUtil.getDomAbsPosition(editorEle); + let left = modelPos.left + modelPos.width + 6.5 * (stageRatio - 1) - editorPos.left; + let top = modelPos.top + 6.5 * (stageRatio - 1) - editorPos.top; + if (model.bpmnBaseType == "Event") { + left = modelPos.left + modelPos.width + 12 * (stageRatio - 1) - editorPos.left; + } + let settingBtnEle = document.getElementById(editor.id + "_ddei-flow-setting-button-dialog"); + if (settingBtnEle) { + ddeiEditor.DDeiEditorUtil.displayDialog(editor, "ddei-flow-setting-button-dialog", { + group: "ddei-flow-setting-button", + model + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + } + return rs; + }; + const getIncludeModels = function(subProcessModel, modelLinks, first = true) { + if (!modelLinks) { + modelLinks = []; + } + let stage = subProcessModel.stage; + let models = []; + if (subProcessModel.allowIncludeModel) { + if (!subProcessModel.includeModels) { + subProcessModel.includeModels = []; + } else { + subProcessModel.includeModels.forEach((subModelId) => { + if (subProcessModel.isShadowControl) { + subModelId += "_shadow"; + } + let subModel = stage.getModelById(subModelId); + if (subModel) { + models.push(subModel); + if (subModel.allowIncludeModel) { + let mds = getIncludeModels(subModel, modelLinks, false); + models.push(...mds); + } + } + }); + } + } + if (subProcessModel.bpmnBaseType == "Activity") { + if (!subProcessModel.attachModels) { + subProcessModel.attachModels = []; + } else { + subProcessModel.attachModels.forEach((subModelId) => { + if (subProcessModel.isShadowControl) { + subModelId += "_shadow"; + } + let subModel = stage.getModelById(subModelId); + if (subModel) { + models.push(subModel); + } + }); + } + } + return models; + }; + const getParentModels = function(model) { + let returnArray = []; + if (model == null ? void 0 : model.includePModelId) { + let stage = model.stage; + let pModel = stage.getModelById(model.includePModelId); + returnArray.push(pModel); + let pModels = getParentModels(pModel); + returnArray.push(...pModels); + } + return returnArray; + }; + const updateCallActivityView = function(stage, layer, dragParentActiveIds) { + let pModels = /* @__PURE__ */ new Map(); + dragParentActiveIds.forEach((parentActId) => { + let pModel = stage.getModelById(parentActId); + pModels.set(pModel.id, pModel); + let pModelList = getParentModels(pModel); + pModelList.forEach((pm) => { + pModels.set(pm.id, pm); + }); + }); + let subModels = layer.getSubModels(null, 20); + subModels.forEach((sm) => { + if (sm.bpmnType == "CallActivityTask" && pModels.has(sm.upActivityId)) { + delete sm.upActivityId; + } + }); + }; + const lineObiCheck = function(model, param) { + let line = param.line; + if (line) { + let distLinks = line.stage.getDistModelLinks(line.id); + if (distLinks) { + let len = distLinks.length; + let includeModels = getIncludeModels(model); + for (let i = 0; i < len; i++) { + if (!distLinks[i].disabled) { + if (distLinks[i].sm == model) { + return true; + } else if (includeModels.indexOf(distLinks[i].sm) != -1) { + return false; + } + } + } + if (model.includePModelId) { + let parentModels = getParentModels(model); + for (let i = 0; i < len; i++) { + if (!distLinks[i].disabled && parentModels.indexOf(distLinks[i].sm) != -1) { + return false; + } + } + } + } + } else { + let otherModel = param.model; + if (otherModel) { + let subprocessIncludeModels = getIncludeModels(otherModel); + if (subprocessIncludeModels.indexOf(model) != -1) { + return false; + } + if (model.attachPModel == otherModel.id || model.id == otherModel.attachPModel) { + return false; + } + } + } + return true; + }; + const _sfc_main$p = { + name: "ddei-flow-bpmn-viewer-boundary-event", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnBoundaryEventViewer_vue_vue_type_style_index_0_scoped_7f22a8f2_lang = ""; + const _hoisted_1$p = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-boundary-event", + title: "边界事件" + }; + const _hoisted_2$k = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$j = { + key: 0, + "xlink:href": "#icon-ddei-flow-boundary-event-message" + }; + const _hoisted_4$i = { + key: 1, + "xlink:href": "#icon-ddei-flow-boundary-event-message-inte" + }; + const _hoisted_5$g = { + key: 2, + "xlink:href": "#icon-ddei-flow-boundary-event-time" + }; + const _hoisted_6$g = { + key: 3, + "xlink:href": "#icon-ddei-flow-boundary-event-time-inte" + }; + const _hoisted_7$g = { + key: 4, + "xlink:href": "#icon-ddei-flow-boundary-event-signal" + }; + const _hoisted_8$g = { + key: 5, + "xlink:href": "#icon-ddei-flow-boundary-event-error" + }; + const _hoisted_9$8 = { + key: 6, + "xlink:href": "#icon-ddei-flow-boundary-event-compensation" + }; + const _hoisted_10$6 = { + key: 7, + "xlink:href": "#icon-ddei-flow-boundary-event-cancel" + }; + const _hoisted_11$5 = { + key: 8, + "xlink:href": "#icon-ddei-flow-intermediate-event-c1" + }; + const _hoisted_12$4 = { + key: 9, + "xlink:href": "#icon-ddei-flow-intermediate-event-c12" + }; + const _hoisted_13$4 = { + key: 10, + "xlink:href": "#icon-ddei-flow-intermediate-event-c7" + }; + const _hoisted_14$3 = { + key: 11, + "xlink:href": "#icon-ddei-flow-intermediate-event-c14" + }; + const _hoisted_15$3 = { + key: 12, + "xlink:href": "#icon-ddei-flow-intermediate-event-c3" + }; + const _hoisted_16$2 = { + key: 13, + "xlink:href": "#icon-ddei-flow-intermediate-event-c11" + }; + function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$k, [ + (!$props.model.bpmnSubType || $props.model.bpmnSubType == 1) && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$j)) : vue.createCommentVNode("", true), + (!$props.model.bpmnSubType || $props.model.bpmnSubType == 1) && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$i)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_5$g)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_6$g)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_7$g)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_8$g)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_9$8)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_10$6)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_11$5)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_12$4)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 8 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_13$4)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 8 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_14$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 9 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_15$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 9 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_16$2)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnBoundaryEventViewer = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$p], ["__scopeId", "data-v-7f22a8f2"]]); + const boundaryEvent = { + "id": "1000004", + "name": "ddei.flow.boundaryevent", + "code": "boundaryevent", + "desc": "bpmn中的BoundaryEvent", + "from": "1000001", + subject: "bpmn", + "define": { + width: 40, + height: 40, + bpmnBaseType: "Event", + bpmnSubType: 1, + bpmnType: "BoundaryEvent", + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "boundaryevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.boundaryevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "子类型,用于区分中间节点的不同作用", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.message", "value": 1 }, + { "text": "ddei.flow.property.ds.timer", "value": 2 }, + { "text": "ddei.flow.property.ds.signal", "value": 3 }, + { "text": "ddei.flow.property.ds.error", "value": 4 }, + { "text": "ddei.flow.property.ds.compensation", "value": 5 }, + { "text": "ddei.flow.property.ds.cancel", "value": 6 }, + { "text": "ddei.flow.property.ds.escalation", "value": 7 }, + { "text": "ddei.flow.property.ds.parallel", "value": 8 }, + { "text": "ddei.flow.property.ds.multiple", "value": 9 } + ], + "itemStyle": { width: 130, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "notInterrupting", + "text": "ddei.flow.property.notInterrupting", + "desc": "非中断将不会终止运行,默认中断", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.boundaryevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnBoundaryEventViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: boundaryEvent + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$o = { + name: "ddei-flow-bpmn-viewer-businessrule-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnBusinessruleTaskViewer_vue_vue_type_style_index_0_scoped_44e6c2a4_lang = ""; + const _hoisted_1$o = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-businessrule-task" + }; + const _hoisted_2$j = { class: "title" }; + const _hoisted_3$i = { class: "text" }; + const _hoisted_4$h = { class: "markers" }; + const _hoisted_5$f = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$f = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$f = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$f = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [ + vue.createElementVNode("div", _hoisted_2$j, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-business-rule" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$i, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.busitask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$h, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$f, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$f, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$f, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$f, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnBusinessRuleTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$o], ["__scopeId", "data-v-44e6c2a4"]]); + const businessruleTask = { + id: "1000071", + name: "ddei.flow.busitask", + code: "busisrule_task", + desc: "bpmn中的BusinessRuleTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "BusinessTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "busirule_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.busitask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.busitask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnBusinessRuleTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: businessruleTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$n = { + name: "ddei-flow-bpmn-viewer-callactivity-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshView(model, vNode, tempShape, composeRender) { + if (this.model.activityId) { + if (this.model.upActivityId != this.model.activityId) { + this.model.upActivityId = this.model.activityId; + let viewModel = this.model.stage.getModelById(this.model.activityId); + if (viewModel) { + viewModel = this.getCallActivityTask(viewModel); + if (this.model.displayView) { + this.$refs["viewDiv"].innerHTML = this.editor.i18n("ddei.flow.loading"); + setTimeout(() => { + this.editor.flow.toImage([viewModel]).then((html) => { + if (html) { + this.$refs["viewDiv"].innerHTML = ""; + this.$refs["viewDiv"].style.backgroundImage = "url(" + html + ")"; + } + }); + }, 30); + } else { + this.$refs["viewDiv"].style.backgroundImage = ""; + this.$refs["viewDiv"].innerHTML = "
" + (viewModel.name ? viewModel.name : viewModel.code ? viewModel.code : viewModel.id) + "
"; + } + } + } + } + }, + getCallActivityTask(model) { + if (model.bpmnType == "CallActivityTask") { + if (model.activityId) { + let viewModel = this.model.stage.getModelById(model.activityId); + if (viewModel) { + model = this.getCallActivityTask(viewModel); + } + } + } + return model; + }, + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnCallactivityTaskViewer_vue_vue_type_style_index_0_scoped_ec0e7c21_lang = ""; + const _hoisted_1$n = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-callactivity-task" + }; + const _hoisted_2$i = { + key: 0, + class: "title" + }; + const _hoisted_3$h = { class: "text" }; + const _hoisted_4$g = { + key: 1, + ref: "viewDiv", + class: "view" + }; + const _hoisted_5$e = { class: "markers" }; + const _hoisted_6$e = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$e = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$e = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_9$7 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) { + var _a; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [ + !$props.model || !$props.model.activityId ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$i, [ + vue.createElementVNode("div", _hoisted_3$h, vue.toDisplayString($props.editor.i18n("ddei.flow.calltask")), 1) + ])) : vue.createCommentVNode("", true), + ((_a = $props.model) == null ? void 0 : _a.activityId) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$g, null, 512)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_5$e, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$e, _cache[0] || (_cache[0] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$e, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$e, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_9$7, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnCallActivityTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$n], ["__scopeId", "data-v-ec0e7c21"]]); + const callactivityTask = { + id: "1000081", + name: "ddei.flow.calltask", + code: "call", + desc: "bpmn中的CallaAtivityTask", + from: "100002", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "CallActivityTask", + width: 130, + height: 80, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "call", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "调用", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.calltask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "borderWidth", + "name": "ddei.property.width", + "desc": "图形的边框的粗细,0为无边框", + "controlType": "range", + "min": 0, + "max": 10, + "step": 0.1, + "mapping": ["border.width"], + "dataType": "integer", + "defaultValue": 5 + }, + { + "code": "borderRound", + "name": "ddei.property.round", + "desc": "图形的边框的是否为为圆角的弧度", + "controlType": "range", + "mapping": ["border.round"], + "min": 0, + "max": 30, + "step": 1, + "defaultValue": 5, + "dataType": "integer" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.calltask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "desc"] + } + ] + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnCallActivityTaskViewer, + icon: `` + }; + const __vite_glob_0_3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: callactivityTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$m = { + name: "ddei-flow-bpmn-viewer-chore-subprocess", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + data() { + return { + topUsers: null, + bottomUsers: null + }; + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["content"].style.border = "1px solid green"; + } else { + this.$refs["content"].style.border = ""; + } + }, + isInRect(model) { + let contentElement = this.$refs["content"]; + let contentPos = ddeiEditor.DDeiUtil.getDomAbsPosition(contentElement, this.editor); + let pvs = model.operatePVS; + let stage = model.stage; + contentPos.left -= stage.wpv.x; + contentPos.top -= stage.wpv.y; + for (let i = 0; i < pvs.length; i++) { + let p = pvs[i]; + if (contentPos.left <= p.x && contentPos.left + contentElement.clientWidth >= p.x && contentPos.top <= p.y && contentPos.top + contentElement.clientHeight >= p.y) { + return true; + } + } + return false; + }, + refreshView() { + if (this.model.topUser) { + let users = this.model.topUser.split(","); + let topUsers = []; + users == null ? void 0 : users.forEach((user2) => { + if (user2) { + topUsers.push({ name: user2 }); + } + }); + this.topUsers = topUsers; + } + if (this.model.bottomUser) { + let users = this.model.bottomUser.split(","); + let bottomUsers = []; + users == null ? void 0 : users.forEach((user2) => { + if (user2) { + bottomUsers.push({ name: user2 }); + } + }); + this.bottomUsers = bottomUsers; + } + } + } + }; + const bpmnChoreSubprocessViewer_vue_vue_type_style_index_0_scoped_8b8a1ced_lang = ""; + const _hoisted_1$m = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-chore-subprocess" + }; + const _hoisted_2$h = { class: "content" }; + const _hoisted_3$g = { class: "top" }; + const _hoisted_4$f = { class: "text" }; + const _hoisted_5$d = { + class: "middle", + ref: "content" + }; + const _hoisted_6$d = { + key: 0, + class: "text" + }; + const _hoisted_7$d = { + key: 1, + class: "icon-ddei-flow middle-locked", + "aria-hidden": "true" + }; + const _hoisted_8$d = { class: "markers" }; + const _hoisted_9$6 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_10$5 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_11$4 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_12$3 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_13$3 = { + key: 4, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_14$2 = { class: "bottom" }; + const _hoisted_15$2 = { class: "text" }; + function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$m, [ + vue.createElementVNode("div", _hoisted_2$h, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.topUsers, (user2) => { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_3$g, [ + vue.createElementVNode("div", _hoisted_4$f, vue.toDisplayString(user2.name), 1) + ]); + }), 256)), + vue.createElementVNode("div", _hoisted_5$d, [ + !$props.model.isExpand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$d, vue.toDisplayString($props.model.name ? $props.model.name : "编排子流程"), 1)) : vue.createCommentVNode("", true), + $props.model.lock == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$d, _cache[0] || (_cache[0] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-lock" }, null, -1) + ]))) : vue.createCommentVNode("", true), + vue.createElementVNode("div", _hoisted_8$d, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_9$6, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_10$5, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_11$4, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_12$3, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + _cache[6] || (_cache[6] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sub-process-marker" }) + ], -1)), + $props.model.isAdHoc == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_13$3, _cache[5] || (_cache[5] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-ad-hoc-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.bottomUsers, (user2) => { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_14$2, [ + vue.createElementVNode("div", _hoisted_15$2, vue.toDisplayString(user2.name), 1) + ]); + }), 256)) + ]) + ], 512); + } + const BpmnChoreSubProcessViewer = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$m], ["__scopeId", "data-v-8b8a1ced"]]); + const choreographySubprocess = { + id: "1000102", + name: "ddei.flow.choresubprocess", + code: "chor_subprocess", + desc: "bpmn中的ChoreographySubProcess", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ChoreographySubProcess", + allowIncludeModel: 1, + width: 300, + height: 240, + otherWidth: 120, + otherHeight: 130, + isExpand: 1, + border: { + round: 5 + }, + topUser: "ddei.flow.property.sender", + bottomUser: "ddei.flow.property.receiver", + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "chor_subprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.choresubprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "isAdHoc", + "name": "ddei.flow.property.custom", + "desc": "是否为自定义流程", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.choresubprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnChoreSubProcessViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: choreographySubprocess + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$l = { + name: "ddei-flow-bpmn-viewer-chore-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + data() { + return { + topUsers: null, + bottomUsers: null + }; + }, + methods: { + refreshView() { + if (this.model.topUser) { + let users = this.model.topUser.split(","); + let topUsers = []; + users == null ? void 0 : users.forEach((user2) => { + if (user2) { + topUsers.push({ name: user2 }); + } + }); + this.topUsers = topUsers; + } + if (this.model.bottomUser) { + let users = this.model.bottomUser.split(","); + let bottomUsers = []; + users == null ? void 0 : users.forEach((user2) => { + if (user2) { + bottomUsers.push({ name: user2 }); + } + }); + this.bottomUsers = bottomUsers; + } + }, + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnChoreTaskViewer_vue_vue_type_style_index_0_scoped_547a6caf_lang = ""; + const _hoisted_1$l = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-chore-task" + }; + const _hoisted_2$g = { class: "content" }; + const _hoisted_3$f = { class: "top" }; + const _hoisted_4$e = { class: "text" }; + const _hoisted_5$c = { class: "middle" }; + const _hoisted_6$c = { class: "text" }; + const _hoisted_7$c = { class: "markers" }; + const _hoisted_8$c = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_9$5 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_10$4 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_11$3 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_12$2 = { class: "bottom" }; + const _hoisted_13$2 = { class: "text" }; + function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [ + vue.createElementVNode("div", _hoisted_2$g, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.topUsers, (user2) => { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_3$f, [ + vue.createElementVNode("div", _hoisted_4$e, vue.toDisplayString(user2.name), 1) + ]); + }), 256)), + vue.createElementVNode("div", _hoisted_5$c, [ + vue.createElementVNode("div", _hoisted_6$c, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.choretask")), 1), + vue.createElementVNode("div", _hoisted_7$c, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$c, _cache[0] || (_cache[0] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_9$5, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_10$4, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_11$3, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ]), + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList($data.bottomUsers, (user2) => { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_12$2, [ + vue.createElementVNode("div", _hoisted_13$2, vue.toDisplayString(user2.name), 1) + ]); + }), 256)) + ]) + ], 512); + } + const BpmnChoreTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$l], ["__scopeId", "data-v-547a6caf"]]); + const choreographyTask = { + id: "1000101", + name: "ddei.flow.choretask", + code: "chor_task", + desc: "bpmn中的ChoreographyTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ChoreographyTask", + width: 120, + height: 130, + border: { + round: 5 + }, + topUser: "ddei.flow.property.sender", + bottomUser: "ddei.flow.property.receiver", + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "chor_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.choretask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.choretask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnChoreTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: choreographyTask + }, Symbol.toStringTag, { value: "Module" })); + const comment = { + id: "1000701", + name: "ddei.control.comment", + code: "comment", + desc: "bpmn中的注释", + from: "103008", + subject: "bpmn", + define: { + width: 110, + height: 70, + bpmnBaseType: "Comment", + bpmnType: "Comment", + text: "ddei.control.comment" + }, + icon: `` + }; + const __vite_glob_0_6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: comment + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$k = { + name: "ddei-flow-bpmn-viewer-complex-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnComplexGatewayViewer_vue_vue_type_style_index_0_scoped_e6c1fdb1_lang = ""; + const _hoisted_1$k = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-complex-gateway", + title: "复杂网关" + }; + function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-gateway-complex" }) + ], -1) + ]), 512); + } + const BpmnComplexGatewayViewer = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$k], ["__scopeId", "data-v-e6c1fdb1"]]); + const complexGateway = { + id: "1000204", + name: "ddei.flow.complexgateway", + code: "complex_gateway", + desc: "bpmn中的ComplexGateway", + from: "100040", + subject: "bpmn", + define: { + width: 50, + height: 50, + bpmnBaseType: "Gateway", + bpmnType: "ComplexGateway", + ext: { + sample: { + eqrat: true + }, + attrs: [ + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + viewer: BpmnComplexGatewayViewer, + icon: `` + }; + const __vite_glob_0_7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: complexGateway + }, Symbol.toStringTag, { value: "Module" })); + const dataObject = { + id: "1000501", + name: "ddei.flow.dataobj", + code: "data", + desc: "bpmn中的数据对象", + from: "100500", + subject: "bpmn", + define: { + width: 30, + height: 39, + dataType: 1, + bpmnBaseType: "Other", + bpmnType: "DataObject", + bpmnSubType: 1, + name: "ddei.flow.dataobj", + //2为极坐标,以cpv为圆心,半径r采样获得点,在以width/100、height/100的的原始比例进行缩放 + poly: 2, + //采样信息 + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + //位置5中心点,6789上右下左 + }, + depProps: { + "8": "name" + //映射属性 + }, + //一圈4次采样 + loop: 4, + //初始次采样的开始角度 + angle: 0, + //半径距离 + r: 50, + //允许文本输入 + textInput: 1, + //采样的规则,多组采样返回多组规则 + rules: [ + `(i, sample, pvs, model, ovs){ + let weight = 25 + let x=sample.x,y=sample.y + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,select:1,clip:1,oppoint:2,stroke:1,fill:1}); + break; + case 1: + pvs[0].y=y + pvs.push({x:x,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + break; + case 2: + pvs[1].x=x + pvs.push({x:x,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + break; + case 3: + pvs[2].y=y + x = pvs[0].x + pvs.push({x:x-weight,y:y,select:1,clip:1,stroke:1,oppoint:2,fill:1}); + pvs.push({x:x,y:y+weight,select:1,clip:1,stroke:1,oppoint:2,op2close:1,fill:1,end:1}); + + break; + } + }`, + `(i, sample, pvs, model, ovs){ + if(i==3){ + pvs.push({x:25,y:sample.y,stroke:1,type:1,begin:1}); + pvs.push({x:25,y:sample.y+25,stroke:1,type:1}); + pvs.push({x:50,y:sample.y+25,stroke:1,type:1}); + pvs.push({x:50,y:sample.y+25,end:1}); + } + }`, + //输入输出箭头 + `(i, sample, pvs, model, ovs){ + if(model.bpmnSubType == 2 || model.bpmnSubType == 3){ + switch(i){ + case 3: + let fill = model.bpmnSubType == 3 ? 1 : 0 + let stroke = model.bpmnSubType == 2 ? 1 : 0 + pvs.push({begin:1,x:-35,y:-30,stroke:stroke,fill:fill,fillColor:'border'}); + pvs.push({x:-15,y:-30,stroke:stroke}); + pvs.push({x:-15,y:-35,stroke:stroke}); + pvs.push({x:0,y:-25,stroke:stroke}); + pvs.push({x:-15,y:-15,stroke:stroke}); + pvs.push({x:-15,y:-20,stroke:stroke}); + pvs.push({end:1,x:-35,y:-20,stroke:stroke}); + break; + } + } + }`, + //数据集合图标 + `(i, sample, pvs, model, ovs){ + if(model.isCollection){ + switch(i){ + case 3: + let fill = 1 + let stroke = 1 + pvs.push({begin:1,x:0,y:25,stroke:stroke,fill:fill,fillColor:'border'}); + pvs.push({x:0,y:43,stroke:stroke}); + pvs.push({x:0,y:43,stroke:stroke}); + pvs.push({end:1,x:0,y:25,stroke:stroke}); + + pvs.push({begin:1,x:-8,y:25,stroke:stroke,fill:fill,fillColor:'border'}); + pvs.push({x:-8,y:43,stroke:stroke}); + pvs.push({x:-8,y:43,stroke:stroke}); + pvs.push({end:1,x:-8,y:25,stroke:stroke}); + + pvs.push({begin:1,x:8,y:25,stroke:stroke,fill:fill,fillColor:'border'}); + pvs.push({x:8,y:43,stroke:stroke}); + pvs.push({x:8,y:43,stroke:stroke}); + pvs.push({end:1,x:8,y:25,stroke:stroke}); + break; + } + } + }`, + //文本 + `(i, sample, pvs, model, ovs){ + if(sample.textInput){ + let weight = 25 + let x=sample.x,y=sample.y + switch(i){ + case 0: + pvs.push({begin:1,x:x,y:y,text:1}); + break; + case 1: + pvs[0].y=y + pvs.push({x:x,y:y,text:1}); + break; + case 2: + pvs[1].x=x + pvs.push({x:x,y:y,text:1}); + break; + case 3: + pvs[2].y=y+weight + x = pvs[0].x + pvs.push({x:x,y:pvs[2].y,text:1}); + break; + } + } + }` + ] + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "data", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "数据", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "控件的主体显示文本", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.input", "value": 2 }, + { "text": "ddei.flow.property.ds.output", "value": 3 } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "dataType", + "name": "ddei.flow.property.datatype", + "desc": "数据的类型,可以是内置类型,也可以由外部定义", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { text: "ddei.flow.property.ds.string", "value": 1 }, + { "text": "ddei.flow.property.ds.integer", "value": 2 }, + { "text": "ddei.flow.property.ds.long", "value": 3 }, + { "text": "ddei.flow.property.ds.float", "value": 4 }, + { "text": "ddei.flow.property.ds.double", "value": 5 }, + { "text": "ddei.flow.property.ds.boolean", "value": 6 }, + { "text": "ddei.flow.property.ds.datetime", "value": 7 }, + { "text": "ddei.flow.property.ds.custom", "value": 8 } + ], + "itemStyle": { width: 100, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "isCollection", + "name": "ddei.flow.datacoll", + "desc": "是否为数据集合", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "数据对象节点", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: dataObject + }, Symbol.toStringTag, { value: "Module" })); + const datastore = { + id: "1000506", + name: "ddei.flow.datastore", + code: "ds", + desc: "bpmn中的数据存储", + from: "103010", + subject: "bpmn", + define: { + width: 50, + height: 30, + bpmnBaseType: "Other", + bpmnType: "DataStore", + name: "ddei.flow.datastore", + ext: { + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + //位置5中心点,6789上右下左 + }, + depProps: { + "8": "name" + //映射属性 + } + }, + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "ds", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.datastore", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "isUnlimited", + "name": "ddei.flow.unlimited", + "desc": "是否无限容量", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [2] + //类别,1图形,2业务,3事件 + }, + { + "code": "capacity", + "name": "ddei.flow.property.capacity", + "desc": "数据存储的大小", + "controlType": "text", + "dataType": "integer", + "defaultValue": 1, + "type": [2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "消息节点", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: datastore + }, Symbol.toStringTag, { value: "Module" })); + const datastore1 = { + id: "1000507", + name: "ddei.flow.datastore", + code: "ds", + desc: "bpmn中的消息", + from: "103011", + subject: "bpmn", + define: { + width: 50, + height: 30, + bpmnBaseType: "Other", + bpmnType: "DataStore", + name: "ddei.flow.datastore", + ext: { + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + //位置5中心点,6789上右下左 + }, + depProps: { + "8": "name" + //映射属性 + } + }, + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "ds", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.datastore", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "消息节点", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: datastore1 + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$j = { + name: "ddei-flow-bpmn-viewer-end-event", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnEndEventViewer_vue_vue_type_style_index_0_scoped_8f354e18_lang = ""; + const _hoisted_1$j = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-end-event", + title: "结束事件" + }; + const _hoisted_2$f = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$e = { + key: 0, + "xlink:href": "#icon-ddei-flow-end-event-none" + }; + const _hoisted_4$d = { + key: 1, + "xlink:href": "#icon-ddei-flow-end-event-message" + }; + const _hoisted_5$b = { + key: 2, + "xlink:href": "#icon-ddei-flow-end-event-signal" + }; + const _hoisted_6$b = { + key: 3, + "xlink:href": "#icon-ddei-flow-end-event-multiple" + }; + const _hoisted_7$b = { + key: 4, + "xlink:href": "#icon-ddei-flow-end-event-escalation" + }; + const _hoisted_8$b = { + key: 5, + "xlink:href": "#icon-ddei-flow-end-event-error" + }; + const _hoisted_9$4 = { + key: 6, + "xlink:href": "#icon-ddei-flow-end-event-compensati" + }; + const _hoisted_10$3 = { + key: 7, + "xlink:href": "#icon-ddei-flow-end-event-cancel" + }; + const _hoisted_11$2 = { + key: 8, + "xlink:href": "#icon-ddei-flow-end-event-terminate" + }; + function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$f, [ + !$props.model.bpmnSubType || $props.model.bpmnSubType == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$e)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$d)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_5$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_6$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_7$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_8$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_9$4)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 8 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_10$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 9 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_11$2)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnEndEventViewer = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$j], ["__scopeId", "data-v-8f354e18"]]); + const endEvent = { + id: "1000003", + name: "ddei.flow.endevent", + code: "end", + desc: "bpmn中的EndEvent", + from: "1000001", + subject: "bpmn", + define: { + width: 40, + height: 40, + bpmnBaseType: "Event", + bpmnType: "EndEvent", + bpmnSubType: 1, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "end", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.endevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "控件的主体显示文本", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.message", "value": 2 }, + { "text": "ddei.flow.property.ds.signal", "value": 3 }, + { "text": "ddei.flow.property.ds.multiple", "value": 4 }, + { "text": "ddei.flow.property.ds.escalation", "value": 5 }, + { "text": "ddei.flow.property.ds.error", "value": 6 }, + { "text": "ddei.flow.property.ds.compensation", "value": 7 }, + { "text": "ddei.flow.property.ds.cancel", "value": 8 }, + { "text": "ddei.flow.property.ds.stop", "value": 9 } + ], + "itemStyle": { width: 80, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.endevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + viewer: BpmnEndEventViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: endEvent + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$i = { + name: "ddei-flow-bpmn-viewer-eventbased-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnEventbasedGatewayViewer_vue_vue_type_style_index_0_scoped_6f4a01e3_lang = ""; + const _hoisted_1$i = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-eventbased-gateway", + title: "事件网关" + }; + function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-gateway-eventbased" }) + ], -1) + ]), 512); + } + const BpmnEventBasedGatewayViewer = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$i], ["__scopeId", "data-v-6f4a01e3"]]); + const eventbasedGateway = { + id: "1000205", + name: "ddei.flow.eventbasedgateway", + code: "eventbased_gateway", + desc: "bpmn中的EventBasedGateway", + from: "100040", + subject: "bpmn", + define: { + width: 50, + height: 50, + bpmnBaseType: "Gateway", + bpmnType: "EventBasedGateway", + ext: { + sample: { + eqrat: true + }, + attrs: [ + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + viewer: BpmnEventBasedGatewayViewer, + icon: `` + }; + const __vite_glob_0_12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: eventbasedGateway + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$h = { + name: "ddei-flow-bpmn-viewer-exclusive-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnExclusiveGatewayViewer_vue_vue_type_style_index_0_scoped_7986eca0_lang = ""; + const _hoisted_1$h = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-exclusive-gateway", + title: "排他网关" + }; + function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-gateway-xor" }) + ], -1) + ]), 512); + } + const BpmnExclusiveGatewayViewer = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$h], ["__scopeId", "data-v-7986eca0"]]); + const exclusiveGateway = { + id: "1000202", + name: "ddei.flow.exclusivegateway", + code: "exclusive_gateway", + desc: "bpmn中的ExclusiveGateway", + from: "100040", + subject: "bpmn", + define: { + width: 50, + height: 50, + bpmnBaseType: "Gateway", + bpmnType: "ExclusiveGateway", + ext: { + sample: { + eqrat: true + }, + attrs: [ + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + viewer: BpmnExclusiveGatewayViewer, + icon: `` + }; + const __vite_glob_0_13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: exclusiveGateway + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$g = { + name: "ddei-flow-bpmn-viewer-group", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["rectSvg"].children[0].style.stroke = "green"; + } else { + this.$refs["rectSvg"].children[0].style.stroke = ""; + } + } + } + }; + const bpmnGroupViewer_vue_vue_type_style_index_0_scoped_b5dc3b04_lang = ""; + const _hoisted_1$g = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-group" + }; + const _hoisted_2$e = { + class: "border-svg", + ref: "rectSvg" + }; + const _hoisted_3$d = { + key: 1, + class: "icon-ddei-flow content-header-locked", + "aria-hidden": "true" + }; + function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) { + var _a; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$e, _cache[0] || (_cache[0] = [ + vue.createElementVNode("rect", { + rx: "10", + ry: "10", + width: "100%", + height: "100%", + x: "0", + y: "0" + }, null, -1) + ]), 512)), + ((_a = $props.model) == null ? void 0 : _a.name) ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + class: vue.normalizeClass({ "title": !$props.model.isExpand, "title-expand": $props.model.isExpand }) + }, vue.toDisplayString($props.model.name), 3)) : vue.createCommentVNode("", true), + $props.model.lock == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_3$d, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-lock" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ], 512); + } + const BpmnGroupViewer = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$g], ["__scopeId", "data-v-b5dc3b04"]]); + const group = { + id: "1000401", + name: "ddei.flow.group", + code: "group", + desc: "bpmn中的Group", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Group", + bpmnType: "Group", + allowIncludeModel: 1, + width: 400, + height: 320, + otherWidth: 110, + otherHeight: 70, + isExpand: 1, + border: { + round: 10 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "group", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "分组标题", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.group", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.group", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "desc"] + } + ] + } + ] + } + }, + viewer: BpmnGroupViewer, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: group + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$f = { + name: "ddei-flow-bpmn-viewer-inter-catch-event", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnIntermediateCatchEventViewer_vue_vue_type_style_index_0_scoped_e679db61_lang = ""; + const _hoisted_1$f = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-inter-catch-event", + title: "中间捕获事件" + }; + const _hoisted_2$d = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$c = { + key: 0, + "xlink:href": "#icon-ddei-flow-boundary-event-time" + }; + const _hoisted_4$c = { + key: 1, + "xlink:href": "#icon-ddei-flow-boundary-event-message" + }; + const _hoisted_5$a = { + key: 2, + "xlink:href": "#icon-ddei-flow-boundary-event-signal" + }; + const _hoisted_6$a = { + key: 3, + "xlink:href": "#icon-ddei-flow-intermediate-event-c2" + }; + const _hoisted_7$a = { + key: 4, + "xlink:href": "#icon-ddei-flow-intermediate-event-c7" + }; + const _hoisted_8$a = { + key: 5, + "xlink:href": "#icon-ddei-flow-intermediate-event-c3" + }; + function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$d, [ + !$props.model.bpmnSubType || $props.model.bpmnSubType == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$c)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$c)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_5$a)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_6$a)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_7$a)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_8$a)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnIntermediateCatchEventViewer = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$f], ["__scopeId", "data-v-e679db61"]]); + const intermediateCatchEvent = { + "id": "1000002", + "name": "ddei.flow.intermediatecatchevent", + "code": "icatchevt", + "desc": "bpmn中的IntermediateCatchEvent", + "from": "1000001", + subject: "bpmn", + "define": { + width: 40, + height: 40, + bpmnBaseType: "Event", + bpmnSubType: 1, + bpmnType: "IntermediateCatchEvent", + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "icatchevt", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.intermediatecatchevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "子类型,用于区分中间节点的不同作用", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.timer", "value": 1 }, + { "text": "ddei.flow.property.ds.message", "value": 2 }, + { "text": "ddei.flow.property.ds.signal", "value": 3 }, + { "text": "ddei.flow.property.ds.link", "value": 4 }, + { "text": "ddei.flow.property.ds.parallel", "value": 5 }, + { "text": "ddei.flow.property.ds.multiple", "value": 6 } + ], + "itemStyle": { width: 130, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.intermediatecatchevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + viewer: BpmnIntermediateCatchEventViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: intermediateCatchEvent + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$e = { + name: "ddei-flow-bpmn-viewer-inter-throw-event", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnIntermediateThrowEventViewer_vue_vue_type_style_index_0_scoped_c8fcaa16_lang = ""; + const _hoisted_1$e = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-inter-throw-event", + title: "中间抛出事件" + }; + const _hoisted_2$c = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$b = { + key: 0, + "xlink:href": "#icon-ddei-flow-intermediate-event-n" + }; + const _hoisted_4$b = { + key: 1, + "xlink:href": "#icon-ddei-flow-intermediate-throw-event-message" + }; + const _hoisted_5$9 = { + key: 2, + "xlink:href": "#icon-ddei-flow-intermediate-throw-event-signal" + }; + const _hoisted_6$9 = { + key: 3, + "xlink:href": "#icon-ddei-flow-intermediate-throw-event-compensation" + }; + const _hoisted_7$9 = { + key: 4, + "xlink:href": "#icon-ddei-flow-intermediate-event-t3" + }; + const _hoisted_8$9 = { + key: 5, + "xlink:href": "#icon-ddei-flow-intermediate-event-t1" + }; + const _hoisted_9$3 = { + key: 6, + "xlink:href": "#icon-ddei-flow-intermediate-event-t5" + }; + function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$c, [ + !$props.model.bpmnSubType || $props.model.bpmnSubType == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$b)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_5$9)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_6$9)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_7$9)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_8$9)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_9$3)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnIntermediateThrowEventViewer = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$e], ["__scopeId", "data-v-c8fcaa16"]]); + const intermediateThrowEvent = { + "id": "1000005", + "name": "ddei.flow.intermediatethrowevent", + "code": "ithrowevt", + "desc": "bpmn中的IntermediateThrowEvent", + "from": "1000001", + subject: "bpmn", + "define": { + width: 40, + height: 40, + bpmnBaseType: "Event", + bpmnSubType: 1, + bpmnType: "IntermediateThrowEvent", + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "ithrowevt", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.intermediatethrowevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "子类型,用于区分中间节点的不同作用", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.message", "value": 2 }, + { "text": "ddei.flow.property.ds.signal", "value": 3 }, + { "text": "ddei.flow.property.ds.compensation", "value": 4 }, + { "text": "ddei.flow.property.ds.multiple", "value": 5 }, + { "text": "ddei.flow.property.ds.escalation", "value": 6 }, + { "text": "ddei.flow.property.ds.link", "value": 7 } + ], + "itemStyle": { width: 130, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.intermediatethrowevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + viewer: BpmnIntermediateThrowEventViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: intermediateThrowEvent + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$d = { + name: "ddei-flow-bpmn-viewer-manual-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnManualTaskViewer_vue_vue_type_style_index_0_scoped_3083fc81_lang = ""; + const _hoisted_1$d = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-manual-task" + }; + const _hoisted_2$b = { class: "title" }; + const _hoisted_3$a = { class: "text" }; + const _hoisted_4$a = { class: "markers" }; + const _hoisted_5$8 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$8 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$8 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$8 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [ + vue.createElementVNode("div", _hoisted_2$b, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-manual" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$a, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.manualtask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$a, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$8, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$8, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$8, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$8, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnManualTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$d], ["__scopeId", "data-v-3083fc81"]]); + const manualTask = { + id: "1000051", + name: "ddei.flow.manualtask", + code: "manual_task", + desc: "bpmn中的ManualTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ManualTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "manual_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.manualtask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.manualtask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnManualTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: manualTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$c = { + name: "ddei-flow-bpmn-viewer-message", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnMessageViewer_vue_vue_type_style_index_0_scoped_58a6b5ba_lang = ""; + const _hoisted_1$c = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-message", + title: "消息" + }; + const _hoisted_2$a = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$9 = { + key: 0, + "xlink:href": "#icon-ddei-flow-receive" + }; + const _hoisted_4$9 = { + key: 1, + "xlink:href": "#icon-ddei-flow-send" + }; + function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$a, [ + $props.model.bpmnSubType == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$9)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$9)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnMessageViewer = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$c], ["__scopeId", "data-v-58a6b5ba"]]); + const message = { + id: "1000505", + name: "ddei.flow.message", + code: "msg", + desc: "bpmn中的消息", + from: "100103", + subject: "bpmn", + define: { + width: 32, + height: 24, + bpmnBaseType: "Other", + bpmnType: "Message", + bpmnSubType: 1, + name: "ddei.flow.message", + ext: { + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + //位置5中心点,6789上右下左 + }, + depProps: { + "8": "name" + //映射属性 + } + }, + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "msg", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.message", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.noninit", "value": 2 } + ], + "itemStyle": { width: 100, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.message", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + viewer: BpmnMessageViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: message + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$b = { + name: "ddei-flow-bpmn-viewer-parallel-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnParallelGatewayViewer_vue_vue_type_style_index_0_scoped_4d21627c_lang = ""; + const _hoisted_1$b = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-parallel-gateway", + title: "并行网关" + }; + function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-gateway-parallel" }) + ], -1) + ]), 512); + } + const BpmnParallelGatewayViewer = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__scopeId", "data-v-4d21627c"]]); + const parallelGateway = { + id: "1000201", + name: "ddei.flow.parallelgateway", + code: "parallel_gateway", + desc: "bpmn中的ParallelGateway", + from: "100040", + subject: "bpmn", + define: { + width: 50, + height: 50, + bpmnBaseType: "Gateway", + bpmnType: "ParallelGateway", + ext: { + sample: { + eqrat: true + }, + attrs: [ + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + viewer: BpmnParallelGatewayViewer, + icon: `` + }; + const __vite_glob_0_19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: parallelGateway + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$a = { + name: "ddei-flow-bpmn-viewer-receive-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnReceiveTaskViewer_vue_vue_type_style_index_0_scoped_e2cb14b8_lang = ""; + const _hoisted_1$a = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-receive-task" + }; + const _hoisted_2$9 = { class: "title" }; + const _hoisted_3$8 = { class: "text" }; + const _hoisted_4$8 = { class: "markers" }; + const _hoisted_5$7 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$7 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$7 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$7 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [ + vue.createElementVNode("div", _hoisted_2$9, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-receive" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$8, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.receivetask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$8, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$7, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$7, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$7, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$7, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnReceiveTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__scopeId", "data-v-e2cb14b8"]]); + const receiveTask = { + id: "1000061", + name: "ddei.flow.receivetask", + code: "receive_task", + desc: "bpmn中的ReceiveTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ReceiveTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "receive_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.receivetask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.receivetask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnReceiveTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: receiveTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$9 = { + name: "ddei-flow-bpmn-viewer-script-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnScriptTaskViewer_vue_vue_type_style_index_0_scoped_10d59418_lang = ""; + const _hoisted_1$9 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-script-task" + }; + const _hoisted_2$8 = { class: "title" }; + const _hoisted_3$7 = { class: "text" }; + const _hoisted_4$7 = { class: "markers" }; + const _hoisted_5$6 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$6 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$6 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$6 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [ + vue.createElementVNode("div", _hoisted_2$8, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-script" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$7, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.scripttask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$7, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$6, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$6, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$6, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$6, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnScriptTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__scopeId", "data-v-10d59418"]]); + const scriptTask = { + id: "1000021", + name: "ddei.flow.scripttask", + code: "script_task", + desc: "bpmn中的ScriptTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ScriptTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "script_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.scripttask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "scriptFormat", + "name": "ddei.flow.property.language", + "desc": "脚本采用的语言", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "groovy", + "type": [2] + //类别,1图形,2业务,3事件 + }, + { + "code": "script", + "name": "ddei.flow.property.script", + "desc": "脚本内容", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "", + "type": [2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.scripttask", + "type": [2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnScriptTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: scriptTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$8 = { + name: "ddei-flow-bpmn-viewer-send-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnSendTaskViewer_vue_vue_type_style_index_0_scoped_451d2857_lang = ""; + const _hoisted_1$8 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-send-task" + }; + const _hoisted_2$7 = { class: "title" }; + const _hoisted_3$6 = { class: "text" }; + const _hoisted_4$6 = { class: "markers" }; + const _hoisted_5$5 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$5 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$5 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$5 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [ + vue.createElementVNode("div", _hoisted_2$7, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-send" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$6, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.sendtask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$6, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$5, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$5, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$5, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$5, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnSendTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__scopeId", "data-v-451d2857"]]); + const sendTask = { + id: "1000041", + name: "ddei.flow.sendtask", + code: "send_task", + desc: "bpmn中的SendTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "SendTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "send_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.sendtask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.sendtask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnSendTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: sendTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$7 = { + name: "ddei-flow-bpmn-viewer-sequence-flow-icon", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + data() { + return { + type: 0, + lineColor: "black", + lineWidth: 1 + }; + }, + mounted() { + this.refreshView(); + }, + methods: { + refreshView(model, vNode, tempShape, composeRender) { + var _a, _b; + let lineModel = this.model.pModel; + if (lineModel) { + this.type = lineModel.bpmnSubType; + if (this.type) { + let color = (_a = lineModel.render) == null ? void 0 : _a.getCachedValue("color"); + if (!color) { + color = ddeiEditor.DDeiUtil.getStyleValue("canvas-control-border", this.editor.ddInstance); + } + this.lineWidth = (_b = lineModel.render) == null ? void 0 : _b.getCachedValue("width"); + } + } + } + } + }; + const bpmnSequenceFlowIconViewer_vue_vue_type_style_index_0_scoped_f97bf8f3_lang = ""; + const _hoisted_1$7 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-sequence-flow-icon" + }; + const _hoisted_2$6 = { + key: 0, + class: "icon-svg" + }; + function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [ + $data.type == 3 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$6, [ + vue.createElementVNode("line", { + x1: "0", + y1: "0", + x2: "12", + y2: "12", + style: vue.normalizeStyle({ "stroke": $data.lineColor, "stroke-width": $data.lineWidth }) + }, null, 4) + ])) : vue.createCommentVNode("", true) + ], 512); + } + const BpmnSequenceFlowIconViewer = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__scopeId", "data-v-f97bf8f3"]]); + const sequenceFlowIcon = { + id: "100060101", + name: "控制流图标", + code: "seqicon", + desc: "bpmn中控制流的子图标", + from: "100103", + subject: "bpmn", + define: { + width: 12, + height: 12, + bpmnBaseType: "Other", + bpmnType: "ICON" + }, + viewer: BpmnSequenceFlowIconViewer, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: sequenceFlowIcon + }, Symbol.toStringTag, { value: "Module" })); + const sequenceFlow = { + id: "1000601", + name: "ddei.flow.sequence", + code: "seq", + desc: "bpmn中的SequenceFlow", + from: "100401", + subject: "bpmn", + define: { + type: 2, + bpmnBaseType: "Sequence", + bpmnSubType: 1, + ep: { + type: 51 + }, + pvs: [ + { x: -75, y: 0, z: 1 }, + { x: 0, y: 0, z: 1 }, + { x: 75, y: 0, z: 1 } + ], + cpv: { + x: 0, + y: 0 + }, + //组合控件 + composes: [ + { + width: 12, + height: 12, + id: "100060101", + cIndex: 1, + initCPV: { + x: 0, + y: 0, + z: 1 + } + } + ], + //操作点 + ovs: [ + { + //约束,控制点的移动路径和位置 + constraint: { + type: 5, + //不允许移动,固定路径位置,沿路径方向,固定在等比例或者等长度位置(长度不足则按照0.5比例位置) + pvs: ["pvs[0]", "pvs[1]"], + //定义路径 + rate: 0.15 + //固定比例 + // len: 30 //固定长度 + }, + //联动,点移动后控制的其它点 + links: [ + { + type: 2, + //同步中心点 + pvs: ["composes[0]"] + } + ] + } + ], + ext: { + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 3 + //位置5中心点,6789上右下左 + }, + depProps: { + "3": "name" + //映射属性 + } + }, + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "seq", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.sequence", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "控件的主体显示文本", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.condition", "value": 2 }, + { "text": "ddei.flow.property.ds.defaultcondition", "value": 3 }, + { "text": "ddei.flow.property.ds.message", "value": 4 }, + { "text": "ddei.flow.property.ds.association", "value": 5 } + ], + "itemStyle": { width: 100, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.sequence", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "bpmnSubType", "desc"] + } + ] + } + ] + } + }, + icon: `` + }; + const __vite_glob_0_24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: sequenceFlow + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$6 = { + name: "ddei-flow-bpmn-viewer-service-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnServiceTaskViewer_vue_vue_type_style_index_0_scoped_1f1f502d_lang = ""; + const _hoisted_1$6 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-service-task" + }; + const _hoisted_2$5 = { class: "title" }; + const _hoisted_3$5 = { class: "text" }; + const _hoisted_4$5 = { class: "markers" }; + const _hoisted_5$4 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$4 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$4 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$4 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [ + vue.createElementVNode("div", _hoisted_2$5, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-service" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$5, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.servicetask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$5, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$4, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$4, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$4, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$4, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnServiceTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-1f1f502d"]]); + const serviceTask = { + id: "1000031", + name: "ddei.flow.servicetask", + code: "service_task", + desc: "bpmn中的ServiceTask", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "ServiceTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "service_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.servicetask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.servicetask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnServiceTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: serviceTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$5 = { + name: "ddei-flow-bpmn-viewer-start-gateway", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnStartEventViewer_vue_vue_type_style_index_0_scoped_81a6686d_lang = ""; + const _hoisted_1$5 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-start-event", + title: "开始事件" + }; + const _hoisted_2$4 = { + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_3$4 = { + key: 0, + "xlink:href": "#icon-ddei-flow-start-event-none" + }; + const _hoisted_4$4 = { + key: 1, + "xlink:href": "#icon-ddei-flow-start-event-message" + }; + const _hoisted_5$3 = { + key: 2, + "xlink:href": "#icon-ddei-flow-start-event-non-inte3" + }; + const _hoisted_6$3 = { + key: 3, + "xlink:href": "#icon-ddei-flow-start-event-timer" + }; + const _hoisted_7$3 = { + key: 4, + "xlink:href": "#icon-ddei-flow-start-event-non-inte2" + }; + const _hoisted_8$3 = { + key: 5, + "xlink:href": "#icon-ddei-flow-start-event-conditio" + }; + const _hoisted_9$2 = { + key: 6, + "xlink:href": "#icon-ddei-flow-start-event-non-inte4" + }; + const _hoisted_10$2 = { + key: 7, + "xlink:href": "#icon-ddei-flow-start-event-signal" + }; + const _hoisted_11$1 = { + key: 8, + "xlink:href": "#icon-ddei-flow-start-event-non-inte1" + }; + const _hoisted_12$1 = { + key: 9, + "xlink:href": "#icon-ddei-flow-start-event-multiple" + }; + const _hoisted_13$1 = { + key: 10, + "xlink:href": "#icon-ddei-flow-start-event-non-inte6" + }; + const _hoisted_14$1 = { + key: 11, + "xlink:href": "#icon-ddei-flow-start-event-parallel" + }; + const _hoisted_15$1 = { + key: 12, + "xlink:href": "#icon-ddei-flow-start-event-non-inte5" + }; + const _hoisted_16$1 = { + key: 13, + "xlink:href": "#icon-ddei-flow-start-event-escalati" + }; + const _hoisted_17$1 = { + key: 14, + "xlink:href": "#icon-ddei-flow-start-event-non-inte" + }; + const _hoisted_18$1 = { + key: 15, + "xlink:href": "#icon-ddei-flow-start-event-error" + }; + const _hoisted_19$1 = { + key: 16, + "xlink:href": "#icon-ddei-flow-start-event-compensa" + }; + const _hoisted_20$1 = { + key: 17, + "xlink:href": "#icon-ddei-flow-start-event-compensa-non-inte" + }; + function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [ + (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$4, [ + !$props.model.bpmnSubType || $props.model.bpmnSubType == 1 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3$4)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4$4)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 2 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_5$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_6$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 3 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_7$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_8$3)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 4 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_9$2)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_10$2)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 5 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_11$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_12$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 6 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_13$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_14$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 7 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_15$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 8 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_16$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 8 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_17$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 9 ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_18$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 10 && !$props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_19$1)) : vue.createCommentVNode("", true), + $props.model.bpmnSubType == 10 && $props.model.notInterrupting ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_20$1)) : vue.createCommentVNode("", true) + ])) + ], 512); + } + const BpmnStartEventViewer = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$5], ["__scopeId", "data-v-81a6686d"]]); + const startEvent = { + "id": "1000001", + "name": "ddei.flow.startevent", + "code": "start", + "desc": "bpmn中的StartEvent", + "from": "100103", + subject: "bpmn", + "define": { + width: 40, + height: 40, + bpmnBaseType: "Event", + bpmnType: "StartEvent", + bpmnSubType: 1, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "start", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.startevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "控件的主体显示文本", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.message", "value": 2 }, + { "text": "ddei.flow.property.ds.timer", "value": 3 }, + { "text": "ddei.flow.property.ds.condition", "value": 4 }, + { "text": "ddei.flow.property.ds.signal", "value": 5 }, + { "text": "ddei.flow.property.ds.multiple", "value": 6 }, + { "text": "ddei.flow.property.ds.parallel", "value": 7 }, + { "text": "ddei.flow.property.ds.escalation", "value": 8 }, + { "text": "ddei.flow.property.ds.error", "value": 9 }, + { "text": "ddei.flow.property.ds.compensation", "value": 10 } + ], + "itemStyle": { width: 100, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "notInterrupting", + "text": "ddei.flow.property.notInterrupting", + "desc": "非中断将不会终止运行,默认中断", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.startevent", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "bpmnSubType", "desc"] + } + ] + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnStartEventViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: startEvent + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$4 = { + name: "ddei-flow-bpmn-viewer-subprocess", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + data() { + return {}; + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + if (this.$refs["transactionBorderElement"]) { + this.$refs["transactionBorderElement"].style.borderColor = "green"; + } + } else { + this.$refs["divElement"].style.borderColor = ""; + if (this.$refs["transactionBorderElement"]) { + this.$refs["transactionBorderElement"].style.borderColor = ""; + } + } + } + } + }; + const bpmnSubprocessViewer_vue_vue_type_style_index_0_scoped_9fa95600_lang = ""; + const _hoisted_1$4 = { + key: 0, + ref: "transactionBorderElement", + class: "trans" + }; + const _hoisted_2$3 = { + key: 2, + ref: "content", + class: "content" + }; + const _hoisted_3$3 = { class: "content-header" }; + const _hoisted_4$3 = { class: "content-header-title" }; + const _hoisted_5$2 = { + key: 0, + class: "icon-ddei-flow content-header-locked", + "aria-hidden": "true" + }; + const _hoisted_6$2 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$2 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$2 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_9$1 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_10$1 = { + key: 4, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { + var _a, _b; + return vue.openBlock(), vue.createElementBlock("div", { + ref: "divElement", + class: vue.normalizeClass({ "ddei-flow-bpmn-viewer-subprocess": true, "ddei-flow-bpmn-viewer-subprocess-event": $props.model.bpmnSubType == 2 }) + }, [ + $props.model.bpmnSubType == 3 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, null, 512)) : vue.createCommentVNode("", true), + !$props.model.isExpand ? (vue.openBlock(), vue.createElementBlock("div", { + key: 1, + class: vue.normalizeClass({ "title": true, "title-transaction": ((_a = $props.model) == null ? void 0 : _a.bpmnSubType) == 3 }) + }, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : $props.model.bpmnSubType == 3 ? "ddei.flow.transsubprocess" : $props.model.bpmnSubType == 2 ? "ddei.flow.eventsubprocess" : "ddei.flow.subprocess")), 3)) : vue.createCommentVNode("", true), + $props.model.isExpand ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$3, [ + vue.createElementVNode("div", _hoisted_3$3, [ + vue.createElementVNode("div", _hoisted_4$3, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : ((_b = $props.model) == null ? void 0 : _b.bpmnSubType) == 3 ? "ddei.flow.transsubprocess" : $props.model.bpmnSubType == 2 ? "ddei.flow.eventsubprocess" : "ddei.flow.subprocess")), 1), + $props.model.lock == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$2, _cache[0] || (_cache[0] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-lock" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]), + _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "content-elements" }, null, -1)) + ], 512)) : vue.createCommentVNode("", true), + vue.createElementVNode("div", { + class: vue.normalizeClass({ "markers": true, "markers-transaction": $props.model.bpmnSubType == 3 }) + }, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$2, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$2, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$2, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_9$1, _cache[5] || (_cache[5] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + _cache[7] || (_cache[7] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sub-process-marker" }) + ], -1)), + $props.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_10$1, _cache[6] || (_cache[6] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-ad-hoc-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ], 2) + ], 2); + } + const BpmnSubProcessViewer = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-9fa95600"]]); + const subprocess = { + id: "1000091", + name: "ddei.flow.subprocess", + code: "subprocess", + desc: "bpmn中的SubProcess", + from: "1000011", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnSubType: 1, + bpmnType: "SubProcess", + allowIncludeModel: 1, + width: 300, + height: 200, + otherWidth: 110, + otherHeight: 70, + isExpand: 1, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "subprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.subprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "bpmnSubType", + "name": "ddei.type", + "desc": "控件的主体显示文本", + "controlType": "combox", + "dataType": "integer", + "dataSource": [ + { "text": "ddei.flow.property.ds.default", "value": 1 }, + { "text": "ddei.flow.property.ds.event", "value": 2 }, + { "text": "ddei.flow.property.ds.transaction", "value": 3 }, + { "text": "ddei.flow.property.ds.custom", "value": 4 } + ], + "itemStyle": { width: 100, height: 25, col: 2, row: 0 }, + "defaultValue": 1, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.subprocess", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "isLoop", "isTransaction", "multiInstance", "isParallel", "isCompensation", "desc"] + } + ] + } + ] + } + }, + viewer: BpmnSubProcessViewer, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: subprocess + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$3 = { + name: "ddei-flow-bpmn-viewer-user-task", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + }, + methods: { + refreshDragState(type) { + if (type == 1) { + this.$refs["divElement"].style.borderColor = "green"; + } else { + this.$refs["divElement"].style.borderColor = ""; + } + } + } + }; + const bpmnUserTaskViewer_vue_vue_type_style_index_0_scoped_0b07ef9d_lang = ""; + const _hoisted_1$3 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-user-task" + }; + const _hoisted_2$2 = { class: "title" }; + const _hoisted_3$2 = { class: "text" }; + const _hoisted_4$2 = { class: "markers" }; + const _hoisted_5$1 = { + key: 0, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_6$1 = { + key: 1, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_7$1 = { + key: 2, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + const _hoisted_8$1 = { + key: 3, + class: "icon-ddei-flow", + "aria-hidden": "true" + }; + function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [ + vue.createElementVNode("div", _hoisted_2$2, [ + _cache[0] || (_cache[0] = vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-user" }) + ], -1)), + vue.createElementVNode("div", _hoisted_3$2, vue.toDisplayString($props.editor.i18n($props.model.name ? $props.model.name : "ddei.flow.usertask")), 1) + ]), + vue.createElementVNode("div", _hoisted_4$2, [ + $props.model.isLoop == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_5$1, _cache[1] || (_cache[1] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-loop-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel != 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6$1, _cache[2] || (_cache[2] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-sequential-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.multiInstance == 1 && $props.model.isParallel == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_7$1, _cache[3] || (_cache[3] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-parallel-mi-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true), + $props.model.isCompensation == 1 ? (vue.openBlock(), vue.createElementBlock("svg", _hoisted_8$1, _cache[4] || (_cache[4] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-compensation-marker" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]) + ], 512); + } + const BpmnUserTaskViewer = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3], ["__scopeId", "data-v-0b07ef9d"]]); + const userTask = { + id: "1000011", + name: "ddei.flow.usertask", + code: "user_task", + desc: "bpmn中的UserTask", + from: "100002", + subject: "bpmn", + define: { + bpmnBaseType: "Activity", + bpmnType: "UserTask", + width: 110, + height: 70, + border: { + round: 5 + }, + ext: { + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "user_task", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "任务的名称", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.usertask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "humanPerformer", + "name": "ddei.flow.property.humanperformer", + "desc": "任务的执行人", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.property.humanperformer", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "potentialOwner", + "name": "ddei.flow.property.potentialowner", + "desc": "任务的候选人", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.property.potentialowner", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "isLoop", + "name": "dde.flow.loop", + "desc": "dde.flow.loop", + "controlType": "switch-checkbox", + "dataType": "integer", + "hiddenTitle": true, + "display": "column", + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "multiInstance", + "name": "ddei.flow.multiins", + "desc": "执行人是多个实例", + "controlType": "switch-checkbox", + "dataType": "integer", + "defaultValue": 0, + "hiddenTitle": true, + "display": "column", + "type": [1, 2], + //类别,1图形,2业务,3事件 + "cascadeDisplay": { 0: { hidden: ["isParallel"] }, 1: { show: ["isParallel"] }, default: { hidden: ["isParallel"] }, empty: { hidden: ["isParallel"] } } + }, + { + "code": "isParallel", + "name": "ddei.flow.parallel", + "desc": "多个执行人是否并行执行", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "isCompensation", + "name": "ddei.flow.compensation", + "desc": "是否为补偿", + "controlType": "switch-checkbox", + "dataType": "integer", + "display": "column", + "hiddenTitle": true, + "defaultValue": 0, + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.usertask", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "border.color", + "name": "ddei.color", + "desc": "图形的边框显示颜色,在高级设置中,可以分别设置不同方向边框的样式", + "controlType": "color-combo", + "dataType": "string", + "defaultValue": "black" + } + ], + groups: [ + { + "name": "ddei.data", + icon: "icon-a-ziyuan409", + subGroups: [ + { + "name": "ddei.basic", + attrs: ["code", "name", "isLoop", "multiInstance", "isParallel", "isCompensation", "desc"] + } + ] + } + ] + } + }, + filters: { + LINE_OBI_FILTER: lineObiCheck + }, + viewer: BpmnUserTaskViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: userTask + }, Symbol.toStringTag, { value: "Module" })); + const _sfc_main$2 = { + name: "ddei-flow-bpmn-viewer-user", + props: { + model: { + type: Object, + default: null + }, + editor: { + type: Object, + default: null + } + } + }; + const bpmnUserViewer_vue_vue_type_style_index_0_scoped_9e90d175_lang = ""; + const _hoisted_1$2 = { + ref: "divElement", + class: "ddei-flow-bpmn-viewer-user", + title: "用户" + }; + function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { + return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, _cache[0] || (_cache[0] = [ + vue.createElementVNode("svg", { + class: "icon-ddei-flow", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-user" }) + ], -1) + ]), 512); + } + const BpmnUserViewer = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-9e90d175"]]); + const user = { + id: "1000504", + name: "ddei.flow.user", + code: "user", + desc: "bpmn中的用户对象", + from: "100103", + subject: "bpmn", + define: { + width: 30, + height: 45, + bpmnBaseType: "Other", + bpmnType: "User", + name: "ddei.flow.user", + ext: { + sample: { + //依附图形的初始化配置,如果产生依附图形,则会在配置的位置生成 + depPos: { + type: 8 + //位置5中心点,6789上右下左 + }, + depProps: { + "8": "name" + //映射属性 + } + }, + attrs: [ + { + "code": "code", + "name": "ddei.code", + "desc": "编码,一般用于业务标识", + "controlType": "text", + "dataType": "string", + "defaultValue": "user", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "name", + "name": "ddei.name", + "desc": "名称,一般用于显示", + "controlType": "text", + "dataType": "string", + "defaultValue": "ddei.flow.user", + "type": [1, 2] + //类别,1图形,2业务,3事件 + }, + { + "code": "desc", + "name": "ddei.description", + "desc": "备注说明", + "controlType": "textarea", + "dataType": "string", + "defaultValue": "ddei.flow.user", + "type": [1, 2] + //类别,1图形,2业务,3事件 + } + ] + } + }, + viewer: BpmnUserViewer, + icon: ``, + EVENT_MOUSE_MOVE_IN_CONTROL: showSettingButton + }; + const __vite_glob_0_29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: user + }, Symbol.toStringTag, { value: "Module" })); + const bpmn = { + "id": "1000", + "name": "ddei.flow.groups.bpmn", + "code": "bpmn-flow-shapes", + "desc": "ddei.flow.groups.bpmndesc", + "orderNo": 1, + "subject": "flow", + //当前分组下所有控件 + "controls": [ + { + "id": "1000001", + "orderNo": 1 + }, + { + "id": "1000004", + "orderNo": 2 + }, + { + "id": "1000002", + "orderNo": 3 + }, + { + "id": "1000005", + "orderNo": 4 + }, + { + "id": "1000003", + "orderNo": 5 + }, + { + "id": "1000011", + "orderNo": 11 + }, + { + "id": "1000021", + "orderNo": 21 + }, + { + "id": "1000031", + "orderNo": 31 + }, + { + "id": "1000041", + "orderNo": 41 + }, + { + "id": "1000051", + "orderNo": 51 + }, + { + "id": "1000061", + "orderNo": 61 + }, + { + "id": "1000071", + "orderNo": 71 + }, + { + "id": "1000081", + "orderNo": 81 + }, + { + "id": "1000091", + "orderNo": 91 + }, + { + "id": "1000101", + "orderNo": 101 + }, + { + "id": "1000102", + "orderNo": 102 + }, + { + "id": "1000201", + "orderNo": 201 + }, + { + "id": "1000202", + "orderNo": 202 + }, + { + "id": "1000203", + "orderNo": 203 + }, + { + "id": "1000204", + "orderNo": 204 + }, + { + "id": "1000205", + "orderNo": 205 + }, + { + "id": "1000401", + "orderNo": 401 + }, + { + "id": "1000501", + "orderNo": 501 + }, + { + "id": "1000504", + "orderNo": 504 + }, + { + "id": "1000505", + "orderNo": 505 + }, + { + "id": "1000506", + "orderNo": 506 + }, + { + "id": "1000507", + "orderNo": 507 + }, + { + "id": "1000601", + "orderNo": 601 + }, + { + "id": "1000701", + "orderNo": 701 + } + ] + }; + const __vite_glob_1_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + default: bpmn + }, Symbol.toStringTag, { value: "Module" })); + const control_ctx = /* @__PURE__ */ Object.assign({ "./bpmn/Inclusive-gateway.ts": __vite_glob_0_0, "./bpmn/boundary-event.ts": __vite_glob_0_1, "./bpmn/businessrule-task.ts": __vite_glob_0_2, "./bpmn/callactivity-task.ts": __vite_glob_0_3, "./bpmn/choreography-subprocess.ts": __vite_glob_0_4, "./bpmn/choreography-task.ts": __vite_glob_0_5, "./bpmn/comment.ts": __vite_glob_0_6, "./bpmn/complex-gateway.ts": __vite_glob_0_7, "./bpmn/data-object.ts": __vite_glob_0_8, "./bpmn/datastore.ts": __vite_glob_0_9, "./bpmn/datastore1.ts": __vite_glob_0_10, "./bpmn/end-event.ts": __vite_glob_0_11, "./bpmn/eventbased-gateway.ts": __vite_glob_0_12, "./bpmn/exclusive-gateway.ts": __vite_glob_0_13, "./bpmn/group.ts": __vite_glob_0_14, "./bpmn/intermediate-catch-event.ts": __vite_glob_0_15, "./bpmn/intermediate-throw-event.ts": __vite_glob_0_16, "./bpmn/manual-task.ts": __vite_glob_0_17, "./bpmn/message.ts": __vite_glob_0_18, "./bpmn/parallel-gateway.ts": __vite_glob_0_19, "./bpmn/receive-task.ts": __vite_glob_0_20, "./bpmn/script-task.ts": __vite_glob_0_21, "./bpmn/send-task.ts": __vite_glob_0_22, "./bpmn/sequence-flow-icon.ts": __vite_glob_0_23, "./bpmn/sequence-flow.ts": __vite_glob_0_24, "./bpmn/service-task.ts": __vite_glob_0_25, "./bpmn/start-event.ts": __vite_glob_0_26, "./bpmn/subprocess.ts": __vite_glob_0_27, "./bpmn/user-task.ts": __vite_glob_0_28, "./bpmn/user.ts": __vite_glob_0_29 }); + const group_ctx = /* @__PURE__ */ Object.assign({ "./groups/bpmn.ts": __vite_glob_1_0 }); + const _DDeiFlowControls = class _DDeiFlowControls extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "controls", /* @__PURE__ */ new Map()); + } + getControls(editor) { + let extOptions = this.getOptions(); + let controls = /* @__PURE__ */ new Map(); + let controls1 = new Map(editor.controls); + for (let i in control_ctx) { + let control = control_ctx[i].default; + if (control) { + let c = ddeiEditor.cloneDeep(control); + controls.set(control.id, c); + controls1.set(control.id, c); + if (extOptions && extOptions[control.id]) { + for (let x in extOptions[control.id]) { + c.define[x] = extOptions[control.id][x]; + } + } + } + } + controls.forEach((control) => { + ddeiEditor.loadControlByFrom(controls1, control); + }); + this.controls = controls; + return controls; + } + getGroups(editor) { + if (!this.controls) { + this.getControls(editor); + } + let groups = []; + for (let path in group_ctx) { + groups.push(group_ctx[path].default); + } + ddeiEditor.loadAndSortGroup(groups, this.controls); + return groups; + } + static modify(fn) { + return _DDeiFlowControls.defaultIns.modify(fn); + } + static configuration(options) { + if (options) { + let controls = new _DDeiFlowControls(options); + return controls; + } + return _DDeiFlowControls; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowControls, "defaultIns", new _DDeiFlowControls(null)); + let DDeiFlowControls = _DDeiFlowControls; + const _DDeiFlowLifeCycle = class _DDeiFlowLifeCycle extends ddeiEditor.DDeiLifeCycle { + constructor() { + super(...arguments); + __publicField(this, "name", "ddei-flow-lifecycle"); + /** + * 鼠标移动进入控件的钩子,该插件由它来进行整体分发 + */ + __publicField(this, "EVENT_MOUSE_MOVE_IN_CONTROL", new ddeiEditor.DDeiFuncData("ddei-flow-mouse-move-in-control", 1, (operateType, data2, ddInstance, evt) => { + return this.mouseMoveInControl(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_MOUSE_OPERATING", new ddeiEditor.DDeiFuncData("ddei-flow-hidden-eles", 1, (operateType, data2, ddInstance, evt) => { + return this.mouseOperating(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_DRAGING", new ddeiEditor.DDeiFuncData("ddei-flow-control-draging", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDraging(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_DRAG_AFTER", new ddeiEditor.DDeiFuncData("ddei-flow-control-drag-after", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDragAfter(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_CREATE_AFTER", new ddeiEditor.DDeiFuncData("ddei-flow-control-create-after", 1, (operateType, data2, ddInstance, evt) => { + return this.controlCreateAfter(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_CREATE_BEFORE", new ddeiEditor.DDeiFuncData("ddei-flow-control-create-before", 1, (operateType, data2, ddInstance, evt) => { + return this.controlCreateBefore(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_COPY_BEFORE", new ddeiEditor.DDeiFuncData("ddei-flow-copy-before", 1, (operateType, data2, ddInstance, evt) => { + return this.controlCopyBefore(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_DRAG_BEFORE", new ddeiEditor.DDeiFuncData("ddei-flow-control-drag-before", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDragBefore(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_ROTATE_BEFORE", new ddeiEditor.DDeiFuncData("ddei-flow-control-rotate-before", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDragBefore(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CLOSE_FILE_AFTER", new ddeiEditor.DDeiFuncData("ddei-flow-hidden-eles", 1, (operateType, data2, ddInstance, evt) => { + return this.hiddenTempElements(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_DEL_AFTER", new ddeiEditor.DDeiFuncData("ddei-flow-control-del-after", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDelAfter(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_SELECT_BEFORE", new ddeiEditor.DDeiFuncData("ddei-flow-control-select-before", 1, (operateType, data2, ddInstance, evt) => { + return this.controlSelectBefore(operateType, data2, ddInstance, evt); + })); + __publicField(this, "EVENT_CONTROL_DBL_CLICK", new ddeiEditor.DDeiFuncData("ddei-flow-control-dbl-click", 1, (operateType, data2, ddInstance, evt) => { + return this.controlDblClick(operateType, data2, ddInstance, evt); + })); + __publicField(this, "dragModels", null); + /** + * 鼠标移动进入画布的钩子 + */ + __publicField(this, "EVENT_MOUSE_MOVE_IN_LAYER", new ddeiEditor.DDeiFuncData("ddei-flow-mouse-move-in-control", 1, (operateType, data2, ddInstance, evt) => { + return this.mouseMoveInLayer(operateType, data2, ddInstance, evt); + })); + } + /** + * 控件双击 + * @param operateType + * @param data + * @param ddInstance + * @param evt + * @returns + */ + controlDblClick(operateType, data2, ddInstance, evt) { + if ((data2 == null ? void 0 : data2.models) && data2.models.length > 0) { + let model = data2.models[0]; + if (model.bpmnBaseType == "Event" || model.bpmnBaseType == "Activity" || model.bpmnBaseType == "Gateway" || model.bpmnBaseType == "Group") { + let result = new ddeiEditor.DDeiFuncCallResult(); + result.state = -1; + return result; + } + } + } + /** + * 拖拽中 + */ + controlDraging(operateType, data2, ddInstance, evt) { + var _a, _b; + if (this.markHiddenPanel) { + let toolBoxs = document.getElementsByClassName("ddei-core-panel-toolbox-simple"); + for (let i = 0; i < toolBoxs.length; i++) { + toolBoxs[i].style.display = "none"; + } + let topMenus = document.getElementsByClassName("ddei-core-panel-topmenu-simple"); + for (let i = 0; i < topMenus.length; i++) { + topMenus[i].style.display = "none"; + } + delete this.markHiddenPanel; + } + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let models = [...data2.models]; + if ((models == null ? void 0 : models.length) == 1 && (models[0].bpmnType == "StartEvent" || models[0].bpmnType == "BoundaryEvent")) { + let evtModel = data2.models[0]; + let activities = editor.activities; + let attachModel = null; + for (let n = 0; n < activities.length; n++) { + let subModel = activities[n]; + let k = editor.viewerMap.get(subModel.id); + if (!attachModel && evtModel.isInRect(subModel.essBounds.x, subModel.essBounds.y, subModel.essBounds.x + subModel.essBounds.width, subModel.essBounds.y + subModel.essBounds.height) && (Math.abs(subModel.essBounds.x - evtModel.cpv.x) <= 3 || Math.abs(subModel.essBounds.x1 - evtModel.cpv.x) <= 3 || Math.abs(subModel.essBounds.y - evtModel.cpv.y) <= 3 || Math.abs(subModel.essBounds.y1 - evtModel.cpv.y) <= 3)) { + attachModel = subModel; + k.component.ctx.refreshDragState(1); + } else { + k.component.ctx.refreshDragState(0); + } + } + } + if (((_a = editor.desigingSubProecsses) == null ? void 0 : _a.length) > 0) { + let model = models[0]; + for (let i = 0; i < ((_b = editor.desigingSubProecsses) == null ? void 0 : _b.length); i++) { + let containerModel = editor.desigingSubProecsses[i]; + let isIn = false; + if (model.isInRect(containerModel.essBounds.x, containerModel.essBounds.y, containerModel.essBounds.x + containerModel.essBounds.width, containerModel.essBounds.y + containerModel.essBounds.height)) { + let k = editor.viewerMap.get(containerModel.id); + if (!k.component.ctx.isInRect || k.component.ctx.isInRect && k.component.ctx.isInRect(model)) { + k.component.ctx.refreshDragState(1); + isIn = true; + } + } + if (!isIn) { + let k = editor.viewerMap.get(containerModel.id); + k.component.ctx.refreshDragState(0); + } + } + } + this.hiddenTempElements(operateType, data2, ddInstance, evt); + } + } + controlCopyBefore(operateType, data2, ddInstance, evt) { + var _a; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + if (((_a = data2.models) == null ? void 0 : _a.size) > 0) { + let lines = []; + data2.models.forEach((model) => { + if (model.allowIncludeModel) { + let models = getIncludeModels(model); + models.forEach((m) => { + data2.models.set(m.id, m); + let links2 = m.stage.getSourceModelLinks(m.id); + links2 == null ? void 0 : links2.forEach((lk) => { + if (lines.indexOf(lk.dm) == -1) { + lines.push(lk.dm); + } else { + if (!data2.models.has(lk.dm.id)) { + data2.models.set(lk.dm.id, lk.dm); + } + } + }); + }); + let links = model.stage.getSourceModelLinks(model.id); + links == null ? void 0 : links.forEach((lk) => { + if (lines.indexOf(lk.dm) == -1) { + lines.push(lk.dm); + } else { + if (!data2.models.has(lk.dm.id)) { + data2.models.set(lk.dm.id, lk.dm); + } + } + }); + } + }); + } + } + } + controlCreateBefore(operateType, data2, ddInstance, evt) { + var _a; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + if (((_a = data2.models) == null ? void 0 : _a.length) > 0) { + this.markHiddenPanel = true; + this.dragModels = data2.models; + this.resetSubProcesses(data2, ddInstance); + } + } + } + /** + * 修改模型ID + * @param stage 舞台 + * @param item 控件 + * @return 新的ID + */ + changeModelId(stage, item) { + let newId = ""; + while (true) { + stage.idIdx++; + if (item.id.indexOf("_") != -1) { + newId = item.id.substring(0, item.id.lastIndexOf("_")) + "_" + stage.idIdx; + } else { + newId = item.id + "_cp_" + stage.idIdx; + } + if (!stage.getModelById(newId)) { + break; + } + } + item.oldId = item.id; + item.id = newId; + item.unicode = ddeiEditor.DDeiUtil.getUniqueCode(); + let accuContainer = item.getAccuContainer(); + if ((accuContainer == null ? void 0 : accuContainer.baseModelType) == "DDeiContainer") { + let midList = []; + let models = /* @__PURE__ */ new Map(); + accuContainer.midList.forEach((mid) => { + let model = accuContainer.models.get(mid); + let modelNewId = this.changeModelId(stage, model); + models.set(modelNewId, model); + midList.push(modelNewId); + }); + accuContainer.models = models; + accuContainer.midList = midList; + } else if ((accuContainer == null ? void 0 : accuContainer.baseModelType) == "DDeiTable") { + for (let i = 0; i < accuContainer.rows; i++) { + let rowObj = accuContainer.rows[i]; + for (let j = 0; j < rowObj.length; j++) { + let accuContainer2 = rowObj[j].getAccuContainer(); + let midList = []; + let models = /* @__PURE__ */ new Map(); + accuContainer2.midList.forEach((mid) => { + let model = accuContainer2.models.get(mid); + let modelNewId = this.changeModelId(stage, model); + models.set(modelNewId, model); + midList.push(modelNewId); + }); + accuContainer2.models = models; + accuContainer2.midList = midList; + } + } + } + return newId; + } + /** + * 拖拽前 + */ + controlDragBefore(operateType, data2, ddInstance, evt) { + var _a; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + if (((_a = data2.models) == null ? void 0 : _a.length) > 0) { + let toolBoxs = document.getElementsByClassName("ddei-core-panel-toolbox-simple"); + for (let i = 0; i < toolBoxs.length; i++) { + toolBoxs[i].style.display = "none"; + } + let topMenus = document.getElementsByClassName("ddei-core-panel-topmenu-simple"); + for (let i = 0; i < topMenus.length; i++) { + topMenus[i].style.display = "none"; + } + data2.models.forEach((model) => { + let models = getIncludeModels(model); + models.forEach((m) => { + data2.models.push(m); + }); + }); + this.dragModels = [...data2.models]; + this.resetSubProcesses(data2, ddInstance); + } + } + } + resetSubProcesses(data2, ddInstance) { + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let layer = data2.models[0].layer ? data2.models[0].layer : editor.ddInstance.stage.layers[editor.ddInstance.stage.layerIndex]; + let subModels = layer.getSubModels(null, 20); + editor.desigingSubProecsses = []; + editor.activities = []; + subModels == null ? void 0 : subModels.forEach((mds) => { + if (mds.allowIncludeModel) { + if (data2.models.indexOf(mds) == -1) { + if (!mds.lock && mds.isExpand) { + editor.desigingSubProecsses.push(mds); + } + } + } + if (mds.bpmnBaseType == "Activity") { + editor.activities.push(mds); + } + }); + editor.desigingSubProecsses.sort((a, b) => { + if ((a == null ? void 0 : a.render) && (b == null ? void 0 : b.render)) { + return a.render.tempZIndex - b.render.tempZIndex; + } + return 0; + }); + editor.activities.sort((a, b) => { + if ((a == null ? void 0 : a.render) && (b == null ? void 0 : b.render)) { + return a.render.tempZIndex - b.render.tempZIndex; + } + return 0; + }); + } + modelsToTreeRoot(models, stage) { + let treeRoot = []; + let cachedModel = {}; + models.forEach((model) => { + if (model.baseModelType != "DDeiLine") { + if (model.pModel == model.layer && !model.includePModelId) { + if (treeRoot.indexOf(model)) { + treeRoot.push(model); + } + } else if (model.pModel != model.layer && !model.includePModelId) { + if (models.indexOf(model.pModel) == -1) { + if (treeRoot.indexOf(model)) { + treeRoot.push(model); + } + } + } else if (model.includePModelId) { + let includePModelId = model.includePModelId; + let include = false; + while (includePModelId) { + let ipm = cachedModel[includePModelId]; + if (!ipm) { + ipm = stage.getModelById(includePModelId); + cachedModel[includePModelId] = ipm; + } + if (ipm) { + if (models.indexOf(ipm) != -1) { + include = true; + break; + } + includePModelId = ipm.includePModelId; + } else { + break; + } + } + if (!include) { + if (treeRoot.indexOf(model)) { + treeRoot.push(model); + } + } + } + } + }); + return treeRoot; + } + changeNodeZIndexDeep(model, parentNode, stage) { + var _a; + let len = parentNode.includeModels.length; + let oldZindex = model.zIndex ? model.zIndex : len; + model.zIndex = parentNode.zIndex ? parentNode.zIndex + oldZindex : oldZindex; + (_a = model.includeModels) == null ? void 0 : _a.forEach((imid) => { + let imodel = stage.getModelById(imid); + if (imodel) { + this.changeNodeZIndexDeep(imodel, model, stage); + } + }); + let links = stage.getSourceModelLinks(model.id); + links == null ? void 0 : links.forEach((link) => { + this.changeNodeZIndexDeep(link.dm, parentNode, stage); + }); + } + controlCreateAfter(operateType, data2, ddInstance, evt) { + var _a; + (_a = this.dragModels) == null ? void 0 : _a.forEach((dmodel) => { + var _a2; + if (dmodel.includePModelId) { + for (let k = 0; k < ((_a2 = this.dragModels) == null ? void 0 : _a2.length); k++) { + if (this.dragModels[k].oldId == dmodel.includePModelId) { + let subProcessModel = this.dragModels[k]; + dmodel.includePModelId = subProcessModel.id; + let oldIndex = subProcessModel.includeModels.indexOf(dmodel.oldId); + if (oldIndex != -1) { + subProcessModel.includeModels.splice(oldIndex, 1, dmodel.id); + } + break; + } + } + } + }); + this.controlDragAfter(operateType, data2, ddInstance, evt); + } + /** + * 拖拽后 + */ + controlDragAfter(operateType, data2, ddInstance, evt) { + var _a, _b, _c, _d, _e, _f, _g; + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let attachModel = null; + if (((_a = data2.models) == null ? void 0 : _a.length) == 1 && (data2.models[0].bpmnType == "StartEvent" || data2.models[0].bpmnType == "BoundaryEvent")) { + let evtModel = data2.models[0]; + let activities = editor.activities; + let stage = evtModel.stage; + let id = evtModel.id; + if (id.indexOf("_shadow") != -1) { + id = id.substring(0, id.indexOf("_shadow")); + evtModel = stage.getModelById(id); + } + if (evtModel.attachPModel) { + let oldattachPModel = stage.getModelById(evtModel.attachPModel); + (_c = oldattachPModel.attachModels) == null ? void 0 : _c.splice((_b = oldattachPModel.attachModels) == null ? void 0 : _b.indexOf(evtModel.id)); + delete evtModel.attachPModel; + } + for (let n = 0; n < activities.length; n++) { + let subModel = activities[n]; + let k = editor.viewerMap.get(subModel.id); + if (!attachModel && evtModel.isInRect(subModel.essBounds.x, subModel.essBounds.y, subModel.essBounds.x + subModel.essBounds.width, subModel.essBounds.y + subModel.essBounds.height) && (Math.abs(subModel.essBounds.x - evtModel.cpv.x) <= 3 || Math.abs(subModel.essBounds.x1 - evtModel.cpv.x) <= 3 || Math.abs(subModel.essBounds.y - evtModel.cpv.y) <= 3 || Math.abs(subModel.essBounds.y1 - evtModel.cpv.y) <= 3)) { + evtModel.attachPModel = subModel.id; + if (!subModel.attachModels) { + subModel.attachModels = []; + } + subModel.attachModels.push(evtModel.id); + attachModel = subModel; + } + k.component.ctx.refreshDragState(0); + } + } + if (((_d = editor.desigingSubProecsses) == null ? void 0 : _d.length) > 0 && ((_e = this.dragModels) == null ? void 0 : _e.length) > 0) { + let dragParentActiveIds = []; + let dragContainerModel = null; + let model = this.dragModels[0]; + let stage = ddInstance.stage; + for (let i = 0; i < editor.desigingSubProecsses.length; i++) { + let containerModel = editor.desigingSubProecsses[i]; + let k = editor.viewerMap.get(containerModel.id); + if (attachModel != containerModel && model.isInRect(containerModel.essBounds.x, containerModel.essBounds.y, containerModel.essBounds.x + containerModel.essBounds.width, containerModel.essBounds.y + containerModel.essBounds.height)) { + if (!k.component.ctx.isInRect || k.component.ctx.isInRect && k.component.ctx.isInRect(model)) { + dragContainerModel = containerModel; + } + } + k.component.ctx.refreshDragState(0); + } + let pid; + if (dragContainerModel) { + pid = dragContainerModel.id; + if (pid.indexOf("_shadow") != -1) { + pid = pid.substring(0, pid.indexOf("_shadow")); + } + } + let dmodels = []; + (_f = this.dragModels) == null ? void 0 : _f.forEach((dm) => { + let id = dm.id; + if (id.indexOf("_shadow") != -1) { + id = id.substring(0, id.indexOf("_shadow")); + dmodels.push(stage.getModelById(id)); + } else { + dmodels.push(dm); + } + }); + let treeRoots = this.modelsToTreeRoot(dmodels, stage); + treeRoots == null ? void 0 : treeRoots.forEach((dmodel) => { + var _a2; + if (dmodel.depModel) { + return; + } + let id = dmodel.id; + if (id.indexOf("_shadow") != -1) { + id = id.substring(0, id.indexOf("_shadow")); + } + let dSourceModel = stage.getModelById(id); + if (dSourceModel) { + if (dSourceModel.includePModelId) { + let includePModel = null; + for (let n = 0; n < editor.desigingSubProecsses.length; n++) { + if (editor.desigingSubProecsses[n].id == dSourceModel.includePModelId) { + includePModel = editor.desigingSubProecsses[n]; + break; + } + } + if (includePModel && includePModel.includeModels.indexOf(id) != -1) { + includePModel.includeModels.splice(includePModel.includeModels.indexOf(id), 1); + } + dragParentActiveIds.push(dSourceModel.includePModelId); + delete dSourceModel.includePModelId; + delete dSourceModel.render.tempZIndex; + } + if (dragContainerModel) { + if (!dragContainerModel.includeModels) { + dragContainerModel.includeModels = []; + } + if (dragContainerModel.includeModels.indexOf(id) == -1) { + dragContainerModel.includeModels.push(id); + dSourceModel.includePModelId = pid; + this.changeNodeZIndexDeep(dSourceModel, dragContainerModel, stage); + } + if (dragParentActiveIds.indexOf(pid) == -1) { + dragParentActiveIds.push(pid); + } + } + } + (_a2 = dmodel.pModel) == null ? void 0 : _a2.resortModelByZIndex(); + }); + updateCallActivityView(stage, model.layer, dragParentActiveIds); + } + editor.bus.push("refresh-shape"); + editor.bus.executeAll(); + this.dragModels = null; + if (((_g = data2.models) == null ? void 0 : _g.length) > 0) { + let data1 = ddeiEditor.clone(data2); + data1.model = data2.models[0]; + changeSettingButtonPos(operateType, data1, ddInstance); + } + let toolBoxs = document.getElementsByClassName("ddei-core-panel-toolbox-simple"); + for (let i = 0; i < toolBoxs.length; i++) { + toolBoxs[i].style.display = ""; + } + let topMenus = document.getElementsByClassName("ddei-core-panel-topmenu-simple"); + for (let i = 0; i < topMenus.length; i++) { + topMenus[i].style.display = ""; + } + } + } + /** + * 鼠标操作时、隐藏临时按钮 + */ + hiddenTempElements(operateType, data2, ddInstance, evt) { + if (ddInstance && ddInstance["AC_DESIGN_EDIT"]) { + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (operateType == "DRAG" || operateType == "SCROLL_WORKING" || operateType == "CHANGE_RATIO" || operateType == "CHANGE_WPV" || operateType == "CHANGE_BOUNDS" || operateType == "CHANGE_ROTATE") { + ddeiEditor.DDeiEditorUtil.hiddenDialog(editor, "ddei-flow-setting-button-dialog"); + ddeiEditor.DDeiEditorUtil.hiddenDialog(editor, "ddei-flow-element-setting-dialog"); + } + } + } + mouseOperating(operateType, data2, ddInstance, evt) { + return this.hiddenTempElements(operateType, data2, ddInstance, evt); + } + static configuration(options) { + if (options && Object.keys(options).length !== 0) { + let lcs = new _DDeiFlowLifeCycle(options); + return lcs; + } + return _DDeiFlowLifeCycle; + } + static modify(fn) { + return _DDeiFlowLifeCycle.defaultIns.modify(fn); + } + mouseMoveInControl(operate, data2, ddInstance, evt) { + var _a, _b; + let models = data2 == null ? void 0 : data2.models; + if ((models == null ? void 0 : models.length) > 0) { + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempChooseCallActivity) { + if (models[0] != editor.tempChooseCallActivity && editor.tempCallActivity != models[0]) { + if (models[0].id != editor.tempChooseCallActivity.id && (models[0].bpmnBaseType == "Activity" || models[0].bpmnBaseType == "Event")) { + (_b = (_a = editor.tempCallActivity) == null ? void 0 : _a.render) == null ? void 0 : _b.clearCachedValue(); + editor.tempCallActivity = models[0]; + models[0].render.setCachedValue("border.color", "blue"); + editor.bus.push("refresh-shape"); + editor.bus.executeAll(); + } + } + } else { + for (let i = 0; i < models.length; i++) { + if (models[i]) { + let data1 = ddeiEditor.clone(data2); + data1.model = models[i]; + let rs = showSettingButton(operate, data1, ddInstance); + if (rs && (rs.state == 2 || rs.state == -2)) { + break; + } + } + } + } + } + } + mouseMoveInLayer(operate, data2, ddInstance, evt) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor) { + if (editor.tempCallActivity) { + editor.tempCallActivity.render.clearCachedValue(); + delete editor.tempCallActivity; + } + if (((_a = editor.ddInstance.stage.selectedModels) == null ? void 0 : _a.size) > 0) { + return; + } + let settingBtnEle = document.getElementById(editor.id + "_ddei-flow-setting-button-dialog"); + let settingDialogEle = document.getElementById(editor.id + "_ddei-flow-element-setting-dialog"); + if (settingBtnEle && !settingDialogEle && !(evt.target == settingBtnEle || ((_b = evt.target) == null ? void 0 : _b.parentElement) == settingBtnEle || ((_c = evt.target.parentElement) == null ? void 0 : _c.parentElement) == settingBtnEle || ((_e = (_d = evt.target.parentElement) == null ? void 0 : _d.parentElement) == null ? void 0 : _e.parentElement) == settingBtnEle)) { + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-setting-button-dialog"); + } else if (settingDialogEle && !settingBtnEle && !(evt.target == settingDialogEle || ((_f = evt.target) == null ? void 0 : _f.parentElement) == settingDialogEle || ((_g = evt.target.parentElement) == null ? void 0 : _g.parentElement) == settingDialogEle)) { + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + } else if (settingBtnEle && settingDialogEle && !(evt.target == settingBtnEle || ((_h = evt.target) == null ? void 0 : _h.parentElement) == settingBtnEle || ((_i = evt.target.parentElement) == null ? void 0 : _i.parentElement) == settingBtnEle || ((_k = (_j = evt.target.parentElement) == null ? void 0 : _j.parentElement) == null ? void 0 : _k.parentElement) == settingBtnEle) && !(evt.target == settingDialogEle || ((_l = evt.target) == null ? void 0 : _l.parentElement) == settingDialogEle || ((_m = evt.target.parentElement) == null ? void 0 : _m.parentElement) == settingDialogEle)) { + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-setting-button-dialog"); + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + } + } + } + controlDelAfter(operateType, data2, ddInstance, evt) { + let result = new ddeiEditor.DDeiFuncCallResult(); + result.state = 1; + let models = data2.models; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + let stage = ddInstance.stage; + models.forEach((model) => { + let includeModels = getIncludeModels(model); + includeModels.forEach((lms) => { + stage.removeModel(lms, true); + }); + }); + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-setting-button-dialog"); + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + return result; + } + controlSelectBefore(operateType, data2, ddInstance, evt) { + var _a, _b; + let result = new ddeiEditor.DDeiFuncCallResult(); + result.state = 1; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor.tempChooseCallActivity) { + if (editor.tempCallActivity) { + editor.tempChooseCallActivity.activityId = editor.tempCallActivity.id; + editor.tempChooseCallActivity.destroyRender(); + editor.tempChooseCallActivity.initRender(); + } + (_b = (_a = editor.tempCallActivity) == null ? void 0 : _a.render) == null ? void 0 : _b.clearCachedValue(); + delete editor.tempCallActivity; + delete editor.tempChooseCallActivity; + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + result.state = -1; + } + return result; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowLifeCycle, "defaultIns", new _DDeiFlowLifeCycle()); + let DDeiFlowLifeCycle = _DDeiFlowLifeCycle; + const _DDeiFlowLifeCycles = class _DDeiFlowLifeCycles extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "type", "package"); + __publicField(this, "lifecycles", DDeiFlowLifeCycle); + } + getLifeCyclies(editor) { + if (ddeiEditor.DDeiPluginBase.isSubclass(this.lifecycles, ddeiEditor.DDeiPluginBase)) { + return this.lifecycles.defaultIns.getLifeCyclies(editor); + } else if (this.lifecycles instanceof ddeiEditor.DDeiPluginBase) { + return this.lifecycles.getLifeCyclies(editor); + } + } + static modify(fn) { + return _DDeiFlowLifeCycles.defaultIns.modify(fn); + } + static configuration(options) { + let core = new _DDeiFlowLifeCycles(options); + core.lifecycles = core.lifecycles.configuration(options); + return core; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowLifeCycles, "defaultIns", new DDeiFlowLifeCycle(null)); + let DDeiFlowLifeCycles = _DDeiFlowLifeCycles; + const DialogBase = { + props: { + editor: { + type: ddeiEditor.DDeiEditor, + default: null + } + }, + data: function() { + return { + forceRefresh: false + }; + }, + methods: { + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + } + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + } + }; + const _sfc_main$1 = { + name: "ddei-flow-element-setting-dialog", + mixins: [DialogBase], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-flow-element-setting-dialog", + model: null, + bpmnSubTypeDataSource: null, + bpmnSubTypeIndex: -1, + startPointTypeDataSource: null, + startPointTypeIndex: -1, + endPointTypeDataSource: null, + endPointTypeIndex: -1, + lineTypeDataSource: null, + lineTypeIndex: -1, + timeTypeIndex: -1, + timeTypeDataSource: [ + { text: "ddei.flow.property.ds.timedate", value: "timeDate" }, + { text: "ddei.flow.property.ds.timeduration", value: "timeDuration" }, + { text: "ddei.flow.property.ds.timecron", value: "CRON" } + ], + dataTypeDataSource: null, + dataTypeIndex: -1 + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + this.refreshData(); + }, + methods: { + modelChangeProperty(model, property) { + var _a, _b; + if (!model || !property) { + return; + } + let mds = [model]; + if (this.editBefore && !this.editBefore( + ddeiEditor.DDeiEnumOperateType.EDIT, + mds, + (_a = this.attrDefine) == null ? void 0 : _a.code, + this.editor.ddInstance, + null + )) { + return; + } + let paths = [property]; + this.editor.ddInstance.stage.selectedModels.forEach((element) => { + this.editor.bus.push( + ddeiEditor.DDeiEnumBusCommandType.ModelChangeValue, + { + mids: [element.id], + paths, + value: model[property] + }, + null, + true + ); + }); + this.editor.bus.push(ddeiEditor.DDeiEditorEnumBusCommandType.RefreshEditorParts, { + parts: ["topmenu"] + }); + this.editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + this.editor.bus.executeAll(); + ddeiEditor.DDeiUtil.invokeCallbackFunc("EVENT_CONTROL_EDIT_AFTER", ddeiEditor.DDeiEnumOperateType.EDIT, { models: mds, propName: (_b = this.attrDefine) == null ? void 0 : _b.code }, this.editor.ddInstance, null); + }, + validItemCondition(item) { + if (!item.condition) { + return true; + } else { + let func = new Function("model", "item", "editor", "component", "return " + item.condition); + let rs = func(this.model, item, this.editor, this); + return rs; + } + }, + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + }, + refreshData() { + var _a, _b, _c, _d; + if (this.editor.tempPopData) { + this.model = (_a = this.editor.tempPopData[this.dialogId]) == null ? void 0 : _a.model; + if (this.model) { + let controlDefine = ddeiEditor.DDeiEditorUtil.getControlDefine(this.model); + { + let ds = (_b = controlDefine.attrDefineMap.get("bpmnSubType")) == null ? void 0 : _b.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == this.model.bpmnSubType) { + this.bpmnSubTypeIndex = i; + break; + } + } + } + this.bpmnSubTypeDataSource = ds; + } + { + let ds = (_c = controlDefine.attrDefineMap.get("dataType")) == null ? void 0 : _c.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == this.model.dataType) { + this.dataTypeIndex = i; + break; + } + } + } + this.dataTypeDataSource = ds; + } + this.refreshPointType(); + { + let ds = (_d = controlDefine.attrDefineMap.get("type")) == null ? void 0 : _d.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + let value = this.model.type ? this.model.type : 1; + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == value) { + this.lineTypeIndex = i; + break; + } + } + } + this.lineTypeDataSource = ds; + } + { + let ds = this.timeTypeDataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + let value = this.model.timeType ? this.model.timeType : "timeDate"; + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == value) { + this.timeTypeIndex = i; + break; + } + } + } + } + } + } + }, + refreshPointType() { + var _a, _b, _c, _d; + let controlDefine = ddeiEditor.DDeiEditorUtil.getControlDefine(this.model); + { + let ds = (_a = controlDefine.attrDefineMap.get("sp.type")) == null ? void 0 : _a.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + let value = ((_b = this.model.sp) == null ? void 0 : _b.type) ? this.model.sp.type : -1; + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == value) { + this.startPointTypeIndex = i; + break; + } + } + } + this.startPointTypeDataSource = ds; + } + { + let ds = (_c = controlDefine.attrDefineMap.get("ep.type")) == null ? void 0 : _c.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + let value = ((_d = this.model.ep) == null ? void 0 : _d.type) ? this.model.ep.type : -1; + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == value) { + this.endPointTypeIndex = i; + break; + } + } + } + this.endPointTypeDataSource = ds; + } + }, + /** + * 切换BPMN类型 + */ + changeBpmnSubType(delta) { + let editor = this.editor; + let ds = this.bpmnSubTypeDataSource; + this.bpmnSubTypeIndex += delta; + if (this.bpmnSubTypeIndex >= ds.length) { + this.model.bpmnSubType = ds[0].value; + this.bpmnSubTypeIndex = 0; + } else if (this.bpmnSubTypeIndex == -1) { + this.model.bpmnSubType = ds[ds.length - 1].value; + this.bpmnSubTypeIndex = ds.length - 1; + } else { + this.model.bpmnSubType = ds[this.bpmnSubTypeIndex].value; + } + if (this.model.bpmnBaseType == "Sequence") { + this.changeLineBySubType(); + } + this.model.render.clearCachedValue(); + this.model.initPVS(); + this.model.render.enableRefreshShape(); + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + }, + /** + * 切换数据类型 + */ + changeDataType(delta) { + let ds = this.dataTypeDataSource; + this.dataTypeIndex += delta; + if (this.dataTypeIndex >= ds.length) { + this.model.dataType = ds[0].value; + this.dataTypeIndex = 0; + } else if (this.dataTypeIndex == -1) { + this.model.dataType = ds[ds.length - 1].value; + this.dataTypeIndex = ds.length - 1; + } else { + this.model.dataType = ds[this.dataTypeIndex].value; + } + }, + /** + * 切换时间类型 + */ + changeTimeType(delta) { + let ds = this.timeTypeDataSource; + this.timeTypeIndex += delta; + if (this.timeTypeIndex >= ds.length) { + this.model.timeType = ds[0].value; + this.timeTypeIndex = 0; + } else if (this.timeTypeIndex == -1) { + this.model.timeType = ds[ds.length - 1].value; + this.timeTypeIndex = ds.length - 1; + } else { + this.model.timeType = ds[this.timeTypeIndex].value; + } + }, + /** + * 根据线段的bpmnSubType修改线的样式以及部分选项的范围值 + */ + changeLineBySubType() { + let subType = this.model.bpmnSubType ? this.model.bpmnSubType : 1; + delete this.model.sp; + delete this.model.ep; + delete this.model.dash; + switch (subType) { + case 1: { + this.model.ep = { type: 51 }; + break; + } + case 2: { + this.model.sp = { type: 4 }; + this.model.ep = { type: 51 }; + break; + } + case 3: { + this.model.ep = { type: 51 }; + break; + } + case 4: { + this.model.ep = { + type: 5 + }; + this.model.sp = { + type: 2 + }; + this.model.dash = [10, 5]; + break; + } + case 5: { + this.model.ep = { + type: 0 + }; + this.model.sp = { + type: 0 + }; + this.model.dash = [4, 4]; + break; + } + } + this.refreshPointType(); + }, + /** + * 切换连线类型 + */ + changeLineType(delta) { + let editor = this.editor; + let ds = this.lineTypeDataSource; + this.lineTypeIndex += delta; + if (this.lineTypeIndex >= ds.length) { + this.model.type = ds[0].value; + this.lineTypeIndex = 0; + } else if (this.lineTypeIndex == -1) { + this.model.type = ds[ds.length - 1].value; + this.lineTypeIndex = ds.length - 1; + } else { + this.model.type = ds[this.lineTypeIndex].value; + } + this.model.render.clearCachedValue(); + this.model.initPVS(); + this.model.render.enableRefreshShape(); + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + }, + /** + * 切换点的类型 + */ + changePointType(type, delta) { + let editor = this.editor; + if (type == 1) { + let ds = this.startPointTypeDataSource; + this.startPointTypeIndex += delta; + if (!this.model.sp) { + this.model.sp = {}; + } + if (this.startPointTypeIndex >= ds.length) { + this.model.sp.type = ds[0].value; + this.startPointTypeIndex = 0; + } else if (this.startPointTypeIndex == -1) { + this.model.sp.type = ds[ds.length - 1].value; + this.startPointTypeIndex = ds.length - 1; + } else { + this.model.sp.type = ds[this.startPointTypeIndex].value; + } + } else if (type == 2) { + let ds = this.endPointTypeDataSource; + this.endPointTypeIndex += delta; + if (!this.model.ep) { + this.model.ep = {}; + } + if (this.endPointTypeIndex >= ds.length) { + this.model.ep.type = ds[0].value; + this.endPointTypeIndex = 0; + } else if (this.endPointTypeIndex == -1) { + this.model.ep.type = ds[ds.length - 1].value; + this.endPointTypeIndex = ds.length - 1; + } else { + this.model.ep.type = ds[this.endPointTypeIndex].value; + } + } + this.model.initPVS(); + this.model.render.enableRefreshShape(); + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + }, + /** + * 交换起点和终点 + */ + exchangePoints() { + let editor = this.editor; + this.model.exchangeStartAndEnd(); + this.model.render.enableRefreshShape(); + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + }, + /** + * 切换BPMN类型 + */ + changeBpmnLabel(label) { + let editor = this.editor; + if (!this.model[label]) { + this.model[label] = 1; + } else { + this.model[label] = 0; + } + if (label == "displayView") { + delete this.model.upActivityId; + } + this.model.render.clearCachedValue(); + this.model.initPVS(); + this.model.render.enableRefreshShape(); + editor.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + editor.bus.executeAll(); + } + } + }; + const ElementSettingDialog_vue_vue_type_style_index_0_scoped_8bd76064_lang = ""; + const _hoisted_1$1 = ["id"]; + const _hoisted_2$1 = { class: "content" }; + const _hoisted_3$1 = { style: { "display": "contents" } }; + const _hoisted_4$1 = { + key: 0, + class: "row" + }; + const _hoisted_5 = { class: "change-bpmn-sub-type" }; + const _hoisted_6 = { class: "change-bpmn-sub-type-text" }; + const _hoisted_7 = { + key: 1, + class: "row" + }; + const _hoisted_8 = { class: "change-bpmn-sub-type" }; + const _hoisted_9 = { class: "change-bpmn-sub-type-text" }; + const _hoisted_10 = { + key: 2, + class: "row" + }; + const _hoisted_11 = ["title"]; + const _hoisted_12 = { class: "change-property-text-title" }; + const _hoisted_13 = { class: "change-property-text-input" }; + const _hoisted_14 = ["placeholder"]; + const _hoisted_15 = { + key: 3, + class: "row" + }; + const _hoisted_16 = { class: "change-bpmn-sub-type" }; + const _hoisted_17 = { class: "change-bpmn-sub-type-text" }; + const _hoisted_18 = { + key: 4, + class: "row" + }; + const _hoisted_19 = ["title"]; + const _hoisted_20 = { class: "change-property-text-title" }; + const _hoisted_21 = { class: "change-property-text-input" }; + const _hoisted_22 = { + key: 5, + class: "row" + }; + const _hoisted_23 = ["title"]; + const _hoisted_24 = { class: "change-property-text-title" }; + const _hoisted_25 = { class: "change-property-text-input" }; + const _hoisted_26 = { + key: 6, + class: "row" + }; + const _hoisted_27 = ["title"]; + const _hoisted_28 = { class: "change-property-text-title" }; + const _hoisted_29 = { class: "change-property-text-input" }; + const _hoisted_30 = { + key: 7, + class: "row" + }; + const _hoisted_31 = ["title"]; + const _hoisted_32 = { class: "change-property-text-title" }; + const _hoisted_33 = { class: "change-property-text-input" }; + const _hoisted_34 = ["placeholder"]; + const _hoisted_35 = { + key: 8, + class: "row" + }; + const _hoisted_36 = ["title"]; + const _hoisted_37 = { class: "change-property-text-title" }; + const _hoisted_38 = { class: "change-property-text-input" }; + const _hoisted_39 = ["placeholder"]; + const _hoisted_40 = { + key: 9, + class: "row" + }; + const _hoisted_41 = ["title"]; + const _hoisted_42 = { class: "change-property-text-title" }; + const _hoisted_43 = { class: "change-property-text-input" }; + const _hoisted_44 = ["placeholder"]; + const _hoisted_45 = { + key: 10, + class: "row" + }; + const _hoisted_46 = ["title"]; + const _hoisted_47 = { class: "change-property-text-title" }; + const _hoisted_48 = { class: "change-property-text-input" }; + const _hoisted_49 = ["placeholder"]; + const _hoisted_50 = { + key: 11, + class: "row" + }; + const _hoisted_51 = { class: "change-bpmn-sub-type" }; + const _hoisted_52 = { class: "change-bpmn-sub-type-text" }; + const _hoisted_53 = { + key: 12, + class: "row" + }; + const _hoisted_54 = { class: "change-point-type" }; + const _hoisted_55 = { class: "change-point-type-title" }; + const _hoisted_56 = { class: "change-point-type-text" }; + const _hoisted_57 = { + key: 13, + class: "row" + }; + const _hoisted_58 = { class: "quick-button-text" }; + const _hoisted_59 = { + key: 14, + class: "row" + }; + const _hoisted_60 = { class: "change-point-type" }; + const _hoisted_61 = { class: "change-point-type-title" }; + const _hoisted_62 = { class: "change-point-type-text" }; + const _hoisted_63 = { + key: 15, + class: "row" + }; + const _hoisted_64 = { + key: 16, + class: "row" + }; + const _hoisted_65 = { + key: 17, + class: "row" + }; + const _hoisted_66 = { + key: 18, + class: "row" + }; + const _hoisted_67 = { + key: 19, + class: "row" + }; + const _hoisted_68 = { + key: 20, + class: "row" + }; + const _hoisted_69 = ["title"]; + const _hoisted_70 = { class: "change-property-text-title" }; + const _hoisted_71 = { class: "change-property-text-input" }; + const _hoisted_72 = ["placeholder"]; + const _hoisted_73 = { + key: 21, + class: "row" + }; + const _hoisted_74 = { + key: 22, + class: "row" + }; + const _hoisted_75 = { + key: 23, + class: "row" + }; + const _hoisted_76 = { + key: 24, + class: "row" + }; + const _hoisted_77 = { + key: 25, + class: "row" + }; + const _hoisted_78 = { + key: 26, + class: "row" + }; + const _hoisted_79 = ["title"]; + const _hoisted_80 = { class: "change-property-text-title" }; + const _hoisted_81 = { class: "change-property-text-input" }; + const _hoisted_82 = ["onUpdate:modelValue", "onChange", "placeholder"]; + const _hoisted_83 = { + key: 27, + class: "row" + }; + const _hoisted_84 = ["title"]; + const _hoisted_85 = { class: "change-property-textarea-title" }; + const _hoisted_86 = { class: "change-property-textarea-input" }; + const _hoisted_87 = ["onUpdate:modelValue", "onChange", "placeholder"]; + function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { + var _a, _b; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a = _ctx.editor) == null ? void 0 : _a.id) + "_" + $data.dialogId, + class: "ddei-flow-element-setting-dialog" + }, [ + vue.createElementVNode("div", _hoisted_2$1, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_b = $props.options) == null ? void 0 : _b.items, (item) => { + var _a2, _b2, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [ + !item.viewer && item.id == "ddei-flow-change-bpmnsubtype" && $options.validItemCondition(item) && ((_a2 = $data.bpmnSubTypeDataSource) == null ? void 0 : _a2.length) > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [ + vue.createElementVNode("div", _hoisted_5, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[0] || (_cache[0] = ($event) => $options.changeBpmnSubType(-1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[32] || (_cache[32] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_6, vue.toDisplayString(_ctx.editor.i18n($data.bpmnSubTypeDataSource[$data.bpmnSubTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[1] || (_cache[1] = ($event) => $options.changeBpmnSubType(1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[33] || (_cache[33] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-dataobject-setting" && $data.model.bpmnType == "DataObject" && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [ + vue.createElementVNode("div", _hoisted_8, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[2] || (_cache[2] = ($event) => $options.changeDataType(-1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[34] || (_cache[34] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_9, vue.toDisplayString(_ctx.editor.i18n($data.dataTypeDataSource[$data.dataTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[3] || (_cache[3] = ($event) => $options.changeDataType(1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[35] || (_cache[35] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-dataobject-setting" && $data.model.bpmnType == "DataObject" && $data.model.dataType == 8 && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_12, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.busicls")), 1), + vue.createElementVNode("div", _hoisted_13, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $data.model.customDataType = $event), + placeholder: _ctx.editor.i18n("ddei.flow.busicls") + }, null, 8, _hoisted_14), [ + [vue.vModelText, $data.model.customDataType] + ]) + ]) + ], 8, _hoisted_11) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-time-setting" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "IntermediateCatchEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType) || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 2) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_15, [ + vue.createElementVNode("div", _hoisted_16, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[5] || (_cache[5] = ($event) => $options.changeTimeType(-1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[36] || (_cache[36] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_17, vue.toDisplayString(_ctx.editor.i18n($data.timeTypeDataSource[$data.timeTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[6] || (_cache[6] = ($event) => $options.changeTimeType(1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[37] || (_cache[37] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-time-setting" && $data.model.timeType != "timeDuration" && $data.model.timeType != "CRON" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "IntermediateCatchEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType) || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 2) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_20, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.time")), 1), + vue.createElementVNode("div", _hoisted_21, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $data.model.timeValue = $event), + placeholder: "2011-03-11T12:13:14" + }, null, 512), [ + [vue.vModelText, $data.model.timeValue] + ]) + ]) + ], 8, _hoisted_19) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-time-setting" && $data.model.timeType == "timeDuration" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "IntermediateCatchEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType) || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 2) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_22, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_24, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.timeduration")), 1), + vue.createElementVNode("div", _hoisted_25, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $data.model.timeValue = $event), + placeholder: "R3/PT10H/${EndDate}" + }, null, 512), [ + [vue.vModelText, $data.model.timeValue] + ]) + ]) + ], 8, _hoisted_23) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-time-setting" && $data.model.timeType == "CRON" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "IntermediateCatchEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType) || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 2) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_26, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_28, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.timecron")), 1), + vue.createElementVNode("div", _hoisted_29, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $data.model.timeValue = $event), + placeholder: "0 0/5* * *?" + }, null, 512), [ + [vue.vModelText, $data.model.timeValue] + ]) + ]) + ], 8, _hoisted_27) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-message-setting" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 2 || $data.model.bpmnType == "IntermediateCatchEvent" && $data.model.bpmnSubType == 2 || $data.model.bpmnType == "IntermediateThrowEvent" && $data.model.bpmnSubType == 2 || $data.model.bpmnType == "EndEvent" && $data.model.bpmnSubType == 2 || $data.model.bpmnType == "BoundaryEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType)) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_30, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_32, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.message")), 1), + vue.createElementVNode("div", _hoisted_33, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $data.model.messageName = $event), + placeholder: _ctx.editor.i18n("ddei.flow.messagename") + }, null, 8, _hoisted_34), [ + [vue.vModelText, $data.model.messageName] + ]) + ]) + ], 8, _hoisted_31) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-signal-setting" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 5 || $data.model.bpmnType == "IntermediateCatchEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "IntermediateThrowEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "EndEvent" && $data.model.bpmnSubType == 3 || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 3) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_35, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_37, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.signal")), 1), + vue.createElementVNode("div", _hoisted_38, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $data.model.signalName = $event), + placeholder: _ctx.editor.i18n("ddei.flow.signalname") + }, null, 8, _hoisted_39), [ + [vue.vModelText, $data.model.signalName] + ]) + ]) + ], 8, _hoisted_36) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-error-setting" && ($data.model.bpmnType == "StartEvent" && $data.model.bpmnSubType == 9 || $data.model.bpmnType == "IntermediateEvent" && $data.model.bpmnSubType == 27 || $data.model.bpmnType == "EndEvent" && $data.model.bpmnSubType == 6 || $data.model.bpmnType == "BoundaryEvent" && $data.model.bpmnSubType == 4) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_40, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_42, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.errorcode")), 1), + vue.createElementVNode("div", _hoisted_43, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $data.model.errorCode = $event), + placeholder: _ctx.editor.i18n("ddei.flow.errorcode") + }, null, 8, _hoisted_44), [ + [vue.vModelText, $data.model.errorCode] + ]) + ]) + ], 8, _hoisted_41) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-condition-setting" && ($data.model.bpmnBaseType == "Sequence" && $data.model.bpmnSubType == 2) && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_45, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_47, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.condition")), 1), + vue.createElementVNode("div", _hoisted_48, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => $data.model.condition = $event), + placeholder: "${" + _ctx.editor.i18n("ddei.flow.conditionexpress") + "}" + }, null, 8, _hoisted_49), [ + [vue.vModelText, $data.model.condition] + ]) + ]) + ], 8, _hoisted_46) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-linetype" && $options.validItemCondition(item) && ((_b2 = $data.lineTypeDataSource) == null ? void 0 : _b2.length) > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_50, [ + vue.createElementVNode("div", _hoisted_51, [ + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[14] || (_cache[14] = ($event) => $options.changeLineType(-1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[38] || (_cache[38] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_52, vue.toDisplayString(_ctx.editor.i18n($data.lineTypeDataSource[$data.lineTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[15] || (_cache[15] = ($event) => $options.changeLineType(1)), + style: { "width": "16px", "height": "16px" }, + "aria-hidden": "true" + }, _cache[39] || (_cache[39] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-linepointtype" && $options.validItemCondition(item) && ((_c = $data.model) == null ? void 0 : _c.bpmnSubType) == 5 && ((_d = $data.startPointTypeDataSource) == null ? void 0 : _d.length) > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_53, [ + vue.createElementVNode("div", _hoisted_54, [ + vue.createElementVNode("div", _hoisted_55, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.startnode")), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[16] || (_cache[16] = ($event) => $options.changePointType(1, -1)), + "aria-hidden": "true" + }, _cache[40] || (_cache[40] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_56, vue.toDisplayString(_ctx.editor.i18n($data.startPointTypeDataSource[$data.startPointTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[17] || (_cache[17] = ($event) => $options.changePointType(1, 1)), + "aria-hidden": "true" + }, _cache[41] || (_cache[41] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-linepointtype" && $options.validItemCondition(item) && ((_e = $data.model) == null ? void 0 : _e.bpmnBaseType) == "Sequence" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_57, [ + vue.createElementVNode("div", { + class: "quick-button", + onClick: _cache[18] || (_cache[18] = ($event) => $options.exchangePoints()) + }, [ + vue.createElementVNode("div", _hoisted_58, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.exchange")), 1), + _cache[42] || (_cache[42] = vue.createElementVNode("svg", { + class: "icon", + "aria-hidden": "true" + }, [ + vue.createElementVNode("use", { "xlink:href": "#icon-zhihuan" }) + ], -1)) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-linepointtype" && $options.validItemCondition(item) && ((_f = $data.model) == null ? void 0 : _f.bpmnSubType) == 5 && ((_g = $data.endPointTypeDataSource) == null ? void 0 : _g.length) > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_59, [ + vue.createElementVNode("div", _hoisted_60, [ + vue.createElementVNode("div", _hoisted_61, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.endnode")), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[19] || (_cache[19] = ($event) => $options.changePointType(2, -1)), + "aria-hidden": "true" + }, _cache[43] || (_cache[43] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-left" }, null, -1) + ]))), + vue.createElementVNode("div", _hoisted_62, vue.toDisplayString(_ctx.editor.i18n($data.endPointTypeDataSource[$data.endPointTypeIndex].text)), 1), + (vue.openBlock(), vue.createElementBlock("svg", { + class: "icon-ddei-flow", + onClick: _cache[20] || (_cache[20] = ($event) => $options.changePointType(2, 1)), + "aria-hidden": "true" + }, _cache[44] || (_cache[44] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-right" }, null, -1) + ]))) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-callactivity-review" && $options.validItemCondition(item) && ((_h = $data.model) == null ? void 0 : _h.bpmnType) == "CallActivityTask" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_63, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[21] || (_cache[21] = ($event) => $options.changeBpmnLabel("displayView")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_i = $data.model) == null ? void 0 : _i.displayView) != 1, "chk_state_checked": ((_j = $data.model) == null ? void 0 : _j.displayView) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_k = $data.model) == null ? void 0 : _k.displayView) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.overview")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_l = $data.model) == null ? void 0 : _l.bpmnType) == "DataStore" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_64, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[22] || (_cache[22] = ($event) => $options.changeBpmnLabel("isUnlimited")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_m = $data.model) == null ? void 0 : _m.isUnlimited) != 1, "chk_state_checked": ((_n = $data.model) == null ? void 0 : _n.isUnlimited) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_o = $data.model) == null ? void 0 : _o.isUnlimited) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.unlimited")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && $data.model.bpmnType == "SubProcess" && $data.model.bpmnSubType == 4 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_65, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[23] || (_cache[23] = ($event) => $options.changeBpmnLabel("ordering")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_p = $data.model) == null ? void 0 : _p.ordering) != 1, "chk_state_checked": ((_q = $data.model) == null ? void 0 : _q.ordering) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_r = $data.model) == null ? void 0 : _r.ordering) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.ordering")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_s = $data.model) == null ? void 0 : _s.bpmnBaseType) == "Activity" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_66, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[24] || (_cache[24] = ($event) => $options.changeBpmnLabel("isLoop")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_t = $data.model) == null ? void 0 : _t.isLoop) != 1, "chk_state_checked": ((_u = $data.model) == null ? void 0 : _u.isLoop) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_v = $data.model) == null ? void 0 : _v.isLoop) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.loop")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_w = $data.model) == null ? void 0 : _w.bpmnBaseType) == "Activity" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_67, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[25] || (_cache[25] = ($event) => $options.changeBpmnLabel("multiInstance")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_x = $data.model) == null ? void 0 : _x.multiInstance) != 1, "chk_state_checked": ((_y = $data.model) == null ? void 0 : _y.multiInstance) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_z = $data.model) == null ? void 0 : _z.multiInstance) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.multiins")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && $data.model.multiInstance ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_68, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_70, vue.toDisplayString(_ctx.editor.i18n("ddei.flow.insnum")), 1), + vue.createElementVNode("div", _hoisted_71, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => $data.model.loopCardinality = $event), + placeholder: _ctx.editor.i18n("ddei.flow.insnum") + }, null, 8, _hoisted_72), [ + [vue.vModelText, $data.model.loopCardinality] + ]) + ]) + ], 8, _hoisted_69) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_A = $data.model) == null ? void 0 : _A.bpmnBaseType) == "Activity" && ((_B = $data.model) == null ? void 0 : _B.multiInstance) == 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_73, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[27] || (_cache[27] = ($event) => $options.changeBpmnLabel("isParallel")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_C = $data.model) == null ? void 0 : _C.isParallel) != 1, "chk_state_checked": ((_D = $data.model) == null ? void 0 : _D.isParallel) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_E = $data.model) == null ? void 0 : _E.isParallel) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.parallel")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && $data.model.bpmnType == "ChoreographySubProcess" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_74, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[28] || (_cache[28] = ($event) => $options.changeBpmnLabel("isAdHoc")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_F = $data.model) == null ? void 0 : _F.isAdHoc) != 1, "chk_state_checked": ((_G = $data.model) == null ? void 0 : _G.isAdHoc) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_H = $data.model) == null ? void 0 : _H.isAdHoc) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.property.custom")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ($data.model.bpmnType == "BoundaryEvent" && ($data.model.bpmnSubType == 1 || !$data.model.bpmnSubType || $data.model.bpmnSubType == 2 || $data.model.bpmnSubType == 7 || $data.model.bpmnSubType == 8 || $data.model.bpmnSubType == 9) || ($data.model.bpmnType == "StartEvent" && ($data.model.bpmnSubType >= 2 && $data.model.bpmnSubType <= 8) || $data.model.bpmnSubType == 10)) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_75, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[29] || (_cache[29] = ($event) => $options.changeBpmnLabel("notInterrupting")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_I = $data.model) == null ? void 0 : _I.notInterrupting) != 1, "chk_state_checked": ((_J = $data.model) == null ? void 0 : _J.notInterrupting) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_K = $data.model) == null ? void 0 : _K.notInterrupting) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.notInterrupting")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_L = $data.model) == null ? void 0 : _L.bpmnBaseType) == "Activity" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_76, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[30] || (_cache[30] = ($event) => $options.changeBpmnLabel("isCompensation")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_M = $data.model) == null ? void 0 : _M.isCompensation) != 1, "chk_state_checked": ((_N = $data.model) == null ? void 0 : _N.isCompensation) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_O = $data.model) == null ? void 0 : _O.isCompensation) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.compensation")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-change-activity-labels" && $options.validItemCondition(item) && ((_P = $data.model) == null ? void 0 : _P.bpmnType) == "DataObject" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_77, [ + vue.createElementVNode("div", { + class: "change-bpmn-marker", + onClick: _cache[31] || (_cache[31] = ($event) => $options.changeBpmnLabel("isCollection")) + }, [ + vue.createElementVNode("div", { + class: vue.normalizeClass({ "chk_state": ((_Q = $data.model) == null ? void 0 : _Q.isCollection) != 1, "chk_state_checked": ((_R = $data.model) == null ? void 0 : _R.isCollection) == 1 }) + }, [ + vue.createElementVNode("span", null, vue.toDisplayString(((_S = $data.model) == null ? void 0 : _S.isCollection) == 1 ? "✓" : ""), 1) + ], 2), + vue.createTextVNode(" " + vue.toDisplayString(_ctx.editor.i18n("ddei.flow.datacoll")), 1) + ]) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-property-editor-text" && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_78, [ + vue.createElementVNode("div", { + class: "change-property-text", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_80, vue.toDisplayString(_ctx.editor.i18n(item.label)), 1), + vue.createElementVNode("div", _hoisted_81, [ + vue.withDirectives(vue.createElementVNode("input", { + "onUpdate:modelValue": ($event) => $data.model[item.property] = $event, + onChange: ($event) => $options.modelChangeProperty($data.model, item.property), + placeholder: _ctx.editor.i18n(item.desc) + }, null, 40, _hoisted_82), [ + [vue.vModelText, $data.model[item.property]] + ]) + ]) + ], 8, _hoisted_79) + ])) : vue.createCommentVNode("", true), + !item.viewer && item.id == "ddei-flow-property-editor-textarea" && $options.validItemCondition(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_83, [ + vue.createElementVNode("div", { + class: "change-property-textarea", + title: item.desc + }, [ + vue.createElementVNode("div", _hoisted_85, vue.toDisplayString(_ctx.editor.i18n(item.label)), 1), + vue.createElementVNode("div", _hoisted_86, [ + vue.withDirectives(vue.createElementVNode("textarea", { + "onUpdate:modelValue": ($event) => $data.model[item.property] = $event, + onChange: ($event) => $options.modelChangeProperty($data.model, item.property), + placeholder: _ctx.editor.i18n(item.desc) + }, null, 40, _hoisted_87), [ + [vue.vModelText, $data.model[item.property]] + ]) + ]) + ], 8, _hoisted_84) + ])) : vue.createCommentVNode("", true), + item.viewer && $options.validItemCondition(item) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.viewer), vue.mergeProps({ + key: 28, + editor: _ctx.editor, + options: $props.options, + model: $data.model, + ref_for: true + }, item), null, 16, ["editor", "options", "model"])) : vue.createCommentVNode("", true) + ]); + }), 256)) + ]) + ], 8, _hoisted_1$1)) : vue.createCommentVNode("", true); + } + const ElementSettingDialog = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-8bd76064"]]); + const _DDeiFlowElementSettingDialog = class _DDeiFlowElementSettingDialog extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "name", ElementSettingDialog.name); + __publicField(this, "plugins", [ElementSettingDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static modify(fn) { + return _DDeiFlowElementSettingDialog.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[ElementSettingDialog.name]) { + for (let i in options[ElementSettingDialog.name]) { + newOptions[i] = options[ElementSettingDialog.name][i]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiFlowElementSettingDialog(newOptions); + return panels; + } + } + return _DDeiFlowElementSettingDialog.defaultIns; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowElementSettingDialog, "defaultIns", new _DDeiFlowElementSettingDialog({ + items: [ + { + id: "ddei-flow-property-editor-text", + label: "ddei.code", + desc: "ddei.code", + property: "code" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.name", + desc: "ddei.name", + property: "name", + condition: "model.bpmnBaseType != 'Event'" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.flow.property.humanperformer", + desc: "ddei.flow.user", + property: "humanPerformer", + condition: "model.bpmnType == 'UserTask'" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.flow.property.potentialowner", + desc: "ddei.flow.user", + property: "potentialOwner", + condition: "model.bpmnType == 'UserTask'" + }, + { + id: "ddei-flow-property-editor-textarea", + label: "ddei.flow.property.script", + desc: `sum = 0 +for ( i in inputArray ) { + sum += i +}`, + property: "script", + condition: "model.bpmnType == 'ScriptTask'" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.flow.property.sender", + desc: "上方参与人,用逗号隔开多个参与人", + property: "topUser", + condition: "model.bpmnType == 'ChoreographyTask' || model.bpmnType == 'ChoreographySubProcess'" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.flow.property.receiver", + desc: "下方参与人,用逗号隔开多个参与人", + property: "bottomUser", + condition: "model.bpmnType == 'ChoreographyTask' || model.bpmnType == 'ChoreographySubProcess'" + }, + { + id: "ddei-flow-change-bpmnsubtype" + }, + { + id: "ddei-flow-dataobject-setting" + }, + { + id: "ddei-flow-time-setting" + }, + { + id: "ddei-flow-message-setting" + }, + { + id: "ddei-flow-signal-setting" + }, + { + id: "ddei-flow-error-setting" + }, + { + id: "ddei-flow-condition-setting" + }, + { + id: "ddei-flow-change-linetype" + }, + { + id: "ddei-flow-change-linepointtype" + }, + { + id: "ddei-flow-callactivity-review" + }, + { + id: "ddei-flow-change-activity-labels" + }, + { + id: "ddei-flow-property-editor-text", + label: "ddei.flow.property.capacity", + desc: "ddei.flow.property.capacity", + property: "capacity", + condition: "model.bpmnType == 'DataStore' && !model.isUnlimited" + }, + { + id: "ddei-flow-property-editor-textarea", + label: "ddei.desc", + desc: "ddei.desc", + property: "desc" + } + ] + })); + let DDeiFlowElementSettingDialog = _DDeiFlowElementSettingDialog; + const _sfc_main = { + name: "ddei-flow-setting-button-dialog", + mixins: [DialogBase], + props: { + //外部传入的插件扩展参数 + options: { + type: Object, + default: null + } + }, + data() { + return { + dialogId: "ddei-flow-setting-button-dialog", + model: null, + stageRatio: 1, + controlDefine: null, + bpmnSubTypeDataSource: null + }; + }, + computed: {}, + components: {}, + watch: {}, + created() { + }, + mounted() { + this.editor.dialogs[this.dialogId].viewer = this; + this.refreshData(); + }, + methods: { + validItemCondition(btn) { + if (!this.editor.ddInstance["AC_DESIGN_EDIT"]) { + return false; + } + if (!btn.condition) { + return true; + } else { + let func = new Function("model", "btn", "editor", "component", "return " + btn.condition); + let rs = func(this.model, btn, this.editor, this); + return rs; + } + }, + startChooseActivity(evt) { + this.editor.tempChooseCallActivity = this.model; + }, + forceRefreshView: function() { + this.forceRefresh = false; + this.$nextTick(() => { + this.forceRefresh = true; + if (this.refreshData) { + this.refreshData(); + } + }); + }, + refreshData() { + var _a, _b; + if (this.editor.tempPopData) { + this.model = (_a = this.editor.tempPopData[this.dialogId]) == null ? void 0 : _a.model; + if (this.model) { + this.stageRatio = this.model.getStageRatio(); + let controlDefine = ddeiEditor.DDeiEditorUtil.getControlDefine(this.model); + let ds = (_b = controlDefine.attrDefineMap.get("bpmnSubType")) == null ? void 0 : _b.dataSource; + if ((ds == null ? void 0 : ds.length) > 0) { + for (let i = 0; i < ds.length; i++) { + if (ds[i].value == this.model.bpmnSubType) { + this.bpmnSubTypeIndex = i; + break; + } + } + } + this.bpmnSubTypeDataSource = ds; + this.controlDefine = controlDefine; + } + } + }, + settingMouseEnter(srcElement) { + this.showSettingDialog(srcElement); + }, + settingMouseEnterLeave(srcElement) { + delete this.editor.tempOperateModel; + }, + showSettingDialog(srcElement) { + let editor = this.editor; + if (editor.tempOperateModel) { + let model = editor.tempOperateModel; + if (model) { + let left, top; + if (this.model.bpmnBaseType == "Event") { + left = srcElement.offsetLeft + -5.5 * (this.stageRatio - 1); + top = srcElement.offsetTop + srcElement.clientHeight + 5.5 * (this.stageRatio - 1); + } else { + left = srcElement.offsetLeft + srcElement.clientWidth + 5.5 * (this.stageRatio - 1); + top = srcElement.offsetTop + -5.5 * (this.stageRatio - 1); + } + ddeiEditor.DDeiEditorUtil.showDialog(editor, "ddei-flow-element-setting-dialog", { + group: "ddei-flow-element-setting", + model + }, { type: 99, left, top, hiddenMask: true }, null, true, true); + } + } + }, + expandOrNotSubProcess() { + let model = this.model; + let stage = model.stage; + let layer = model.layer; + let ddInstance = stage.ddInstance; + let editor = ddeiEditor.DDeiEditorUtil.getEditorInsByDDei(ddInstance); + if (editor) { + let scaleX = 1, scaleY = 1; + let targetWidth, targetHeight; + let includeModels = getIncludeModels(model); + if (!model.isExpand) { + targetWidth = model.otherWidth ? model.otherWidth : 300; + targetHeight = model.otherHeight ? model.otherHeight : 200; + model.otherWidth = model.width; + model.otherHeight = model.height; + model.isExpand = 1; + let subLinks = stage.getSourceModelLinks(model.id); + subLinks == null ? void 0 : subLinks.forEach((subLink) => { + if (subLink.oldMid && subLink.oldSmpath) { + let subModel = layer.getModelById(subLink.oldMid); + if (subModel) { + let subModelLinks = stage.getSourceModelLinks(subModel.id); + subModelLinks.forEach((subModelLink) => { + if (subModelLink.smpath == subLink.oldSmpath) { + subModelLink.disabled = false; + let sourcePV = subModelLink.getSourcePV(); + let distPV = subModelLink.getDistPV(); + distPV.x = sourcePV.x; + distPV.y = sourcePV.y; + } + }); + } + stage.removeLink(subLink); + subModel == null ? void 0 : subModel.updateLinkModels(); + } + }); + model.updateLinkModels(); + } else { + targetWidth = model.otherWidth; + targetHeight = model.otherHeight; + model.otherWidth = model.width; + model.otherHeight = model.height; + model.isExpand = 0; + let lines = []; + includeModels.forEach((ims) => { + if (ims.attachPModel != model.id) { + let sublinks = stage.getSourceModelLinks(ims.id); + sublinks == null ? void 0 : sublinks.forEach((slink) => { + if (!slink.disabled && slink.dm) { + if (lines.indexOf(slink.dm) == -1) { + lines.push(slink.dm); + } else { + lines.splice(lines.indexOf(slink.dm), 1); + } + } + }); + } + }); + for (let ln = lines.length - 1; ln >= 0; ln--) { + let line = lines[ln]; + let sourceLinks = stage.getDistModelLinks(line.id); + let finded = false; + let inLink; + for (let sl = 0; sl < sourceLinks.length; sl++) { + if (!sourceLinks[sl].disabled) { + if (sourceLinks[sl].sm == model) { + finded = true; + break; + } + if (includeModels.indexOf(sourceLinks[sl].sm) != -1) { + inLink = sourceLinks[sl]; + } + } + } + if (finded) { + lines.splice(ln, 1); + } else if (inLink) { + let distPV = inLink.getDistPV(); + inLink.disabled = true; + let crossPoint; + let pvs = inLink.dm.pvs; + let projPoint; + if (inLink.dmpath == "startPoint") { + for (let li = 0; li < pvs.length - 1; li++) { + let p1 = pvs[li]; + let p2 = pvs[li + 1]; + for (let pi = 0; pi < model.operatePVS.length; pi++) { + let p3 = model.operatePVS[pi]; + let p4 = model.operatePVS[pi + 1]; + if (pi == model.operatePVS.length - 1) { + p3 = model.operatePVS[0]; + p4 = model.operatePVS[pi]; + } + crossPoint = ddeiEditor.DDeiUtil.getLineCorssPoint(p1, p2, p3, p4); + if (crossPoint) { + break; + } + if (crossPoint) { + break; + } + } + } + } else { + for (let li = pvs.length - 1; li > 0; li--) { + let p1 = pvs[li]; + let p2 = pvs[li - 1]; + for (let pi = 0; pi < model.operatePVS.length; pi++) { + let p3 = model.operatePVS[pi]; + let p4 = model.operatePVS[pi + 1]; + if (pi == model.operatePVS.length - 1) { + p3 = model.operatePVS[0]; + p4 = model.operatePVS[pi]; + } + crossPoint = ddeiEditor.DDeiUtil.getLineCorssPoint(p1, p2, p3, p4); + if (crossPoint) { + break; + } + } + if (crossPoint) { + break; + } + } + } + if (crossPoint) { + projPoint = model.getProjPoint({ x: crossPoint.x, y: crossPoint.y }); + } + if (!projPoint) { + let proPoints; + if (inLink.dmpath == "startPoint") { + proPoints = ddeiEditor.DDeiAbstractShape.getProjPointDists(model.operatePVS, inLink.dm.startPoint.x, inLink.dm.startPoint.y, true, 1); + } else { + proPoints = ddeiEditor.DDeiAbstractShape.getProjPointDists(model.operatePVS, inLink.dm.endPoint.x, inLink.dm.endPoint.y, true, 1); + } + projPoint = proPoints[0]; + } + let id = "_" + ddeiEditor.DDeiUtil.getUniqueCode(); + model.exPvs[id] = new ddeiEditor.Vector3(projPoint.x, projPoint.y, 1); + model.exPvs[id].rate = projPoint.rate; + model.exPvs[id].sita = projPoint.sita; + model.exPvs[id].index = projPoint.index; + model.exPvs[id].id = id; + distPV.x = projPoint.x; + distPV.y = projPoint.y; + let link = new ddeiEditor.DDeiLink({ + sm: model, + dm: inLink.dm, + smpath: "exPvs." + id, + dmpath: inLink.dmpath, + stage + }); + link.oldSmpath = inLink.smpath; + link.oldMid = inLink.sm.id; + stage.addLink(link); + } + } + } + scaleX = targetWidth / model.otherWidth; + scaleY = targetHeight / model.otherHeight; + if (scaleX != 1 || scaleY != 1) { + let m1 = new ddeiEditor.Matrix3(); + let move1Matrix = new ddeiEditor.Matrix3( + 1, + 0, + -model.cpv.x, + 0, + 1, + -model.cpv.y, + 0, + 0, + 1 + ); + m1.premultiply(move1Matrix); + if (model.rotate) { + let angle = ddeiEditor.DDeiUtil.preciseTimes(model.rotate, ddeiEditor.DDeiConfig.ROTATE_UNIT); + let rotateMatrix = new ddeiEditor.Matrix3( + Math.cos(angle), + Math.sin(angle), + 0, + -Math.sin(angle), + Math.cos(angle), + 0, + 0, + 0, + 1 + ); + m1.premultiply(rotateMatrix); + } + let scaleMatrix = new ddeiEditor.Matrix3( + scaleX, + 0, + 0, + 0, + scaleY, + 0, + 0, + 0, + 1 + ); + m1.premultiply(scaleMatrix); + if (model.rotate) { + let angle = ddeiEditor.DDeiUtil.preciseTimes(-model.rotate, ddeiEditor.DDeiConfig.ROTATE_UNIT); + let rotateMatrix = new ddeiEditor.Matrix3( + Math.cos(angle), + Math.sin(angle), + 0, + -Math.sin(angle), + Math.cos(angle), + 0, + 0, + 0, + 1 + ); + m1.premultiply(rotateMatrix); + } + let move2Matrix = new ddeiEditor.Matrix3( + 1, + 0, + model.cpv.x, + 0, + 1, + model.cpv.y, + 0, + 0, + 1 + ); + m1.premultiply(move2Matrix); + model.transVectors(m1); + includeModels == null ? void 0 : includeModels.forEach((im) => { + im.transVectors(m1); + im.updateLinkModels(); + }); + if (model.isExpand == 1) { + let deltaWidth = (targetWidth - model.otherWidth) / 2; + let deltaHeight = (targetHeight - model.otherHeight) / 2; + this.extParentBounds(model, deltaWidth, deltaHeight); + } + includeModels == null ? void 0 : includeModels.forEach((im) => { + im.updateLinkModels(); + }); + model.updateLinkModels(); + } + editor.notifyChange(); + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-setting-button-dialog"); + ddeiEditor.DDeiEditorUtil.closeDialog(editor, "ddei-flow-element-setting-dialog"); + } + }, + //扩展上级控件大小以及位置 + extParentBounds(model, deltaWidth, deltaHeight) { + let stage = model.stage; + let layer = model.layer; + let curLevelModels = []; + let parentSubProcess; + if (model.includePModelId) { + parentSubProcess = stage.getModelById(model.includePModelId); + parentSubProcess == null ? void 0 : parentSubProcess.includeModels.forEach((includeModelid) => { + if (includeModelid != model.id) { + let subModel = stage.getModelById(includeModelid); + if (subModel && subModel.baseModelType != "DDeiLine") { + curLevelModels.push(subModel); + } + } + }); + } else { + let layerModels = layer.getSubModels(); + layerModels.forEach((lm) => { + if (lm && lm.baseModelType != "DDeiLine" && !lm.includePModelId && lm.id != model.id) { + curLevelModels.push(lm); + } + }); + } + let modelRect = ddeiEditor.DDeiAbstractShape.getOutRectByPV([model]); + let needExt = false; + for (let c = 0; c < curLevelModels.length; c++) { + let rect = ddeiEditor.DDeiAbstractShape.getOutRectByPV([curLevelModels[c]]); + if (ddeiEditor.DDeiUtil.isRectCross(modelRect, rect)) { + needExt = true; + break; + } + } + if (needExt) { + curLevelModels.forEach((subModel) => { + if (subModel.baseModelType != "DDeiLine" && subModel.attachPModel != model.id) { + let moveX = 0, moveY = 0; + if (subModel.cpv.x > model.cpv.x) { + moveX = deltaWidth; + } else if (subModel.cpv.x < model.cpv.x) { + moveX = -deltaWidth; + } + if (subModel.cpv.y > model.cpv.y) { + moveY = deltaHeight; + } else if (subModel.cpv.y < model.cpv.y) { + moveY = -deltaHeight; + } + if (moveX || moveY) { + let m2 = new ddeiEditor.Matrix3( + 1, + 0, + moveX, + 0, + 1, + moveY, + 0, + 0, + 1 + ); + subModel.transVectors(m2); + if (subModel.allowIncludeModel) { + let includeModels1 = getIncludeModels(subModel); + includeModels1.forEach((lms) => { + lms.transVectors(m2); + lms.updateLinkModels(); + }); + } + } + } + subModel.updateLinkModels(); + }); + } + if (parentSubProcess) { + let parentRect = ddeiEditor.DDeiAbstractShape.getOutRectByPV([parentSubProcess]); + let rect = ddeiEditor.DDeiAbstractShape.getOutRectByPV([...curLevelModels, model]); + if (!(parentRect.x + 20 <= rect.x && parentRect.x1 - 20 >= rect.x1 && parentRect.y + 20 <= rect.y && parentRect.y1 - 20 >= rect.y1)) { + let parentScaleX = (rect.width + 40) / parentRect.width; + let parentScaleY = (rect.height + 40) / parentRect.height; + let m1 = new ddeiEditor.Matrix3(); + let move1Matrix = new ddeiEditor.Matrix3( + 1, + 0, + -parentSubProcess.cpv.x, + 0, + 1, + -parentSubProcess.cpv.y, + 0, + 0, + 1 + ); + m1.premultiply(move1Matrix); + if (parentSubProcess.rotate) { + let angle = ddeiEditor.DDeiUtil.preciseTimes(parentSubProcess.rotate, ddeiEditor.DDeiConfig.ROTATE_UNIT); + let rotateMatrix = new ddeiEditor.Matrix3( + Math.cos(angle), + Math.sin(angle), + 0, + -Math.sin(angle), + Math.cos(angle), + 0, + 0, + 0, + 1 + ); + m1.premultiply(rotateMatrix); + } + let scaleMatrix = new ddeiEditor.Matrix3( + parentScaleX, + 0, + 0, + 0, + parentScaleY, + 0, + 0, + 0, + 1 + ); + m1.premultiply(scaleMatrix); + if (parentSubProcess.rotate) { + let angle = ddeiEditor.DDeiUtil.preciseTimes(-parentSubProcess.rotate, ddeiEditor.DDeiConfig.ROTATE_UNIT); + let rotateMatrix = new ddeiEditor.Matrix3( + Math.cos(angle), + Math.sin(angle), + 0, + -Math.sin(angle), + Math.cos(angle), + 0, + 0, + 0, + 1 + ); + m1.premultiply(rotateMatrix); + } + let move2Matrix = new ddeiEditor.Matrix3( + 1, + 0, + parentSubProcess.cpv.x + (rect.x + rect.width / 2 - parentRect.x - parentRect.width / 2), + 0, + 1, + parentSubProcess.cpv.y + (rect.y + rect.height / 2 - parentRect.y - parentRect.height / 2), + 0, + 0, + 1 + ); + m1.premultiply(move2Matrix); + parentSubProcess.transVectors(m1); + this.extParentBounds(parentSubProcess, rect.width + 40 - parentRect.width, rect.height + 40 - parentRect.height); + parentSubProcess.updateLinkModels(); + } + } + }, + subProcessUnLock() { + delete this.model.lock; + }, + subProcessLock() { + this.model.lock = 1; + }, + deleteElement() { + let stage = this.model.stage; + stage.removeModel(this.model, true); + } + } + }; + const SettingButtonDialog_vue_vue_type_style_index_0_scoped_09abda49_lang = ""; + const _hoisted_1 = ["id"]; + const _hoisted_2 = { style: { "display": "contents" } }; + const _hoisted_3 = { + key: 0, + "xlink:href": "#icon-ddei-flow-sub-process-marker" + }; + const _hoisted_4 = { + key: 1, + "xlink:href": "#icon-ddei-flow-sub-process-expand-marker" + }; + function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + var _a, _b, _c; + return _ctx.forceRefresh ? (vue.openBlock(), vue.createElementBlock("div", { + key: 0, + id: ((_a = _ctx.editor) == null ? void 0 : _a.id) + "_" + $data.dialogId, + style: vue.normalizeStyle({ transform: "scale(" + $data.stageRatio + ")" }), + class: "ddei-flow-setting-button-dialog" + }, [ + vue.createElementVNode("div", { + class: "content", + style: vue.normalizeStyle({ "flex-direction": ((_b = $data.model) == null ? void 0 : _b.bpmnBaseType) != "Event" ? "column" : "" }) + }, [ + (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_c = $props.options) == null ? void 0 : _c.buttons, (btn) => { + var _a2, _b2, _c2, _d, _e, _f, _g; + return vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [ + btn.viewer ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(btn.viewer), vue.mergeProps({ + key: 0, + editor: _ctx.editor, + options: $props.options, + model: $data.model, + ref_for: true + }, btn), null, 16, ["editor", "options", "model"])) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-edit-property" && $options.validItemCondition(btn) && ((_a2 = $data.controlDefine) == null ? void 0 : _a2.subject) == "bpmn" ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 1, + class: "icon-ddei-flow", + onMouseenter: _cache[0] || (_cache[0] = ($event) => $options.settingMouseEnter(_ctx.$el)), + onMouseleave: _cache[1] || (_cache[1] = ($event) => $options.settingMouseEnterLeave(_ctx.$el)), + "aria-hidden": "true" + }, _cache[7] || (_cache[7] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-setting" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-choose-activity" && $options.validItemCondition(btn) && ((_b2 = $data.model) == null ? void 0 : _b2.bpmnType) == "CallActivityTask" ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 2, + class: "icon-ddei-flow", + onMousedown: _cache[2] || (_cache[2] = ($event) => $options.startChooseActivity(_ctx.$el)), + "aria-hidden": "true" + }, _cache[8] || (_cache[8] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-link" }, null, -1) + ]), 32)) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-expand-or-not" && $options.validItemCondition(btn) && ((_c2 = $data.model) == null ? void 0 : _c2.allowIncludeModel) ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 3, + class: "icon-ddei-flow", + onClick: _cache[3] || (_cache[3] = ($event) => $options.expandOrNotSubProcess()), + "aria-hidden": "true" + }, [ + !((_d = $data.model) == null ? void 0 : _d.isExpand) ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_3)) : vue.createCommentVNode("", true), + ((_e = $data.model) == null ? void 0 : _e.isExpand) ? (vue.openBlock(), vue.createElementBlock("use", _hoisted_4)) : vue.createCommentVNode("", true) + ])) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-lock-or-unlock" && $options.validItemCondition(btn) && ((_f = $data.model) == null ? void 0 : _f.allowIncludeModel) && $data.model.isExpand == 1 && !$data.model.lock ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 4, + class: "icon-ddei-flow", + onClick: _cache[4] || (_cache[4] = ($event) => $options.subProcessLock()), + "aria-hidden": "true" + }, _cache[9] || (_cache[9] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-lock" }, null, -1) + ]))) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-lock-or-unlock" && $options.validItemCondition(btn) && ((_g = $data.model) == null ? void 0 : _g.allowIncludeModel) && $data.model.isExpand == 1 && $data.model.lock ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 5, + class: "icon-ddei-flow", + onClick: _cache[5] || (_cache[5] = ($event) => $options.subProcessUnLock()), + "aria-hidden": "true" + }, _cache[10] || (_cache[10] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-unlock" }, null, -1) + ]))) : vue.createCommentVNode("", true), + !btn.viewer && btn.id == "ddei-flow-remove-control" && $options.validItemCondition(btn) ? (vue.openBlock(), vue.createElementBlock("svg", { + key: 6, + class: "icon-ddei-flow", + onClick: _cache[6] || (_cache[6] = ($event) => $options.deleteElement(_ctx.$el)), + "aria-hidden": "true" + }, _cache[11] || (_cache[11] = [ + vue.createElementVNode("use", { "xlink:href": "#icon-ddei-flow-trash" }, null, -1) + ]))) : vue.createCommentVNode("", true) + ]); + }), 256)) + ], 4) + ], 12, _hoisted_1)) : vue.createCommentVNode("", true); + } + const SettingButtonDialog = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-09abda49"]]); + const _DDeiFlowSettingButtonDialog = class _DDeiFlowSettingButtonDialog extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "name", SettingButtonDialog.name); + __publicField(this, "plugins", [SettingButtonDialog]); + } + getDialogs(editor) { + return this.plugins; + } + static modify(fn) { + return _DDeiFlowSettingButtonDialog.defaultIns.modify(fn); + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[SettingButtonDialog.name]) { + for (let i in options[SettingButtonDialog.name]) { + newOptions[i] = options[SettingButtonDialog.name][i]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiFlowSettingButtonDialog(newOptions); + return panels; + } + } + return _DDeiFlowSettingButtonDialog; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowSettingButtonDialog, "defaultIns", new _DDeiFlowSettingButtonDialog({ + buttons: [ + { + id: "ddei-flow-edit-property" + }, + { + id: "ddei-flow-choose-activity" + }, + { + id: "ddei-flow-expand-or-not" + }, + { + id: "ddei-flow-lock-or-unlock" + }, + { + id: "ddei-flow-remove-control" + } + ] + })); + let DDeiFlowSettingButtonDialog = _DDeiFlowSettingButtonDialog; + const _DDeiFlowDialogs = class _DDeiFlowDialogs extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "type", "package"); + __publicField(this, "plugins", [DDeiFlowElementSettingDialog, DDeiFlowSettingButtonDialog]); + } + getDialogs(editor) { + var _a; + let dialogs = []; + (_a = this.plugins) == null ? void 0 : _a.forEach((plugin) => { + let ls; + if (ddeiEditor.DDeiPluginBase.isSubclass(plugin, ddeiEditor.DDeiPluginBase)) { + ls = plugin.defaultIns.getDialogs(editor); + } else if (plugin instanceof ddeiEditor.DDeiPluginBase) { + ls = plugin.getDialogs(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + dialogs = dialogs.concat(ls); + } + }); + return dialogs; + } + static modify(fn) { + return _DDeiFlowDialogs.defaultIns.modify(fn); + } + static configuration(options) { + var _a; + if (options) { + let dialogs = new _DDeiFlowDialogs(options); + for (let i = 0; i < ((_a = dialogs.plugins) == null ? void 0 : _a.length); i++) { + dialogs.plugins[i] = dialogs.plugins[i].configuration(options, true); + } + return dialogs; + } + return _DDeiFlowDialogs; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowDialogs, "defaultIns", new _DDeiFlowDialogs(null)); + let DDeiFlowDialogs = _DDeiFlowDialogs; + const _DDeiKeyActionCancelChooseActivity = class _DDeiKeyActionCancelChooseActivity extends ddeiEditor.DDeiKeyAction { + constructor() { + super(...arguments); + __publicField(this, "name", "ddei-core-keyaction-cancel-choose-activity"); + __publicField(this, "defaultOptions", { + "keys": [ + { + keys: "27" + } + ] + }); + } + getHotKeys(editor) { + return [this]; + } + static configuration(options, fullConfig = false) { + if (options) { + let newOptions = {}; + if (fullConfig) { + if (fullConfig) { + if (options[_DDeiKeyActionCancelChooseActivity.defaultIns.name]) { + for (let i in options[_DDeiKeyActionCancelChooseActivity.defaultIns.name]) { + newOptions[i] = options[_DDeiKeyActionCancelChooseActivity.defaultIns.name][i]; + } + } + } + } else { + newOptions = options; + } + if (newOptions && Object.keys(newOptions).length !== 0) { + let panels = new _DDeiKeyActionCancelChooseActivity(newOptions); + return panels; + } + } + return _DDeiKeyActionCancelChooseActivity; + } + static modify(fn) { + return _DDeiKeyActionCancelChooseActivity.defaultIns.modify(fn); + } + // ============================ 方法 =============================== + action(evt, ddInstance, editor) { + var _a, _b; + (_b = (_a = editor.tempCallActivity) == null ? void 0 : _a.render) == null ? void 0 : _b.clearCachedValue(); + delete editor.tempCallActivity; + delete editor.tempChooseCallActivity; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiKeyActionCancelChooseActivity, "defaultIns", new _DDeiKeyActionCancelChooseActivity()); + let DDeiKeyActionCancelChooseActivity = _DDeiKeyActionCancelChooseActivity; + const _DDeiFlowHotkeys = class _DDeiFlowHotkeys extends ddeiEditor.DDeiPluginBase { + constructor() { + super(...arguments); + __publicField(this, "type", "package"); + __publicField(this, "plugins", [ + DDeiKeyActionCancelChooseActivity + ]); + } + getHotKeys(editor) { + var _a; + let hotkeys = []; + (_a = this.plugins) == null ? void 0 : _a.forEach((plugin) => { + let ls; + if (ddeiEditor.DDeiPluginBase.isSubclass(plugin, ddeiEditor.DDeiPluginBase)) { + ls = plugin.defaultIns.getHotKeys(editor); + } else if (plugin instanceof ddeiEditor.DDeiPluginBase) { + ls = plugin.getHotKeys(editor); + } + if ((ls == null ? void 0 : ls.length) > 0) { + hotkeys = hotkeys.concat(ls); + } + }); + return hotkeys; + } + static modify(fn) { + return _DDeiFlowHotkeys.defaultIns.modify(fn); + } + static configuration(options) { + var _a; + let hotkeys = new _DDeiFlowHotkeys(options); + for (let i = 0; i < ((_a = hotkeys.plugins) == null ? void 0 : _a.length); i++) { + hotkeys.plugins[i] = hotkeys.plugins[i].configuration(options, true); + } + return hotkeys; + } + }; + /** + * 缺省实例 + */ + __publicField(_DDeiFlowHotkeys, "defaultIns", new _DDeiFlowHotkeys(null)); + let DDeiFlowHotkeys = _DDeiFlowHotkeys; + class DDeiFlowFile { + constructor(props) { + /** + * 所属API + */ + __publicField(this, "api"); + /** + * id + */ + __publicField(this, "id"); + /** + * 名称 + */ + __publicField(this, "name"); + /** + * 文件包含的所有流程图 + */ + __publicField(this, "graphics", []); + for (let i in props) { + this[i] = props[i]; + } + } + toJSON() { + var _a; + let returnData = {}; + for (let i in this) { + if (this[i] || this[i] === 0) { + returnData[i] = this[i]; + } + } + if (((_a = returnData.graphics) == null ? void 0 : _a.length) > 0) { + let gs = []; + returnData.graphics.forEach((graph) => { + gs.push(graph.toJSON()); + }); + returnData.graphics = gs; + } else { + delete returnData.graphics; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowGraph { + constructor(props) { + /** + * 所属API + */ + __publicField(this, "api"); + /** + * 所属文件 + */ + __publicField(this, "file"); + /** + * id + */ + __publicField(this, "id"); + /** + * 名称 + */ + __publicField(this, "name"); + /** + * 所有节点 + */ + __publicField(this, "nodes", /* @__PURE__ */ new Map()); + /** + * 所有分组 + */ + __publicField(this, "groups"); + /** + * 开始节点 + */ + __publicField(this, "startNodes", []); + /** + * 结束节点 + */ + __publicField(this, "endNodes", []); + /** + * 孤立节点 + */ + __publicField(this, "isolatedNodes", []); + for (let i in props) { + this[i] = props[i]; + } + } + /** + * 获取流程节点 + * @param key key字段 + */ + getFlowNode(key) { + let nodes = Array.from(this.nodes.values()); + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i]; + if (node[this.api.jsonKeyField] == key) { + return node; + } + } + } + /** + * 批量设置节点属性 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setNodesData(nodes, nodify = true) { + if (nodes) { + let nodesModels2 = []; + for (let nodeId in nodes) { + let nodeData = nodes[nodeId]; + let node = this.getFlowNode(nodeId); + if (node && nodeData) { + nodesModels2.push(node.shapeModel); + node.setData(nodeData, false); + } + } + } + if (nodify && nodesModels.length > 0) { + let ddInstance = nodesModels[0].stage.ddInstance; + nodesModels.forEach((shapeModel) => { + shapeModel.render.clearCachedValue(); + shapeModel.render.enableRefreshShape(); + }); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setData(data2, nodify = true) { + if (data2) { + ddeiEditor.merge(this.shapeModel, data2); + ddeiEditor.merge(this, data2); + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + toJSON() { + var _a, _b, _c, _d, _e, _f; + let returnData = ddeiEditor.clone(this); + delete returnData.shapeModel; + delete returnData.file; + let startNodes = []; + (_a = returnData.startNodes) == null ? void 0 : _a.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + startNodes.push(key); + }); + if (startNodes.length > 0) { + returnData.startNodes = startNodes; + } else { + delete returnData.startNodes; + } + let endNodes = []; + (_b = returnData.endNodes) == null ? void 0 : _b.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + endNodes.push(key); + }); + if (endNodes.length > 0) { + returnData.endNodes = endNodes; + } else { + delete returnData.endNodes; + } + let isolatedNodes = []; + (_c = returnData.isolatedNodes) == null ? void 0 : _c.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + isolatedNodes.push(key); + }); + if (isolatedNodes.length > 0) { + returnData.isolatedNodes = isolatedNodes; + } else { + delete returnData.isolatedNodes; + } + let groups = []; + (_d = returnData.groups) == null ? void 0 : _d.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + groups.push(key); + }); + if (groups.length > 0) { + returnData.groups = groups; + } else { + delete returnData.groups; + } + if (((_e = returnData.nodes) == null ? void 0 : _e.size) > 0) { + let nodes = {}; + (_f = returnData.nodes) == null ? void 0 : _f.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + nodes[key] = node.toJSON(); + }); + returnData.nodes = nodes; + } else { + delete returnData.nodes; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowNode { + constructor(props) { + /** + * 所属API + */ + __publicField(this, "api"); + /** + * 所属图形 + */ + __publicField(this, "graph"); + /** + * id + */ + __publicField(this, "id"); + /** + * code + */ + __publicField(this, "code"); + /** + * 名称 + */ + __publicField(this, "name"); + /** + * 备注 + */ + __publicField(this, "desc"); + /** + * 直接前置节点 + */ + __publicField(this, "prevNodes", []); + /** + * 直接后续节点 + */ + __publicField(this, "nextNodes", []); + /** + * 附着节点 + */ + __publicField(this, "attachNodes", []); + /** + * 所有层级子流程,按照最外层到最里层的顺序排序 + */ + __publicField(this, "subProcesses"); + for (let i in props) { + this[i] = props[i]; + } + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setData(data2, nodify = true) { + if (data2) { + ddeiEditor.merge(this.shapeModel, data2); + ddeiEditor.merge(this, data2); + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + toJSON() { + var _a, _b, _c, _d; + let returnData = {}; + for (let i in this) { + if (this[i] || this[i] === 0) { + returnData[i] = this[i]; + } + } + delete returnData.shapeModel; + delete returnData.graph; + delete returnData.essBounds; + let prevNodes = []; + (_a = returnData.prevNodes) == null ? void 0 : _a.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + prevNodes.push(key); + }); + if (prevNodes.length > 0) { + returnData.prevNodes = prevNodes; + } else { + delete returnData.prevNodes; + } + let nextNodes = []; + (_b = returnData.nextNodes) == null ? void 0 : _b.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + nextNodes.push(key); + }); + if (nextNodes.length > 0) { + returnData.nextNodes = nextNodes; + } else { + delete returnData.nextNodes; + } + let subProcesses = []; + (_c = returnData.subProcesses) == null ? void 0 : _c.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + subProcesses.push(key); + }); + if (subProcesses.length > 0) { + returnData.subProcesses = subProcesses; + } else { + delete returnData.subProcesses; + } + let attachNodes = []; + (_d = returnData.attachNodes) == null ? void 0 : _d.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + attachNodes.push(key); + }); + if (attachNodes.length > 0) { + returnData.attachNodes = attachNodes; + } else { + delete returnData.attachNodes; + } + if (returnData.attachPNode) { + let key = returnData.attachPNode[this.api.jsonKeyField] ? returnData.attachPNode[this.api.jsonKeyField] : returnData.attachPNode.id; + returnData.attachPNode = key; + } else { + delete returnData.attachPNode; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowGroup { + constructor(props) { + /** + * 所属API + */ + __publicField(this, "api"); + /** + * 分组ID + */ + __publicField(this, "id"); + /** + * 分组名称 + */ + __publicField(this, "name"); + /** + * 分组备注 + */ + __publicField(this, "desc"); + /** + * 分组中的所有节点引用 + */ + __publicField(this, "nodes", /* @__PURE__ */ new Map()); + for (let i in props) { + this[i] = props[i]; + } + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setData(data2, nodify = true) { + if (data2) { + ddeiEditor.merge(this.shapeModel, data2); + ddeiEditor.merge(this, data2); + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setNodesData(nodes, nodify = true) { + if (nodes) { + for (let nodeId in nodes) { + let nodeData = nodes[nodeId]; + if (nodeData) { + ddeiEditor.merge(this.shapeModel, data); + ddeiEditor.merge(this, data); + } + } + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + toJSON() { + var _a, _b; + let returnData = {}; + for (let i in this) { + if (this[i] || this[i] === 0) { + returnData[i] = this[i]; + } + } + delete returnData.shapeModel; + delete returnData.graph; + delete returnData.essBounds; + if (((_a = returnData.nodes) == null ? void 0 : _a.size) > 0) { + let nodes = []; + (_b = returnData.nodes) == null ? void 0 : _b.forEach((node) => { + let key = node[this.api.jsonKeyField] ? node[this.api.jsonKeyField] : node.id; + nodes.push(key); + }); + returnData.nodes = nodes; + } else { + delete returnData.nodes; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowSequence { + constructor(props) { + /** + * 所属API + */ + __publicField(this, "api"); + /** + * 所属图形 + */ + __publicField(this, "graph"); + /** + * 条件,默认无条件 + */ + __publicField(this, "condition", null); + /** + * 是否默认 + */ + __publicField(this, "default", false); + /** + * id + */ + __publicField(this, "id"); + /** + * code + */ + __publicField(this, "code"); + /** + * 名称 + */ + __publicField(this, "name"); + /** + * 备注 + */ + __publicField(this, "desc"); + /** + * 文本 + */ + __publicField(this, "text"); + /** + * 直接前置节点 + */ + __publicField(this, "prevNode"); + /** + * 直接后续节点 + */ + __publicField(this, "nextNode"); + for (let i in props) { + this[i] = props[i]; + } + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setData(data2, nodify = true) { + if (data2) { + ddeiEditor.merge(this.shapeModel, data2); + ddeiEditor.merge(this, data2); + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + toJSON() { + let returnData = {}; + for (let i in this) { + if (this[i] || this[i] === 0) { + returnData[i] = this[i]; + } + } + delete returnData.shapeModel; + delete returnData.graph; + if (returnData.prevNode) { + let key = returnData.prevNode[this.api.jsonKeyField] ? returnData.prevNode[this.api.jsonKeyField] : returnData.prevNode.id; + returnData.prevNode = key; + } else { + delete returnData.prevNode; + } + if (returnData.nextNode) { + let key = returnData.nextNode[this.api.jsonKeyField] ? returnData.nextNode[this.api.jsonKeyField] : returnData.nextNode.id; + returnData.nextNode = key; + } else { + delete returnData.nextNode; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowSubProcess extends DDeiFlowNode { + constructor() { + super(...arguments); + /** + * 子流程所有节点 + */ + __publicField(this, "nodes", /* @__PURE__ */ new Map()); + /** + * 子流程开始节点 + */ + __publicField(this, "startNodes", []); + /** + * 子流程结束节点 + */ + __publicField(this, "endNodes", []); + /** + * 子流程孤立节点 + */ + __publicField(this, "isolatedNodes", []); + } + /** + * 设置属性到图形对象中,并根据 + * @param data 属性对象 + * @param nodify 立即刷新 + */ + setData(data2, nodify = true) { + if (data2) { + ddeiEditor.merge(this.shapeModel, data2); + ddeiEditor.merge(this, data2); + } + if (nodify) { + let ddInstance = this.shapeModel.stage.ddInstance; + this.shapeModel.render.clearCachedValue(); + this.shapeModel.render.enableRefreshShape(); + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + } + toJSON() { + var _a, _b, _c, _d, _e; + let api = this.api; + let returnData = super.toJSON(); + let startNodes = []; + (_a = returnData.startNodes) == null ? void 0 : _a.forEach((node) => { + let key = node[api.jsonKeyField] ? node[api.jsonKeyField] : node.id; + startNodes.push(key); + }); + if (startNodes.length > 0) { + returnData.startNodes = startNodes; + } else { + delete returnData.startNodes; + } + let endNodes = []; + (_b = returnData.endNodes) == null ? void 0 : _b.forEach((node) => { + let key = node[api.jsonKeyField] ? node[api.jsonKeyField] : node.id; + endNodes.push(key); + }); + if (endNodes.length > 0) { + returnData.endNodes = endNodes; + } else { + delete returnData.endNodes; + } + let isolatedNodes = []; + (_c = returnData.isolatedNodes) == null ? void 0 : _c.forEach((node) => { + let key = node[api.jsonKeyField] ? node[api.jsonKeyField] : node.id; + isolatedNodes.push(key); + }); + if (isolatedNodes.length > 0) { + returnData.isolatedNodes = isolatedNodes; + } else { + delete returnData.isolatedNodes; + } + if (((_d = returnData.nodes) == null ? void 0 : _d.size) > 0) { + let nodes = {}; + (_e = returnData.nodes) == null ? void 0 : _e.forEach((node) => { + let key = node[api.jsonKeyField] ? node[api.jsonKeyField] : node.id; + nodes[key] = node.toJSON(); + }); + returnData.nodes = nodes; + } else { + delete returnData.nodes; + } + delete returnData.api; + return returnData; + } + } + class DDeiFlowBpmnXmlNode { + constructor(contentStr, defineStr, processStr, currentProcessStr, rootStr = null) { + /** + * 追加在当前位置 + */ + __publicField(this, "contentStr", null); + /** + * 追加在define这一级,用于新增名称空间或者引用 + */ + __publicField(this, "rootStr", null); + /** + * 追加在定义级,与当前流程process节点平级 + */ + __publicField(this, "defineStr", null); + /** + * 追加当前最外层流程 + */ + __publicField(this, "processStr", null); + /** + * 追加当前子流程内部 + */ + __publicField(this, "currentProcessStr", null); + this.contentStr = contentStr; + this.defineStr = defineStr; + this.processStr = processStr; + this.currentProcessStr = currentProcessStr; + this.rootStr = rootStr; + } + } + class DDeiFlowAPI { + constructor(editor) { + __publicField(this, "editor"); + /** + * 配置的属性 + */ + __publicField(this, "jsonField", ["id", "name", "code", "text", "ep", "sp", "desc", "isUnlimited", "capacity", "condition", "default", "bpmnType", "bpmnSubType", "scriptFormat", "dataType", "customDataType", "isCollection", "loopCardinality", "script", "bpmnBaseType", "ordering", "activityId", "errorCode", "timeType", "timeValue", "potentialOwner", "humanPerformer", "notInterrupting", "messageName", "signalName", "isLoop", "isLoop", "isTransaction", "multiInstance", "isParallel", "isCompensation", "essBounds"]); + /** + * json中以哪个字段作为key,默认为id,可以指定为code或其他字段 + */ + __publicField(this, "jsonKeyField", "id"); + /** + * 模型缓存 + */ + __publicField(this, "modelsCache", {}); + /** + * 转换为bpmn时的回调函数,每个元素转换为bpmn前都会调用此方法,用于接管bpmn元素的生成,如果返回false会触发原来的逻辑,返回其他值将不会调用原有的逻辑。 + */ + __publicField(this, "bpmnProcessorFN", null); + /** + * 转换为bpmn时的回调函数,每个元素转换为bpmn后都会调用此方法,用于接管bpmn元素的生成。 + */ + __publicField(this, "bpmnAfterProcessorFN", null); + /** + * 转换为bpmndi时的回调函数,每个元素转换为bpmndi前都会调用此方法,用于接管bpmn元素的生成,如果返回false会触发原来的逻辑,返回其他值将不会调用原有的逻辑。 + */ + __publicField(this, "bpmndiProcessorFN", null); + this.editor = editor; + } + /** + * 设置键字段 + * @param field 字段名称 + */ + setJsonKeyField(field) { + if (field) { + this.jsonKeyField = field; + } + } + /** + * 配置返回的json数据字段 + * @param fn 外部方法,用来修改jsonField + */ + configJsonField(fn) { + fn(this.jsonField); + } + /** + * 将模型转换为图片 并返回base64 + * @param models + */ + toImage(models, skipMark = false) { + return new Promise((resolve, reject) => { + let imageMap = {}; + let allModels = []; + models.forEach((model) => { + allModels.push(model); + if (model.allowIncludeModel) { + let subModels = getIncludeModels(model); + subModels.forEach((sm) => { + if (!ddeiEditor.DDeiUtil.isModelHidden(sm)) { + allModels.push(sm); + } + }); + } + }); + let ddInstance = this.editor.ddInstance; + let rat1 = ddInstance == null ? void 0 : ddInstance.render.ratio; + let stage = ddInstance.stage; + let lines = []; + let doubleLines = []; + allModels.forEach((ims) => { + let sublinks = stage.getSourceModelLinks(ims.id); + sublinks == null ? void 0 : sublinks.forEach((slink) => { + if (!slink.disabled && slink.dm) { + if (lines.indexOf(slink.dm) == -1) { + lines.push(slink.dm); + } else { + doubleLines.push(slink.dm); + } + } + }); + }); + lines = doubleLines; + let promiseArr = []; + allModels.push(...lines); + allModels.forEach((model) => { + promiseArr.push(new Promise((resolve2, reject2) => { + let loadImage = false; + if (model.render.viewer) { + loadImage = true; + } else if (model.render.tempCanvas) { + imageMap[model.id] = new Image(); + imageMap[model.id].src = model.render.tempCanvas.toDataURL("image/png"); + imageMap[model.id].onload = () => { + resolve2(); + }; + loadImage = true; + } + if (!loadImage) { + resolve2(); + } + })); + }); + let canvas = document.createElement("canvas"); + let outRect = ddeiEditor.DDeiAbstractShape.getOutRectByPV(allModels); + let width = outRect.width * rat1; + let height = outRect.height * rat1; + canvas.setAttribute("width", width); + canvas.setAttribute("height", height); + canvas.setAttribute("style", "pointer-events:none;z-index:100;position:absolute;-webkit-font-smoothing:antialiased;-moz-transform-origin:left top;-moz-transform:scale(" + 1 / rat1 + ");display:block;zoom:" + 1 / rat1); + let ctx = canvas.getContext("2d", { willReadFrequently: true }); + ctx.translate(-outRect.x * rat1, -outRect.y * rat1); + Promise.all(promiseArr).then((all) => { + for (let i = 0; i < allModels.length; i++) { + let model = allModels[i]; + let modelImage = imageMap[model.id]; + if (modelImage) { + let outRect2 = ddeiEditor.DDeiAbstractShape.getOutRectByPV([model]); + if (model.baseModelType == "DDeiLine") { + ctx == null ? void 0 : ctx.drawImage(modelImage, ((outRect2.x + outRect2.x1) / 2 - model.render.tempCanvas.offsetWidth / 2 / rat1) * rat1, ((outRect2.y + outRect2.y1) / 2 - model.render.tempCanvas.offsetHeight / 2 / rat1) * rat1); + } else { + ctx == null ? void 0 : ctx.drawImage(modelImage, outRect2.x * rat1, outRect2.y * rat1); + } + } + } + resolve(canvas.toDataURL()); + }); + }); + } + toSimpleSvg(dom) { + let useElements = dom.querySelectorAll("use"); + let arr = [...useElements]; + let cloneElements = []; + arr.forEach((useElement) => { + let href = useElement.getAttribute("xlink:href"); + if (href && href.startsWith("#")) { + let id = href.substring(1); + let paths = document.getElementById(id).querySelectorAll("path"); + let svgWidth = useElement.parentNode.width; + let svgHeight = useElement.parentNode.height; + let totalBBox = { x: Infinity, y: Infinity, width: 0, height: 0 }; + paths.forEach(function(path) { + let bbox = path.getBBox(); + totalBBox.x = Math.min(totalBBox.x, bbox.x); + totalBBox.y = Math.min(totalBBox.y, bbox.y); + totalBBox.width = Math.max(totalBBox.width, bbox.x + bbox.width); + totalBBox.height = Math.max(totalBBox.height, bbox.y + bbox.height); + }); + if (svgWidth.baseVal) { + svgWidth = svgWidth.baseVal.value; + } + if (svgHeight.baseVal) { + svgHeight = svgHeight.baseVal.value; + } + let scaleX = svgWidth / totalBBox.width; + let scaleY = svgHeight / totalBBox.height; + let scale = Math.min(scaleX, scaleY); + let translateX = (svgWidth - totalBBox.width * scale) / 2 - totalBBox.x * scale; + let translateY = (svgHeight - totalBBox.height * scale) / 2 - totalBBox.y * scale; + paths.forEach((path) => { + let transform = "scale(" + scale + ") translate(" + translateX + "," + translateY + ")"; + let clonedElement = path.cloneNode(true); + clonedElement.setAttribute("transform", transform); + cloneElements.push(clonedElement); + useElement.parentNode.appendChild(clonedElement); + }); + } + }); + return cloneElements; + } + settingSubModelsData(model, dataJson) { + let key = model[this.jsonKeyField] ? model[this.jsonKeyField] : model.id; + if (dataJson[key]) { + ddeiEditor.merge(model, dataJson[key]); + } + if (model.models) { + for (let id in model.models) { + let subModel = model.models[id]; + this.settingSubModelsData(subModel, dataJson); + } + } + } + /** + * 加载并刷新流程图 + * @param designJson 设计器json + * @param dataJson 数据json + */ + loadData(designJson, dataJson = null) { + var _a, _b, _c, _d; + let resultJSON = typeof designJson == "string" ? JSON.parse(designJson) : designJson; + if (dataJson) { + dataJson = typeof dataJson == "string" ? JSON.parse(dataJson) : dataJson; + resultJSON.sheets.forEach((sheet) => { + sheet.stage.layers.forEach((layer) => { + this.settingSubModelsData(layer, dataJson); + }); + }); + } + let ddInstance = this.editor.ddInstance; + let file = ddeiEditor.DDeiFile.loadFromJSON(resultJSON, { + currentDdInstance: ddInstance + }); + let openedFiles = this.editor.files; + let openedFileIndex = -1; + if (!file.id) { + file.id = ddeiEditor.DDeiUtil.getUniqueCode(); + } + for (let fi = 0; fi < openedFiles.length; fi++) { + if (openedFiles[fi].id && openedFiles[fi].id == file.id) { + openedFileIndex = fi; + break; + } + } + ddInstance.stage.destroyRender(); + if (openedFileIndex == -1) { + this.editor.addFile(file); + for (let x = 0; x < this.editor.files.length; x++) { + this.editor.files[x].active = ddeiEditor.DDeiActiveType.NONE; + } + this.editor.currentFileIndex = this.editor.files.length - 1; + file.state = ddeiEditor.DDeiFileState.NONE; + file.active = ddeiEditor.DDeiActiveType.ACTIVE; + let sheets = file == null ? void 0 : file.sheets; + if (file && sheets && ddInstance) { + file.changeSheet(file.currentSheetIndex); + let stage = sheets[file.currentSheetIndex].stage; + stage.ddInstance = ddInstance; + ddInstance.disabled = false; + file.initHistroy(); + file.histroy[0].isNew = true; + ddInstance.stage = stage; + stage.initRender(); + if (!stage.wpv) { + stage.wpv = { + x: -(stage.width - ddInstance.render.container.clientWidth) / 2, + y: -(stage.height - ddInstance.render.container.clientHeight) / 2, + z: 0 + }; + } + this.editor.changeState(ddeiEditor.DDeiEditorState.DESIGNING); + ddInstance.bus.push( + ddeiEditor.DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + ddeiEditor.DDeiEditorEnumBusCommandType.RefreshEditorParts + ); + (_a = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _a.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + (_b = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _b.executeAll(); + } + } else { + file = this.editor.files[openedFileIndex]; + if (file && ddInstance) { + for (let x = 0; x < this.editor.files.length; x++) { + this.editor.files[x].active = ddeiEditor.DDeiActiveType.NONE; + } + file.active = ddeiEditor.DDeiActiveType.ACTIVE; + this.editor.currentFileIndex = openedFileIndex; + let stage = file.sheets[file.currentSheetIndex].stage; + stage.ddInstance = ddInstance; + ddInstance.stage = stage; + ddInstance.disabled = false; + stage.initRender(); + this.editor.changeState(ddeiEditor.DDeiEditorState.DESIGNING); + ddInstance.bus.push( + ddeiEditor.DDeiEditorEnumBusCommandType.ClearTemplateUI + ); + ddInstance.bus.push( + ddeiEditor.DDeiEditorEnumBusCommandType.RefreshEditorParts + ); + (_c = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _c.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + (_d = ddInstance == null ? void 0 : ddInstance.bus) == null ? void 0 : _d.executeAll(); + } + } + ddeiEditor.DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_FILE_AFTER", "LOAD_FILE", { file }, this.editor.ddInstance); + } + /** + * 刷新视图 + */ + refresh() { + var _a, _b; + let ddInstance = this.editor.ddInstance; + for (let i in this.modelsCache) { + let shapeModel = this.modelsCache[i]; + (_a = shapeModel == null ? void 0 : shapeModel.render) == null ? void 0 : _a.clearCachedValue(); + (_b = shapeModel == null ? void 0 : shapeModel.render) == null ? void 0 : _b.enableRefreshShape(); + } + ddInstance.bus.push(ddeiEditor.DDeiEnumBusCommandType.RefreshShape); + ddInstance.bus.executeAll(); + } + /** + * 获取当前的流程图 + */ + getFlowGraphs() { + let file = this.editor.files[this.editor.currentFileIndex]; + if (file) { + let sheet = file.sheets[file.currentSheetIndex]; + let graphics = this.stage2FlowGraphs(sheet.stage); + return graphics; + } + return null; + } + /** + * 将当前文档转换为易于识别和解析的json对象 + */ + toFlowObject(fileObj = false, allSheets = false) { + let file = this.editor.files[this.editor.currentFileIndex]; + if (file) { + let returnFile = new DDeiFlowFile({ id: file.id, name: file.name }); + let sheets = file.sheets; + let sheetLen = sheets.length; + let i = 0; + if (!allSheets) { + i = file.currentSheetIndex; + sheetLen = i + 1; + } + for (; i < sheetLen; i++) { + let sheet = sheets[i]; + let graphics = this.stage2FlowGraphs(sheet.stage, fileObj); + if (!fileObj) { + return graphics[0]; + } + graphics == null ? void 0 : graphics.forEach((graph) => { + graph.file = returnFile; + returnFile.graphics.push(graph); + }); + } + return returnFile; + } else { + return null; + } + } + /** + * 将舞台对象转换为易于解析和遍历的json对象 + * @param stage 舞台对象 + * @returns json对象 + */ + stage2FlowGraphs(stage, allLayers = true) { + if (stage) { + let layers = stage.layers; + if (!((layers == null ? void 0 : layers.length) > 0)) { + return null; + } + let layerLen = layers.length; + let i = 0; + let singleLayer = false; + if (!allLayers) { + i = stage.layerIndex; + layerLen = i + 1; + } + if (!allLayers || layerLen == 1) { + singleLayer = true; + } + let returnArray = []; + this.modelsCache = {}; + for (; i < layerLen; i++) { + let layer = layers[i]; + let graph = new DDeiFlowGraph({ id: singleLayer ? stage.id : stage.id + "_" + layer.id, name: stage.name, shapeModel: stage, api: this }); + let models = stage.getLayerModels(); + models.forEach((model) => { + this.modelsCache[model.id] = model; + let node = this.parseModelToFlowNode(model); + if (node) { + node.graph = graph; + graph.nodes.set(node[this.jsonKeyField] ? node[this.jsonKeyField] : node.id, node); + } + }); + let deletedNodes = []; + graph.nodes.forEach((node) => { + let model = this.modelsCache[node.id]; + if (model.includePModelId) { + let subProcessNode = this.getSubProcessNode(model.includePModelId, graph); + if (subProcessNode) { + let subProcesses = this.getSubProcessNodes(subProcessNode.id, graph); + node.graph = subProcessNode; + node.subProcesses = subProcesses; + subProcessNode.nodes.set(node[this.jsonKeyField] ? node[this.jsonKeyField] : node.id, node); + deletedNodes.push(node.id); + } + } + }); + graph.nodes.forEach((node) => { + var _a; + let model = this.modelsCache[node.id]; + let attachNodes = []; + (_a = model.attachModels) == null ? void 0 : _a.forEach((amid) => { + let attachModel = this.modelsCache[amid]; + if (attachModel) { + let attachNode = graph.nodes.get(attachModel[this.jsonKeyField] ? attachModel[this.jsonKeyField] : attachModel.id); + attachNode.attachPNode = node; + attachNodes.push(attachNode); + } + }); + if (attachNodes.length > 0) { + node.attachNodes = attachNodes; + } + }); + let isolatedNodes = []; + let groups = []; + graph.nodes.forEach((node) => { + var _a; + if (node instanceof DDeiFlowSequence) { + let lineModel = this.modelsCache[node.id]; + let lineSequenceNode = node; + let lineLinks = stage.getDistModelLinks(lineSequenceNode.id); + let lineNode1, lineNode2; + if ((lineLinks == null ? void 0 : lineLinks.length) > 0) { + let lineLink = lineLinks[0]; + if (lineLink.sm) { + let distPV = lineLink.getDistPV(); + lineNode1 = graph.nodes.get(lineLink.sm[this.jsonKeyField] ? lineLink.sm[this.jsonKeyField] : lineLink.sm.id); + let lineNodeModel = this.modelsCache[lineNode1.id]; + this.getSubProcessNode(lineNodeModel.includePModelId, graph); + if (distPV == lineModel.startPoint) { + lineSequenceNode.prevNode = lineNode1; + } else if (distPV == lineModel.endPoint) { + lineSequenceNode.nextNode = lineNode1; + } + } + } + if ((lineLinks == null ? void 0 : lineLinks.length) > 0) { + let lineLink = lineLinks[1]; + if (lineLink.sm) { + let distPV = lineLink.getDistPV(); + lineNode2 = graph.nodes.get(lineLink.sm[this.jsonKeyField] ? lineLink.sm[this.jsonKeyField] : lineLink.sm.id); + let lineNodeModel = this.modelsCache[lineNode2.id]; + this.getSubProcessNode(lineNodeModel.includePModelId, graph); + if (distPV == lineModel.startPoint) { + lineSequenceNode.prevNode = lineNode2; + } else if (distPV == lineModel.endPoint) { + lineSequenceNode.nextNode = lineNode2; + } + } + } + } else if (node instanceof DDeiFlowGroup) { + groups.push(node); + let model = this.modelsCache[node.id]; + (_a = model.includeModels) == null ? void 0 : _a.forEach((im) => { + let md = this.modelsCache[im]; + let key = md[this.jsonKeyField] ? md[this.jsonKeyField] : md.id; + node.nodes.set(key, graph.nodes.get(key)); + }); + } else { + let nodeLinks = stage.getSourceModelLinks(node.id); + nodeLinks == null ? void 0 : nodeLinks.forEach((link) => { + let linePV = link.getDistPV(); + let key = link.dm[this.jsonKeyField] ? link.dm[this.jsonKeyField] : link.dm.id; + let lineSequenceNode = graph.nodes.get(key); + if (linePV == link.dm.startPoint) { + node.nextNodes.push(lineSequenceNode); + } else if (linePV == link.dm.endPoint) { + node.prevNodes.push(lineSequenceNode); + } + }); + } + }); + graph.groups = groups; + graph.nodes.forEach((node) => { + let model = this.modelsCache[node.id]; + if (node.bpmnType == "StartEvent") { + if (!node.attachPNode) { + if (!model.includePModelId) { + graph.startNodes.push(node); + } else { + let subProcessNode = this.getSubProcessNode(model.includePModelId, graph); + if (subProcessNode) { + subProcessNode.startNodes.push(node); + } else { + graph.startNodes.push(node); + } + } + } + } else if (node.bpmnType == "EndEvent") { + if (!model.includePModelId) { + graph.endNodes.push(node); + } else { + let subProcessNode = this.getSubProcessNode(model.includePModelId, graph); + if (subProcessNode) { + subProcessNode.endNodes.push(node); + } else { + graph.endNodes.push(node); + } + } + } + }); + graph.nodes.forEach((node) => { + var _a, _b, _c; + if (node instanceof DDeiFlowSequence) { + if (!node.prevNode && !node.nextNode) { + isolatedNodes.push(node); + } + } else if (!node.attachPNode && ((_a = node.prevNodes) == null ? void 0 : _a.length) == 0 && node.bpmnType != "StartEvent" && node.bpmnType != "Group" && node.bpmnType != "Comment") { + if (node.bpmnType != "SubProcess") { + isolatedNodes.push(node); + } else { + let isolated = true; + graph.nodes.forEach((n1) => { + if (n1.subProcesses && n1.subProcesses.indexOf(node) != -1) { + isolated = false; + } + }); + if (isolated) { + isolatedNodes.push(node); + } + } + } else if (!node.attachPNode && ((_b = node.prevNodes) == null ? void 0 : _b.length) == 0 && ((_c = node.nextNodes) == null ? void 0 : _c.length) == 0) { + if (node.bpmnType != "SubProcess") { + isolatedNodes.push(node); + } else { + let isolated = true; + graph.nodes.forEach((n1) => { + if (n1.subProcesses && n1.subProcesses.indexOf(node) != -1) { + isolated = false; + } + }); + if (isolated) { + isolatedNodes.push(node); + } + } + } + }); + graph.isolatedNodes = isolatedNodes; + deletedNodes.forEach((id) => { + graph.nodes.delete(id); + }); + returnArray.push(graph); + } + return returnArray; + } else { + return null; + } + } + getSubProcessNodes(includePModelId, graph) { + let returnNodes = []; + while (includePModelId) { + let subProcessesNode = this.getSubProcessNode(includePModelId, graph); + if (subProcessesNode) { + returnNodes.splice(0, 0, subProcessesNode); + let subProcessModel = this.modelsCache[subProcessesNode.id]; + includePModelId = subProcessModel == null ? void 0 : subProcessModel.includePModelId; + } else { + break; + } + } + return returnNodes; + } + getSubProcessNode(includePModelId, graph) { + let pNodeModel = this.modelsCache[includePModelId]; + if (pNodeModel) { + let pNode = graph.nodes.get(pNodeModel[this.jsonKeyField] ? pNodeModel[this.jsonKeyField] : pNodeModel.id); + if (pNode) { + if (pNode.bpmnType == "SubProcess") { + return pNode; + } else if (pNode.bpmnType == "Group" && pNodeModel.includePModelId) { + return this.getSubProcessNode(pNodeModel.includePModelId, graph); + } + } + } + return null; + } + /** + * 转换model为node + * @param model model + * @returns node + */ + parseModelToFlowNode(model) { + let returnNode = null; + let modelJson = {}; + this.jsonField.forEach((field) => { + if (model[field] != void 0 && model[field] != null) { + modelJson[field] = model[field]; + } + }); + modelJson.shapeModel = model; + modelJson.api = this; + switch (model.bpmnBaseType) { + case "Event": + { + returnNode = new DDeiFlowNode(modelJson); + } + break; + case "Activity": + { + if (model.bpmnType == "SubProcess") { + returnNode = new DDeiFlowSubProcess(modelJson); + } else { + returnNode = new DDeiFlowNode(modelJson); + } + } + break; + case "Group": + { + returnNode = new DDeiFlowGroup(modelJson); + } + break; + case "Sequence": + { + returnNode = new DDeiFlowSequence(modelJson); + } + break; + case "Comment": + { + returnNode = new DDeiFlowNode(modelJson); + } + break; + } + if (!returnNode) { + returnNode = new DDeiFlowNode(modelJson); + } + return returnNode; + } + /** + * 将当前文档转换为符合bpmn规范的xml文档 + * @param allSheets 输出所有sheet,默认false + * @param diagram 输出bpmndi图形定义 + */ + toBPMNXML(allSheets = false, diagram = false) { + let flowObject = this.toFlowObject(true, allSheets); + let returnStr; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(flowObject, 0); + if (fnResult !== false) { + returnStr = fnResult; + } + } + if (!returnStr) { + if (!flowObject.id) { + flowObject.id = ddeiEditor.DDeiUtil.getUniqueCode(); + } + returnStr = ` + +`; + let contentStr = ""; + let defineStr = ""; + for (let gi = 0; gi < flowObject.graphics.length; gi++) { + let flowGraph2 = flowObject.graphics[gi]; + let processResult = this.flowGraph2BPMNXML(flowGraph2); + if (processResult == null ? void 0 : processResult.contentStr) { + contentStr += processResult.contentStr + "\n"; + } + if (processResult == null ? void 0 : processResult.defineStr) { + defineStr += processResult.defineStr; + } + } + returnStr += defineStr; + returnStr += contentStr; + if (diagram) { + let skip = false; + if (this.bpmndiProcessorFN) { + let fnResult = this.bpmndiProcessorFN(flowGraph, 2); + if (fnResult !== false) { + returnStr += fnResult + "\n"; + skip = true; + } + } + if (!skip) { + returnStr += ' \n'; + for (let gi = 0; gi < flowObject.graphics.length; gi++) { + let flowGraph2 = flowObject.graphics[gi]; + let bpmndiXML = this.flowGraph2BPMNDIXML(flowGraph2); + if (bpmndiXML) { + returnStr += bpmndiXML + "\n"; + } + } + returnStr += " \n"; + } + } + returnStr += ""; + } + return returnStr; + } + /** + * 将舞台对象转换为bpmn规范的xml字符串 + * @param stage 舞台对象 + * @returns xml字符串 + */ + flowGraph2BPMNXML(graph) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(graph, 0); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + if (graph) { + contentStr += ' \n'; + let innerStr = ""; + let processStr = ""; + graph.nodes.forEach((node) => { + let nodeResult = this.node2BPMNXML(node, 3); + if (nodeResult) { + if (nodeResult.contentStr) { + innerStr += nodeResult.contentStr; + } + if (nodeResult.defineStr) { + defineStr += nodeResult.defineStr; + } + if (nodeResult.processStr) { + processStr += nodeResult.processStr; + } + } + }); + contentStr += processStr; + contentStr += innerStr; + contentStr += " \n"; + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, null, null); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(graph, 0, returnData); + } + return returnData; + } + node2BPMNXML(node, tabLevel = 0) { + if (node) { + if (node instanceof DDeiFlowSequence) { + return this.sequence2BPMNXML(node, 3); + } else if (node instanceof DDeiFlowNode) { + if (node.bpmnType == "StartEvent") { + return this.startEvent2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "BoundaryEvent") { + return this.boundaryEvent2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "IntermediateCatchEvent") { + return this.intermediaCatchEvent2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "IntermediateThrowEvent") { + return this.intermediaThrowEvent2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "EndEvent") { + return this.endEvent2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "SubProcess") { + return this.subProcess2BPMNXML(node, tabLevel); + } else if (node.bpmnBaseType == "Gateway") { + return this.gateway2BPMNXML(node, tabLevel); + } else if (node.bpmnType == "Comment") { + return this.comment2BPMNXML(node, tabLevel); + } else if (node.bpmnBaseType == "Other") { + return this.other2BPMNXML(node, tabLevel); + } else { + return this.task2BPMNXML(node, tabLevel); + } + } else + ; + } + return null; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + startEvent2BPMNXML(node, tabLevel = 0) { + var _a, _b; + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + contentStr += tabStr + ' 0 && ((_b = node.subProcesses[0]) == null ? void 0 : _b.bpmnSubType) == 2) { + contentStr += ' isInterrupting="false"'; + } + } + let childXML = ""; + if (node.bpmnSubType == 2) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 3) { + childXML += tabStr + " \n"; + if (node.timeType == "timeDuration") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else if (node.timeType == "CRON") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 4) { + childXML += tabStr + " \n"; + childXML += tabStr + ' ${1+1>2}\n'; + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 5) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 9) { + if (node.errorCode) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else { + childXML += tabStr + " \n"; + } + } else if (node.bpmnSubType == 10) { + childXML += tabStr + " \n"; + } + if (childXML) { + contentStr += ">\n" + childXML + tabStr + "\n"; + } else { + contentStr += "/>\n"; + } + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, processStr, currentProcessStr); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(node, tabLevel, returnData); + } + return returnData; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + boundaryEvent2BPMNXML(node, tabLevel = 0) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + contentStr += tabStr + '\n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 2) { + childXML += tabStr + " \n"; + if (node.timeType == "timeDuration") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else if (node.timeType == "CRON") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 3) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 4) { + if (node.errorCode) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else { + childXML += tabStr + " \n"; + } + } else if (node.bpmnSubType == 6) { + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 5) { + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 9) { + contentStr += ' parallelMultiple="true"'; + } + if (childXML) { + contentStr += ">\n" + childXML + tabStr + "\n"; + } else { + contentStr += "/>\n"; + } + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, processStr, currentProcessStr); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(node, tabLevel, returnData); + } + return returnData; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + intermediaCatchEvent2BPMNXML(node, tabLevel = 0) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + contentStr += tabStr + '\n'; + childXML += tabStr + ' \n'; + } else if (!node.bpmnSubType || node.bpmnSubType == 1) { + childXML += tabStr + " \n"; + if (node.timeType == "timeDuration") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else if (node.timeType == "CRON") { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } else { + childXML += tabStr + " " + (node.timeValue ? node.timeValue : "") + "\n"; + } + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 3) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 6) { + contentStr += ' parallelMultiple="true"'; + } + if (childXML) { + contentStr += ">\n" + childXML + tabStr + "\n"; + } else { + contentStr += "/>\n"; + } + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, processStr, currentProcessStr); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(node, tabLevel, returnData); + } + return returnData; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + intermediaThrowEvent2BPMNXML(node, tabLevel = 0) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + contentStr += tabStr + '\n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 3) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 4) { + childXML += tabStr + " \n"; + } + if (childXML) { + contentStr += ">\n" + childXML + tabStr + "\n"; + } else { + contentStr += "/>\n"; + } + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, processStr, currentProcessStr); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(node, tabLevel, returnData); + } + return returnData; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + endEvent2BPMNXML(node, tabLevel = 0) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + contentStr += tabStr + '\n'; + childXML += tabStr + ' \n'; + } else { + childXML += tabStr + " \n"; + } + } else if (node.bpmnSubType == 9) { + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 8) { + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 3) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } else if (node.bpmnSubType == 7) { + childXML += tabStr + " \n"; + } else if (node.bpmnSubType == 4) { + contentStr += ' parallelMultiple="true"'; + } else if (node.bpmnSubType == 2) { + defineStr += ' \n'; + childXML += tabStr + ' \n'; + } + if (childXML) { + contentStr += ">\n" + childXML + tabStr + "\n"; + } else { + contentStr += "/>\n"; + } + } + returnData = new DDeiFlowBpmnXmlNode(contentStr, defineStr, processStr, currentProcessStr); + } + if (this.bpmnAfterProcessorFN) { + returnData = this.bpmnAfterProcessorFN(node, tabLevel, returnData); + } + return returnData; + } + /** + * 将对象转换为bpmn规范的xml字符串 + * @param node 对象 + * @returns xml字符串 + */ + task2BPMNXML(node, tabLevel = 0) { + let returnData; + let contentStr = ""; + let defineStr = ""; + let processStr = ""; + let currentProcessStr = ""; + let skip = false; + if (this.bpmnProcessorFN) { + let fnResult = this.bpmnProcessorFN(node, tabLevel); + if (fnResult !== false) { + returnData = fnResult; + skip = true; + } + } + if (!skip) { + let tabStr = ""; + for (let i = 0; i < tabLevel; i++) { + tabStr += " "; + } + if (node) { + let childXML = ""; + let nodeTag = "bpmn:task"; + if (node.bpmnType == "UserTask") { + nodeTag = "bpmn:userTask"; + } else if (node.bpmnType == "ServiceTask") { + nodeTag = "bpmn:serviceTask"; + } else if (node.bpmnType == "SendTask") { + nodeTag = "bpmn:sendTask"; + } else if (node.bpmnType == "ScriptTask") { + nodeTag = "bpmn:scriptTask"; + } else if (node.bpmnType == "ManualTask") { + nodeTag = "bpmn:manualTask"; + } else if (node.bpmnType == "ReceiveTask") { + nodeTag = "bpmn:receiveTask"; + } else if (node.bpmnType == "CallActivityTask") { + nodeTag = "bpmn:callActivity"; + } else if (node.bpmnType == "ChoreographyTask") { + nodeTag = "bpmn:choreography"; + } + contentStr += tabStr + "<" + nodeTag + ' id="' + (node[this.jsonKeyField] ? node[this.jsonKeyField] : node.id) + '"'; + if (node.name) { + contentStr += ' name="' + node.name + '"'; + } + if (node.isCompensation) { + contentStr += ' isForCompensation="true"'; + } + if (node.bpmnType == "ScriptTask") { + nodeTag = "bpmn:scriptTask"; + if (node.scriptFormat) { + contentStr += ' scriptFormat="' + node.scriptFormat + '"'; + } else if (node.script) { + contentStr += ' scriptFormat="groovy"'; + } + if (node.script) { + let scriptArr = node.script.split("\n"); + childXML += tabStr + " + + + + +
+ +
+ + + + + diff --git a/examples/html/flow.html b/examples/html/flow.html new file mode 100644 index 0000000..b79b3c1 --- /dev/null +++ b/examples/html/flow.html @@ -0,0 +1,38 @@ + + + + + + + + DFlow流程图-HTML直接使用 + + + + + + +
+ +
+ + + + + diff --git a/examples/html/vue.js b/examples/html/vue.js new file mode 100644 index 0000000..ef8cf98 --- /dev/null +++ b/examples/html/vue.js @@ -0,0 +1 @@ +var Vue = function (e) { "use strict"; function t (e, t) { const n = Object.create(null), o = e.split(","); for (let r = 0; r < o.length; r++)n[o[r]] = !0; return t ? e => !!n[e.toLowerCase()] : e => !!n[e] } const n = {}, o = [], r = () => { }, s = () => !1, i = /^on[^a-z]/, l = e => i.test(e), c = e => e.startsWith("onUpdate:"), a = Object.assign, u = (e, t) => { const n = e.indexOf(t); n > -1 && e.splice(n, 1) }, p = Object.prototype.hasOwnProperty, f = (e, t) => p.call(e, t), d = Array.isArray, h = e => "[object Map]" === C(e), m = e => "[object Set]" === C(e), g = e => "[object Date]" === C(e), v = e => "function" == typeof e, y = e => "string" == typeof e, _ = e => "symbol" == typeof e, b = e => null !== e && "object" == typeof e, S = e => b(e) && v(e.then) && v(e.catch), x = Object.prototype.toString, C = e => x.call(e), k = e => "[object Object]" === C(e), w = e => y(e) && "NaN" !== e && "-" !== e[0] && "" + parseInt(e, 10) === e, T = t(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"), E = t("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"), N = e => { const t = Object.create(null); return n => t[n] || (t[n] = e(n)) }, O = /-(\w)/g, $ = N((e => e.replace(O, ((e, t) => t ? t.toUpperCase() : "")))), P = /\B([A-Z])/g, A = N((e => e.replace(P, "-$1").toLowerCase())), F = N((e => e.charAt(0).toUpperCase() + e.slice(1))), R = N((e => e ? `on${F(e)}` : "")), M = (e, t) => !Object.is(e, t), V = (e, t) => { for (let n = 0; n < e.length; n++)e[n](t) }, I = (e, t, n) => { Object.defineProperty(e, t, { configurable: !0, enumerable: !1, value: n }) }, B = e => { const t = parseFloat(e); return isNaN(t) ? e : t }, L = e => { const t = y(e) ? Number(e) : NaN; return isNaN(t) ? e : t }; let j; const U = t("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console"); function D (e) { if (d(e)) { const t = {}; for (let n = 0; n < e.length; n++) { const o = e[n], r = y(o) ? K(o) : D(o); if (r) for (const e in r) t[e] = r[e] } return t } return y(e) || b(e) ? e : void 0 } const H = /;(?![^(]*\))/g, W = /:([^]+)/, z = /\/\*[^]*?\*\//g; function K (e) { const t = {}; return e.replace(z, "").split(H).forEach((e => { if (e) { const n = e.split(W); n.length > 1 && (t[n[0].trim()] = n[1].trim()) } })), t } function G (e) { let t = ""; if (y(e)) t = e; else if (d(e)) for (let n = 0; n < e.length; n++) { const o = G(e[n]); o && (t += o + " ") } else if (b(e)) for (const n in e) e[n] && (t += n + " "); return t.trim() } const q = t("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"), J = t("svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"), Z = t("area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"), Y = t("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly"); function Q (e) { return !!e || "" === e } function X (e, t) { if (e === t) return !0; let n = g(e), o = g(t); if (n || o) return !(!n || !o) && e.getTime() === t.getTime(); if (n = _(e), o = _(t), n || o) return e === t; if (n = d(e), o = d(t), n || o) return !(!n || !o) && function (e, t) { if (e.length !== t.length) return !1; let n = !0; for (let o = 0; n && o < e.length; o++)n = X(e[o], t[o]); return n }(e, t); if (n = b(e), o = b(t), n || o) { if (!n || !o) return !1; if (Object.keys(e).length !== Object.keys(t).length) return !1; for (const n in e) { const o = e.hasOwnProperty(n), r = t.hasOwnProperty(n); if (o && !r || !o && r || !X(e[n], t[n])) return !1 } } return String(e) === String(t) } function ee (e, t) { return e.findIndex((e => X(e, t))) } const te = (e, t) => t && t.__v_isRef ? te(e, t.value) : h(t) ? { [`Map(${t.size})`]: [...t.entries()].reduce(((e, [t, n]) => (e[`${t} =>`] = n, e)), {}) } : m(t) ? { [`Set(${t.size})`]: [...t.values()] } : !b(t) || d(t) || k(t) ? t : String(t); let ne; class oe { constructor(e = !1) { this.detached = e, this._active = !0, this.effects = [], this.cleanups = [], this.parent = ne, !e && ne && (this.index = (ne.scopes || (ne.scopes = [])).push(this) - 1) } get active () { return this._active } run (e) { if (this._active) { const t = ne; try { return ne = this, e() } finally { ne = t } } } on () { ne = this } off () { ne = this.parent } stop (e) { if (this._active) { let t, n; for (t = 0, n = this.effects.length; t < n; t++)this.effects[t].stop(); for (t = 0, n = this.cleanups.length; t < n; t++)this.cleanups[t](); if (this.scopes) for (t = 0, n = this.scopes.length; t < n; t++)this.scopes[t].stop(!0); if (!this.detached && this.parent && !e) { const e = this.parent.scopes.pop(); e && e !== this && (this.parent.scopes[this.index] = e, e.index = this.index) } this.parent = void 0, this._active = !1 } } } function re (e, t = ne) { t && t.active && t.effects.push(e) } function se () { return ne } const ie = e => { const t = new Set(e); return t.w = 0, t.n = 0, t }, le = e => (e.w & pe) > 0, ce = e => (e.n & pe) > 0, ae = new WeakMap; let ue = 0, pe = 1; let fe; const de = Symbol(""), he = Symbol(""); class me { constructor(e, t = null, n) { this.fn = e, this.scheduler = t, this.active = !0, this.deps = [], this.parent = void 0, re(this, n) } run () { if (!this.active) return this.fn(); let e = fe, t = ve; for (; e;) { if (e === this) return; e = e.parent } try { return this.parent = fe, fe = this, ve = !0, pe = 1 << ++ue, ue <= 30 ? (({ deps: e }) => { if (e.length) for (let t = 0; t < e.length; t++)e[t].w |= pe })(this) : ge(this), this.fn() } finally { ue <= 30 && (e => { const { deps: t } = e; if (t.length) { let n = 0; for (let o = 0; o < t.length; o++) { const r = t[o]; le(r) && !ce(r) ? r.delete(e) : t[n++] = r, r.w &= ~pe, r.n &= ~pe } t.length = n } })(this), pe = 1 << --ue, fe = this.parent, ve = t, this.parent = void 0, this.deferStop && this.stop() } } stop () { fe === this ? this.deferStop = !0 : this.active && (ge(this), this.onStop && this.onStop(), this.active = !1) } } function ge (e) { const { deps: t } = e; if (t.length) { for (let n = 0; n < t.length; n++)t[n].delete(e); t.length = 0 } } let ve = !0; const ye = []; function _e () { ye.push(ve), ve = !1 } function be () { const e = ye.pop(); ve = void 0 === e || e } function Se (e, t, n) { if (ve && fe) { let t = ae.get(e); t || ae.set(e, t = new Map); let o = t.get(n); o || t.set(n, o = ie()), xe(o) } } function xe (e, t) { let n = !1; ue <= 30 ? ce(e) || (e.n |= pe, n = !le(e)) : n = !e.has(fe), n && (e.add(fe), fe.deps.push(e)) } function Ce (e, t, n, o, r, s) { const i = ae.get(e); if (!i) return; let l = []; if ("clear" === t) l = [...i.values()]; else if ("length" === n && d(e)) { const e = Number(o); i.forEach(((t, n) => { ("length" === n || n >= e) && l.push(t) })) } else switch (void 0 !== n && l.push(i.get(n)), t) { case "add": d(e) ? w(n) && l.push(i.get("length")) : (l.push(i.get(de)), h(e) && l.push(i.get(he))); break; case "delete": d(e) || (l.push(i.get(de)), h(e) && l.push(i.get(he))); break; case "set": h(e) && l.push(i.get(de)) }if (1 === l.length) l[0] && ke(l[0]); else { const e = []; for (const t of l) t && e.push(...t); ke(ie(e)) } } function ke (e, t) { const n = d(e) ? e : [...e]; for (const o of n) o.computed && we(o); for (const o of n) o.computed || we(o) } function we (e, t) { (e !== fe || e.allowRecurse) && (e.scheduler ? e.scheduler() : e.run()) } const Te = t("__proto__,__v_isRef,__isVue"), Ee = new Set(Object.getOwnPropertyNames(Symbol).filter((e => "arguments" !== e && "caller" !== e)).map((e => Symbol[e])).filter(_)), Ne = Me(), Oe = Me(!1, !0), $e = Me(!0), Pe = Me(!0, !0), Ae = Fe(); function Fe () { const e = {}; return ["includes", "indexOf", "lastIndexOf"].forEach((t => { e[t] = function (...e) { const n = xt(this); for (let t = 0, r = this.length; t < r; t++)Se(n, 0, t + ""); const o = n[t](...e); return -1 === o || !1 === o ? n[t](...e.map(xt)) : o } })), ["push", "pop", "shift", "unshift", "splice"].forEach((t => { e[t] = function (...e) { _e(); const n = xt(this)[t].apply(this, e); return be(), n } })), e } function Re (e) { const t = xt(this); return Se(t, 0, e), t.hasOwnProperty(e) } function Me (e = !1, t = !1) { return function (n, o, r) { if ("__v_isReactive" === o) return !e; if ("__v_isReadonly" === o) return e; if ("__v_isShallow" === o) return t; if ("__v_raw" === o && r === (e ? t ? ft : pt : t ? ut : at).get(n)) return n; const s = d(n); if (!e) { if (s && f(Ae, o)) return Reflect.get(Ae, o, r); if ("hasOwnProperty" === o) return Re } const i = Reflect.get(n, o, r); return (_(o) ? Ee.has(o) : Te(o)) ? i : (e || Se(n, 0, o), t ? i : Nt(i) ? s && w(o) ? i : i.value : b(i) ? e ? gt(i) : ht(i) : i) } } function Ve (e = !1) { return function (t, n, o, r) { let s = t[n]; if (_t(s) && Nt(s) && !Nt(o)) return !1; if (!e && (bt(o) || _t(o) || (s = xt(s), o = xt(o)), !d(t) && Nt(s) && !Nt(o))) return s.value = o, !0; const i = d(t) && w(n) ? Number(n) < t.length : f(t, n), l = Reflect.set(t, n, o, r); return t === xt(r) && (i ? M(o, s) && Ce(t, "set", n, o) : Ce(t, "add", n, o)), l } } const Ie = { get: Ne, set: Ve(), deleteProperty: function (e, t) { const n = f(e, t), o = Reflect.deleteProperty(e, t); return o && n && Ce(e, "delete", t, void 0), o }, has: function (e, t) { const n = Reflect.has(e, t); return _(t) && Ee.has(t) || Se(e, 0, t), n }, ownKeys: function (e) { return Se(e, 0, d(e) ? "length" : de), Reflect.ownKeys(e) } }, Be = { get: $e, set: (e, t) => !0, deleteProperty: (e, t) => !0 }, Le = a({}, Ie, { get: Oe, set: Ve(!0) }), je = a({}, Be, { get: Pe }), Ue = e => e, De = e => Reflect.getPrototypeOf(e); function He (e, t, n = !1, o = !1) { const r = xt(e = e.__v_raw), s = xt(t); n || (t !== s && Se(r, 0, t), Se(r, 0, s)); const { has: i } = De(r), l = o ? Ue : n ? wt : kt; return i.call(r, t) ? l(e.get(t)) : i.call(r, s) ? l(e.get(s)) : void (e !== r && e.get(t)) } function We (e, t = !1) { const n = this.__v_raw, o = xt(n), r = xt(e); return t || (e !== r && Se(o, 0, e), Se(o, 0, r)), e === r ? n.has(e) : n.has(e) || n.has(r) } function ze (e, t = !1) { return e = e.__v_raw, !t && Se(xt(e), 0, de), Reflect.get(e, "size", e) } function Ke (e) { e = xt(e); const t = xt(this); return De(t).has.call(t, e) || (t.add(e), Ce(t, "add", e, e)), this } function Ge (e, t) { t = xt(t); const n = xt(this), { has: o, get: r } = De(n); let s = o.call(n, e); s || (e = xt(e), s = o.call(n, e)); const i = r.call(n, e); return n.set(e, t), s ? M(t, i) && Ce(n, "set", e, t) : Ce(n, "add", e, t), this } function qe (e) { const t = xt(this), { has: n, get: o } = De(t); let r = n.call(t, e); r || (e = xt(e), r = n.call(t, e)), o && o.call(t, e); const s = t.delete(e); return r && Ce(t, "delete", e, void 0), s } function Je () { const e = xt(this), t = 0 !== e.size, n = e.clear(); return t && Ce(e, "clear", void 0, void 0), n } function Ze (e, t) { return function (n, o) { const r = this, s = r.__v_raw, i = xt(s), l = t ? Ue : e ? wt : kt; return !e && Se(i, 0, de), s.forEach(((e, t) => n.call(o, l(e), l(t), r))) } } function Ye (e, t, n) { return function (...o) { const r = this.__v_raw, s = xt(r), i = h(s), l = "entries" === e || e === Symbol.iterator && i, c = "keys" === e && i, a = r[e](...o), u = n ? Ue : t ? wt : kt; return !t && Se(s, 0, c ? he : de), { next () { const { value: e, done: t } = a.next(); return t ? { value: e, done: t } : { value: l ? [u(e[0]), u(e[1])] : u(e), done: t } }, [Symbol.iterator] () { return this } } } } function Qe (e) { return function (...t) { return "delete" !== e && this } } function Xe () { const e = { get (e) { return He(this, e) }, get size () { return ze(this) }, has: We, add: Ke, set: Ge, delete: qe, clear: Je, forEach: Ze(!1, !1) }, t = { get (e) { return He(this, e, !1, !0) }, get size () { return ze(this) }, has: We, add: Ke, set: Ge, delete: qe, clear: Je, forEach: Ze(!1, !0) }, n = { get (e) { return He(this, e, !0) }, get size () { return ze(this, !0) }, has (e) { return We.call(this, e, !0) }, add: Qe("add"), set: Qe("set"), delete: Qe("delete"), clear: Qe("clear"), forEach: Ze(!0, !1) }, o = { get (e) { return He(this, e, !0, !0) }, get size () { return ze(this, !0) }, has (e) { return We.call(this, e, !0) }, add: Qe("add"), set: Qe("set"), delete: Qe("delete"), clear: Qe("clear"), forEach: Ze(!0, !0) }; return ["keys", "values", "entries", Symbol.iterator].forEach((r => { e[r] = Ye(r, !1, !1), n[r] = Ye(r, !0, !1), t[r] = Ye(r, !1, !0), o[r] = Ye(r, !0, !0) })), [e, n, t, o] } const [et, tt, nt, ot] = Xe(); function rt (e, t) { const n = t ? e ? ot : nt : e ? tt : et; return (t, o, r) => "__v_isReactive" === o ? !e : "__v_isReadonly" === o ? e : "__v_raw" === o ? t : Reflect.get(f(n, o) && o in t ? n : t, o, r) } const st = { get: rt(!1, !1) }, it = { get: rt(!1, !0) }, lt = { get: rt(!0, !1) }, ct = { get: rt(!0, !0) }, at = new WeakMap, ut = new WeakMap, pt = new WeakMap, ft = new WeakMap; function dt (e) { return e.__v_skip || !Object.isExtensible(e) ? 0 : function (e) { switch (e) { case "Object": case "Array": return 1; case "Map": case "Set": case "WeakMap": case "WeakSet": return 2; default: return 0 } }((e => C(e).slice(8, -1))(e)) } function ht (e) { return _t(e) ? e : vt(e, !1, Ie, st, at) } function mt (e) { return vt(e, !1, Le, it, ut) } function gt (e) { return vt(e, !0, Be, lt, pt) } function vt (e, t, n, o, r) { if (!b(e)) return e; if (e.__v_raw && (!t || !e.__v_isReactive)) return e; const s = r.get(e); if (s) return s; const i = dt(e); if (0 === i) return e; const l = new Proxy(e, 2 === i ? o : n); return r.set(e, l), l } function yt (e) { return _t(e) ? yt(e.__v_raw) : !(!e || !e.__v_isReactive) } function _t (e) { return !(!e || !e.__v_isReadonly) } function bt (e) { return !(!e || !e.__v_isShallow) } function St (e) { return yt(e) || _t(e) } function xt (e) { const t = e && e.__v_raw; return t ? xt(t) : e } function Ct (e) { return I(e, "__v_skip", !0), e } const kt = e => b(e) ? ht(e) : e, wt = e => b(e) ? gt(e) : e; function Tt (e) { ve && fe && xe((e = xt(e)).dep || (e.dep = ie())) } function Et (e, t) { const n = (e = xt(e)).dep; n && ke(n) } function Nt (e) { return !(!e || !0 !== e.__v_isRef) } function Ot (e) { return $t(e, !1) } function $t (e, t) { return Nt(e) ? e : new Pt(e, t) } class Pt { constructor(e, t) { this.__v_isShallow = t, this.dep = void 0, this.__v_isRef = !0, this._rawValue = t ? e : xt(e), this._value = t ? e : kt(e) } get value () { return Tt(this), this._value } set value (e) { const t = this.__v_isShallow || bt(e) || _t(e); e = t ? e : xt(e), M(e, this._rawValue) && (this._rawValue = e, this._value = t ? e : kt(e), Et(this)) } } function At (e) { return Nt(e) ? e.value : e } const Ft = { get: (e, t, n) => At(Reflect.get(e, t, n)), set: (e, t, n, o) => { const r = e[t]; return Nt(r) && !Nt(n) ? (r.value = n, !0) : Reflect.set(e, t, n, o) } }; function Rt (e) { return yt(e) ? e : new Proxy(e, Ft) } class Mt { constructor(e) { this.dep = void 0, this.__v_isRef = !0; const { get: t, set: n } = e((() => Tt(this)), (() => Et(this))); this._get = t, this._set = n } get value () { return this._get() } set value (e) { this._set(e) } } class Vt { constructor(e, t, n) { this._object = e, this._key = t, this._defaultValue = n, this.__v_isRef = !0 } get value () { const e = this._object[this._key]; return void 0 === e ? this._defaultValue : e } set value (e) { this._object[this._key] = e } get dep () { return e = xt(this._object), t = this._key, null == (n = ae.get(e)) ? void 0 : n.get(t); var e, t, n } } class It { constructor(e) { this._getter = e, this.__v_isRef = !0, this.__v_isReadonly = !0 } get value () { return this._getter() } } function Bt (e, t, n) { const o = e[t]; return Nt(o) ? o : new Vt(e, t, n) } class Lt { constructor(e, t, n, o) { this._setter = t, this.dep = void 0, this.__v_isRef = !0, this.__v_isReadonly = !1, this._dirty = !0, this.effect = new me(e, (() => { this._dirty || (this._dirty = !0, Et(this)) })), this.effect.computed = this, this.effect.active = this._cacheable = !o, this.__v_isReadonly = n } get value () { const e = xt(this); return Tt(e), !e._dirty && e._cacheable || (e._dirty = !1, e._value = e.effect.run()), e._value } set value (e) { this._setter(e) } } function jt (e, t, n, o) { let r; try { r = o ? e(...o) : e() } catch (s) { Dt(s, t, n) } return r } function Ut (e, t, n, o) { if (v(e)) { const r = jt(e, t, n, o); return r && S(r) && r.catch((e => { Dt(e, t, n) })), r } const r = []; for (let s = 0; s < e.length; s++)r.push(Ut(e[s], t, n, o)); return r } function Dt (e, t, n, o = !0) { if (t) { let o = t.parent; const r = t.proxy, s = n; for (; o;) { const t = o.ec; if (t) for (let n = 0; n < t.length; n++)if (!1 === t[n](e, r, s)) return; o = o.parent } const i = t.appContext.config.errorHandler; if (i) return void jt(i, null, 10, [e, r, s]) } !function (e, t, n, o = !0) { console.error(e) }(e, 0, 0, o) } let Ht = !1, Wt = !1; const zt = []; let Kt = 0; const Gt = []; let qt = null, Jt = 0; const Zt = Promise.resolve(); let Yt = null; function Qt (e) { const t = Yt || Zt; return e ? t.then(this ? e.bind(this) : e) : t } function Xt (e) { zt.length && zt.includes(e, Ht && e.allowRecurse ? Kt + 1 : Kt) || (null == e.id ? zt.push(e) : zt.splice(function (e) { let t = Kt + 1, n = zt.length; for (; t < n;) { const o = t + n >>> 1; rn(zt[o]) < e ? t = o + 1 : n = o } return t }(e.id), 0, e), en()) } function en () { Ht || Wt || (Wt = !0, Yt = Zt.then(ln)) } function tn (e) { d(e) ? Gt.push(...e) : qt && qt.includes(e, e.allowRecurse ? Jt + 1 : Jt) || Gt.push(e), en() } function nn (e, t = (Ht ? Kt + 1 : 0)) { for (; t < zt.length; t++) { const e = zt[t]; e && e.pre && (zt.splice(t, 1), t--, e()) } } function on (e) { if (Gt.length) { const e = [...new Set(Gt)]; if (Gt.length = 0, qt) return void qt.push(...e); for (qt = e, qt.sort(((e, t) => rn(e) - rn(t))), Jt = 0; Jt < qt.length; Jt++)qt[Jt](); qt = null, Jt = 0 } } const rn = e => null == e.id ? 1 / 0 : e.id, sn = (e, t) => { const n = rn(e) - rn(t); if (0 === n) { if (e.pre && !t.pre) return -1; if (t.pre && !e.pre) return 1 } return n }; function ln (e) { Wt = !1, Ht = !0, zt.sort(sn); try { for (Kt = 0; Kt < zt.length; Kt++) { const e = zt[Kt]; e && !1 !== e.active && jt(e, null, 14) } } finally { Kt = 0, zt.length = 0, on(), Ht = !1, Yt = null, (zt.length || Gt.length) && ln() } } e.devtools = void 0; let cn = []; function an (e, t, ...o) { if (e.isUnmounted) return; const r = e.vnode.props || n; let s = o; const i = t.startsWith("update:"), l = i && t.slice(7); if (l && l in r) { const e = `${"modelValue" === l ? "model" : l}Modifiers`, { number: t, trim: i } = r[e] || n; i && (s = o.map((e => y(e) ? e.trim() : e))), t && (s = o.map(B)) } let c, a = r[c = R(t)] || r[c = R($(t))]; !a && i && (a = r[c = R(A(t))]), a && Ut(a, e, 6, s); const u = r[c + "Once"]; if (u) { if (e.emitted) { if (e.emitted[c]) return } else e.emitted = {}; e.emitted[c] = !0, Ut(u, e, 6, s) } } function un (e, t, n = !1) { const o = t.emitsCache, r = o.get(e); if (void 0 !== r) return r; const s = e.emits; let i = {}, l = !1; if (!v(e)) { const o = e => { const n = un(e, t, !0); n && (l = !0, a(i, n)) }; !n && t.mixins.length && t.mixins.forEach(o), e.extends && o(e.extends), e.mixins && e.mixins.forEach(o) } return s || l ? (d(s) ? s.forEach((e => i[e] = null)) : a(i, s), b(e) && o.set(e, i), i) : (b(e) && o.set(e, null), null) } function pn (e, t) { return !(!e || !l(t)) && (t = t.slice(2).replace(/Once$/, ""), f(e, t[0].toLowerCase() + t.slice(1)) || f(e, A(t)) || f(e, t)) } let fn = null, dn = null; function hn (e) { const t = fn; return fn = e, dn = e && e.type.__scopeId || null, t } function mn (e, t = fn, n) { if (!t) return e; if (e._n) return e; const o = (...n) => { o._d && Pr(-1); const r = hn(t); let s; try { s = e(...n) } finally { hn(r), o._d && Pr(1) } return s }; return o._n = !0, o._c = !0, o._d = !0, o } function gn (e) { const { type: t, vnode: n, proxy: o, withProxy: r, props: s, propsOptions: [i], slots: l, attrs: a, emit: u, render: p, renderCache: f, data: d, setupState: h, ctx: m, inheritAttrs: g } = e; let v, y; const _ = hn(e); try { if (4 & n.shapeFlag) { const e = r || o; v = Wr(p.call(e, e, f, s, h, d, m)), y = a } else { const e = t; 0, v = Wr(e(s, e.length > 1 ? { attrs: a, slots: l, emit: u } : null)), y = t.props ? a : vn(a) } } catch (S) { Tr.length = 0, Dt(S, e, 1), v = jr(kr) } let b = v; if (y && !1 !== g) { const e = Object.keys(y), { shapeFlag: t } = b; e.length && 7 & t && (i && e.some(c) && (y = yn(y, i)), b = Dr(b, y)) } return n.dirs && (b = Dr(b), b.dirs = b.dirs ? b.dirs.concat(n.dirs) : n.dirs), n.transition && (b.transition = n.transition), v = b, hn(_), v } const vn = e => { let t; for (const n in e) ("class" === n || "style" === n || l(n)) && ((t || (t = {}))[n] = e[n]); return t }, yn = (e, t) => { const n = {}; for (const o in e) c(o) && o.slice(9) in t || (n[o] = e[o]); return n }; function _n (e, t, n) { const o = Object.keys(t); if (o.length !== Object.keys(e).length) return !0; for (let r = 0; r < o.length; r++) { const s = o[r]; if (t[s] !== e[s] && !pn(n, s)) return !0 } return !1 } function bn ({ vnode: e, parent: t }, n) { for (; t && t.subTree === e;)(e = t.vnode).el = n, t = t.parent } const Sn = e => e.__isSuspense, xn = { name: "Suspense", __isSuspense: !0, process (e, t, n, o, r, s, i, l, c, a) { null == e ? function (e, t, n, o, r, s, i, l, c) { const { p: a, o: { createElement: u } } = c, p = u("div"), f = e.suspense = kn(e, r, o, t, p, n, s, i, l, c); a(null, f.pendingBranch = e.ssContent, p, null, o, f, s, i), f.deps > 0 ? (Cn(e, "onPending"), Cn(e, "onFallback"), a(null, e.ssFallback, t, n, o, null, s, i), En(f, e.ssFallback)) : f.resolve(!1, !0) }(t, n, o, r, s, i, l, c, a) : function (e, t, n, o, r, s, i, l, { p: c, um: a, o: { createElement: u } }) { const p = t.suspense = e.suspense; p.vnode = t, t.el = e.el; const f = t.ssContent, d = t.ssFallback, { activeBranch: h, pendingBranch: m, isInFallback: g, isHydrating: v } = p; if (m) p.pendingBranch = f, Mr(f, m) ? (c(m, f, p.hiddenContainer, null, r, p, s, i, l), p.deps <= 0 ? p.resolve() : g && (c(h, d, n, o, r, null, s, i, l), En(p, d))) : (p.pendingId++, v ? (p.isHydrating = !1, p.activeBranch = m) : a(m, r, p), p.deps = 0, p.effects.length = 0, p.hiddenContainer = u("div"), g ? (c(null, f, p.hiddenContainer, null, r, p, s, i, l), p.deps <= 0 ? p.resolve() : (c(h, d, n, o, r, null, s, i, l), En(p, d))) : h && Mr(f, h) ? (c(h, f, n, o, r, p, s, i, l), p.resolve(!0)) : (c(null, f, p.hiddenContainer, null, r, p, s, i, l), p.deps <= 0 && p.resolve())); else if (h && Mr(f, h)) c(h, f, n, o, r, p, s, i, l), En(p, f); else if (Cn(t, "onPending"), p.pendingBranch = f, p.pendingId++, c(null, f, p.hiddenContainer, null, r, p, s, i, l), p.deps <= 0) p.resolve(); else { const { timeout: e, pendingId: t } = p; e > 0 ? setTimeout((() => { p.pendingId === t && p.fallback(d) }), e) : 0 === e && p.fallback(d) } }(e, t, n, o, r, i, l, c, a) }, hydrate: function (e, t, n, o, r, s, i, l, c) { const a = t.suspense = kn(t, o, n, e.parentNode, document.createElement("div"), null, r, s, i, l, !0), u = c(e, a.pendingBranch = t.ssContent, n, a, s, i); 0 === a.deps && a.resolve(!1, !0); return u }, create: kn, normalize: function (e) { const { shapeFlag: t, children: n } = e, o = 32 & t; e.ssContent = wn(o ? n.default : n), e.ssFallback = o ? wn(n.fallback) : jr(kr) } }; function Cn (e, t) { const n = e.props && e.props[t]; v(n) && n() } function kn (e, t, n, o, r, s, i, l, c, a, u = !1) { const { p: p, m: f, um: d, n: h, o: { parentNode: m, remove: g } } = a; let v; const y = function (e) { var t; return null != (null == (t = e.props) ? void 0 : t.suspensible) && !1 !== e.props.suspensible }(e); y && (null == t ? void 0 : t.pendingBranch) && (v = t.pendingId, t.deps++); const _ = e.props ? L(e.props.timeout) : void 0, b = { vnode: e, parent: t, parentComponent: n, isSVG: i, container: o, hiddenContainer: r, anchor: s, deps: 0, pendingId: 0, timeout: "number" == typeof _ ? _ : -1, activeBranch: null, pendingBranch: null, isInFallback: !0, isHydrating: u, isUnmounted: !1, effects: [], resolve (e = !1, n = !1) { const { vnode: o, activeBranch: r, pendingBranch: s, pendingId: i, effects: l, parentComponent: c, container: a } = b; if (b.isHydrating) b.isHydrating = !1; else if (!e) { const e = r && s.transition && "out-in" === s.transition.mode; e && (r.transition.afterLeave = () => { i === b.pendingId && f(s, a, t, 0) }); let { anchor: t } = b; r && (t = h(r), d(r, c, b, !0)), e || f(s, a, t, 0) } En(b, s), b.pendingBranch = null, b.isInFallback = !1; let u = b.parent, p = !1; for (; u;) { if (u.pendingBranch) { u.effects.push(...l), p = !0; break } u = u.parent } p || tn(l), b.effects = [], y && t && t.pendingBranch && v === t.pendingId && (t.deps--, 0 !== t.deps || n || t.resolve()), Cn(o, "onResolve") }, fallback (e) { if (!b.pendingBranch) return; const { vnode: t, activeBranch: n, parentComponent: o, container: r, isSVG: s } = b; Cn(t, "onFallback"); const i = h(n), a = () => { b.isInFallback && (p(null, e, r, i, o, null, s, l, c), En(b, e)) }, u = e.transition && "out-in" === e.transition.mode; u && (n.transition.afterLeave = a), b.isInFallback = !0, d(n, o, null, !0), u || a() }, move (e, t, n) { b.activeBranch && f(b.activeBranch, e, t, n), b.container = e }, next: () => b.activeBranch && h(b.activeBranch), registerDep (e, t) { const n = !!b.pendingBranch; n && b.deps++; const o = e.vnode.el; e.asyncDep.catch((t => { Dt(t, e, 0) })).then((r => { if (e.isUnmounted || b.isUnmounted || b.pendingId !== e.suspenseId) return; e.asyncResolved = !0; const { vnode: s } = e; is(e, r, !1), o && (s.el = o); const l = !o && e.subTree.el; t(e, s, m(o || e.subTree.el), o ? null : h(e.subTree), b, i, c), l && g(l), bn(e, s.el), n && 0 == --b.deps && b.resolve() })) }, unmount (e, t) { b.isUnmounted = !0, b.activeBranch && d(b.activeBranch, n, e, t), b.pendingBranch && d(b.pendingBranch, n, e, t) } }; return b } function wn (e) { let t; if (v(e)) { const n = $r && e._c; n && (e._d = !1, Nr()), e = e(), n && (e._d = !0, t = Er, Or()) } if (d(e)) { const t = function (e) { let t; for (let n = 0; n < e.length; n++) { const o = e[n]; if (!Rr(o)) return; if (o.type !== kr || "v-if" === o.children) { if (t) return; t = o } } return t }(e); e = t } return e = Wr(e), t && !e.dynamicChildren && (e.dynamicChildren = t.filter((t => t !== e))), e } function Tn (e, t) { t && t.pendingBranch ? d(e) ? t.effects.push(...e) : t.effects.push(e) : tn(e) } function En (e, t) { e.activeBranch = t; const { vnode: n, parentComponent: o } = e, r = n.el = t.el; o && o.subTree === n && (o.vnode.el = r, bn(o, r)) } function Nn (e, t) { return Pn(e, null, { flush: "post" }) } const On = {}; function $n (e, t, n) { return Pn(e, t, n) } function Pn (e, t, { immediate: o, deep: s, flush: i } = n) { var l; const c = se() === (null == (l = Yr) ? void 0 : l.scope) ? Yr : null; let a, p, f = !1, h = !1; if (Nt(e) ? (a = () => e.value, f = bt(e)) : yt(e) ? (a = () => e, s = !0) : d(e) ? (h = !0, f = e.some((e => yt(e) || bt(e))), a = () => e.map((e => Nt(e) ? e.value : yt(e) ? Rn(e) : v(e) ? jt(e, c, 2) : void 0))) : a = v(e) ? t ? () => jt(e, c, 2) : () => { if (!c || !c.isUnmounted) return p && p(), Ut(e, c, 3, [m]) } : r, t && s) { const e = a; a = () => Rn(e()) } let m = e => { p = b.onStop = () => { jt(e, c, 4) } }, g = h ? new Array(e.length).fill(On) : On; const y = () => { if (b.active) if (t) { const e = b.run(); (s || f || (h ? e.some(((e, t) => M(e, g[t]))) : M(e, g))) && (p && p(), Ut(t, c, 3, [e, g === On ? void 0 : h && g[0] === On ? [] : g, m]), g = e) } else b.run() }; let _; y.allowRecurse = !!t, "sync" === i ? _ = y : "post" === i ? _ = () => ur(y, c && c.suspense) : (y.pre = !0, c && (y.id = c.uid), _ = () => Xt(y)); const b = new me(a, _); t ? o ? y() : g = b.run() : "post" === i ? ur(b.run.bind(b), c && c.suspense) : b.run(); return () => { b.stop(), c && c.scope && u(c.scope.effects, b) } } function An (e, t, n) { const o = this.proxy, r = y(e) ? e.includes(".") ? Fn(o, e) : () => o[e] : e.bind(o, o); let s; v(t) ? s = t : (s = t.handler, n = t); const i = Yr; es(this); const l = Pn(r, s.bind(o), n); return i ? es(i) : ts(), l } function Fn (e, t) { const n = t.split("."); return () => { let t = e; for (let e = 0; e < n.length && t; e++)t = t[n[e]]; return t } } function Rn (e, t) { if (!b(e) || e.__v_skip) return e; if ((t = t || new Set).has(e)) return e; if (t.add(e), Nt(e)) Rn(e.value, t); else if (d(e)) for (let n = 0; n < e.length; n++)Rn(e[n], t); else if (m(e) || h(e)) e.forEach((e => { Rn(e, t) })); else if (k(e)) for (const n in e) Rn(e[n], t); return e } function Mn (e, t, n, o) { const r = e.dirs, s = t && t.dirs; for (let i = 0; i < r.length; i++) { const l = r[i]; s && (l.oldValue = s[i].value); let c = l.dir[o]; c && (_e(), Ut(c, n, 8, [e.el, l, e, t]), be()) } } function Vn () { const e = { isMounted: !1, isLeaving: !1, isUnmounting: !1, leavingVNodes: new Map }; return lo((() => { e.isMounted = !0 })), uo((() => { e.isUnmounting = !0 })), e } const In = [Function, Array], Bn = { mode: String, appear: Boolean, persisted: Boolean, onBeforeEnter: In, onEnter: In, onAfterEnter: In, onEnterCancelled: In, onBeforeLeave: In, onLeave: In, onAfterLeave: In, onLeaveCancelled: In, onBeforeAppear: In, onAppear: In, onAfterAppear: In, onAppearCancelled: In }, Ln = { name: "BaseTransition", props: Bn, setup (e, { slots: t }) { const n = Qr(), o = Vn(); let r; return () => { const s = t.default && zn(t.default(), !0); if (!s || !s.length) return; let i = s[0]; if (s.length > 1) for (const e of s) if (e.type !== kr) { i = e; break } const l = xt(e), { mode: c } = l; if (o.isLeaving) return Dn(i); const a = Hn(i); if (!a) return Dn(i); const u = Un(a, l, o, n); Wn(a, u); const p = n.subTree, f = p && Hn(p); let d = !1; const { getTransitionKey: h } = a.type; if (h) { const e = h(); void 0 === r ? r = e : e !== r && (r = e, d = !0) } if (f && f.type !== kr && (!Mr(a, f) || d)) { const e = Un(f, l, o, n); if (Wn(f, e), "out-in" === c) return o.isLeaving = !0, e.afterLeave = () => { o.isLeaving = !1, !1 !== n.update.active && n.update() }, Dn(i); "in-out" === c && a.type !== kr && (e.delayLeave = (e, t, n) => { jn(o, f)[String(f.key)] = f, e._leaveCb = () => { t(), e._leaveCb = void 0, delete u.delayedLeave }, u.delayedLeave = n }) } return i } } }; function jn (e, t) { const { leavingVNodes: n } = e; let o = n.get(t.type); return o || (o = Object.create(null), n.set(t.type, o)), o } function Un (e, t, n, o) { const { appear: r, mode: s, persisted: i = !1, onBeforeEnter: l, onEnter: c, onAfterEnter: a, onEnterCancelled: u, onBeforeLeave: p, onLeave: f, onAfterLeave: h, onLeaveCancelled: m, onBeforeAppear: g, onAppear: v, onAfterAppear: y, onAppearCancelled: _ } = t, b = String(e.key), S = jn(n, e), x = (e, t) => { e && Ut(e, o, 9, t) }, C = (e, t) => { const n = t[1]; x(e, t), d(e) ? e.every((e => e.length <= 1)) && n() : e.length <= 1 && n() }, k = { mode: s, persisted: i, beforeEnter (t) { let o = l; if (!n.isMounted) { if (!r) return; o = g || l } t._leaveCb && t._leaveCb(!0); const s = S[b]; s && Mr(e, s) && s.el._leaveCb && s.el._leaveCb(), x(o, [t]) }, enter (e) { let t = c, o = a, s = u; if (!n.isMounted) { if (!r) return; t = v || c, o = y || a, s = _ || u } let i = !1; const l = e._enterCb = t => { i || (i = !0, x(t ? s : o, [e]), k.delayedLeave && k.delayedLeave(), e._enterCb = void 0) }; t ? C(t, [e, l]) : l() }, leave (t, o) { const r = String(e.key); if (t._enterCb && t._enterCb(!0), n.isUnmounting) return o(); x(p, [t]); let s = !1; const i = t._leaveCb = n => { s || (s = !0, o(), x(n ? m : h, [t]), t._leaveCb = void 0, S[r] === e && delete S[r]) }; S[r] = e, f ? C(f, [t, i]) : i() }, clone: e => Un(e, t, n, o) }; return k } function Dn (e) { if (Jn(e)) return (e = Dr(e)).children = null, e } function Hn (e) { return Jn(e) ? e.children ? e.children[0] : void 0 : e } function Wn (e, t) { 6 & e.shapeFlag && e.component ? Wn(e.component.subTree, t) : 128 & e.shapeFlag ? (e.ssContent.transition = t.clone(e.ssContent), e.ssFallback.transition = t.clone(e.ssFallback)) : e.transition = t } function zn (e, t = !1, n) { let o = [], r = 0; for (let s = 0; s < e.length; s++) { let i = e[s]; const l = null == n ? i.key : String(n) + String(null != i.key ? i.key : s); i.type === xr ? (128 & i.patchFlag && r++, o = o.concat(zn(i.children, t, l))) : (t || i.type !== kr) && o.push(null != l ? Dr(i, { key: l }) : i) } if (r > 1) for (let s = 0; s < o.length; s++)o[s].patchFlag = -2; return o } function Kn (e, t) { return v(e) ? (() => a({ name: e.name }, t, { setup: e }))() : e } const Gn = e => !!e.type.__asyncLoader; function qn (e, t) { const { ref: n, props: o, children: r, ce: s } = t.vnode, i = jr(e, o, r); return i.ref = n, i.ce = s, delete t.vnode.ce, i } const Jn = e => e.type.__isKeepAlive, Zn = { name: "KeepAlive", __isKeepAlive: !0, props: { include: [String, RegExp, Array], exclude: [String, RegExp, Array], max: [String, Number] }, setup (e, { slots: t }) { const n = Qr(), o = n.ctx, r = new Map, s = new Set; let i = null; const l = n.suspense, { renderer: { p: c, m: a, um: u, o: { createElement: p } } } = o, f = p("div"); function d (e) { no(e), u(e, n, l, !0) } function h (e) { r.forEach(((t, n) => { const o = ps(t.type); !o || e && e(o) || m(n) })) } function m (e) { const t = r.get(e); i && Mr(t, i) ? i && no(i) : d(t), r.delete(e), s.delete(e) } o.activate = (e, t, n, o, r) => { const s = e.component; a(e, t, n, 0, l), c(s.vnode, e, t, n, s, l, o, e.slotScopeIds, r), ur((() => { s.isDeactivated = !1, s.a && V(s.a); const t = e.props && e.props.onVnodeMounted; t && qr(t, s.parent, e) }), l) }, o.deactivate = e => { const t = e.component; a(e, f, null, 1, l), ur((() => { t.da && V(t.da); const n = e.props && e.props.onVnodeUnmounted; n && qr(n, t.parent, e), t.isDeactivated = !0 }), l) }, $n((() => [e.include, e.exclude]), (([e, t]) => { e && h((t => Yn(e, t))), t && h((e => !Yn(t, e))) }), { flush: "post", deep: !0 }); let g = null; const v = () => { null != g && r.set(g, oo(n.subTree)) }; return lo(v), ao(v), uo((() => { r.forEach((e => { const { subTree: t, suspense: o } = n, r = oo(t); if (e.type !== r.type || e.key !== r.key) d(e); else { no(r); const e = r.component.da; e && ur(e, o) } })) })), () => { if (g = null, !t.default) return null; const n = t.default(), o = n[0]; if (n.length > 1) return i = null, n; if (!(Rr(o) && (4 & o.shapeFlag || 128 & o.shapeFlag))) return i = null, o; let l = oo(o); const c = l.type, a = ps(Gn(l) ? l.type.__asyncResolved || {} : c), { include: u, exclude: p, max: f } = e; if (u && (!a || !Yn(u, a)) || p && a && Yn(p, a)) return i = l, o; const d = null == l.key ? c : l.key, h = r.get(d); return l.el && (l = Dr(l), 128 & o.shapeFlag && (o.ssContent = l)), g = d, h ? (l.el = h.el, l.component = h.component, l.transition && Wn(l, l.transition), l.shapeFlag |= 512, s.delete(d), s.add(d)) : (s.add(d), f && s.size > parseInt(f, 10) && m(s.values().next().value)), l.shapeFlag |= 256, i = l, Sn(o.type) ? o : l } } }; function Yn (e, t) { return d(e) ? e.some((e => Yn(e, t))) : y(e) ? e.split(",").includes(t) : "[object RegExp]" === C(e) && e.test(t) } function Qn (e, t) { eo(e, "a", t) } function Xn (e, t) { eo(e, "da", t) } function eo (e, t, n = Yr) { const o = e.__wdc || (e.__wdc = () => { let t = n; for (; t;) { if (t.isDeactivated) return; t = t.parent } return e() }); if (ro(t, o, n), n) { let e = n.parent; for (; e && e.parent;)Jn(e.parent.vnode) && to(o, t, n, e), e = e.parent } } function to (e, t, n, o) { const r = ro(t, e, o, !0); po((() => { u(o[t], r) }), n) } function no (e) { e.shapeFlag &= -257, e.shapeFlag &= -513 } function oo (e) { return 128 & e.shapeFlag ? e.ssContent : e } function ro (e, t, n = Yr, o = !1) { if (n) { const r = n[e] || (n[e] = []), s = t.__weh || (t.__weh = (...o) => { if (n.isUnmounted) return; _e(), es(n); const r = Ut(t, n, e, o); return ts(), be(), r }); return o ? r.unshift(s) : r.push(s), s } } const so = e => (t, n = Yr) => (!ss || "sp" === e) && ro(e, ((...e) => t(...e)), n), io = so("bm"), lo = so("m"), co = so("bu"), ao = so("u"), uo = so("bum"), po = so("um"), fo = so("sp"), ho = so("rtg"), mo = so("rtc"); function go (e, t = Yr) { ro("ec", e, t) } const vo = "components"; const yo = Symbol.for("v-ndc"); function _o (e, t, n = !0, o = !1) { const r = fn || Yr; if (r) { const n = r.type; if (e === vo) { const e = ps(n, !1); if (e && (e === t || e === $(t) || e === F($(t)))) return n } const s = bo(r[e] || n[e], t) || bo(r.appContext[e], t); return !s && o ? n : s } } function bo (e, t) { return e && (e[t] || e[$(t)] || e[F($(t))]) } function So (e) { return e.some((e => !Rr(e) || e.type !== kr && !(e.type === xr && !So(e.children)))) ? e : null } const xo = e => e ? ns(e) ? us(e) || e.proxy : xo(e.parent) : null, Co = a(Object.create(null), { $: e => e, $el: e => e.vnode.el, $data: e => e.data, $props: e => e.props, $attrs: e => e.attrs, $slots: e => e.slots, $refs: e => e.refs, $parent: e => xo(e.parent), $root: e => xo(e.root), $emit: e => e.emit, $options: e => Fo(e), $forceUpdate: e => e.f || (e.f = () => Xt(e.update)), $nextTick: e => e.n || (e.n = Qt.bind(e.proxy)), $watch: e => An.bind(e) }), ko = (e, t) => e !== n && !e.__isScriptSetup && f(e, t), wo = { get ({ _: e }, t) { const { ctx: o, setupState: r, data: s, props: i, accessCache: l, type: c, appContext: a } = e; let u; if ("$" !== t[0]) { const c = l[t]; if (void 0 !== c) switch (c) { case 1: return r[t]; case 2: return s[t]; case 4: return o[t]; case 3: return i[t] } else { if (ko(r, t)) return l[t] = 1, r[t]; if (s !== n && f(s, t)) return l[t] = 2, s[t]; if ((u = e.propsOptions[0]) && f(u, t)) return l[t] = 3, i[t]; if (o !== n && f(o, t)) return l[t] = 4, o[t]; Oo && (l[t] = 0) } } const p = Co[t]; let d, h; return p ? ("$attrs" === t && Se(e, 0, t), p(e)) : (d = c.__cssModules) && (d = d[t]) ? d : o !== n && f(o, t) ? (l[t] = 4, o[t]) : (h = a.config.globalProperties, f(h, t) ? h[t] : void 0) }, set ({ _: e }, t, o) { const { data: r, setupState: s, ctx: i } = e; return ko(s, t) ? (s[t] = o, !0) : r !== n && f(r, t) ? (r[t] = o, !0) : !f(e.props, t) && (("$" !== t[0] || !(t.slice(1) in e)) && (i[t] = o, !0)) }, has ({ _: { data: e, setupState: t, accessCache: o, ctx: r, appContext: s, propsOptions: i } }, l) { let c; return !!o[l] || e !== n && f(e, l) || ko(t, l) || (c = i[0]) && f(c, l) || f(r, l) || f(Co, l) || f(s.config.globalProperties, l) }, defineProperty (e, t, n) { return null != n.get ? e._.accessCache[t] = 0 : f(n, "value") && this.set(e, t, n.value, null), Reflect.defineProperty(e, t, n) } }, To = a({}, wo, { get (e, t) { if (t !== Symbol.unscopables) return wo.get(e, t, e) }, has: (e, t) => "_" !== t[0] && !U(t) }); function Eo () { const e = Qr(); return e.setupContext || (e.setupContext = as(e)) } function No (e) { return d(e) ? e.reduce(((e, t) => (e[t] = null, e)), {}) : e } let Oo = !0; function $o (e) { const t = Fo(e), n = e.proxy, o = e.ctx; Oo = !1, t.beforeCreate && Po(t.beforeCreate, e, "bc"); const { data: s, computed: i, methods: l, watch: c, provide: a, inject: u, created: p, beforeMount: f, mounted: h, beforeUpdate: m, updated: g, activated: y, deactivated: _, beforeUnmount: S, unmounted: x, render: C, renderTracked: k, renderTriggered: w, errorCaptured: T, serverPrefetch: E, expose: N, inheritAttrs: O, components: $, directives: P } = t; if (u && function (e, t, n = r) { d(e) && (e = Io(e)); for (const o in e) { const n = e[o]; let r; r = b(n) ? "default" in n ? Ko(n.from || o, n.default, !0) : Ko(n.from || o) : Ko(n), Nt(r) ? Object.defineProperty(t, o, { enumerable: !0, configurable: !0, get: () => r.value, set: e => r.value = e }) : t[o] = r } }(u, o, null), l) for (const r in l) { const e = l[r]; v(e) && (o[r] = e.bind(n)) } if (s) { const t = s.call(n, n); b(t) && (e.data = ht(t)) } if (Oo = !0, i) for (const d in i) { const e = i[d], t = v(e) ? e.bind(n, n) : v(e.get) ? e.get.bind(n, n) : r, s = !v(e) && v(e.set) ? e.set.bind(n) : r, l = fs({ get: t, set: s }); Object.defineProperty(o, d, { enumerable: !0, configurable: !0, get: () => l.value, set: e => l.value = e }) } if (c) for (const r in c) Ao(c[r], o, n, r); if (a) { const e = v(a) ? a.call(n) : a; Reflect.ownKeys(e).forEach((t => { zo(t, e[t]) })) } function A (e, t) { d(t) ? t.forEach((t => e(t.bind(n)))) : t && e(t.bind(n)) } if (p && Po(p, e, "c"), A(io, f), A(lo, h), A(co, m), A(ao, g), A(Qn, y), A(Xn, _), A(go, T), A(mo, k), A(ho, w), A(uo, S), A(po, x), A(fo, E), d(N)) if (N.length) { const t = e.exposed || (e.exposed = {}); N.forEach((e => { Object.defineProperty(t, e, { get: () => n[e], set: t => n[e] = t }) })) } else e.exposed || (e.exposed = {}); C && e.render === r && (e.render = C), null != O && (e.inheritAttrs = O), $ && (e.components = $), P && (e.directives = P) } function Po (e, t, n) { Ut(d(e) ? e.map((e => e.bind(t.proxy))) : e.bind(t.proxy), t, n) } function Ao (e, t, n, o) { const r = o.includes(".") ? Fn(n, o) : () => n[o]; if (y(e)) { const n = t[e]; v(n) && $n(r, n) } else if (v(e)) $n(r, e.bind(n)); else if (b(e)) if (d(e)) e.forEach((e => Ao(e, t, n, o))); else { const o = v(e.handler) ? e.handler.bind(n) : t[e.handler]; v(o) && $n(r, o, e) } } function Fo (e) { const t = e.type, { mixins: n, extends: o } = t, { mixins: r, optionsCache: s, config: { optionMergeStrategies: i } } = e.appContext, l = s.get(t); let c; return l ? c = l : r.length || n || o ? (c = {}, r.length && r.forEach((e => Ro(c, e, i, !0))), Ro(c, t, i)) : c = t, b(t) && s.set(t, c), c } function Ro (e, t, n, o = !1) { const { mixins: r, extends: s } = t; s && Ro(e, s, n, !0), r && r.forEach((t => Ro(e, t, n, !0))); for (const i in t) if (o && "expose" === i); else { const o = Mo[i] || n && n[i]; e[i] = o ? o(e[i], t[i]) : t[i] } return e } const Mo = { data: Vo, props: jo, emits: jo, methods: Lo, computed: Lo, beforeCreate: Bo, created: Bo, beforeMount: Bo, mounted: Bo, beforeUpdate: Bo, updated: Bo, beforeDestroy: Bo, beforeUnmount: Bo, destroyed: Bo, unmounted: Bo, activated: Bo, deactivated: Bo, errorCaptured: Bo, serverPrefetch: Bo, components: Lo, directives: Lo, watch: function (e, t) { if (!e) return t; if (!t) return e; const n = a(Object.create(null), e); for (const o in t) n[o] = Bo(e[o], t[o]); return n }, provide: Vo, inject: function (e, t) { return Lo(Io(e), Io(t)) } }; function Vo (e, t) { return t ? e ? function () { return a(v(e) ? e.call(this, this) : e, v(t) ? t.call(this, this) : t) } : t : e } function Io (e) { if (d(e)) { const t = {}; for (let n = 0; n < e.length; n++)t[e[n]] = e[n]; return t } return e } function Bo (e, t) { return e ? [...new Set([].concat(e, t))] : t } function Lo (e, t) { return e ? a(Object.create(null), e, t) : t } function jo (e, t) { return e ? d(e) && d(t) ? [...new Set([...e, ...t])] : a(Object.create(null), No(e), No(null != t ? t : {})) : t } function Uo () { return { app: null, config: { isNativeTag: s, performance: !1, globalProperties: {}, optionMergeStrategies: {}, errorHandler: void 0, warnHandler: void 0, compilerOptions: {} }, mixins: [], components: {}, directives: {}, provides: Object.create(null), optionsCache: new WeakMap, propsCache: new WeakMap, emitsCache: new WeakMap } } let Do = 0; function Ho (e, t) { return function (n, o = null) { v(n) || (n = a({}, n)), null == o || b(o) || (o = null); const r = Uo(), s = new Set; let i = !1; const l = r.app = { _uid: Do++, _component: n, _props: o, _container: null, _context: r, _instance: null, version: gs, get config () { return r.config }, set config (e) { }, use: (e, ...t) => (s.has(e) || (e && v(e.install) ? (s.add(e), e.install(l, ...t)) : v(e) && (s.add(e), e(l, ...t))), l), mixin: e => (r.mixins.includes(e) || r.mixins.push(e), l), component: (e, t) => t ? (r.components[e] = t, l) : r.components[e], directive: (e, t) => t ? (r.directives[e] = t, l) : r.directives[e], mount (s, c, a) { if (!i) { const u = jr(n, o); return u.appContext = r, c && t ? t(u, s) : e(u, s, a), i = !0, l._container = s, s.__vue_app__ = l, us(u.component) || u.component.proxy } }, unmount () { i && (e(null, l._container), delete l._container.__vue_app__) }, provide: (e, t) => (r.provides[e] = t, l), runWithContext (e) { Wo = l; try { return e() } finally { Wo = null } } }; return l } } let Wo = null; function zo (e, t) { if (Yr) { let n = Yr.provides; const o = Yr.parent && Yr.parent.provides; o === n && (n = Yr.provides = Object.create(o)), n[e] = t } else; } function Ko (e, t, n = !1) { const o = Yr || fn; if (o || Wo) { const r = o ? null == o.parent ? o.vnode.appContext && o.vnode.appContext.provides : o.parent.provides : Wo._context.provides; if (r && e in r) return r[e]; if (arguments.length > 1) return n && v(t) ? t.call(o && o.proxy) : t } } function Go (e, t, o, r) { const [s, i] = e.propsOptions; let l, c = !1; if (t) for (let n in t) { if (T(n)) continue; const a = t[n]; let u; s && f(s, u = $(n)) ? i && i.includes(u) ? (l || (l = {}))[u] = a : o[u] = a : pn(e.emitsOptions, n) || n in r && a === r[n] || (r[n] = a, c = !0) } if (i) { const t = xt(o), r = l || n; for (let n = 0; n < i.length; n++) { const l = i[n]; o[l] = qo(s, t, l, r[l], e, !f(r, l)) } } return c } function qo (e, t, n, o, r, s) { const i = e[n]; if (null != i) { const e = f(i, "default"); if (e && void 0 === o) { const e = i.default; if (i.type !== Function && !i.skipFactory && v(e)) { const { propsDefaults: s } = r; n in s ? o = s[n] : (es(r), o = s[n] = e.call(null, t), ts()) } else o = e } i[0] && (s && !e ? o = !1 : !i[1] || "" !== o && o !== A(n) || (o = !0)) } return o } function Jo (e, t, r = !1) { const s = t.propsCache, i = s.get(e); if (i) return i; const l = e.props, c = {}, u = []; let p = !1; if (!v(e)) { const n = e => { p = !0; const [n, o] = Jo(e, t, !0); a(c, n), o && u.push(...o) }; !r && t.mixins.length && t.mixins.forEach(n), e.extends && n(e.extends), e.mixins && e.mixins.forEach(n) } if (!l && !p) return b(e) && s.set(e, o), o; if (d(l)) for (let o = 0; o < l.length; o++) { const e = $(l[o]); Zo(e) && (c[e] = n) } else if (l) for (const n in l) { const e = $(n); if (Zo(e)) { const t = l[n], o = c[e] = d(t) || v(t) ? { type: t } : a({}, t); if (o) { const t = Xo(Boolean, o.type), n = Xo(String, o.type); o[0] = t > -1, o[1] = n < 0 || t < n, (t > -1 || f(o, "default")) && u.push(e) } } } const h = [c, u]; return b(e) && s.set(e, h), h } function Zo (e) { return "$" !== e[0] } function Yo (e) { const t = e && e.toString().match(/^\s*(function|class) (\w+)/); return t ? t[2] : null === e ? "null" : "" } function Qo (e, t) { return Yo(e) === Yo(t) } function Xo (e, t) { return d(t) ? t.findIndex((t => Qo(t, e))) : v(t) && Qo(t, e) ? 0 : -1 } const er = e => "_" === e[0] || "$stable" === e, tr = e => d(e) ? e.map(Wr) : [Wr(e)], nr = (e, t, n) => { if (t._n) return t; const o = mn(((...e) => tr(t(...e))), n); return o._c = !1, o }, or = (e, t, n) => { const o = e._ctx; for (const r in e) { if (er(r)) continue; const n = e[r]; if (v(n)) t[r] = nr(0, n, o); else if (null != n) { const e = tr(n); t[r] = () => e } } }, rr = (e, t) => { const n = tr(t); e.slots.default = () => n }; function sr (e, t, o, r, s = !1) { if (d(e)) return void e.forEach(((e, n) => sr(e, t && (d(t) ? t[n] : t), o, r, s))); if (Gn(r) && !s) return; const i = 4 & r.shapeFlag ? us(r.component) || r.component.proxy : r.el, l = s ? null : i, { i: c, r: a } = e, p = t && t.r, h = c.refs === n ? c.refs = {} : c.refs, m = c.setupState; if (null != p && p !== a && (y(p) ? (h[p] = null, f(m, p) && (m[p] = null)) : Nt(p) && (p.value = null)), v(a)) jt(a, c, 12, [l, h]); else { const t = y(a), n = Nt(a); if (t || n) { const r = () => { if (e.f) { const n = t ? f(m, a) ? m[a] : h[a] : a.value; s ? d(n) && u(n, i) : d(n) ? n.includes(i) || n.push(i) : t ? (h[a] = [i], f(m, a) && (m[a] = h[a])) : (a.value = [i], e.k && (h[e.k] = a.value)) } else t ? (h[a] = l, f(m, a) && (m[a] = l)) : n && (a.value = l, e.k && (h[e.k] = l)) }; l ? (r.id = -1, ur(r, o)) : r() } } } let ir = !1; const lr = e => /svg/.test(e.namespaceURI) && "foreignObject" !== e.tagName, cr = e => 8 === e.nodeType; function ar (e) { const { mt: t, p: n, o: { patchProp: o, createText: r, nextSibling: s, parentNode: i, remove: c, insert: a, createComment: u } } = e, p = (n, o, l, c, u, v = !1) => { const y = cr(n) && "[" === n.data, _ = () => m(n, o, l, c, u, y), { type: b, ref: S, shapeFlag: x, patchFlag: C } = o; let k = n.nodeType; o.el = n, -2 === C && (v = !1, o.dynamicChildren = null); let w = null; switch (b) { case Cr: 3 !== k ? "" === o.children ? (a(o.el = r(""), i(n), n), w = n) : w = _() : (n.data !== o.children && (ir = !0, n.data = o.children), w = s(n)); break; case kr: w = 8 !== k || y ? _() : s(n); break; case wr: if (y && (k = (n = s(n)).nodeType), 1 === k || 3 === k) { w = n; const e = !o.children.length; for (let t = 0; t < o.staticCount; t++)e && (o.children += 1 === w.nodeType ? w.outerHTML : w.data), t === o.staticCount - 1 && (o.anchor = w), w = s(w); return y ? s(w) : w } _(); break; case xr: w = y ? h(n, o, l, c, u, v) : _(); break; default: if (1 & x) w = 1 !== k || o.type.toLowerCase() !== n.tagName.toLowerCase() ? _() : f(n, o, l, c, u, v); else if (6 & x) { o.slotScopeIds = u; const e = i(n); if (t(o, e, null, l, c, lr(e), v), w = y ? g(n) : s(n), w && cr(w) && "teleport end" === w.data && (w = s(w)), Gn(o)) { let t; y ? (t = jr(xr), t.anchor = w ? w.previousSibling : e.lastChild) : t = 3 === n.nodeType ? Hr("") : jr("div"), t.el = n, o.component.subTree = t } } else 64 & x ? w = 8 !== k ? _() : o.type.hydrate(n, o, l, c, u, v, e, d) : 128 & x && (w = o.type.hydrate(n, o, l, c, lr(i(n)), u, v, e, p)) }return null != S && sr(S, null, c, o), w }, f = (e, t, n, r, s, i) => { i = i || !!t.dynamicChildren; const { type: a, props: u, patchFlag: p, shapeFlag: f, dirs: h } = t, m = "input" === a && h || "option" === a; if (m || -1 !== p) { if (h && Mn(t, null, n, "created"), u) if (m || !i || 48 & p) for (const t in u) (m && t.endsWith("value") || l(t) && !T(t)) && o(e, t, null, u[t], !1, void 0, n); else u.onClick && o(e, "onClick", null, u.onClick, !1, void 0, n); let a; if ((a = u && u.onVnodeBeforeMount) && qr(a, n, t), h && Mn(t, null, n, "beforeMount"), ((a = u && u.onVnodeMounted) || h) && Tn((() => { a && qr(a, n, t), h && Mn(t, null, n, "mounted") }), r), 16 & f && (!u || !u.innerHTML && !u.textContent)) { let o = d(e.firstChild, t, e, n, r, s, i); for (; o;) { ir = !0; const e = o; o = o.nextSibling, c(e) } } else 8 & f && e.textContent !== t.children && (ir = !0, e.textContent = t.children) } return e.nextSibling }, d = (e, t, o, r, s, i, l) => { l = l || !!t.dynamicChildren; const c = t.children, a = c.length; for (let u = 0; u < a; u++) { const t = l ? c[u] : c[u] = Wr(c[u]); if (e) e = p(e, t, r, s, i, l); else { if (t.type === Cr && !t.children) continue; ir = !0, n(null, t, o, null, r, s, lr(o), i) } } return e }, h = (e, t, n, o, r, l) => { const { slotScopeIds: c } = t; c && (r = r ? r.concat(c) : c); const p = i(e), f = d(s(e), t, p, n, o, r, l); return f && cr(f) && "]" === f.data ? s(t.anchor = f) : (ir = !0, a(t.anchor = u("]"), p, f), f) }, m = (e, t, o, r, l, a) => { if (ir = !0, t.el = null, a) { const t = g(e); for (; ;) { const n = s(e); if (!n || n === t) break; c(n) } } const u = s(e), p = i(e); return c(e), n(null, t, p, u, o, r, lr(p), l), u }, g = e => { let t = 0; for (; e;)if ((e = s(e)) && cr(e) && ("[" === e.data && t++, "]" === e.data)) { if (0 === t) return s(e); t-- } return e }; return [(e, t) => { if (!t.hasChildNodes()) return n(null, e, t), on(), void (t._vnode = e); ir = !1, p(t.firstChild, e, null, null, null), on(), t._vnode = e, ir && console.error("Hydration completed but contains mismatches.") }, p] } const ur = Tn; function pr (e) { return dr(e) } function fr (e) { return dr(e, ar) } function dr (e, t) { (j || (j = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : "undefined" != typeof window ? window : "undefined" != typeof global ? global : {})).__VUE__ = !0; const { insert: s, remove: i, patchProp: l, createElement: c, createText: u, createComment: p, setText: d, setElementText: h, parentNode: m, nextSibling: g, setScopeId: v = r, insertStaticContent: y } = e, _ = (e, t, n, o = null, r = null, s = null, i = !1, l = null, c = !!t.dynamicChildren) => { if (e === t) return; e && !Mr(e, t) && (o = Q(e), G(e, r, s, !0), e = null), -2 === t.patchFlag && (c = !1, t.dynamicChildren = null); const { type: a, ref: u, shapeFlag: p } = t; switch (a) { case Cr: b(e, t, n, o); break; case kr: x(e, t, n, o); break; case wr: null == e && C(t, n, o, i); break; case xr: R(e, t, n, o, r, s, i, l, c); break; default: 1 & p ? k(e, t, n, o, r, s, i, l, c) : 6 & p ? M(e, t, n, o, r, s, i, l, c) : (64 & p || 128 & p) && a.process(e, t, n, o, r, s, i, l, c, ee) }null != u && r && sr(u, e && e.ref, s, t || e, !t) }, b = (e, t, n, o) => { if (null == e) s(t.el = u(t.children), n, o); else { const n = t.el = e.el; t.children !== e.children && d(n, t.children) } }, x = (e, t, n, o) => { null == e ? s(t.el = p(t.children || ""), n, o) : t.el = e.el }, C = (e, t, n, o) => { [e.el, e.anchor] = y(e.children, t, n, o, e.el, e.anchor) }, k = (e, t, n, o, r, s, i, l, c) => { i = i || "svg" === t.type, null == e ? w(t, n, o, r, s, i, l, c) : O(e, t, r, s, i, l, c) }, w = (e, t, n, o, r, i, a, u) => { let p, f; const { type: d, props: m, shapeFlag: g, transition: v, dirs: y } = e; if (p = e.el = c(e.type, i, m && m.is, m), 8 & g ? h(p, e.children) : 16 & g && N(e.children, p, null, o, r, i && "foreignObject" !== d, a, u), y && Mn(e, null, o, "created"), E(p, e, e.scopeId, a, o), m) { for (const t in m) "value" === t || T(t) || l(p, t, null, m[t], i, e.children, o, r, Y); "value" in m && l(p, "value", null, m.value), (f = m.onVnodeBeforeMount) && qr(f, o, e) } y && Mn(e, null, o, "beforeMount"); const _ = (!r || r && !r.pendingBranch) && v && !v.persisted; _ && v.beforeEnter(p), s(p, t, n), ((f = m && m.onVnodeMounted) || _ || y) && ur((() => { f && qr(f, o, e), _ && v.enter(p), y && Mn(e, null, o, "mounted") }), r) }, E = (e, t, n, o, r) => { if (n && v(e, n), o) for (let s = 0; s < o.length; s++)v(e, o[s]); if (r) { if (t === r.subTree) { const t = r.vnode; E(e, t, t.scopeId, t.slotScopeIds, r.parent) } } }, N = (e, t, n, o, r, s, i, l, c = 0) => { for (let a = c; a < e.length; a++) { const c = e[a] = l ? zr(e[a]) : Wr(e[a]); _(null, c, t, n, o, r, s, i, l) } }, O = (e, t, o, r, s, i, c) => { const a = t.el = e.el; let { patchFlag: u, dynamicChildren: p, dirs: f } = t; u |= 16 & e.patchFlag; const d = e.props || n, m = t.props || n; let g; o && hr(o, !1), (g = m.onVnodeBeforeUpdate) && qr(g, o, t, e), f && Mn(t, e, o, "beforeUpdate"), o && hr(o, !0); const v = s && "foreignObject" !== t.type; if (p ? P(e.dynamicChildren, p, a, o, r, v, i) : c || H(e, t, a, null, o, r, v, i, !1), u > 0) { if (16 & u) F(a, t, d, m, o, r, s); else if (2 & u && d.class !== m.class && l(a, "class", null, m.class, s), 4 & u && l(a, "style", d.style, m.style, s), 8 & u) { const n = t.dynamicProps; for (let t = 0; t < n.length; t++) { const i = n[t], c = d[i], u = m[i]; u === c && "value" !== i || l(a, i, c, u, s, e.children, o, r, Y) } } 1 & u && e.children !== t.children && h(a, t.children) } else c || null != p || F(a, t, d, m, o, r, s); ((g = m.onVnodeUpdated) || f) && ur((() => { g && qr(g, o, t, e), f && Mn(t, e, o, "updated") }), r) }, P = (e, t, n, o, r, s, i) => { for (let l = 0; l < t.length; l++) { const c = e[l], a = t[l], u = c.el && (c.type === xr || !Mr(c, a) || 70 & c.shapeFlag) ? m(c.el) : n; _(c, a, u, null, o, r, s, i, !0) } }, F = (e, t, o, r, s, i, c) => { if (o !== r) { if (o !== n) for (const n in o) T(n) || n in r || l(e, n, o[n], null, c, t.children, s, i, Y); for (const n in r) { if (T(n)) continue; const a = r[n], u = o[n]; a !== u && "value" !== n && l(e, n, u, a, c, t.children, s, i, Y) } "value" in r && l(e, "value", o.value, r.value) } }, R = (e, t, n, o, r, i, l, c, a) => { const p = t.el = e ? e.el : u(""), f = t.anchor = e ? e.anchor : u(""); let { patchFlag: d, dynamicChildren: h, slotScopeIds: m } = t; m && (c = c ? c.concat(m) : m), null == e ? (s(p, n, o), s(f, n, o), N(t.children, n, f, r, i, l, c, a)) : d > 0 && 64 & d && h && e.dynamicChildren ? (P(e.dynamicChildren, h, n, r, i, l, c), (null != t.key || r && t === r.subTree) && mr(e, t, !0)) : H(e, t, n, f, r, i, l, c, a) }, M = (e, t, n, o, r, s, i, l, c) => { t.slotScopeIds = l, null == e ? 512 & t.shapeFlag ? r.ctx.activate(t, n, o, i, c) : B(t, n, o, r, s, i, c) : L(e, t, c) }, B = (e, t, o, r, s, i, l) => { const c = e.component = function (e, t, o) { const r = e.type, s = (t ? t.appContext : e.appContext) || Jr, i = { uid: Zr++, vnode: e, type: r, parent: t, appContext: s, root: null, next: null, subTree: null, effect: null, update: null, scope: new oe(!0), render: null, proxy: null, exposed: null, exposeProxy: null, withProxy: null, provides: t ? t.provides : Object.create(s.provides), accessCache: null, renderCache: [], components: null, directives: null, propsOptions: Jo(r, s), emitsOptions: un(r, s), emit: null, emitted: null, propsDefaults: n, inheritAttrs: r.inheritAttrs, ctx: n, data: n, props: n, attrs: n, slots: n, refs: n, setupState: n, setupContext: null, attrsProxy: null, slotsProxy: null, suspense: o, suspenseId: o ? o.pendingId : 0, asyncDep: null, asyncResolved: !1, isMounted: !1, isUnmounted: !1, isDeactivated: !1, bc: null, c: null, bm: null, m: null, bu: null, u: null, um: null, bum: null, da: null, a: null, rtg: null, rtc: null, ec: null, sp: null }; i.ctx = { _: i }, i.root = t ? t.root : i, i.emit = an.bind(null, i), e.ce && e.ce(i); return i }(e, r, s); if (Jn(e) && (c.ctx.renderer = ee), function (e, t = !1) { ss = t; const { props: n, children: o } = e.vnode, r = ns(e); (function (e, t, n, o = !1) { const r = {}, s = {}; I(s, Vr, 1), e.propsDefaults = Object.create(null), Go(e, t, r, s); for (const i in e.propsOptions[0]) i in r || (r[i] = void 0); e.props = n ? o ? r : mt(r) : e.type.props ? r : s, e.attrs = s })(e, n, r, t), ((e, t) => { if (32 & e.vnode.shapeFlag) { const n = t._; n ? (e.slots = xt(t), I(t, "_", n)) : or(t, e.slots = {}) } else e.slots = {}, t && rr(e, t); I(e.slots, Vr, 1) })(e, o); const s = r ? function (e, t) { const n = e.type; e.accessCache = Object.create(null), e.proxy = Ct(new Proxy(e.ctx, wo)); const { setup: o } = n; if (o) { const n = e.setupContext = o.length > 1 ? as(e) : null; es(e), _e(); const r = jt(o, e, 0, [e.props, n]); if (be(), ts(), S(r)) { if (r.then(ts, ts), t) return r.then((n => { is(e, n, t) })).catch((t => { Dt(t, e, 0) })); e.asyncDep = r } else is(e, r, t) } else cs(e, t) }(e, t) : void 0; ss = !1 }(c), c.asyncDep) { if (s && s.registerDep(c, U), !e.el) { const e = c.subTree = jr(kr); x(null, e, t, o) } } else U(c, e, t, o, s, i, l) }, L = (e, t, n) => { const o = t.component = e.component; if (function (e, t, n) { const { props: o, children: r, component: s } = e, { props: i, children: l, patchFlag: c } = t, a = s.emitsOptions; if (t.dirs || t.transition) return !0; if (!(n && c >= 0)) return !(!r && !l || l && l.$stable) || o !== i && (o ? !i || _n(o, i, a) : !!i); if (1024 & c) return !0; if (16 & c) return o ? _n(o, i, a) : !!i; if (8 & c) { const e = t.dynamicProps; for (let t = 0; t < e.length; t++) { const n = e[t]; if (i[n] !== o[n] && !pn(a, n)) return !0 } } return !1 }(e, t, n)) { if (o.asyncDep && !o.asyncResolved) return void D(o, t, n); o.next = t, function (e) { const t = zt.indexOf(e); t > Kt && zt.splice(t, 1) }(o.update), o.update() } else t.el = e.el, o.vnode = t }, U = (e, t, n, o, r, s, i) => { const l = e.effect = new me((() => { if (e.isMounted) { let t, { next: n, bu: o, u: l, parent: c, vnode: a } = e, u = n; hr(e, !1), n ? (n.el = a.el, D(e, n, i)) : n = a, o && V(o), (t = n.props && n.props.onVnodeBeforeUpdate) && qr(t, c, n, a), hr(e, !0); const p = gn(e), f = e.subTree; e.subTree = p, _(f, p, m(f.el), Q(f), e, r, s), n.el = p.el, null === u && bn(e, p.el), l && ur(l, r), (t = n.props && n.props.onVnodeUpdated) && ur((() => qr(t, c, n, a)), r) } else { let i; const { el: l, props: c } = t, { bm: a, m: u, parent: p } = e, f = Gn(t); if (hr(e, !1), a && V(a), !f && (i = c && c.onVnodeBeforeMount) && qr(i, p, t), hr(e, !0), l && ne) { const n = () => { e.subTree = gn(e), ne(l, e.subTree, e, r, null) }; f ? t.type.__asyncLoader().then((() => !e.isUnmounted && n())) : n() } else { const i = e.subTree = gn(e); _(null, i, n, o, e, r, s), t.el = i.el } if (u && ur(u, r), !f && (i = c && c.onVnodeMounted)) { const e = t; ur((() => qr(i, p, e)), r) } (256 & t.shapeFlag || p && Gn(p.vnode) && 256 & p.vnode.shapeFlag) && e.a && ur(e.a, r), e.isMounted = !0, t = n = o = null } }), (() => Xt(c)), e.scope), c = e.update = () => l.run(); c.id = e.uid, hr(e, !0), c() }, D = (e, t, o) => { t.component = e; const r = e.vnode.props; e.vnode = t, e.next = null, function (e, t, n, o) { const { props: r, attrs: s, vnode: { patchFlag: i } } = e, l = xt(r), [c] = e.propsOptions; let a = !1; if (!(o || i > 0) || 16 & i) { let o; Go(e, t, r, s) && (a = !0); for (const s in l) t && (f(t, s) || (o = A(s)) !== s && f(t, o)) || (c ? !n || void 0 === n[s] && void 0 === n[o] || (r[s] = qo(c, l, s, void 0, e, !0)) : delete r[s]); if (s !== l) for (const e in s) t && f(t, e) || (delete s[e], a = !0) } else if (8 & i) { const n = e.vnode.dynamicProps; for (let o = 0; o < n.length; o++) { let i = n[o]; if (pn(e.emitsOptions, i)) continue; const u = t[i]; if (c) if (f(s, i)) u !== s[i] && (s[i] = u, a = !0); else { const t = $(i); r[t] = qo(c, l, t, u, e, !1) } else u !== s[i] && (s[i] = u, a = !0) } } a && Ce(e, "set", "$attrs") }(e, t.props, r, o), ((e, t, o) => { const { vnode: r, slots: s } = e; let i = !0, l = n; if (32 & r.shapeFlag) { const e = t._; e ? o && 1 === e ? i = !1 : (a(s, t), o || 1 !== e || delete s._) : (i = !t.$stable, or(t, s)), l = t } else t && (rr(e, t), l = { default: 1 }); if (i) for (const n in s) er(n) || n in l || delete s[n] })(e, t.children, o), _e(), nn(), be() }, H = (e, t, n, o, r, s, i, l, c = !1) => { const a = e && e.children, u = e ? e.shapeFlag : 0, p = t.children, { patchFlag: f, shapeFlag: d } = t; if (f > 0) { if (128 & f) return void z(a, p, n, o, r, s, i, l, c); if (256 & f) return void W(a, p, n, o, r, s, i, l, c) } 8 & d ? (16 & u && Y(a, r, s), p !== a && h(n, p)) : 16 & u ? 16 & d ? z(a, p, n, o, r, s, i, l, c) : Y(a, r, s, !0) : (8 & u && h(n, ""), 16 & d && N(p, n, o, r, s, i, l, c)) }, W = (e, t, n, r, s, i, l, c, a) => { const u = (e = e || o).length, p = (t = t || o).length, f = Math.min(u, p); let d; for (d = 0; d < f; d++) { const o = t[d] = a ? zr(t[d]) : Wr(t[d]); _(e[d], o, n, null, s, i, l, c, a) } u > p ? Y(e, s, i, !0, !1, f) : N(t, n, r, s, i, l, c, a, f) }, z = (e, t, n, r, s, i, l, c, a) => { let u = 0; const p = t.length; let f = e.length - 1, d = p - 1; for (; u <= f && u <= d;) { const o = e[u], r = t[u] = a ? zr(t[u]) : Wr(t[u]); if (!Mr(o, r)) break; _(o, r, n, null, s, i, l, c, a), u++ } for (; u <= f && u <= d;) { const o = e[f], r = t[d] = a ? zr(t[d]) : Wr(t[d]); if (!Mr(o, r)) break; _(o, r, n, null, s, i, l, c, a), f--, d-- } if (u > f) { if (u <= d) { const e = d + 1, o = e < p ? t[e].el : r; for (; u <= d;)_(null, t[u] = a ? zr(t[u]) : Wr(t[u]), n, o, s, i, l, c, a), u++ } } else if (u > d) for (; u <= f;)G(e[u], s, i, !0), u++; else { const h = u, m = u, g = new Map; for (u = m; u <= d; u++) { const e = t[u] = a ? zr(t[u]) : Wr(t[u]); null != e.key && g.set(e.key, u) } let v, y = 0; const b = d - m + 1; let S = !1, x = 0; const C = new Array(b); for (u = 0; u < b; u++)C[u] = 0; for (u = h; u <= f; u++) { const o = e[u]; if (y >= b) { G(o, s, i, !0); continue } let r; if (null != o.key) r = g.get(o.key); else for (v = m; v <= d; v++)if (0 === C[v - m] && Mr(o, t[v])) { r = v; break } void 0 === r ? G(o, s, i, !0) : (C[r - m] = u + 1, r >= x ? x = r : S = !0, _(o, t[r], n, null, s, i, l, c, a), y++) } const k = S ? function (e) { const t = e.slice(), n = [0]; let o, r, s, i, l; const c = e.length; for (o = 0; o < c; o++) { const c = e[o]; if (0 !== c) { if (r = n[n.length - 1], e[r] < c) { t[o] = r, n.push(o); continue } for (s = 0, i = n.length - 1; s < i;)l = s + i >> 1, e[n[l]] < c ? s = l + 1 : i = l; c < e[n[s]] && (s > 0 && (t[o] = n[s - 1]), n[s] = o) } } s = n.length, i = n[s - 1]; for (; s-- > 0;)n[s] = i, i = t[i]; return n }(C) : o; for (v = k.length - 1, u = b - 1; u >= 0; u--) { const e = m + u, o = t[e], f = e + 1 < p ? t[e + 1].el : r; 0 === C[u] ? _(null, o, n, f, s, i, l, c, a) : S && (v < 0 || u !== k[v] ? K(o, n, f, 2) : v--) } } }, K = (e, t, n, o, r = null) => { const { el: i, type: l, transition: c, children: a, shapeFlag: u } = e; if (6 & u) return void K(e.component.subTree, t, n, o); if (128 & u) return void e.suspense.move(t, n, o); if (64 & u) return void l.move(e, t, n, ee); if (l === xr) { s(i, t, n); for (let e = 0; e < a.length; e++)K(a[e], t, n, o); return void s(e.anchor, t, n) } if (l === wr) return void (({ el: e, anchor: t }, n, o) => { let r; for (; e && e !== t;)r = g(e), s(e, n, o), e = r; s(t, n, o) })(e, t, n); if (2 !== o && 1 & u && c) if (0 === o) c.beforeEnter(i), s(i, t, n), ur((() => c.enter(i)), r); else { const { leave: e, delayLeave: o, afterLeave: r } = c, l = () => s(i, t, n), a = () => { e(i, (() => { l(), r && r() })) }; o ? o(i, l, a) : a() } else s(i, t, n) }, G = (e, t, n, o = !1, r = !1) => { const { type: s, props: i, ref: l, children: c, dynamicChildren: a, shapeFlag: u, patchFlag: p, dirs: f } = e; if (null != l && sr(l, null, n, e, !0), 256 & u) return void t.ctx.deactivate(e); const d = 1 & u && f, h = !Gn(e); let m; if (h && (m = i && i.onVnodeBeforeUnmount) && qr(m, t, e), 6 & u) Z(e.component, n, o); else { if (128 & u) return void e.suspense.unmount(n, o); d && Mn(e, null, t, "beforeUnmount"), 64 & u ? e.type.remove(e, t, n, r, ee, o) : a && (s !== xr || p > 0 && 64 & p) ? Y(a, t, n, !1, !0) : (s === xr && 384 & p || !r && 16 & u) && Y(c, t, n), o && q(e) } (h && (m = i && i.onVnodeUnmounted) || d) && ur((() => { m && qr(m, t, e), d && Mn(e, null, t, "unmounted") }), n) }, q = e => { const { type: t, el: n, anchor: o, transition: r } = e; if (t === xr) return void J(n, o); if (t === wr) return void (({ el: e, anchor: t }) => { let n; for (; e && e !== t;)n = g(e), i(e), e = n; i(t) })(e); const s = () => { i(n), r && !r.persisted && r.afterLeave && r.afterLeave() }; if (1 & e.shapeFlag && r && !r.persisted) { const { leave: t, delayLeave: o } = r, i = () => t(n, s); o ? o(e.el, s, i) : i() } else s() }, J = (e, t) => { let n; for (; e !== t;)n = g(e), i(e), e = n; i(t) }, Z = (e, t, n) => { const { bum: o, scope: r, update: s, subTree: i, um: l } = e; o && V(o), r.stop(), s && (s.active = !1, G(i, e, t, n)), l && ur(l, t), ur((() => { e.isUnmounted = !0 }), t), t && t.pendingBranch && !t.isUnmounted && e.asyncDep && !e.asyncResolved && e.suspenseId === t.pendingId && (t.deps--, 0 === t.deps && t.resolve()) }, Y = (e, t, n, o = !1, r = !1, s = 0) => { for (let i = s; i < e.length; i++)G(e[i], t, n, o, r) }, Q = e => 6 & e.shapeFlag ? Q(e.component.subTree) : 128 & e.shapeFlag ? e.suspense.next() : g(e.anchor || e.el), X = (e, t, n) => { null == e ? t._vnode && G(t._vnode, null, null, !0) : _(t._vnode || null, e, t, null, null, null, n), nn(), on(), t._vnode = e }, ee = { p: _, um: G, m: K, r: q, mt: B, mc: N, pc: H, pbc: P, n: Q, o: e }; let te, ne; return t && ([te, ne] = t(ee)), { render: X, hydrate: te, createApp: Ho(X, te) } } function hr ({ effect: e, update: t }, n) { e.allowRecurse = t.allowRecurse = n } function mr (e, t, n = !1) { const o = e.children, r = t.children; if (d(o) && d(r)) for (let s = 0; s < o.length; s++) { const e = o[s]; let t = r[s]; 1 & t.shapeFlag && !t.dynamicChildren && ((t.patchFlag <= 0 || 32 === t.patchFlag) && (t = r[s] = zr(r[s]), t.el = e.el), n || mr(e, t)), t.type === Cr && (t.el = e.el) } } const gr = e => e && (e.disabled || "" === e.disabled), vr = e => "undefined" != typeof SVGElement && e instanceof SVGElement, yr = (e, t) => { const n = e && e.to; if (y(n)) { if (t) { return t(n) } return null } return n }; function _r (e, t, n, { o: { insert: o }, m: r }, s = 2) { 0 === s && o(e.targetAnchor, t, n); const { el: i, anchor: l, shapeFlag: c, children: a, props: u } = e, p = 2 === s; if (p && o(i, t, n), (!p || gr(u)) && 16 & c) for (let f = 0; f < a.length; f++)r(a[f], t, n, 2); p && o(l, t, n) } const br = { __isTeleport: !0, process (e, t, n, o, r, s, i, l, c, a) { const { mc: u, pc: p, pbc: f, o: { insert: d, querySelector: h, createText: m } } = a, g = gr(t.props); let { shapeFlag: v, children: y, dynamicChildren: _ } = t; if (null == e) { const e = t.el = m(""), a = t.anchor = m(""); d(e, n, o), d(a, n, o); const p = t.target = yr(t.props, h), f = t.targetAnchor = m(""); p && (d(f, p), i = i || vr(p)); const _ = (e, t) => { 16 & v && u(y, e, t, r, s, i, l, c) }; g ? _(n, a) : p && _(p, f) } else { t.el = e.el; const o = t.anchor = e.anchor, u = t.target = e.target, d = t.targetAnchor = e.targetAnchor, m = gr(e.props), v = m ? n : u, y = m ? o : d; if (i = i || vr(u), _ ? (f(e.dynamicChildren, _, v, r, s, i, l), mr(e, t, !0)) : c || p(e, t, v, y, r, s, i, l, !1), g) m || _r(t, n, o, a, 1); else if ((t.props && t.props.to) !== (e.props && e.props.to)) { const e = t.target = yr(t.props, h); e && _r(t, e, null, a, 0) } else m && _r(t, u, d, a, 1) } Sr(t) }, remove (e, t, n, o, { um: r, o: { remove: s } }, i) { const { shapeFlag: l, children: c, anchor: a, targetAnchor: u, target: p, props: f } = e; if (p && s(u), (i || !gr(f)) && (s(a), 16 & l)) for (let d = 0; d < c.length; d++) { const e = c[d]; r(e, t, n, !0, !!e.dynamicChildren) } }, move: _r, hydrate: function (e, t, n, o, r, s, { o: { nextSibling: i, parentNode: l, querySelector: c } }, a) { const u = t.target = yr(t.props, c); if (u) { const c = u._lpa || u.firstChild; if (16 & t.shapeFlag) if (gr(t.props)) t.anchor = a(i(e), t, l(e), n, o, r, s), t.targetAnchor = c; else { t.anchor = i(e); let l = c; for (; l;)if (l = i(l), l && 8 === l.nodeType && "teleport anchor" === l.data) { t.targetAnchor = l, u._lpa = t.targetAnchor && i(t.targetAnchor); break } a(c, t, u, n, o, r, s) } Sr(t) } return t.anchor && i(t.anchor) } }; function Sr (e) { const t = e.ctx; if (t && t.ut) { let n = e.children[0].el; for (; n !== e.targetAnchor;)1 === n.nodeType && n.setAttribute("data-v-owner", t.uid), n = n.nextSibling; t.ut() } } const xr = Symbol.for("v-fgt"), Cr = Symbol.for("v-txt"), kr = Symbol.for("v-cmt"), wr = Symbol.for("v-stc"), Tr = []; let Er = null; function Nr (e = !1) { Tr.push(Er = e ? null : []) } function Or () { Tr.pop(), Er = Tr[Tr.length - 1] || null } let $r = 1; function Pr (e) { $r += e } function Ar (e) { return e.dynamicChildren = $r > 0 ? Er || o : null, Or(), $r > 0 && Er && Er.push(e), e } function Fr (e, t, n, o, r) { return Ar(jr(e, t, n, o, r, !0)) } function Rr (e) { return !!e && !0 === e.__v_isVNode } function Mr (e, t) { return e.type === t.type && e.key === t.key } const Vr = "__vInternal", Ir = ({ key: e }) => null != e ? e : null, Br = ({ ref: e, ref_key: t, ref_for: n }) => ("number" == typeof e && (e = "" + e), null != e ? y(e) || Nt(e) || v(e) ? { i: fn, r: e, k: t, f: !!n } : e : null); function Lr (e, t = null, n = null, o = 0, r = null, s = (e === xr ? 0 : 1), i = !1, l = !1) { const c = { __v_isVNode: !0, __v_skip: !0, type: e, props: t, key: t && Ir(t), ref: t && Br(t), scopeId: dn, slotScopeIds: null, children: n, component: null, suspense: null, ssContent: null, ssFallback: null, dirs: null, transition: null, el: null, anchor: null, target: null, targetAnchor: null, staticCount: 0, shapeFlag: s, patchFlag: o, dynamicProps: r, dynamicChildren: null, appContext: null, ctx: fn }; return l ? (Kr(c, n), 128 & s && e.normalize(c)) : n && (c.shapeFlag |= y(n) ? 8 : 16), $r > 0 && !i && Er && (c.patchFlag > 0 || 6 & s) && 32 !== c.patchFlag && Er.push(c), c } const jr = function (e, t = null, n = null, o = 0, r = null, s = !1) { e && e !== yo || (e = kr); if (Rr(e)) { const o = Dr(e, t, !0); return n && Kr(o, n), $r > 0 && !s && Er && (6 & o.shapeFlag ? Er[Er.indexOf(e)] = o : Er.push(o)), o.patchFlag |= -2, o } i = e, v(i) && "__vccOpts" in i && (e = e.__vccOpts); var i; if (t) { t = Ur(t); let { class: e, style: n } = t; e && !y(e) && (t.class = G(e)), b(n) && (St(n) && !d(n) && (n = a({}, n)), t.style = D(n)) } const l = y(e) ? 1 : Sn(e) ? 128 : (e => e.__isTeleport)(e) ? 64 : b(e) ? 4 : v(e) ? 2 : 0; return Lr(e, t, n, o, r, l, s, !0) }; function Ur (e) { return e ? St(e) || Vr in e ? a({}, e) : e : null } function Dr (e, t, n = !1) { const { props: o, ref: r, patchFlag: s, children: i } = e, l = t ? Gr(o || {}, t) : o; return { __v_isVNode: !0, __v_skip: !0, type: e.type, props: l, key: l && Ir(l), ref: t && t.ref ? n && r ? d(r) ? r.concat(Br(t)) : [r, Br(t)] : Br(t) : r, scopeId: e.scopeId, slotScopeIds: e.slotScopeIds, children: i, target: e.target, targetAnchor: e.targetAnchor, staticCount: e.staticCount, shapeFlag: e.shapeFlag, patchFlag: t && e.type !== xr ? -1 === s ? 16 : 16 | s : s, dynamicProps: e.dynamicProps, dynamicChildren: e.dynamicChildren, appContext: e.appContext, dirs: e.dirs, transition: e.transition, component: e.component, suspense: e.suspense, ssContent: e.ssContent && Dr(e.ssContent), ssFallback: e.ssFallback && Dr(e.ssFallback), el: e.el, anchor: e.anchor, ctx: e.ctx, ce: e.ce } } function Hr (e = " ", t = 0) { return jr(Cr, null, e, t) } function Wr (e) { return null == e || "boolean" == typeof e ? jr(kr) : d(e) ? jr(xr, null, e.slice()) : "object" == typeof e ? zr(e) : jr(Cr, null, String(e)) } function zr (e) { return null === e.el && -1 !== e.patchFlag || e.memo ? e : Dr(e) } function Kr (e, t) { let n = 0; const { shapeFlag: o } = e; if (null == t) t = null; else if (d(t)) n = 16; else if ("object" == typeof t) { if (65 & o) { const n = t.default; return void (n && (n._c && (n._d = !1), Kr(e, n()), n._c && (n._d = !0))) } { n = 32; const o = t._; o || Vr in t ? 3 === o && fn && (1 === fn.slots._ ? t._ = 1 : (t._ = 2, e.patchFlag |= 1024)) : t._ctx = fn } } else v(t) ? (t = { default: t, _ctx: fn }, n = 32) : (t = String(t), 64 & o ? (n = 16, t = [Hr(t)]) : n = 8); e.children = t, e.shapeFlag |= n } function Gr (...e) { const t = {}; for (let n = 0; n < e.length; n++) { const o = e[n]; for (const e in o) if ("class" === e) t.class !== o.class && (t.class = G([t.class, o.class])); else if ("style" === e) t.style = D([t.style, o.style]); else if (l(e)) { const n = t[e], r = o[e]; !r || n === r || d(n) && n.includes(r) || (t[e] = n ? [].concat(n, r) : r) } else "" !== e && (t[e] = o[e]) } return t } function qr (e, t, n, o = null) { Ut(e, t, 7, [n, o]) } const Jr = Uo(); let Zr = 0; let Yr = null; const Qr = () => Yr || fn; let Xr; Xr = e => { Yr = e }; const es = e => { Xr(e), e.scope.on() }, ts = () => { Yr && Yr.scope.off(), Xr(null) }; function ns (e) { return 4 & e.vnode.shapeFlag } let os, rs, ss = !1; function is (e, t, n) { v(t) ? e.render = t : b(t) && (e.setupState = Rt(t)), cs(e, n) } function ls (e) { os = e, rs = e => { e.render._rc && (e.withProxy = new Proxy(e.ctx, To)) } } function cs (e, t, n) { const o = e.type; if (!e.render) { if (!t && os && !o.render) { const t = o.template || Fo(e).template; if (t) { const { isCustomElement: n, compilerOptions: r } = e.appContext.config, { delimiters: s, compilerOptions: i } = o, l = a(a({ isCustomElement: n, delimiters: s }, r), i); o.render = os(t, l) } } e.render = o.render || r, rs && rs(e) } es(e), _e(), $o(e), be(), ts() } function as (e) { const t = t => { e.exposed = t || {} }; return { get attrs () { return function (e) { return e.attrsProxy || (e.attrsProxy = new Proxy(e.attrs, { get: (t, n) => (Se(e, 0, "$attrs"), t[n]) })) }(e) }, slots: e.slots, emit: e.emit, expose: t } } function us (e) { if (e.exposed) return e.exposeProxy || (e.exposeProxy = new Proxy(Rt(Ct(e.exposed)), { get: (t, n) => n in t ? t[n] : n in Co ? Co[n](e) : void 0, has: (e, t) => t in e || t in Co })) } function ps (e, t = !0) { return v(e) ? e.displayName || e.name : e.name || t && e.__name } const fs = (e, t) => function (e, t, n = !1) { let o, s; const i = v(e); return i ? (o = e, s = r) : (o = e.get, s = e.set), new Lt(o, s, i || !s, n) }(e, 0, ss); function ds (e, t, n) { const o = arguments.length; return 2 === o ? b(t) && !d(t) ? Rr(t) ? jr(e, null, [t]) : jr(e, t) : jr(e, null, t) : (o > 3 ? n = Array.prototype.slice.call(arguments, 2) : 3 === o && Rr(n) && (n = [n]), jr(e, t, n)) } const hs = Symbol.for("v-scx"); function ms (e, t) { const n = e.memo; if (n.length != t.length) return !1; for (let o = 0; o < n.length; o++)if (M(n[o], t[o])) return !1; return $r > 0 && Er && Er.push(e), !0 } const gs = "3.3.4", vs = "undefined" != typeof document ? document : null, ys = vs && vs.createElement("template"), _s = { insert: (e, t, n) => { t.insertBefore(e, n || null) }, remove: e => { const t = e.parentNode; t && t.removeChild(e) }, createElement: (e, t, n, o) => { const r = t ? vs.createElementNS("http://www.w3.org/2000/svg", e) : vs.createElement(e, n ? { is: n } : void 0); return "select" === e && o && null != o.multiple && r.setAttribute("multiple", o.multiple), r }, createText: e => vs.createTextNode(e), createComment: e => vs.createComment(e), setText: (e, t) => { e.nodeValue = t }, setElementText: (e, t) => { e.textContent = t }, parentNode: e => e.parentNode, nextSibling: e => e.nextSibling, querySelector: e => vs.querySelector(e), setScopeId (e, t) { e.setAttribute(t, "") }, insertStaticContent (e, t, n, o, r, s) { const i = n ? n.previousSibling : t.lastChild; if (r && (r === s || r.nextSibling)) for (; t.insertBefore(r.cloneNode(!0), n), r !== s && (r = r.nextSibling);); else { ys.innerHTML = o ? `${e}` : e; const r = ys.content; if (o) { const e = r.firstChild; for (; e.firstChild;)r.appendChild(e.firstChild); r.removeChild(e) } t.insertBefore(r, n) } return [i ? i.nextSibling : t.firstChild, n ? n.previousSibling : t.lastChild] } }; const bs = /\s*!important$/; function Ss (e, t, n) { if (d(n)) n.forEach((n => Ss(e, t, n))); else if (null == n && (n = ""), t.startsWith("--")) e.setProperty(t, n); else { const o = function (e, t) { const n = Cs[t]; if (n) return n; let o = $(t); if ("filter" !== o && o in e) return Cs[t] = o; o = F(o); for (let r = 0; r < xs.length; r++) { const n = xs[r] + o; if (n in e) return Cs[t] = n } return t }(e, t); bs.test(n) ? e.setProperty(A(o), n.replace(bs, ""), "important") : e[o] = n } } const xs = ["Webkit", "Moz", "ms"], Cs = {}; const ks = "http://www.w3.org/1999/xlink"; function ws (e, t, n, o) { e.addEventListener(t, n, o) } function Ts (e, t, n, o, r = null) { const s = e._vei || (e._vei = {}), i = s[t]; if (o && i) i.value = o; else { const [n, l] = function (e) { let t; if (Es.test(e)) { let n; for (t = {}; n = e.match(Es);)e = e.slice(0, e.length - n[0].length), t[n[0].toLowerCase()] = !0 } const n = ":" === e[2] ? e.slice(3) : A(e.slice(2)); return [n, t] }(t); if (o) { const i = s[t] = function (e, t) { const n = e => { if (e._vts) { if (e._vts <= n.attached) return } else e._vts = Date.now(); Ut(function (e, t) { if (d(t)) { const n = e.stopImmediatePropagation; return e.stopImmediatePropagation = () => { n.call(e), e._stopped = !0 }, t.map((e => t => !t._stopped && e && e(t))) } return t }(e, n.value), t, 5, [e]) }; return n.value = e, n.attached = (() => Ns || (Os.then((() => Ns = 0)), Ns = Date.now()))(), n }(o, r); ws(e, n, i, l) } else i && (!function (e, t, n, o) { e.removeEventListener(t, n, o) }(e, n, i, l), s[t] = void 0) } } const Es = /(?:Once|Passive|Capture)$/; let Ns = 0; const Os = Promise.resolve(); const $s = /^on[a-z]/; function Ps (e, t) { const n = Kn(e); class o extends Fs { constructor(e) { super(n, e, t) } } return o.def = n, o } const As = "undefined" != typeof HTMLElement ? HTMLElement : class { }; class Fs extends As { constructor(e, t = {}, n) { super(), this._def = e, this._props = t, this._instance = null, this._connected = !1, this._resolved = !1, this._numberProps = null, this.shadowRoot && n ? n(this._createVNode(), this.shadowRoot) : (this.attachShadow({ mode: "open" }), this._def.__asyncLoader || this._resolveProps(this._def)) } connectedCallback () { this._connected = !0, this._instance || (this._resolved ? this._update() : this._resolveDef()) } disconnectedCallback () { this._connected = !1, Qt((() => { this._connected || ($i(null, this.shadowRoot), this._instance = null) })) } _resolveDef () { this._resolved = !0; for (let n = 0; n < this.attributes.length; n++)this._setAttr(this.attributes[n].name); new MutationObserver((e => { for (const t of e) this._setAttr(t.attributeName) })).observe(this, { attributes: !0 }); const e = (e, t = !1) => { const { props: n, styles: o } = e; let r; if (n && !d(n)) for (const s in n) { const e = n[s]; (e === Number || e && e.type === Number) && (s in this._props && (this._props[s] = L(this._props[s])), (r || (r = Object.create(null)))[$(s)] = !0) } this._numberProps = r, t && this._resolveProps(e), this._applyStyles(o), this._update() }, t = this._def.__asyncLoader; t ? t().then((t => e(t, !0))) : e(this._def) } _resolveProps (e) { const { props: t } = e, n = d(t) ? t : Object.keys(t || {}); for (const o of Object.keys(this)) "_" !== o[0] && n.includes(o) && this._setProp(o, this[o], !0, !1); for (const o of n.map($)) Object.defineProperty(this, o, { get () { return this._getProp(o) }, set (e) { this._setProp(o, e) } }) } _setAttr (e) { let t = this.getAttribute(e); const n = $(e); this._numberProps && this._numberProps[n] && (t = L(t)), this._setProp(n, t, !1) } _getProp (e) { return this._props[e] } _setProp (e, t, n = !0, o = !0) { t !== this._props[e] && (this._props[e] = t, o && this._instance && this._update(), n && (!0 === t ? this.setAttribute(A(e), "") : "string" == typeof t || "number" == typeof t ? this.setAttribute(A(e), t + "") : t || this.removeAttribute(A(e)))) } _update () { $i(this._createVNode(), this.shadowRoot) } _createVNode () { const e = jr(this._def, a({}, this._props)); return this._instance || (e.ce = e => { this._instance = e, e.isCE = !0; const t = (e, t) => { this.dispatchEvent(new CustomEvent(e, { detail: t })) }; e.emit = (e, ...n) => { t(e, n), A(e) !== e && t(A(e), n) }; let n = this; for (; n = n && (n.parentNode || n.host);)if (n instanceof Fs) { e.parent = n._instance, e.provides = n._instance.provides; break } }), e } _applyStyles (e) { e && e.forEach((e => { const t = document.createElement("style"); t.textContent = e, this.shadowRoot.appendChild(t) })) } } function Rs (e, t) { if (128 & e.shapeFlag) { const n = e.suspense; e = n.activeBranch, n.pendingBranch && !n.isHydrating && n.effects.push((() => { Rs(n.activeBranch, t) })) } for (; e.component;)e = e.component.subTree; if (1 & e.shapeFlag && e.el) Ms(e.el, t); else if (e.type === xr) e.children.forEach((e => Rs(e, t))); else if (e.type === wr) { let { el: n, anchor: o } = e; for (; n && (Ms(n, t), n !== o);)n = n.nextSibling } } function Ms (e, t) { if (1 === e.nodeType) { const n = e.style; for (const e in t) n.setProperty(`--${e}`, t[e]) } } const Vs = "transition", Is = "animation", Bs = (e, { slots: t }) => ds(Ln, Hs(e), t); Bs.displayName = "Transition"; const Ls = { name: String, type: String, css: { type: Boolean, default: !0 }, duration: [String, Number, Object], enterFromClass: String, enterActiveClass: String, enterToClass: String, appearFromClass: String, appearActiveClass: String, appearToClass: String, leaveFromClass: String, leaveActiveClass: String, leaveToClass: String }, js = Bs.props = a({}, Bn, Ls), Us = (e, t = []) => { d(e) ? e.forEach((e => e(...t))) : e && e(...t) }, Ds = e => !!e && (d(e) ? e.some((e => e.length > 1)) : e.length > 1); function Hs (e) { const t = {}; for (const a in e) a in Ls || (t[a] = e[a]); if (!1 === e.css) return t; const { name: n = "v", type: o, duration: r, enterFromClass: s = `${n}-enter-from`, enterActiveClass: i = `${n}-enter-active`, enterToClass: l = `${n}-enter-to`, appearFromClass: c = s, appearActiveClass: u = i, appearToClass: p = l, leaveFromClass: f = `${n}-leave-from`, leaveActiveClass: d = `${n}-leave-active`, leaveToClass: h = `${n}-leave-to` } = e, m = function (e) { if (null == e) return null; if (b(e)) return [Ws(e.enter), Ws(e.leave)]; { const t = Ws(e); return [t, t] } }(r), g = m && m[0], v = m && m[1], { onBeforeEnter: y, onEnter: _, onEnterCancelled: S, onLeave: x, onLeaveCancelled: C, onBeforeAppear: k = y, onAppear: w = _, onAppearCancelled: T = S } = t, E = (e, t, n) => { Ks(e, t ? p : l), Ks(e, t ? u : i), n && n() }, N = (e, t) => { e._isLeaving = !1, Ks(e, f), Ks(e, h), Ks(e, d), t && t() }, O = e => (t, n) => { const r = e ? w : _, i = () => E(t, e, n); Us(r, [t, i]), Gs((() => { Ks(t, e ? c : s), zs(t, e ? p : l), Ds(r) || Js(t, o, g, i) })) }; return a(t, { onBeforeEnter (e) { Us(y, [e]), zs(e, s), zs(e, i) }, onBeforeAppear (e) { Us(k, [e]), zs(e, c), zs(e, u) }, onEnter: O(!1), onAppear: O(!0), onLeave (e, t) { e._isLeaving = !0; const n = () => N(e, t); zs(e, f), Xs(), zs(e, d), Gs((() => { e._isLeaving && (Ks(e, f), zs(e, h), Ds(x) || Js(e, o, v, n)) })), Us(x, [e, n]) }, onEnterCancelled (e) { E(e, !1), Us(S, [e]) }, onAppearCancelled (e) { E(e, !0), Us(T, [e]) }, onLeaveCancelled (e) { N(e), Us(C, [e]) } }) } function Ws (e) { return L(e) } function zs (e, t) { t.split(/\s+/).forEach((t => t && e.classList.add(t))), (e._vtc || (e._vtc = new Set)).add(t) } function Ks (e, t) { t.split(/\s+/).forEach((t => t && e.classList.remove(t))); const { _vtc: n } = e; n && (n.delete(t), n.size || (e._vtc = void 0)) } function Gs (e) { requestAnimationFrame((() => { requestAnimationFrame(e) })) } let qs = 0; function Js (e, t, n, o) { const r = e._endId = ++qs, s = () => { r === e._endId && o() }; if (n) return setTimeout(s, n); const { type: i, timeout: l, propCount: c } = Zs(e, t); if (!i) return o(); const a = i + "end"; let u = 0; const p = () => { e.removeEventListener(a, f), s() }, f = t => { t.target === e && ++u >= c && p() }; setTimeout((() => { u < c && p() }), l + 1), e.addEventListener(a, f) } function Zs (e, t) { const n = window.getComputedStyle(e), o = e => (n[e] || "").split(", "), r = o(`${Vs}Delay`), s = o(`${Vs}Duration`), i = Ys(r, s), l = o(`${Is}Delay`), c = o(`${Is}Duration`), a = Ys(l, c); let u = null, p = 0, f = 0; t === Vs ? i > 0 && (u = Vs, p = i, f = s.length) : t === Is ? a > 0 && (u = Is, p = a, f = c.length) : (p = Math.max(i, a), u = p > 0 ? i > a ? Vs : Is : null, f = u ? u === Vs ? s.length : c.length : 0); return { type: u, timeout: p, propCount: f, hasTransform: u === Vs && /\b(transform|all)(,|$)/.test(o(`${Vs}Property`).toString()) } } function Ys (e, t) { for (; e.length < t.length;)e = e.concat(e); return Math.max(...t.map(((t, n) => Qs(t) + Qs(e[n])))) } function Qs (e) { return 1e3 * Number(e.slice(0, -1).replace(",", ".")) } function Xs () { return document.body.offsetHeight } const ei = new WeakMap, ti = new WeakMap, ni = { name: "TransitionGroup", props: a({}, js, { tag: String, moveClass: String }), setup (e, { slots: t }) { const n = Qr(), o = Vn(); let r, s; return ao((() => { if (!r.length) return; const t = e.moveClass || `${e.name || "v"}-move`; if (!function (e, t, n) { const o = e.cloneNode(); e._vtc && e._vtc.forEach((e => { e.split(/\s+/).forEach((e => e && o.classList.remove(e))) })); n.split(/\s+/).forEach((e => e && o.classList.add(e))), o.style.display = "none"; const r = 1 === t.nodeType ? t : t.parentNode; r.appendChild(o); const { hasTransform: s } = Zs(o); return r.removeChild(o), s }(r[0].el, n.vnode.el, t)) return; r.forEach(ri), r.forEach(si); const o = r.filter(ii); Xs(), o.forEach((e => { const n = e.el, o = n.style; zs(n, t), o.transform = o.webkitTransform = o.transitionDuration = ""; const r = n._moveCb = e => { e && e.target !== n || e && !/transform$/.test(e.propertyName) || (n.removeEventListener("transitionend", r), n._moveCb = null, Ks(n, t)) }; n.addEventListener("transitionend", r) })) })), () => { const i = xt(e), l = Hs(i); let c = i.tag || xr; r = s, s = t.default ? zn(t.default()) : []; for (let e = 0; e < s.length; e++) { const t = s[e]; null != t.key && Wn(t, Un(t, l, o, n)) } if (r) for (let e = 0; e < r.length; e++) { const t = r[e]; Wn(t, Un(t, l, o, n)), ei.set(t, t.el.getBoundingClientRect()) } return jr(c, null, s) } } }, oi = ni; function ri (e) { const t = e.el; t._moveCb && t._moveCb(), t._enterCb && t._enterCb() } function si (e) { ti.set(e, e.el.getBoundingClientRect()) } function ii (e) { const t = ei.get(e), n = ti.get(e), o = t.left - n.left, r = t.top - n.top; if (o || r) { const t = e.el.style; return t.transform = t.webkitTransform = `translate(${o}px,${r}px)`, t.transitionDuration = "0s", e } } const li = e => { const t = e.props["onUpdate:modelValue"] || !1; return d(t) ? e => V(t, e) : t }; function ci (e) { e.target.composing = !0 } function ai (e) { const t = e.target; t.composing && (t.composing = !1, t.dispatchEvent(new Event("input"))) } const ui = { created (e, { modifiers: { lazy: t, trim: n, number: o } }, r) { e._assign = li(r); const s = o || r.props && "number" === r.props.type; ws(e, t ? "change" : "input", (t => { if (t.target.composing) return; let o = e.value; n && (o = o.trim()), s && (o = B(o)), e._assign(o) })), n && ws(e, "change", (() => { e.value = e.value.trim() })), t || (ws(e, "compositionstart", ci), ws(e, "compositionend", ai), ws(e, "change", ai)) }, mounted (e, { value: t }) { e.value = null == t ? "" : t }, beforeUpdate (e, { value: t, modifiers: { lazy: n, trim: o, number: r } }, s) { if (e._assign = li(s), e.composing) return; if (document.activeElement === e && "range" !== e.type) { if (n) return; if (o && e.value.trim() === t) return; if ((r || "number" === e.type) && B(e.value) === t) return } const i = null == t ? "" : t; e.value !== i && (e.value = i) } }, pi = { deep: !0, created (e, t, n) { e._assign = li(n), ws(e, "change", (() => { const t = e._modelValue, n = gi(e), o = e.checked, r = e._assign; if (d(t)) { const e = ee(t, n), s = -1 !== e; if (o && !s) r(t.concat(n)); else if (!o && s) { const n = [...t]; n.splice(e, 1), r(n) } } else if (m(t)) { const e = new Set(t); o ? e.add(n) : e.delete(n), r(e) } else r(vi(e, o)) })) }, mounted: fi, beforeUpdate (e, t, n) { e._assign = li(n), fi(e, t, n) } }; function fi (e, { value: t, oldValue: n }, o) { e._modelValue = t, d(t) ? e.checked = ee(t, o.props.value) > -1 : m(t) ? e.checked = t.has(o.props.value) : t !== n && (e.checked = X(t, vi(e, !0))) } const di = { created (e, { value: t }, n) { e.checked = X(t, n.props.value), e._assign = li(n), ws(e, "change", (() => { e._assign(gi(e)) })) }, beforeUpdate (e, { value: t, oldValue: n }, o) { e._assign = li(o), t !== n && (e.checked = X(t, o.props.value)) } }, hi = { deep: !0, created (e, { value: t, modifiers: { number: n } }, o) { const r = m(t); ws(e, "change", (() => { const t = Array.prototype.filter.call(e.options, (e => e.selected)).map((e => n ? B(gi(e)) : gi(e))); e._assign(e.multiple ? r ? new Set(t) : t : t[0]) })), e._assign = li(o) }, mounted (e, { value: t }) { mi(e, t) }, beforeUpdate (e, t, n) { e._assign = li(n) }, updated (e, { value: t }) { mi(e, t) } }; function mi (e, t) { const n = e.multiple; if (!n || d(t) || m(t)) { for (let o = 0, r = e.options.length; o < r; o++) { const r = e.options[o], s = gi(r); if (n) r.selected = d(t) ? ee(t, s) > -1 : t.has(s); else if (X(gi(r), t)) return void (e.selectedIndex !== o && (e.selectedIndex = o)) } n || -1 === e.selectedIndex || (e.selectedIndex = -1) } } function gi (e) { return "_value" in e ? e._value : e.value } function vi (e, t) { const n = t ? "_trueValue" : "_falseValue"; return n in e ? e[n] : t } const yi = { created (e, t, n) { _i(e, t, n, null, "created") }, mounted (e, t, n) { _i(e, t, n, null, "mounted") }, beforeUpdate (e, t, n, o) { _i(e, t, n, o, "beforeUpdate") }, updated (e, t, n, o) { _i(e, t, n, o, "updated") } }; function _i (e, t, n, o, r) { const s = function (e, t) { switch (e) { case "SELECT": return hi; case "TEXTAREA": return ui; default: switch (t) { case "checkbox": return pi; case "radio": return di; default: return ui } } }(e.tagName, n.props && n.props.type)[r]; s && s(e, t, n, o) } const bi = ["ctrl", "shift", "alt", "meta"], Si = { stop: e => e.stopPropagation(), prevent: e => e.preventDefault(), self: e => e.target !== e.currentTarget, ctrl: e => !e.ctrlKey, shift: e => !e.shiftKey, alt: e => !e.altKey, meta: e => !e.metaKey, left: e => "button" in e && 0 !== e.button, middle: e => "button" in e && 1 !== e.button, right: e => "button" in e && 2 !== e.button, exact: (e, t) => bi.some((n => e[`${n}Key`] && !t.includes(n))) }, xi = { esc: "escape", space: " ", up: "arrow-up", left: "arrow-left", right: "arrow-right", down: "arrow-down", delete: "backspace" }, Ci = { beforeMount (e, { value: t }, { transition: n }) { e._vod = "none" === e.style.display ? "" : e.style.display, n && t ? n.beforeEnter(e) : ki(e, t) }, mounted (e, { value: t }, { transition: n }) { n && t && n.enter(e) }, updated (e, { value: t, oldValue: n }, { transition: o }) { !t != !n && (o ? t ? (o.beforeEnter(e), ki(e, !0), o.enter(e)) : o.leave(e, (() => { ki(e, !1) })) : ki(e, t)) }, beforeUnmount (e, { value: t }) { ki(e, t) } }; function ki (e, t) { e.style.display = t ? e._vod : "none" } const wi = a({ patchProp: (e, t, n, o, r = !1, s, i, a, u) => { "class" === t ? function (e, t, n) { const o = e._vtc; o && (t = (t ? [t, ...o] : [...o]).join(" ")), null == t ? e.removeAttribute("class") : n ? e.setAttribute("class", t) : e.className = t }(e, o, r) : "style" === t ? function (e, t, n) { const o = e.style, r = y(n); if (n && !r) { if (t && !y(t)) for (const e in t) null == n[e] && Ss(o, e, ""); for (const e in n) Ss(o, e, n[e]) } else { const s = o.display; r ? t !== n && (o.cssText = n) : t && e.removeAttribute("style"), "_vod" in e && (o.display = s) } }(e, n, o) : l(t) ? c(t) || Ts(e, t, 0, o, i) : ("." === t[0] ? (t = t.slice(1), 1) : "^" === t[0] ? (t = t.slice(1), 0) : function (e, t, n, o) { if (o) return "innerHTML" === t || "textContent" === t || !!(t in e && $s.test(t) && v(n)); if ("spellcheck" === t || "draggable" === t || "translate" === t) return !1; if ("form" === t) return !1; if ("list" === t && "INPUT" === e.tagName) return !1; if ("type" === t && "TEXTAREA" === e.tagName) return !1; if ($s.test(t) && y(n)) return !1; return t in e }(e, t, o, r)) ? function (e, t, n, o, r, s, i) { if ("innerHTML" === t || "textContent" === t) return o && i(o, r, s), void (e[t] = null == n ? "" : n); const l = e.tagName; if ("value" === t && "PROGRESS" !== l && !l.includes("-")) { e._value = n; const o = null == n ? "" : n; return ("OPTION" === l ? e.getAttribute("value") : e.value) !== o && (e.value = o), void (null == n && e.removeAttribute(t)) } let c = !1; if ("" === n || null == n) { const o = typeof e[t]; "boolean" === o ? n = Q(n) : null == n && "string" === o ? (n = "", c = !0) : "number" === o && (n = 0, c = !0) } try { e[t] = n } catch (a) { } c && e.removeAttribute(t) }(e, t, o, s, i, a, u) : ("true-value" === t ? e._trueValue = o : "false-value" === t && (e._falseValue = o), function (e, t, n, o, r) { if (o && t.startsWith("xlink:")) null == n ? e.removeAttributeNS(ks, t.slice(6, t.length)) : e.setAttributeNS(ks, t, n); else { const o = Y(t); null == n || o && !Q(n) ? e.removeAttribute(t) : e.setAttribute(t, o ? "" : n) } }(e, t, o, r)) } }, _s); let Ti, Ei = !1; function Ni () { return Ti || (Ti = pr(wi)) } function Oi () { return Ti = Ei ? Ti : fr(wi), Ei = !0, Ti } const $i = (...e) => { Ni().render(...e) }, Pi = (...e) => { Oi().hydrate(...e) }; function Ai (e) { if (y(e)) { return document.querySelector(e) } return e } const Fi = r; function Ri (e) { throw e } function Mi (e) { } function Vi (e, t, n, o) { const r = new SyntaxError(String(e)); return r.code = e, r.loc = t, r } const Ii = Symbol(""), Bi = Symbol(""), Li = Symbol(""), ji = Symbol(""), Ui = Symbol(""), Di = Symbol(""), Hi = Symbol(""), Wi = Symbol(""), zi = Symbol(""), Ki = Symbol(""), Gi = Symbol(""), qi = Symbol(""), Ji = Symbol(""), Zi = Symbol(""), Yi = Symbol(""), Qi = Symbol(""), Xi = Symbol(""), el = Symbol(""), tl = Symbol(""), nl = Symbol(""), ol = Symbol(""), rl = Symbol(""), sl = Symbol(""), il = Symbol(""), ll = Symbol(""), cl = Symbol(""), al = Symbol(""), ul = Symbol(""), pl = Symbol(""), fl = Symbol(""), dl = Symbol(""), hl = Symbol(""), ml = Symbol(""), gl = Symbol(""), vl = Symbol(""), yl = Symbol(""), _l = Symbol(""), bl = Symbol(""), Sl = Symbol(""), xl = { [Ii]: "Fragment", [Bi]: "Teleport", [Li]: "Suspense", [ji]: "KeepAlive", [Ui]: "BaseTransition", [Di]: "openBlock", [Hi]: "createBlock", [Wi]: "createElementBlock", [zi]: "createVNode", [Ki]: "createElementVNode", [Gi]: "createCommentVNode", [qi]: "createTextVNode", [Ji]: "createStaticVNode", [Zi]: "resolveComponent", [Yi]: "resolveDynamicComponent", [Qi]: "resolveDirective", [Xi]: "resolveFilter", [el]: "withDirectives", [tl]: "renderList", [nl]: "renderSlot", [ol]: "createSlots", [rl]: "toDisplayString", [sl]: "mergeProps", [il]: "normalizeClass", [ll]: "normalizeStyle", [cl]: "normalizeProps", [al]: "guardReactiveProps", [ul]: "toHandlers", [pl]: "camelize", [fl]: "capitalize", [dl]: "toHandlerKey", [hl]: "setBlockTracking", [ml]: "pushScopeId", [gl]: "popScopeId", [vl]: "withCtx", [yl]: "unref", [_l]: "isRef", [bl]: "withMemo", [Sl]: "isMemoSame" }; const Cl = { source: "", start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 1, offset: 0 } }; function kl (e, t, n, o, r, s, i, l = !1, c = !1, a = !1, u = Cl) { return e && (l ? (e.helper(Di), e.helper(Rl(e.inSSR, a))) : e.helper(Fl(e.inSSR, a)), i && e.helper(el)), { type: 13, tag: t, props: n, children: o, patchFlag: r, dynamicProps: s, directives: i, isBlock: l, disableTracking: c, isComponent: a, loc: u } } function wl (e, t = Cl) { return { type: 17, loc: t, elements: e } } function Tl (e, t = Cl) { return { type: 15, loc: t, properties: e } } function El (e, t) { return { type: 16, loc: Cl, key: y(e) ? Nl(e, !0) : e, value: t } } function Nl (e, t = !1, n = Cl, o = 0) { return { type: 4, loc: n, content: e, isStatic: t, constType: t ? 3 : o } } function Ol (e, t = Cl) { return { type: 8, loc: t, children: e } } function $l (e, t = [], n = Cl) { return { type: 14, loc: n, callee: e, arguments: t } } function Pl (e, t, n = !1, o = !1, r = Cl) { return { type: 18, params: e, returns: t, newline: n, isSlot: o, loc: r } } function Al (e, t, n, o = !0) { return { type: 19, test: e, consequent: t, alternate: n, newline: o, loc: Cl } } function Fl (e, t) { return e || t ? zi : Ki } function Rl (e, t) { return e || t ? Hi : Wi } function Ml (e, { helper: t, removeHelper: n, inSSR: o }) { e.isBlock || (e.isBlock = !0, n(Fl(o, e.isComponent)), t(Di), t(Rl(o, e.isComponent))) } const Vl = e => 4 === e.type && e.isStatic, Il = (e, t) => e === t || e === A(t); function Bl (e) { return Il(e, "Teleport") ? Bi : Il(e, "Suspense") ? Li : Il(e, "KeepAlive") ? ji : Il(e, "BaseTransition") ? Ui : void 0 } const Ll = /^\d|[^\$\w]/, jl = e => !Ll.test(e), Ul = /[A-Za-z_$\xA0-\uFFFF]/, Dl = /[\.\?\w$\xA0-\uFFFF]/, Hl = /\s+[.[]\s*|\s*[.[]\s+/g, Wl = e => { e = e.trim().replace(Hl, (e => e.trim())); let t = 0, n = [], o = 0, r = 0, s = null; for (let i = 0; i < e.length; i++) { const l = e.charAt(i); switch (t) { case 0: if ("[" === l) n.push(t), t = 1, o++; else if ("(" === l) n.push(t), t = 2, r++; else if (!(0 === i ? Ul : Dl).test(l)) return !1; break; case 1: "'" === l || '"' === l || "`" === l ? (n.push(t), t = 3, s = l) : "[" === l ? o++ : "]" === l && (--o || (t = n.pop())); break; case 2: if ("'" === l || '"' === l || "`" === l) n.push(t), t = 3, s = l; else if ("(" === l) r++; else if (")" === l) { if (i === e.length - 1) return !1; --r || (t = n.pop()) } break; case 3: l === s && (t = n.pop(), s = null) } } return !o && !r }; function zl (e, t, n) { const o = { source: e.source.slice(t, t + n), start: Kl(e.start, e.source, t), end: e.end }; return null != n && (o.end = Kl(e.start, e.source, t + n)), o } function Kl (e, t, n = t.length) { return Gl(a({}, e), t, n) } function Gl (e, t, n = t.length) { let o = 0, r = -1; for (let s = 0; s < n; s++)10 === t.charCodeAt(s) && (o++, r = s); return e.offset += n, e.line += o, e.column = -1 === r ? e.column + n : n - r, e } function ql (e, t, n = !1) { for (let o = 0; o < e.props.length; o++) { const r = e.props[o]; if (7 === r.type && (n || r.exp) && (y(t) ? r.name === t : t.test(r.name))) return r } } function Jl (e, t, n = !1, o = !1) { for (let r = 0; r < e.props.length; r++) { const s = e.props[r]; if (6 === s.type) { if (n) continue; if (s.name === t && (s.value || o)) return s } else if ("bind" === s.name && (s.exp || o) && Zl(s.arg, t)) return s } } function Zl (e, t) { return !(!e || !Vl(e) || e.content !== t) } function Yl (e) { return 5 === e.type || 2 === e.type } function Ql (e) { return 7 === e.type && "slot" === e.name } function Xl (e) { return 1 === e.type && 3 === e.tagType } function ec (e) { return 1 === e.type && 2 === e.tagType } const tc = new Set([cl, al]); function nc (e, t = []) { if (e && !y(e) && 14 === e.type) { const n = e.callee; if (!y(n) && tc.has(n)) return nc(e.arguments[0], t.concat(e)) } return [e, t] } function oc (e, t, n) { let o, r, s = 13 === e.type ? e.props : e.arguments[2], i = []; if (s && !y(s) && 14 === s.type) { const e = nc(s); s = e[0], i = e[1], r = i[i.length - 1] } if (null == s || y(s)) o = Tl([t]); else if (14 === s.type) { const e = s.arguments[0]; y(e) || 15 !== e.type ? s.callee === ul ? o = $l(n.helper(sl), [Tl([t]), s]) : s.arguments.unshift(Tl([t])) : rc(t, e) || e.properties.unshift(t), !o && (o = s) } else 15 === s.type ? (rc(t, s) || s.properties.unshift(t), o = s) : (o = $l(n.helper(sl), [Tl([t]), s]), r && r.callee === al && (r = i[i.length - 2])); 13 === e.type ? r ? r.arguments[0] = o : e.props = o : r ? r.arguments[0] = o : e.arguments[2] = o } function rc (e, t) { let n = !1; if (4 === e.key.type) { const o = e.key.content; n = t.properties.some((e => 4 === e.key.type && e.key.content === o)) } return n } function sc (e, t) { return `_${t}_${e.replace(/[^\w]/g, ((t, n) => "-" === t ? "_" : e.charCodeAt(n).toString()))}` } const ic = /&(gt|lt|amp|apos|quot);/g, lc = { gt: ">", lt: "<", amp: "&", apos: "'", quot: '"' }, cc = { delimiters: ["{{", "}}"], getNamespace: () => 0, getTextMode: () => 0, isVoidTag: s, isPreTag: s, isCustomElement: s, decodeEntities: e => e.replace(ic, ((e, t) => lc[t])), onError: Ri, onWarn: Mi, comments: !1 }; function ac (e, t = {}) { const n = function (e, t) { const n = a({}, cc); let o; for (o in t) n[o] = void 0 === t[o] ? cc[o] : t[o]; return { options: n, column: 1, line: 1, offset: 0, originalSource: e, source: e, inPre: !1, inVPre: !1, onWarn: n.onWarn } }(e, t), o = kc(n); return function (e, t = Cl) { return { type: 0, children: e, helpers: new Set, components: [], directives: [], hoists: [], imports: [], cached: 0, temps: 0, codegenNode: void 0, loc: t } }(uc(n, 0, []), wc(n, o)) } function uc (e, t, n) { const o = Tc(n), r = o ? o.ns : 0, s = []; for (; !Ac(e, t, n);) { const i = e.source; let l; if (0 === t || 1 === t) if (!e.inVPre && Ec(i, e.options.delimiters[0])) l = Sc(e, t); else if (0 === t && "<" === i[0]) if (1 === i.length); else if ("!" === i[1]) l = Ec(i, "\x3c!--") ? dc(e) : Ec(i, "" === i[2]) { Nc(e, 3); continue } if (/[a-z]/i.test(i[2])) { yc(e, gc.End, o); continue } Pc(e, 12, 2), l = hc(e) } else /[a-z]/i.test(i[1]) ? l = mc(e, n) : "?" === i[1] && (Pc(e, 21, 1), l = hc(e)); if (l || (l = xc(e, t)), d(l)) for (let e = 0; e < l.length; e++)pc(s, l[e]); else pc(s, l) } let i = !1; if (2 !== t && 1 !== t) { const t = "preserve" !== e.options.whitespace; for (let n = 0; n < s.length; n++) { const o = s[n]; if (2 === o.type) if (e.inPre) o.content = o.content.replace(/\r\n/g, "\n"); else if (/[^\t\r\n\f ]/.test(o.content)) t && (o.content = o.content.replace(/[\t\r\n\f ]+/g, " ")); else { const e = s[n - 1], r = s[n + 1]; !e || !r || t && (3 === e.type && 3 === r.type || 3 === e.type && 1 === r.type || 1 === e.type && 3 === r.type || 1 === e.type && 1 === r.type && /[\r\n]/.test(o.content)) ? (i = !0, s[n] = null) : o.content = " " } else 3 !== o.type || e.options.comments || (i = !0, s[n] = null) } if (e.inPre && o && e.options.isPreTag(o.tag)) { const e = s[0]; e && 2 === e.type && (e.content = e.content.replace(/^\r?\n/, "")) } } return i ? s.filter(Boolean) : s } function pc (e, t) { if (2 === t.type) { const n = Tc(e); if (n && 2 === n.type && n.loc.end.offset === t.loc.start.offset) return n.content += t.content, n.loc.end = t.loc.end, void (n.loc.source += t.loc.source) } e.push(t) } function fc (e, t) { Nc(e, 9); const n = uc(e, 3, t); return 0 === e.source.length || Nc(e, 3), n } function dc (e) { const t = kc(e); let n; const o = /--(\!)?>/.exec(e.source); if (o) { n = e.source.slice(4, o.index); const t = e.source.slice(0, o.index); let r = 1, s = 0; for (; -1 !== (s = t.indexOf("\x3c!--", r));)Nc(e, s - r + 1), r = s + 1; Nc(e, o.index + o[0].length - r + 1) } else n = e.source.slice(4), Nc(e, e.source.length); return { type: 3, content: n, loc: wc(e, t) } } function hc (e) { const t = kc(e), n = "?" === e.source[1] ? 1 : 2; let o; const r = e.source.indexOf(">"); return -1 === r ? (o = e.source.slice(n), Nc(e, e.source.length)) : (o = e.source.slice(n, r), Nc(e, r + 1)), { type: 3, content: o, loc: wc(e, t) } } function mc (e, t) { const n = e.inPre, o = e.inVPre, r = Tc(t), s = yc(e, gc.Start, r), i = e.inPre && !n, l = e.inVPre && !o; if (s.isSelfClosing || e.options.isVoidTag(s.tag)) return i && (e.inPre = !1), l && (e.inVPre = !1), s; t.push(s); const c = e.options.getTextMode(s, r), a = uc(e, c, t); if (t.pop(), s.children = a, Fc(e.source, s.tag)) yc(e, gc.End, r); else if (0 === e.source.length && "script" === s.tag.toLowerCase()) { const e = a[0]; e && Ec(e.loc.source, "\x3c!--") } return s.loc = wc(e, s.loc.start), i && (e.inPre = !1), l && (e.inVPre = !1), s } var gc = (e => (e[e.Start = 0] = "Start", e[e.End = 1] = "End", e))(gc || {}); const vc = t("if,else,else-if,for,slot"); function yc (e, t, n) { const o = kc(e), r = /^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source), s = r[1], i = e.options.getNamespace(s, n); Nc(e, r[0].length), Oc(e); const l = kc(e), c = e.source; e.options.isPreTag(s) && (e.inPre = !0); let u = _c(e, t); 0 === t && !e.inVPre && u.some((e => 7 === e.type && "pre" === e.name)) && (e.inVPre = !0, a(e, l), e.source = c, u = _c(e, t).filter((e => "v-pre" !== e.name))); let p = !1; if (0 === e.source.length || (p = Ec(e.source, "/>"), Nc(e, p ? 2 : 1)), 1 === t) return; let f = 0; return e.inVPre || ("slot" === s ? f = 2 : "template" === s ? u.some((e => 7 === e.type && vc(e.name))) && (f = 3) : function (e, t, n) { const o = n.options; if (o.isCustomElement(e)) return !1; if ("component" === e || /^[A-Z]/.test(e) || Bl(e) || o.isBuiltInComponent && o.isBuiltInComponent(e) || o.isNativeTag && !o.isNativeTag(e)) return !0; for (let r = 0; r < t.length; r++) { const e = t[r]; if (6 === e.type) { if ("is" === e.name && e.value && e.value.content.startsWith("vue:")) return !0 } else { if ("is" === e.name) return !0; "bind" === e.name && Zl(e.arg, "is") } } }(s, u, e) && (f = 1)), { type: 1, ns: i, tag: s, tagType: f, props: u, isSelfClosing: p, children: [], loc: wc(e, o), codegenNode: void 0 } } function _c (e, t) { const n = [], o = new Set; for (; e.source.length > 0 && !Ec(e.source, ">") && !Ec(e.source, "/>");) { if (Ec(e.source, "/")) { Nc(e, 1), Oc(e); continue } const r = bc(e, o); 6 === r.type && r.value && "class" === r.name && (r.value.content = r.value.content.replace(/\s+/g, " ").trim()), 0 === t && n.push(r), /^[^\t\r\n\f />]/.test(e.source), Oc(e) } return n } function bc (e, t) { var n; const o = kc(e), r = /^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0]; t.has(r), t.add(r); { const t = /["'<]/g; let n; for (; n = t.exec(r);)Pc(e, 17, n.index) } let s; Nc(e, r.length), /^[\t\r\n\f ]*=/.test(e.source) && (Oc(e), Nc(e, 1), Oc(e), s = function (e) { const t = kc(e); let n; const o = e.source[0], r = '"' === o || "'" === o; if (r) { Nc(e, 1); const t = e.source.indexOf(o); -1 === t ? n = Cc(e, e.source.length, 4) : (n = Cc(e, t, 4), Nc(e, 1)) } else { const t = /^[^\t\r\n\f >]+/.exec(e.source); if (!t) return; const o = /["'<=`]/g; let r; for (; r = o.exec(t[0]);)Pc(e, 18, r.index); n = Cc(e, t[0].length, 4) } return { content: n, isQuoted: r, loc: wc(e, t) } }(e)); const i = wc(e, o); if (!e.inVPre && /^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(r)) { const t = /(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(r); let l, c = Ec(r, "."), a = t[1] || (c || Ec(r, ":") ? "bind" : Ec(r, "@") ? "on" : "slot"); if (t[2]) { const s = "slot" === a, i = r.lastIndexOf(t[2], r.length - ((null == (n = t[3]) ? void 0 : n.length) || 0)), c = wc(e, $c(e, o, i), $c(e, o, i + t[2].length + (s && t[3] || "").length)); let u = t[2], p = !0; u.startsWith("[") ? (p = !1, u.endsWith("]") ? u = u.slice(1, u.length - 1) : (Pc(e, 27), u = u.slice(1))) : s && (u += t[3] || ""), l = { type: 4, content: u, isStatic: p, constType: p ? 3 : 0, loc: c } } if (s && s.isQuoted) { const e = s.loc; e.start.offset++, e.start.column++, e.end = Kl(e.start, s.content), e.source = e.source.slice(1, -1) } const u = t[3] ? t[3].slice(1).split(".") : []; return c && u.push("prop"), { type: 7, name: a, exp: s && { type: 4, content: s.content, isStatic: !1, constType: 0, loc: s.loc }, arg: l, modifiers: u, loc: i } } return !e.inVPre && Ec(r, "v-"), { type: 6, name: r, value: s && { type: 2, content: s.content, loc: s.loc }, loc: i } } function Sc (e, t) { const [n, o] = e.options.delimiters, r = e.source.indexOf(o, n.length); if (-1 === r) return; const s = kc(e); Nc(e, n.length); const i = kc(e), l = kc(e), c = r - n.length, a = e.source.slice(0, c), u = Cc(e, c, t), p = u.trim(), f = u.indexOf(p); f > 0 && Gl(i, a, f); return Gl(l, a, c - (u.length - p.length - f)), Nc(e, o.length), { type: 5, content: { type: 4, isStatic: !1, constType: 0, content: p, loc: wc(e, i, l) }, loc: wc(e, s) } } function xc (e, t) { const n = 3 === t ? ["]]>"] : ["<", e.options.delimiters[0]]; let o = e.source.length; for (let s = 0; s < n.length; s++) { const t = e.source.indexOf(n[s], 1); -1 !== t && o > t && (o = t) } const r = kc(e); return { type: 2, content: Cc(e, o, t), loc: wc(e, r) } } function Cc (e, t, n) { const o = e.source.slice(0, t); return Nc(e, t), 2 !== n && 3 !== n && o.includes("&") ? e.options.decodeEntities(o, 4 === n) : o } function kc (e) { const { column: t, line: n, offset: o } = e; return { column: t, line: n, offset: o } } function wc (e, t, n) { return { start: t, end: n = n || kc(e), source: e.originalSource.slice(t.offset, n.offset) } } function Tc (e) { return e[e.length - 1] } function Ec (e, t) { return e.startsWith(t) } function Nc (e, t) { const { source: n } = e; Gl(e, n, t), e.source = n.slice(t) } function Oc (e) { const t = /^[\t\r\n\f ]+/.exec(e.source); t && Nc(e, t[0].length) } function $c (e, t, n) { return Kl(t, e.originalSource.slice(t.offset, n), n) } function Pc (e, t, n, o = kc(e)) { n && (o.offset += n, o.column += n), e.options.onError(Vi(t, { start: o, end: o, source: "" })) } function Ac (e, t, n) { const o = e.source; switch (t) { case 0: if (Ec(o, "= 0; --e)if (Fc(o, n[e].tag)) return !0; break; case 1: case 2: { const e = Tc(n); if (e && Fc(o, e.tag)) return !0; break } case 3: if (Ec(o, "]]>")) return !0 }return !o } function Fc (e, t) { return Ec(e, "]/.test(e[2 + t.length] || ">") } function Rc (e, t) { Vc(e, t, Mc(e, e.children[0])) } function Mc (e, t) { const { children: n } = e; return 1 === n.length && 1 === t.type && !ec(t) } function Vc (e, t, n = !1) { const { children: o } = e, r = o.length; let s = 0; for (let i = 0; i < o.length; i++) { const e = o[i]; if (1 === e.type && 0 === e.tagType) { const o = n ? 0 : Ic(e, t); if (o > 0) { if (o >= 2) { e.codegenNode.patchFlag = "-1", e.codegenNode = t.hoist(e.codegenNode), s++; continue } } else { const n = e.codegenNode; if (13 === n.type) { const o = Dc(n); if ((!o || 512 === o || 1 === o) && jc(e, t) >= 2) { const o = Uc(e); o && (n.props = t.hoist(o)) } n.dynamicProps && (n.dynamicProps = t.hoist(n.dynamicProps)) } } } if (1 === e.type) { const n = 1 === e.tagType; n && t.scopes.vSlot++, Vc(e, t), n && t.scopes.vSlot-- } else if (11 === e.type) Vc(e, t, 1 === e.children.length); else if (9 === e.type) for (let n = 0; n < e.branches.length; n++)Vc(e.branches[n], t, 1 === e.branches[n].children.length) } s && t.transformHoist && t.transformHoist(o, t, e), s && s === r && 1 === e.type && 0 === e.tagType && e.codegenNode && 13 === e.codegenNode.type && d(e.codegenNode.children) && (e.codegenNode.children = t.hoist(wl(e.codegenNode.children))) } function Ic (e, t) { const { constantCache: n } = t; switch (e.type) { case 1: if (0 !== e.tagType) return 0; const o = n.get(e); if (void 0 !== o) return o; const r = e.codegenNode; if (13 !== r.type) return 0; if (r.isBlock && "svg" !== e.tag && "foreignObject" !== e.tag) return 0; if (Dc(r)) return n.set(e, 0), 0; { let o = 3; const s = jc(e, t); if (0 === s) return n.set(e, 0), 0; s < o && (o = s); for (let r = 0; r < e.children.length; r++) { const s = Ic(e.children[r], t); if (0 === s) return n.set(e, 0), 0; s < o && (o = s) } if (o > 1) for (let r = 0; r < e.props.length; r++) { const s = e.props[r]; if (7 === s.type && "bind" === s.name && s.exp) { const r = Ic(s.exp, t); if (0 === r) return n.set(e, 0), 0; r < o && (o = r) } } if (r.isBlock) { for (let t = 0; t < e.props.length; t++) { if (7 === e.props[t].type) return n.set(e, 0), 0 } t.removeHelper(Di), t.removeHelper(Rl(t.inSSR, r.isComponent)), r.isBlock = !1, t.helper(Fl(t.inSSR, r.isComponent)) } return n.set(e, o), o } case 2: case 3: return 3; case 9: case 11: case 10: default: return 0; case 5: case 12: return Ic(e.content, t); case 4: return e.constType; case 8: let s = 3; for (let n = 0; n < e.children.length; n++) { const o = e.children[n]; if (y(o) || _(o)) continue; const r = Ic(o, t); if (0 === r) return 0; r < s && (s = r) } return s } } const Bc = new Set([il, ll, cl, al]); function Lc (e, t) { if (14 === e.type && !y(e.callee) && Bc.has(e.callee)) { const n = e.arguments[0]; if (4 === n.type) return Ic(n, t); if (14 === n.type) return Lc(n, t) } return 0 } function jc (e, t) { let n = 3; const o = Uc(e); if (o && 15 === o.type) { const { properties: e } = o; for (let o = 0; o < e.length; o++) { const { key: r, value: s } = e[o], i = Ic(r, t); if (0 === i) return i; let l; if (i < n && (n = i), l = 4 === s.type ? Ic(s, t) : 14 === s.type ? Lc(s, t) : 0, 0 === l) return l; l < n && (n = l) } } return n } function Uc (e) { const t = e.codegenNode; if (13 === t.type) return t.props } function Dc (e) { const t = e.patchFlag; return t ? parseInt(t, 10) : void 0 } function Hc (e, { filename: t = "", prefixIdentifiers: o = !1, hoistStatic: s = !1, cacheHandlers: i = !1, nodeTransforms: l = [], directiveTransforms: c = {}, transformHoist: a = null, isBuiltInComponent: u = r, isCustomElement: p = r, expressionPlugins: f = [], scopeId: d = null, slotted: h = !0, ssr: m = !1, inSSR: g = !1, ssrCssVars: v = "", bindingMetadata: _ = n, inline: b = !1, isTS: S = !1, onError: x = Ri, onWarn: C = Mi, compatConfig: k }) { const w = t.replace(/\?.*$/, "").match(/([^/\\]+)\.\w+$/), T = { selfName: w && F($(w[1])), prefixIdentifiers: o, hoistStatic: s, cacheHandlers: i, nodeTransforms: l, directiveTransforms: c, transformHoist: a, isBuiltInComponent: u, isCustomElement: p, expressionPlugins: f, scopeId: d, slotted: h, ssr: m, inSSR: g, ssrCssVars: v, bindingMetadata: _, inline: b, isTS: S, onError: x, onWarn: C, compatConfig: k, root: e, helpers: new Map, components: new Set, directives: new Set, hoists: [], imports: [], constantCache: new Map, temps: 0, cached: 0, identifiers: Object.create(null), scopes: { vFor: 0, vSlot: 0, vPre: 0, vOnce: 0 }, parent: null, currentNode: e, childIndex: 0, inVOnce: !1, helper (e) { const t = T.helpers.get(e) || 0; return T.helpers.set(e, t + 1), e }, removeHelper (e) { const t = T.helpers.get(e); if (t) { const n = t - 1; n ? T.helpers.set(e, n) : T.helpers.delete(e) } }, helperString: e => `_${xl[T.helper(e)]}`, replaceNode (e) { T.parent.children[T.childIndex] = T.currentNode = e }, removeNode (e) { const t = e ? T.parent.children.indexOf(e) : T.currentNode ? T.childIndex : -1; e && e !== T.currentNode ? T.childIndex > t && (T.childIndex--, T.onNodeRemoved()) : (T.currentNode = null, T.onNodeRemoved()), T.parent.children.splice(t, 1) }, onNodeRemoved: () => { }, addIdentifiers (e) { }, removeIdentifiers (e) { }, hoist (e) { y(e) && (e = Nl(e)), T.hoists.push(e); const t = Nl(`_hoisted_${T.hoists.length}`, !1, e.loc, 2); return t.hoisted = e, t }, cache: (e, t = !1) => function (e, t, n = !1) { return { type: 20, index: e, value: t, isVNode: n, loc: Cl } }(T.cached++, e, t) }; return T } function Wc (e, t) { const n = Hc(e, t); zc(e, n), t.hoistStatic && Rc(e, n), t.ssr || function (e, t) { const { helper: n } = t, { children: o } = e; if (1 === o.length) { const n = o[0]; if (Mc(e, n) && n.codegenNode) { const o = n.codegenNode; 13 === o.type && Ml(o, t), e.codegenNode = o } else e.codegenNode = n } else if (o.length > 1) { let o = 64; e.codegenNode = kl(t, n(Ii), void 0, e.children, o + "", void 0, void 0, !0, void 0, !1) } }(e, n), e.helpers = new Set([...n.helpers.keys()]), e.components = [...n.components], e.directives = [...n.directives], e.imports = n.imports, e.hoists = n.hoists, e.temps = n.temps, e.cached = n.cached } function zc (e, t) { t.currentNode = e; const { nodeTransforms: n } = t, o = []; for (let s = 0; s < n.length; s++) { const r = n[s](e, t); if (r && (d(r) ? o.push(...r) : o.push(r)), !t.currentNode) return; e = t.currentNode } switch (e.type) { case 3: t.ssr || t.helper(Gi); break; case 5: t.ssr || t.helper(rl); break; case 9: for (let n = 0; n < e.branches.length; n++)zc(e.branches[n], t); break; case 10: case 11: case 1: case 0: !function (e, t) { let n = 0; const o = () => { n-- }; for (; n < e.children.length; n++) { const r = e.children[n]; y(r) || (t.parent = e, t.childIndex = n, t.onNodeRemoved = o, zc(r, t)) } }(e, t) }t.currentNode = e; let r = o.length; for (; r--;)o[r]() } function Kc (e, t) { const n = y(e) ? t => t === e : t => e.test(t); return (e, o) => { if (1 === e.type) { const { props: r } = e; if (3 === e.tagType && r.some(Ql)) return; const s = []; for (let i = 0; i < r.length; i++) { const l = r[i]; if (7 === l.type && n(l.name)) { r.splice(i, 1), i--; const n = t(e, l, o); n && s.push(n) } } return s } } } const Gc = "/*#__PURE__*/", qc = e => `${xl[e]}: _${xl[e]}`; function Jc (e, { mode: t = "function", prefixIdentifiers: n = "module" === t, sourceMap: o = !1, filename: r = "template.vue.html", scopeId: s = null, optimizeImports: i = !1, runtimeGlobalName: l = "Vue", runtimeModuleName: c = "vue", ssrRuntimeModuleName: a = "vue/server-renderer", ssr: u = !1, isTS: p = !1, inSSR: f = !1 }) { const d = { mode: t, prefixIdentifiers: n, sourceMap: o, filename: r, scopeId: s, optimizeImports: i, runtimeGlobalName: l, runtimeModuleName: c, ssrRuntimeModuleName: a, ssr: u, isTS: p, inSSR: f, source: e.loc.source, code: "", column: 1, line: 1, offset: 0, indentLevel: 0, pure: !1, map: void 0, helper: e => `_${xl[e]}`, push (e, t) { d.code += e }, indent () { h(++d.indentLevel) }, deindent (e = !1) { e ? --d.indentLevel : h(--d.indentLevel) }, newline () { h(d.indentLevel) } }; function h (e) { d.push("\n" + " ".repeat(e)) } return d } function Zc (e, t = {}) { const n = Jc(e, t); t.onContextCreated && t.onContextCreated(n); const { mode: o, push: r, prefixIdentifiers: s, indent: i, deindent: l, newline: c, ssr: a } = n, u = Array.from(e.helpers), p = u.length > 0, f = !s && "module" !== o, d = n; !function (e, t) { const { push: n, newline: o, runtimeGlobalName: r } = t, s = r, i = Array.from(e.helpers); if (i.length > 0 && (n(`const _Vue = ${s}\n`), e.hoists.length)) { n(`const { ${[zi, Ki, Gi, qi, Ji].filter((e => i.includes(e))).map(qc).join(", ")} } = _Vue\n`) } (function (e, t) { if (!e.length) return; t.pure = !0; const { push: n, newline: o } = t; o(); for (let r = 0; r < e.length; r++) { const s = e[r]; s && (n(`const _hoisted_${r + 1} = `), ea(s, t), o()) } t.pure = !1 })(e.hoists, t), o(), n("return ") }(e, d); if (r(`function ${a ? "ssrRender" : "render"}(${(a ? ["_ctx", "_push", "_parent", "_attrs"] : ["_ctx", "_cache"]).join(", ")}) {`), i(), f && (r("with (_ctx) {"), i(), p && (r(`const { ${u.map(qc).join(", ")} } = _Vue`), r("\n"), c())), e.components.length && (Yc(e.components, "component", n), (e.directives.length || e.temps > 0) && c()), e.directives.length && (Yc(e.directives, "directive", n), e.temps > 0 && c()), e.temps > 0) { r("let "); for (let t = 0; t < e.temps; t++)r(`${t > 0 ? ", " : ""}_temp${t}`) } return (e.components.length || e.directives.length || e.temps) && (r("\n"), c()), a || r("return "), e.codegenNode ? ea(e.codegenNode, n) : r("null"), f && (l(), r("}")), l(), r("}"), { ast: e, code: n.code, preamble: "", map: n.map ? n.map.toJSON() : void 0 } } function Yc (e, t, { helper: n, push: o, newline: r, isTS: s }) { const i = n("component" === t ? Zi : Qi); for (let l = 0; l < e.length; l++) { let n = e[l]; const c = n.endsWith("__self"); c && (n = n.slice(0, -6)), o(`const ${sc(n, t)} = ${i}(${JSON.stringify(n)}${c ? ", true" : ""})${s ? "!" : ""}`), l < e.length - 1 && r() } } function Qc (e, t) { const n = e.length > 3 || !1; t.push("["), n && t.indent(), Xc(e, t, n), n && t.deindent(), t.push("]") } function Xc (e, t, n = !1, o = !0) { const { push: r, newline: s } = t; for (let i = 0; i < e.length; i++) { const l = e[i]; y(l) ? r(l) : d(l) ? Qc(l, t) : ea(l, t), i < e.length - 1 && (n ? (o && r(","), s()) : o && r(", ")) } } function ea (e, t) { if (y(e)) t.push(e); else if (_(e)) t.push(t.helper(e)); else switch (e.type) { case 1: case 9: case 11: case 12: ea(e.codegenNode, t); break; case 2: !function (e, t) { t.push(JSON.stringify(e.content), e) }(e, t); break; case 4: ta(e, t); break; case 5: !function (e, t) { const { push: n, helper: o, pure: r } = t; r && n(Gc); n(`${o(rl)}(`), ea(e.content, t), n(")") }(e, t); break; case 8: na(e, t); break; case 3: !function (e, t) { const { push: n, helper: o, pure: r } = t; r && n(Gc); n(`${o(Gi)}(${JSON.stringify(e.content)})`, e) }(e, t); break; case 13: !function (e, t) { const { push: n, helper: o, pure: r } = t, { tag: s, props: i, children: l, patchFlag: c, dynamicProps: a, directives: u, isBlock: p, disableTracking: f, isComponent: d } = e; u && n(o(el) + "("); p && n(`(${o(Di)}(${f ? "true" : ""}), `); r && n(Gc); const h = p ? Rl(t.inSSR, d) : Fl(t.inSSR, d); n(o(h) + "(", e), Xc(function (e) { let t = e.length; for (; t-- && null == e[t];); return e.slice(0, t + 1).map((e => e || "null")) }([s, i, l, c, a]), t), n(")"), p && n(")"); u && (n(", "), ea(u, t), n(")")) }(e, t); break; case 14: !function (e, t) { const { push: n, helper: o, pure: r } = t, s = y(e.callee) ? e.callee : o(e.callee); r && n(Gc); n(s + "(", e), Xc(e.arguments, t), n(")") }(e, t); break; case 15: !function (e, t) { const { push: n, indent: o, deindent: r, newline: s } = t, { properties: i } = e; if (!i.length) return void n("{}", e); const l = i.length > 1 || !1; n(l ? "{" : "{ "), l && o(); for (let c = 0; c < i.length; c++) { const { key: e, value: o } = i[c]; oa(e, t), n(": "), ea(o, t), c < i.length - 1 && (n(","), s()) } l && r(), n(l ? "}" : " }") }(e, t); break; case 17: !function (e, t) { Qc(e.elements, t) }(e, t); break; case 18: !function (e, t) { const { push: n, indent: o, deindent: r } = t, { params: s, returns: i, body: l, newline: c, isSlot: a } = e; a && n(`_${xl[vl]}(`); n("(", e), d(s) ? Xc(s, t) : s && ea(s, t); n(") => "), (c || l) && (n("{"), o()); i ? (c && n("return "), d(i) ? Qc(i, t) : ea(i, t)) : l && ea(l, t); (c || l) && (r(), n("}")); a && n(")") }(e, t); break; case 19: !function (e, t) { const { test: n, consequent: o, alternate: r, newline: s } = e, { push: i, indent: l, deindent: c, newline: a } = t; if (4 === n.type) { const e = !jl(n.content); e && i("("), ta(n, t), e && i(")") } else i("("), ea(n, t), i(")"); s && l(), t.indentLevel++, s || i(" "), i("? "), ea(o, t), t.indentLevel--, s && a(), s || i(" "), i(": "); const u = 19 === r.type; u || t.indentLevel++; ea(r, t), u || t.indentLevel--; s && c(!0) }(e, t); break; case 20: !function (e, t) { const { push: n, helper: o, indent: r, deindent: s, newline: i } = t; n(`_cache[${e.index}] || (`), e.isVNode && (r(), n(`${o(hl)}(-1),`), i()); n(`_cache[${e.index}] = `), ea(e.value, t), e.isVNode && (n(","), i(), n(`${o(hl)}(1),`), i(), n(`_cache[${e.index}]`), s()); n(")") }(e, t); break; case 21: Xc(e.body, t, !0, !1) } } function ta (e, t) { const { content: n, isStatic: o } = e; t.push(o ? JSON.stringify(n) : n, e) } function na (e, t) { for (let n = 0; n < e.children.length; n++) { const o = e.children[n]; y(o) ? t.push(o) : ea(o, t) } } function oa (e, t) { const { push: n } = t; if (8 === e.type) n("["), na(e, t), n("]"); else if (e.isStatic) { n(jl(e.content) ? e.content : JSON.stringify(e.content), e) } else n(`[${e.content}]`, e) } const ra = Kc(/^(if|else|else-if)$/, ((e, t, n) => function (e, t, n, o) { if (!("else" === t.name || t.exp && t.exp.content.trim())) { const o = t.exp ? t.exp.loc : e.loc; n.onError(Vi(28, t.loc)), t.exp = Nl("true", !1, o) } if ("if" === t.name) { const r = sa(e, t), s = { type: 9, loc: e.loc, branches: [r] }; if (n.replaceNode(s), o) return o(s, r, !0) } else { const r = n.parent.children; let s = r.indexOf(e); for (; s-- >= -1;) { const i = r[s]; if (i && 3 === i.type) n.removeNode(i); else { if (!i || 2 !== i.type || i.content.trim().length) { if (i && 9 === i.type) { "else-if" === t.name && void 0 === i.branches[i.branches.length - 1].condition && n.onError(Vi(30, e.loc)), n.removeNode(); const r = sa(e, t); i.branches.push(r); const s = o && o(i, r, !1); zc(r, n), s && s(), n.currentNode = null } else n.onError(Vi(30, e.loc)); break } n.removeNode(i) } } } }(e, t, n, ((e, t, o) => { const r = n.parent.children; let s = r.indexOf(e), i = 0; for (; s-- >= 0;) { const e = r[s]; e && 9 === e.type && (i += e.branches.length) } return () => { if (o) e.codegenNode = ia(t, i, n); else { const o = function (e) { for (; ;)if (19 === e.type) { if (19 !== e.alternate.type) return e; e = e.alternate } else 20 === e.type && (e = e.value) }(e.codegenNode); o.alternate = ia(t, i + e.branches.length - 1, n) } } })))); function sa (e, t) { const n = 3 === e.tagType; return { type: 10, loc: e.loc, condition: "else" === t.name ? void 0 : t.exp, children: n && !ql(e, "for") ? e.children : [e], userKey: Jl(e, "key"), isTemplateIf: n } } function ia (e, t, n) { return e.condition ? Al(e.condition, la(e, t, n), $l(n.helper(Gi), ['""', "true"])) : la(e, t, n) } function la (e, t, n) { const { helper: o } = n, r = El("key", Nl(`${t}`, !1, Cl, 2)), { children: s } = e, i = s[0]; if (1 !== s.length || 1 !== i.type) { if (1 === s.length && 11 === i.type) { const e = i.codegenNode; return oc(e, r, n), e } { let t = 64; return kl(n, o(Ii), Tl([r]), s, t + "", void 0, void 0, !0, !1, !1, e.loc) } } { const e = i.codegenNode, t = 14 === (l = e).type && l.callee === bl ? l.arguments[1].returns : l; return 13 === t.type && Ml(t, n), oc(t, r, n), e } var l } const ca = Kc("for", ((e, t, n) => { const { helper: o, removeHelper: r } = n; return function (e, t, n, o) { if (!t.exp) return void n.onError(Vi(31, t.loc)); const r = fa(t.exp); if (!r) return void n.onError(Vi(32, t.loc)); const { scopes: s } = n, { source: i, value: l, key: c, index: a } = r, u = { type: 11, loc: t.loc, source: i, valueAlias: l, keyAlias: c, objectIndexAlias: a, parseResult: r, children: Xl(e) ? e.children : [e] }; n.replaceNode(u), s.vFor++; const p = o && o(u); return () => { s.vFor--, p && p() } }(e, t, n, (t => { const s = $l(o(tl), [t.source]), i = Xl(e), l = ql(e, "memo"), c = Jl(e, "key"), a = c && (6 === c.type ? Nl(c.value.content, !0) : c.exp), u = c ? El("key", a) : null, p = 4 === t.source.type && t.source.constType > 0, f = p ? 64 : c ? 128 : 256; return t.codegenNode = kl(n, o(Ii), void 0, s, f + "", void 0, void 0, !0, !p, !1, e.loc), () => { let c; const { children: f } = t, d = 1 !== f.length || 1 !== f[0].type, h = ec(e) ? e : i && 1 === e.children.length && ec(e.children[0]) ? e.children[0] : null; if (h ? (c = h.codegenNode, i && u && oc(c, u, n)) : d ? c = kl(n, o(Ii), u ? Tl([u]) : void 0, e.children, "64", void 0, void 0, !0, void 0, !1) : (c = f[0].codegenNode, i && u && oc(c, u, n), c.isBlock !== !p && (c.isBlock ? (r(Di), r(Rl(n.inSSR, c.isComponent))) : r(Fl(n.inSSR, c.isComponent))), c.isBlock = !p, c.isBlock ? (o(Di), o(Rl(n.inSSR, c.isComponent))) : o(Fl(n.inSSR, c.isComponent))), l) { const e = Pl(ha(t.parseResult, [Nl("_cached")])); e.body = { type: 21, body: [Ol(["const _memo = (", l.exp, ")"]), Ol(["if (_cached", ...a ? [" && _cached.key === ", a] : [], ` && ${n.helperString(Sl)}(_cached, _memo)) return _cached`]), Ol(["const _item = ", c]), Nl("_item.memo = _memo"), Nl("return _item")], loc: Cl }, s.arguments.push(e, Nl("_cache"), Nl(String(n.cached++))) } else s.arguments.push(Pl(ha(t.parseResult), c, !0)) } })) })); const aa = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/, ua = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/, pa = /^\(|\)$/g; function fa (e, t) { const n = e.loc, o = e.content, r = o.match(aa); if (!r) return; const [, s, i] = r, l = { source: da(n, i.trim(), o.indexOf(i, s.length)), value: void 0, key: void 0, index: void 0 }; let c = s.trim().replace(pa, "").trim(); const a = s.indexOf(c), u = c.match(ua); if (u) { c = c.replace(ua, "").trim(); const e = u[1].trim(); let t; if (e && (t = o.indexOf(e, a + c.length), l.key = da(n, e, t)), u[2]) { const r = u[2].trim(); r && (l.index = da(n, r, o.indexOf(r, l.key ? t + e.length : a + c.length))) } } return c && (l.value = da(n, c, a)), l } function da (e, t, n) { return Nl(t, !1, zl(e, n, t.length)) } function ha ({ value: e, key: t, index: n }, o = []) { return function (e) { let t = e.length; for (; t-- && !e[t];); return e.slice(0, t + 1).map(((e, t) => e || Nl("_".repeat(t + 1), !1))) }([e, t, n, ...o]) } const ma = Nl("undefined", !1), ga = (e, t) => { if (1 === e.type && (1 === e.tagType || 3 === e.tagType)) { const n = ql(e, "slot"); if (n) return t.scopes.vSlot++, () => { t.scopes.vSlot-- } } }, va = (e, t, n) => Pl(e, t, !1, !0, t.length ? t[0].loc : n); function ya (e, t, n = va) { t.helper(vl); const { children: o, loc: r } = e, s = [], i = []; let l = t.scopes.vSlot > 0 || t.scopes.vFor > 0; const c = ql(e, "slot", !0); if (c) { const { arg: e, exp: t } = c; e && !Vl(e) && (l = !0), s.push(El(e || Nl("default", !0), n(t, o, r))) } let a = !1, u = !1; const p = [], f = new Set; let d = 0; for (let g = 0; g < o.length; g++) { const e = o[g]; let r; if (!Xl(e) || !(r = ql(e, "slot", !0))) { 3 !== e.type && p.push(e); continue } if (c) { t.onError(Vi(37, r.loc)); break } a = !0; const { children: h, loc: m } = e, { arg: v = Nl("default", !0), exp: y, loc: _ } = r; let b; Vl(v) ? b = v ? v.content : "default" : l = !0; const S = n(y, h, m); let x, C, k; if (x = ql(e, "if")) l = !0, i.push(Al(x.exp, _a(v, S, d++), ma)); else if (C = ql(e, /^else(-if)?$/, !0)) { let e, n = g; for (; n-- && (e = o[n], 3 === e.type);); if (e && Xl(e) && ql(e, "if")) { o.splice(g, 1), g--; let e = i[i.length - 1]; for (; 19 === e.alternate.type;)e = e.alternate; e.alternate = C.exp ? Al(C.exp, _a(v, S, d++), ma) : _a(v, S, d++) } else t.onError(Vi(30, C.loc)) } else if (k = ql(e, "for")) { l = !0; const e = k.parseResult || fa(k.exp); e ? i.push($l(t.helper(tl), [e.source, Pl(ha(e), _a(v, S), !0)])) : t.onError(Vi(32, k.loc)) } else { if (b) { if (f.has(b)) { t.onError(Vi(38, _)); continue } f.add(b), "default" === b && (u = !0) } s.push(El(v, S)) } } if (!c) { const e = (e, t) => El("default", n(e, t, r)); a ? p.length && p.some((e => Sa(e))) && (u ? t.onError(Vi(39, p[0].loc)) : s.push(e(void 0, p))) : s.push(e(void 0, o)) } const h = l ? 2 : ba(e.children) ? 3 : 1; let m = Tl(s.concat(El("_", Nl(h + "", !1))), r); return i.length && (m = $l(t.helper(ol), [m, wl(i)])), { slots: m, hasDynamicSlots: l } } function _a (e, t, n) { const o = [El("name", e), El("fn", t)]; return null != n && o.push(El("key", Nl(String(n), !0))), Tl(o) } function ba (e) { for (let t = 0; t < e.length; t++) { const n = e[t]; switch (n.type) { case 1: if (2 === n.tagType || ba(n.children)) return !0; break; case 9: if (ba(n.branches)) return !0; break; case 10: case 11: if (ba(n.children)) return !0 } } return !1 } function Sa (e) { return 2 !== e.type && 12 !== e.type || (2 === e.type ? !!e.content.trim() : Sa(e.content)) } const xa = new WeakMap, Ca = (e, t) => function () { if (1 !== (e = t.currentNode).type || 0 !== e.tagType && 1 !== e.tagType) return; const { tag: n, props: o } = e, r = 1 === e.tagType; let s = r ? function (e, t, n = !1) { let { tag: o } = e; const r = Ea(o), s = Jl(e, "is"); if (s) if (r) { const e = 6 === s.type ? s.value && Nl(s.value.content, !0) : s.exp; if (e) return $l(t.helper(Yi), [e]) } else 6 === s.type && s.value.content.startsWith("vue:") && (o = s.value.content.slice(4)); const i = !r && ql(e, "is"); if (i && i.exp) return $l(t.helper(Yi), [i.exp]); const l = Bl(o) || t.isBuiltInComponent(o); if (l) return n || t.helper(l), l; return t.helper(Zi), t.components.add(o), sc(o, "component") }(e, t) : `"${n}"`; const i = b(s) && s.callee === Yi; let l, c, a, u, p, f, d = 0, h = i || s === Bi || s === Li || !r && ("svg" === n || "foreignObject" === n); if (o.length > 0) { const n = ka(e, t, void 0, r, i); l = n.props, d = n.patchFlag, p = n.dynamicPropNames; const o = n.directives; f = o && o.length ? wl(o.map((e => function (e, t) { const n = [], o = xa.get(e); o ? n.push(t.helperString(o)) : (t.helper(Qi), t.directives.add(e.name), n.push(sc(e.name, "directive"))); const { loc: r } = e; e.exp && n.push(e.exp); e.arg && (e.exp || n.push("void 0"), n.push(e.arg)); if (Object.keys(e.modifiers).length) { e.arg || (e.exp || n.push("void 0"), n.push("void 0")); const t = Nl("true", !1, r); n.push(Tl(e.modifiers.map((e => El(e, t))), r)) } return wl(n, e.loc) }(e, t)))) : void 0, n.shouldUseBlock && (h = !0) } if (e.children.length > 0) { s === ji && (h = !0, d |= 1024); if (r && s !== Bi && s !== ji) { const { slots: n, hasDynamicSlots: o } = ya(e, t); c = n, o && (d |= 1024) } else if (1 === e.children.length && s !== Bi) { const n = e.children[0], o = n.type, r = 5 === o || 8 === o; r && 0 === Ic(n, t) && (d |= 1), c = r || 2 === o ? n : e.children } else c = e.children } 0 !== d && (a = String(d), p && p.length && (u = function (e) { let t = "["; for (let n = 0, o = e.length; n < o; n++)t += JSON.stringify(e[n]), n < o - 1 && (t += ", "); return t + "]" }(p))), e.codegenNode = kl(t, s, l, c, a, u, f, !!h, !1, r, e.loc) }; function ka (e, t, n = e.props, o, r, s = !1) { const { tag: i, loc: c, children: a } = e; let u = []; const p = [], f = [], d = a.length > 0; let h = !1, m = 0, g = !1, v = !1, y = !1, b = !1, S = !1, x = !1; const C = [], k = e => { u.length && (p.push(Tl(wa(u), c)), u = []), e && p.push(e) }, w = ({ key: e, value: n }) => { if (Vl(e)) { const s = e.content, i = l(s); if (!i || o && !r || "onclick" === s.toLowerCase() || "onUpdate:modelValue" === s || T(s) || (b = !0), i && T(s) && (x = !0), 20 === n.type || (4 === n.type || 8 === n.type) && Ic(n, t) > 0) return; "ref" === s ? g = !0 : "class" === s ? v = !0 : "style" === s ? y = !0 : "key" === s || C.includes(s) || C.push(s), !o || "class" !== s && "style" !== s || C.includes(s) || C.push(s) } else S = !0 }; for (let l = 0; l < n.length; l++) { const r = n[l]; if (6 === r.type) { const { loc: e, name: n, value: o } = r; let s = !0; if ("ref" === n && (g = !0, t.scopes.vFor > 0 && u.push(El(Nl("ref_for", !0), Nl("true")))), "is" === n && (Ea(i) || o && o.content.startsWith("vue:"))) continue; u.push(El(Nl(n, !0, zl(e, 0, n.length)), Nl(o ? o.content : "", s, o ? o.loc : e))) } else { const { name: n, arg: l, exp: a, loc: m } = r, g = "bind" === n, v = "on" === n; if ("slot" === n) { o || t.onError(Vi(40, m)); continue } if ("once" === n || "memo" === n) continue; if ("is" === n || g && Zl(l, "is") && Ea(i)) continue; if (v && s) continue; if ((g && Zl(l, "key") || v && d && Zl(l, "vue:before-update")) && (h = !0), g && Zl(l, "ref") && t.scopes.vFor > 0 && u.push(El(Nl("ref_for", !0), Nl("true"))), !l && (g || v)) { S = !0, a ? g ? (k(), p.push(a)) : k({ type: 14, loc: m, callee: t.helper(ul), arguments: o ? [a] : [a, "true"] }) : t.onError(Vi(g ? 34 : 35, m)); continue } const y = t.directiveTransforms[n]; if (y) { const { props: n, needRuntime: o } = y(r, e, t); !s && n.forEach(w), v && l && !Vl(l) ? k(Tl(n, c)) : u.push(...n), o && (f.push(r), _(o) && xa.set(r, o)) } else E(n) || (f.push(r), d && (h = !0)) } } let N; if (p.length ? (k(), N = p.length > 1 ? $l(t.helper(sl), p, c) : p[0]) : u.length && (N = Tl(wa(u), c)), S ? m |= 16 : (v && !o && (m |= 2), y && !o && (m |= 4), C.length && (m |= 8), b && (m |= 32)), h || 0 !== m && 32 !== m || !(g || x || f.length > 0) || (m |= 512), !t.inSSR && N) switch (N.type) { case 15: let e = -1, n = -1, o = !1; for (let t = 0; t < N.properties.length; t++) { const r = N.properties[t].key; Vl(r) ? "class" === r.content ? e = t : "style" === r.content && (n = t) : r.isHandlerKey || (o = !0) } const r = N.properties[e], s = N.properties[n]; o ? N = $l(t.helper(cl), [N]) : (r && !Vl(r.value) && (r.value = $l(t.helper(il), [r.value])), s && (y || 4 === s.value.type && "[" === s.value.content.trim()[0] || 17 === s.value.type) && (s.value = $l(t.helper(ll), [s.value]))); break; case 14: break; default: N = $l(t.helper(cl), [$l(t.helper(al), [N])]) }return { props: N, directives: f, patchFlag: m, dynamicPropNames: C, shouldUseBlock: h } } function wa (e) { const t = new Map, n = []; for (let o = 0; o < e.length; o++) { const r = e[o]; if (8 === r.key.type || !r.key.isStatic) { n.push(r); continue } const s = r.key.content, i = t.get(s); i ? ("style" === s || "class" === s || l(s)) && Ta(i, r) : (t.set(s, r), n.push(r)) } return n } function Ta (e, t) { 17 === e.value.type ? e.value.elements.push(t.value) : e.value = wl([e.value, t.value], e.loc) } function Ea (e) { return "component" === e || "Component" === e } const Na = (e, t) => { if (ec(e)) { const { children: n, loc: o } = e, { slotName: r, slotProps: s } = function (e, t) { let n, o = '"default"'; const r = []; for (let s = 0; s < e.props.length; s++) { const t = e.props[s]; 6 === t.type ? t.value && ("name" === t.name ? o = JSON.stringify(t.value.content) : (t.name = $(t.name), r.push(t))) : "bind" === t.name && Zl(t.arg, "name") ? t.exp && (o = t.exp) : ("bind" === t.name && t.arg && Vl(t.arg) && (t.arg.content = $(t.arg.content)), r.push(t)) } if (r.length > 0) { const { props: o, directives: s } = ka(e, t, r, !1, !1); n = o, s.length && t.onError(Vi(36, s[0].loc)) } return { slotName: o, slotProps: n } }(e, t), i = [t.prefixIdentifiers ? "_ctx.$slots" : "$slots", r, "{}", "undefined", "true"]; let l = 2; s && (i[2] = s, l = 3), n.length && (i[3] = Pl([], n, !1, !1, o), l = 4), t.scopeId && !t.slotted && (l = 5), i.splice(l), e.codegenNode = $l(t.helper(nl), i, o) } }; const Oa = /^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/, $a = (e, t, n, o) => { const { loc: r, modifiers: s, arg: i } = e; let l; if (4 === i.type) if (i.isStatic) { let e = i.content; e.startsWith("vue:") && (e = `vnode-${e.slice(4)}`); l = Nl(0 !== t.tagType || e.startsWith("vnode") || !/[A-Z]/.test(e) ? R($(e)) : `on:${e}`, !0, i.loc) } else l = Ol([`${n.helperString(dl)}(`, i, ")"]); else l = i, l.children.unshift(`${n.helperString(dl)}(`), l.children.push(")"); let c = e.exp; c && !c.content.trim() && (c = void 0); let a = n.cacheHandlers && !c && !n.inVOnce; if (c) { const e = Wl(c.content), t = !(e || Oa.test(c.content)), n = c.content.includes(";"); (t || a && e) && (c = Ol([`${t ? "$event" : "(...args)"} => ${n ? "{" : "("}`, c, n ? "}" : ")"])) } let u = { props: [El(l, c || Nl("() => {}", !1, r))] }; return o && (u = o(u)), a && (u.props[0].value = n.cache(u.props[0].value)), u.props.forEach((e => e.key.isHandlerKey = !0)), u }, Pa = (e, t, n) => { const { exp: o, modifiers: r, loc: s } = e, i = e.arg; return 4 !== i.type ? (i.children.unshift("("), i.children.push(') || ""')) : i.isStatic || (i.content = `${i.content} || ""`), r.includes("camel") && (4 === i.type ? i.content = i.isStatic ? $(i.content) : `${n.helperString(pl)}(${i.content})` : (i.children.unshift(`${n.helperString(pl)}(`), i.children.push(")"))), n.inSSR || (r.includes("prop") && Aa(i, "."), r.includes("attr") && Aa(i, "^")), !o || 4 === o.type && !o.content.trim() ? { props: [El(i, Nl("", !0, s))] } : { props: [El(i, o)] } }, Aa = (e, t) => { 4 === e.type ? e.content = e.isStatic ? t + e.content : `\`${t}\${${e.content}}\`` : (e.children.unshift(`'${t}' + (`), e.children.push(")")) }, Fa = (e, t) => { if (0 === e.type || 1 === e.type || 11 === e.type || 10 === e.type) return () => { const n = e.children; let o, r = !1; for (let e = 0; e < n.length; e++) { const t = n[e]; if (Yl(t)) { r = !0; for (let r = e + 1; r < n.length; r++) { const s = n[r]; if (!Yl(s)) { o = void 0; break } o || (o = n[e] = Ol([t], t.loc)), o.children.push(" + ", s), n.splice(r, 1), r-- } } } if (r && (1 !== n.length || 0 !== e.type && (1 !== e.type || 0 !== e.tagType || e.props.find((e => 7 === e.type && !t.directiveTransforms[e.name]))))) for (let e = 0; e < n.length; e++) { const o = n[e]; if (Yl(o) || 8 === o.type) { const r = []; 2 === o.type && " " === o.content || r.push(o), t.ssr || 0 !== Ic(o, t) || r.push("1"), n[e] = { type: 12, content: o, loc: o.loc, codegenNode: $l(t.helper(qi), r) } } } } }, Ra = new WeakSet, Ma = (e, t) => { if (1 === e.type && ql(e, "once", !0)) { if (Ra.has(e) || t.inVOnce || t.inSSR) return; return Ra.add(e), t.inVOnce = !0, t.helper(hl), () => { t.inVOnce = !1; const e = t.currentNode; e.codegenNode && (e.codegenNode = t.cache(e.codegenNode, !0)) } } }, Va = (e, t, n) => { const { exp: o, arg: r } = e; if (!o) return n.onError(Vi(41, e.loc)), Ia(); const s = o.loc.source, i = 4 === o.type ? o.content : s, l = n.bindingMetadata[s]; if ("props" === l || "props-aliased" === l) return Ia(); if (!i.trim() || !Wl(i)) return n.onError(Vi(42, o.loc)), Ia(); const c = r || Nl("modelValue", !0), a = r ? Vl(r) ? `onUpdate:${$(r.content)}` : Ol(['"onUpdate:" + ', r]) : "onUpdate:modelValue"; let u; u = Ol([`${n.isTS ? "($event: any)" : "$event"} => ((`, o, ") = $event)"]); const p = [El(c, e.exp), El(a, u)]; if (e.modifiers.length && 1 === t.tagType) { const t = e.modifiers.map((e => (jl(e) ? e : JSON.stringify(e)) + ": true")).join(", "), n = r ? Vl(r) ? `${r.content}Modifiers` : Ol([r, ' + "Modifiers"']) : "modelModifiers"; p.push(El(n, Nl(`{ ${t} }`, !1, e.loc, 2))) } return Ia(p) }; function Ia (e = []) { return { props: e } } const Ba = new WeakSet, La = (e, t) => { if (1 === e.type) { const n = ql(e, "memo"); if (!n || Ba.has(e)) return; return Ba.add(e), () => { const o = e.codegenNode || t.currentNode.codegenNode; o && 13 === o.type && (1 !== e.tagType && Ml(o, t), e.codegenNode = $l(t.helper(bl), [n.exp, Pl(void 0, o), "_cache", String(t.cached++)])) } } }; function ja (e, t = {}) { const n = t.onError || Ri, o = "module" === t.mode; !0 === t.prefixIdentifiers ? n(Vi(47)) : o && n(Vi(48)); t.cacheHandlers && n(Vi(49)), t.scopeId && !o && n(Vi(50)); const r = y(e) ? ac(e, t) : e, [s, i] = [[Ma, ra, La, ca, Na, Ca, ga, Fa], { on: $a, bind: Pa, model: Va }]; return Wc(r, a({}, t, { prefixIdentifiers: false, nodeTransforms: [...s, ...t.nodeTransforms || []], directiveTransforms: a({}, i, t.directiveTransforms || {}) })), Zc(r, a({}, t, { prefixIdentifiers: false })) } const Ua = Symbol(""), Da = Symbol(""), Ha = Symbol(""), Wa = Symbol(""), za = Symbol(""), Ka = Symbol(""), Ga = Symbol(""), qa = Symbol(""), Ja = Symbol(""), Za = Symbol(""); var Ya; let Qa; Ya = { [Ua]: "vModelRadio", [Da]: "vModelCheckbox", [Ha]: "vModelText", [Wa]: "vModelSelect", [za]: "vModelDynamic", [Ka]: "withModifiers", [Ga]: "withKeys", [qa]: "vShow", [Ja]: "Transition", [Za]: "TransitionGroup" }, Object.getOwnPropertySymbols(Ya).forEach((e => { xl[e] = Ya[e] })); const Xa = t("style,iframe,script,noscript", !0), eu = { isVoidTag: Z, isNativeTag: e => q(e) || J(e), isPreTag: e => "pre" === e, decodeEntities: function (e, t = !1) { return Qa || (Qa = document.createElement("div")), t ? (Qa.innerHTML = `
`, Qa.children[0].getAttribute("foo")) : (Qa.innerHTML = e, Qa.textContent) }, isBuiltInComponent: e => Il(e, "Transition") ? Ja : Il(e, "TransitionGroup") ? Za : void 0, getNamespace (e, t) { let n = t ? t.ns : 0; if (t && 2 === n) if ("annotation-xml" === t.tag) { if ("svg" === e) return 1; t.props.some((e => 6 === e.type && "encoding" === e.name && null != e.value && ("text/html" === e.value.content || "application/xhtml+xml" === e.value.content))) && (n = 0) } else /^m(?:[ions]|text)$/.test(t.tag) && "mglyph" !== e && "malignmark" !== e && (n = 0); else t && 1 === n && ("foreignObject" !== t.tag && "desc" !== t.tag && "title" !== t.tag || (n = 0)); if (0 === n) { if ("svg" === e) return 1; if ("math" === e) return 2 } return n }, getTextMode ({ tag: e, ns: t }) { if (0 === t) { if ("textarea" === e || "title" === e) return 1; if (Xa(e)) return 2 } return 0 } }, tu = (e, t) => { const n = K(e); return Nl(JSON.stringify(n), !1, t, 3) }; function nu (e, t) { return Vi(e, t) } const ou = t("passive,once,capture"), ru = t("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"), su = t("left,right"), iu = t("onkeyup,onkeydown,onkeypress", !0), lu = (e, t) => Vl(e) && "onclick" === e.content.toLowerCase() ? Nl(t, !0) : 4 !== e.type ? Ol(["(", e, `) === "onClick" ? "${t}" : (`, e, ")"]) : e, cu = (e, t) => { 1 !== e.type || 0 !== e.tagType || "script" !== e.tag && "style" !== e.tag || t.removeNode() }, au = [e => { 1 === e.type && e.props.forEach(((t, n) => { 6 === t.type && "style" === t.name && t.value && (e.props[n] = { type: 7, name: "bind", arg: Nl("style", !0, t.loc), exp: tu(t.value.content, t.loc), modifiers: [], loc: t.loc }) })) }], uu = { cloak: () => ({ props: [] }), html: (e, t, n) => { const { exp: o, loc: r } = e; return o || n.onError(nu(53, r)), t.children.length && (n.onError(nu(54, r)), t.children.length = 0), { props: [El(Nl("innerHTML", !0, r), o || Nl("", !0))] } }, text: (e, t, n) => { const { exp: o, loc: r } = e; return o || n.onError(nu(55, r)), t.children.length && (n.onError(nu(56, r)), t.children.length = 0), { props: [El(Nl("textContent", !0), o ? Ic(o, n) > 0 ? o : $l(n.helperString(rl), [o], r) : Nl("", !0))] } }, model: (e, t, n) => { const o = Va(e, t, n); if (!o.props.length || 1 === t.tagType) return o; e.arg && n.onError(nu(58, e.arg.loc)); const { tag: r } = t, s = n.isCustomElement(r); if ("input" === r || "textarea" === r || "select" === r || s) { let i = Ha, l = !1; if ("input" === r || s) { const o = Jl(t, "type"); if (o) { if (7 === o.type) i = za; else if (o.value) switch (o.value.content) { case "radio": i = Ua; break; case "checkbox": i = Da; break; case "file": l = !0, n.onError(nu(59, e.loc)) } } else (function (e) { return e.props.some((e => !(7 !== e.type || "bind" !== e.name || e.arg && 4 === e.arg.type && e.arg.isStatic))) })(t) && (i = za) } else "select" === r && (i = Wa); l || (o.needRuntime = n.helper(i)) } else n.onError(nu(57, e.loc)); return o.props = o.props.filter((e => !(4 === e.key.type && "modelValue" === e.key.content))), o }, on: (e, t, n) => $a(e, t, n, (t => { const { modifiers: o } = e; if (!o.length) return t; let { key: r, value: s } = t.props[0]; const { keyModifiers: i, nonKeyModifiers: l, eventOptionModifiers: c } = ((e, t, n, o) => { const r = [], s = [], i = []; for (let l = 0; l < t.length; l++) { const n = t[l]; ou(n) ? i.push(n) : su(n) ? Vl(e) ? iu(e.content) ? r.push(n) : s.push(n) : (r.push(n), s.push(n)) : ru(n) ? s.push(n) : r.push(n) } return { keyModifiers: r, nonKeyModifiers: s, eventOptionModifiers: i } })(r, o); if (l.includes("right") && (r = lu(r, "onContextmenu")), l.includes("middle") && (r = lu(r, "onMouseup")), l.length && (s = $l(n.helper(Ka), [s, JSON.stringify(l)])), !i.length || Vl(r) && !iu(r.content) || (s = $l(n.helper(Ga), [s, JSON.stringify(i)])), c.length) { const e = c.map(F).join(""); r = Vl(r) ? Nl(`${r.content}${e}`, !0) : Ol(["(", r, `) + "${e}"`]) } return { props: [El(r, s)] } })), show: (e, t, n) => { const { exp: o, loc: r } = e; return o || n.onError(nu(61, r)), { props: [], needRuntime: n.helper(qa) } } }; const pu = Object.create(null); function fu (e, t) { if (!y(e)) { if (!e.nodeType) return r; e = e.innerHTML } const n = e, o = pu[n]; if (o) return o; if ("#" === e[0]) { const t = document.querySelector(e); e = t ? t.innerHTML : "" } const s = a({ hoistStatic: !0, onError: void 0, onWarn: r }, t); s.isCustomElement || "undefined" == typeof customElements || (s.isCustomElement = e => !!customElements.get(e)); const { code: i } = function (e, t = {}) { return ja(e, a({}, eu, t, { nodeTransforms: [cu, ...au, ...t.nodeTransforms || []], directiveTransforms: a({}, uu, t.directiveTransforms || {}), transformHoist: null })) }(e, s), l = new Function(i)(); return l._rc = !0, pu[n] = l } return ls(fu), e.BaseTransition = Ln, e.BaseTransitionPropsValidators = Bn, e.Comment = kr, e.EffectScope = oe, e.Fragment = xr, e.KeepAlive = Zn, e.ReactiveEffect = me, e.Static = wr, e.Suspense = xn, e.Teleport = br, e.Text = Cr, e.Transition = Bs, e.TransitionGroup = oi, e.VueElement = Fs, e.assertNumber = function (e, t) { }, e.callWithAsyncErrorHandling = Ut, e.callWithErrorHandling = jt, e.camelize = $, e.capitalize = F, e.cloneVNode = Dr, e.compatUtils = null, e.compile = fu, e.computed = fs, e.createApp = (...e) => { const t = Ni().createApp(...e), { mount: n } = t; return t.mount = e => { const o = Ai(e); if (!o) return; const r = t._component; v(r) || r.render || r.template || (r.template = o.innerHTML), o.innerHTML = ""; const s = n(o, !1, o instanceof SVGElement); return o instanceof Element && (o.removeAttribute("v-cloak"), o.setAttribute("data-v-app", "")), s }, t }, e.createBlock = Fr, e.createCommentVNode = function (e = "", t = !1) { return t ? (Nr(), Fr(kr, null, e)) : jr(kr, null, e) }, e.createElementBlock = function (e, t, n, o, r, s) { return Ar(Lr(e, t, n, o, r, s, !0)) }, e.createElementVNode = Lr, e.createHydrationRenderer = fr, e.createPropsRestProxy = function (e, t) { const n = {}; for (const o in e) t.includes(o) || Object.defineProperty(n, o, { enumerable: !0, get: () => e[o] }); return n }, e.createRenderer = pr, e.createSSRApp = (...e) => { const t = Oi().createApp(...e), { mount: n } = t; return t.mount = e => { const t = Ai(e); if (t) return n(t, !0, t instanceof SVGElement) }, t }, e.createSlots = function (e, t) { for (let n = 0; n < t.length; n++) { const o = t[n]; if (d(o)) for (let t = 0; t < o.length; t++)e[o[t].name] = o[t].fn; else o && (e[o.name] = o.key ? (...e) => { const t = o.fn(...e); return t && (t.key = o.key), t } : o.fn) } return e }, e.createStaticVNode = function (e, t) { const n = jr(wr, null, e); return n.staticCount = t, n }, e.createTextVNode = Hr, e.createVNode = jr, e.customRef = function (e) { return new Mt(e) }, e.defineAsyncComponent = function (e) { v(e) && (e = { loader: e }); const { loader: t, loadingComponent: n, errorComponent: o, delay: r = 200, timeout: s, suspensible: i = !0, onError: l } = e; let c, a = null, u = 0; const p = () => { let e; return a || (e = a = t().catch((e => { if (e = e instanceof Error ? e : new Error(String(e)), l) return new Promise(((t, n) => { l(e, (() => t((u++, a = null, p()))), (() => n(e)), u + 1) })); throw e })).then((t => e !== a && a ? a : (t && (t.__esModule || "Module" === t[Symbol.toStringTag]) && (t = t.default), c = t, t)))) }; return Kn({ name: "AsyncComponentWrapper", __asyncLoader: p, get __asyncResolved () { return c }, setup () { const e = Yr; if (c) return () => qn(c, e); const t = t => { a = null, Dt(t, e, 13, !o) }; if (i && e.suspense) return p().then((t => () => qn(t, e))).catch((e => (t(e), () => o ? jr(o, { error: e }) : null))); const l = Ot(!1), u = Ot(), f = Ot(!!r); return r && setTimeout((() => { f.value = !1 }), r), null != s && setTimeout((() => { if (!l.value && !u.value) { const e = new Error(`Async component timed out after ${s}ms.`); t(e), u.value = e } }), s), p().then((() => { l.value = !0, e.parent && Jn(e.parent.vnode) && Xt(e.parent.update) })).catch((e => { t(e), u.value = e })), () => l.value && c ? qn(c, e) : u.value && o ? jr(o, { error: u.value }) : n && !f.value ? jr(n) : void 0 } }) }, e.defineComponent = Kn, e.defineCustomElement = Ps, e.defineEmits = function () { return null }, e.defineExpose = function (e) { }, e.defineModel = function () { }, e.defineOptions = function (e) { }, e.defineProps = function () { return null }, e.defineSSRCustomElement = e => Ps(e, Pi), e.defineSlots = function () { return null }, e.effect = function (e, t) { e.effect && (e = e.effect.fn); const n = new me(e); t && (a(n, t), t.scope && re(n, t.scope)), t && t.lazy || n.run(); const o = n.run.bind(n); return o.effect = n, o }, e.effectScope = function (e) { return new oe(e) }, e.getCurrentInstance = Qr, e.getCurrentScope = se, e.getTransitionRawChildren = zn, e.guardReactiveProps = Ur, e.h = ds, e.handleError = Dt, e.hasInjectionContext = function () { return !!(Yr || fn || Wo) }, e.hydrate = Pi, e.initCustomFormatter = function () { }, e.initDirectivesForSSR = Fi, e.inject = Ko, e.isMemoSame = ms, e.isProxy = St, e.isReactive = yt, e.isReadonly = _t, e.isRef = Nt, e.isRuntimeOnly = () => !os, e.isShallow = bt, e.isVNode = Rr, e.markRaw = Ct, e.mergeDefaults = function (e, t) { const n = No(e); for (const o in t) { if (o.startsWith("__skip")) continue; let e = n[o]; e ? d(e) || v(e) ? e = n[o] = { type: e, default: t[o] } : e.default = t[o] : null === e && (e = n[o] = { default: t[o] }), e && t[`__skip_${o}`] && (e.skipFactory = !0) } return n }, e.mergeModels = function (e, t) { return e && t ? d(e) && d(t) ? e.concat(t) : a({}, No(e), No(t)) : e || t }, e.mergeProps = Gr, e.nextTick = Qt, e.normalizeClass = G, e.normalizeProps = function (e) { if (!e) return null; let { class: t, style: n } = e; return t && !y(t) && (e.class = G(t)), n && (e.style = D(n)), e }, e.normalizeStyle = D, e.onActivated = Qn, e.onBeforeMount = io, e.onBeforeUnmount = uo, e.onBeforeUpdate = co, e.onDeactivated = Xn, e.onErrorCaptured = go, e.onMounted = lo, e.onRenderTracked = mo, e.onRenderTriggered = ho, e.onScopeDispose = function (e) { ne && ne.cleanups.push(e) }, e.onServerPrefetch = fo, e.onUnmounted = po, e.onUpdated = ao, e.openBlock = Nr, e.popScopeId = function () { dn = null }, e.provide = zo, e.proxyRefs = Rt, e.pushScopeId = function (e) { dn = e }, e.queuePostFlushCb = tn, e.reactive = ht, e.readonly = gt, e.ref = Ot, e.registerRuntimeCompiler = ls, e.render = $i, e.renderList = function (e, t, n, o) { let r; const s = n && n[o]; if (d(e) || y(e)) { r = new Array(e.length); for (let n = 0, o = e.length; n < o; n++)r[n] = t(e[n], n, void 0, s && s[n]) } else if ("number" == typeof e) { r = new Array(e); for (let n = 0; n < e; n++)r[n] = t(n + 1, n, void 0, s && s[n]) } else if (b(e)) if (e[Symbol.iterator]) r = Array.from(e, ((e, n) => t(e, n, void 0, s && s[n]))); else { const n = Object.keys(e); r = new Array(n.length); for (let o = 0, i = n.length; o < i; o++) { const i = n[o]; r[o] = t(e[i], i, o, s && s[o]) } } else r = []; return n && (n[o] = r), r }, e.renderSlot = function (e, t, n = {}, o, r) { if (fn.isCE || fn.parent && Gn(fn.parent) && fn.parent.isCE) return "default" !== t && (n.name = t), jr("slot", n, o && o()); let s = e[t]; s && s._c && (s._d = !1), Nr(); const i = s && So(s(n)), l = Fr(xr, { key: n.key || i && i.key || `_${t}` }, i || (o ? o() : []), i && 1 === e._ ? 64 : -2); return !r && l.scopeId && (l.slotScopeIds = [l.scopeId + "-s"]), s && s._c && (s._d = !0), l }, e.resolveComponent = function (e, t) { return _o(vo, e, !0, t) || e }, e.resolveDirective = function (e) { return _o("directives", e) }, e.resolveDynamicComponent = function (e) { return y(e) ? _o(vo, e, !1) || e : e || yo }, e.resolveFilter = null, e.resolveTransitionHooks = Un, e.setBlockTracking = Pr, e.setDevtoolsHook = function t (n, o) { var r, s; if (e.devtools = n, e.devtools) e.devtools.enabled = !0, cn.forEach((({ event: t, args: n }) => e.devtools.emit(t, ...n))), cn = []; else if ("undefined" != typeof window && window.HTMLElement && !(null == (s = null == (r = window.navigator) ? void 0 : r.userAgent) ? void 0 : s.includes("jsdom"))) { (o.__VUE_DEVTOOLS_HOOK_REPLAY__ = o.__VUE_DEVTOOLS_HOOK_REPLAY__ || []).push((e => { t(e, o) })), setTimeout((() => { e.devtools || (o.__VUE_DEVTOOLS_HOOK_REPLAY__ = null, cn = []) }), 3e3) } else cn = [] }, e.setTransitionHooks = Wn, e.shallowReactive = mt, e.shallowReadonly = function (e) { return vt(e, !0, je, ct, ft) }, e.shallowRef = function (e) { return $t(e, !0) }, e.ssrContextKey = hs, e.ssrUtils = null, e.stop = function (e) { e.effect.stop() }, e.toDisplayString = e => y(e) ? e : null == e ? "" : d(e) || b(e) && (e.toString === x || !v(e.toString)) ? JSON.stringify(e, te, 2) : String(e), e.toHandlerKey = R, e.toHandlers = function (e, t) { const n = {}; for (const o in e) n[t && /[A-Z]/.test(o) ? `on:${o}` : R(o)] = e[o]; return n }, e.toRaw = xt, e.toRef = function (e, t, n) { return Nt(e) ? e : v(e) ? new It(e) : b(e) && arguments.length > 1 ? Bt(e, t, n) : Ot(e) }, e.toRefs = function (e) { const t = d(e) ? new Array(e.length) : {}; for (const n in e) t[n] = Bt(e, n); return t }, e.toValue = function (e) { return v(e) ? e() : At(e) }, e.transformVNodeArgs = function (e) { }, e.triggerRef = function (e) { Et(e) }, e.unref = At, e.useAttrs = function () { return Eo().attrs }, e.useCssModule = function (e = "$style") { return n }, e.useCssVars = function (e) { const t = Qr(); if (!t) return; const n = t.ut = (n = e(t.proxy)) => { Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach((e => Ms(e, n))) }, o = () => { const o = e(t.proxy); Rs(t.subTree, o), n(o) }; Nn(o), lo((() => { const e = new MutationObserver(o); e.observe(t.subTree.el.parentNode, { childList: !0 }), po((() => e.disconnect())) })) }, e.useModel = function (e, t, n) { const o = Qr(); if (n && n.local) { const n = Ot(e[t]); return $n((() => e[t]), (e => n.value = e)), $n(n, (n => { n !== e[t] && o.emit(`update:${t}`, n) })), n } return { __v_isRef: !0, get value () { return e[t] }, set value (e) { o.emit(`update:${t}`, e) } } }, e.useSSRContext = () => { }, e.useSlots = function () { return Eo().slots }, e.useTransitionState = Vn, e.vModelCheckbox = pi, e.vModelDynamic = yi, e.vModelRadio = di, e.vModelSelect = hi, e.vModelText = ui, e.vShow = Ci, e.version = gs, e.warn = function (e, ...t) { }, e.watch = $n, e.watchEffect = function (e, t) { return Pn(e, null, t) }, e.watchPostEffect = Nn, e.watchSyncEffect = function (e, t) { return Pn(e, null, { flush: "sync" }) }, e.withAsyncContext = function (e) { const t = Qr(); let n = e(); return ts(), S(n) && (n = n.catch((e => { throw es(t), e }))), [n, () => es(t)] }, e.withCtx = mn, e.withDefaults = function (e, t) { return null }, e.withDirectives = function (e, t) { const o = fn; if (null === o) return e; const r = us(o) || o.proxy, s = e.dirs || (e.dirs = []); for (let i = 0; i < t.length; i++) { let [e, o, l, c = n] = t[i]; e && (v(e) && (e = { mounted: e, updated: e }), e.deep && Rn(o), s.push({ dir: e, instance: r, value: o, oldValue: void 0, arg: l, modifiers: c })) } return e }, e.withKeys = (e, t) => n => { if (!("key" in n)) return; const o = A(n.key); return t.some((e => e === o || xi[e] === o)) ? e(n) : void 0 }, e.withMemo = function (e, t, n, o) { const r = n[o]; if (r && ms(r, e)) return r; const s = t(); return s.memo = e.slice(), n[o] = s }, e.withModifiers = (e, t) => (n, ...o) => { for (let e = 0; e < t.length; e++) { const o = Si[t[e]]; if (o && o(n, t)) return } return e(n, ...o) }, e.withScopeId = e => mn, e }({}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a91bfe5..b2945a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,19 @@ { "name": "ddei-editor", - "version": "1.2.43", + "version": "1.2.44-3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ddei-editor", - "version": "1.2.43", + "version": "1.2.44-3", "license": "Apache License 2.0", - "dependencies": { - "ddei-framework": "^1.2.43", - "lodash": "^4.17.21", - "three": "^0.156.1" - }, "devDependencies": { "@tsconfig/node18": "^18.2.0", - "@types/lodash": "^4.14.197", "@types/node": "^18.17.6", "@vitejs/plugin-vue": "^4.2.3", "@vue/tsconfig": "^0.4.0", + "ddei-framework": "file:///Users/hoslay/work/ddei/ddei-framework/ddei-framework-1.2.44-4.tgz", "less": "^4.2.0", "npm-run-all": "^4.1.5", "typescript": "~5.1.6", @@ -30,10 +25,32 @@ "node": ">=16.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.24.4", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -41,13 +58,75 @@ "node": ">=6.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -56,34 +135,321 @@ "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@tsconfig/node18": { "version": "18.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", + "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", + "dev": true }, "node_modules/@types/node": { - "version": "18.19.31", + "version": "18.19.64", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz", + "integrity": "sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@vitejs/plugin-vue": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.18.0 || >=16.0.0" }, @@ -94,81 +460,89 @@ }, "node_modules/@volar/language-core": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", "dev": true, - "license": "MIT", "dependencies": { "@volar/source-map": "1.11.1" } }, "node_modules/@volar/source-map": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", "dev": true, - "license": "MIT", "dependencies": { "muggle-string": "^0.3.1" } }, "node_modules/@volar/typescript": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", "dev": true, - "license": "MIT", "dependencies": { "@volar/language-core": "1.11.1", "path-browserify": "^1.0.1" } }, "node_modules/@vue/compiler-core": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.24", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.4.24", - "@vue/shared": "3.4.24" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.24", - "@vue/compiler-dom": "3.4.24", - "@vue/compiler-ssr": "3.4.24", - "@vue/shared": "3.4.24", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.4.24", - "@vue/shared": "3.4.24" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/language-core": { "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", "dev": true, - "license": "MIT", "dependencies": { "@volar/language-core": "~1.11.1", "@volar/source-map": "~1.11.1", @@ -191,16 +565,18 @@ }, "node_modules/@vue/language-core/node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.4", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -212,62 +588,70 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/shared": "3.4.24" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/reactivity": "3.4.24", - "@vue/shared": "3.4.24" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/runtime-core": "3.4.24", - "@vue/shared": "3.4.24", + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-ssr": "3.4.24", - "@vue/shared": "3.4.24" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.4.24" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.4.24", - "dev": true, - "license": "MIT" + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true }, "node_modules/@vue/tsconfig": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", + "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", + "dev": true }, "node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -277,8 +661,9 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -292,8 +677,9 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -313,8 +699,9 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -327,13 +714,15 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -341,8 +730,9 @@ }, "node_modules/call-bind": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -359,8 +749,9 @@ }, "node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -372,31 +763,36 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/computeds": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/copy-anything": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, - "license": "MIT", "dependencies": { "is-what": "^3.14.1" }, @@ -405,9 +801,10 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.5", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -421,14 +818,16 @@ }, "node_modules/csstype": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/data-view-buffer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -443,8 +842,9 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -459,8 +859,9 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -473,35 +874,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ddei-autolink": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ddei-autolink/-/ddei-autolink-1.1.1.tgz", - "integrity": "sha512-tdMuLdcJyreope1BWfnYqTQaIkSIrU/KtY9yX5mNGd+tYeJ0Y99ARHDuYnEABPX/8yh/r0Kl169v5ODg2vr98g==" - }, "node_modules/ddei-framework": { - "version": "1.2.43", - "resolved": "https://registry.npmjs.org/ddei-framework/-/ddei-framework-1.2.43.tgz", - "integrity": "sha512-ygyM8N4ONCUMiCpxlaggbixDzneFjxdqjjDDg4CqYzDwZctwEeaT913MJ5ifaZAtAFAN99233/vnHXTGQuFlVg==", - "dependencies": { - "ddei-autolink": "^1.1.1", - "lodash": "^4.17.21", - "three": "^0.156.1" - }, + "version": "1.2.44-4", + "resolved": "file:../ddei-framework/ddei-framework-1.2.44-4.tgz", + "integrity": "sha512-Cq8vVJhA6kLhSOatX8BAHlV/5o1crZDcQrQC4n4JejZ0+7YxFElo7YA2pDAt8fcNkJ7S/2IBA6Q2YyxH+xuA0g==", + "dev": true, + "license": "Apache License 2.0", "engines": { "node": ">=16.0.0" } }, "node_modules/de-indent": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -514,8 +909,9 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -530,8 +926,9 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -546,8 +943,9 @@ }, "node_modules/entities": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -557,8 +955,9 @@ }, "node_modules/errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "prr": "~1.0.1" @@ -569,16 +968,18 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.23.3", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -595,7 +996,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -611,10 +1012,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -636,8 +1037,9 @@ }, "node_modules/es-define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -647,16 +1049,18 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -666,8 +1070,9 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -679,8 +1084,9 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -695,9 +1101,10 @@ }, "node_modules/esbuild": { "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -731,29 +1138,33 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -765,8 +1176,10 @@ }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -777,16 +1190,18 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -802,16 +1217,18 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -828,8 +1245,9 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -843,11 +1261,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -858,8 +1278,9 @@ }, "node_modules/gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -869,29 +1290,33 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -901,8 +1326,9 @@ }, "node_modules/has-proto": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -912,8 +1338,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -923,8 +1350,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -937,8 +1365,9 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -948,21 +1377,24 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -973,8 +1405,9 @@ }, "node_modules/image-size": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, - "license": "MIT", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -985,8 +1418,9 @@ }, "node_modules/internal-slot": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -998,8 +1432,9 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -1013,13 +1448,30 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT" + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -1029,8 +1481,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1044,8 +1497,9 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1054,11 +1508,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1066,8 +1524,9 @@ }, "node_modules/is-data-view": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -1080,8 +1539,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1092,10 +1552,50 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1105,8 +1605,9 @@ }, "node_modules/is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1119,8 +1620,9 @@ }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -1132,10 +1634,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -1148,8 +1663,9 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -1162,8 +1678,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -1176,8 +1693,9 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -1188,10 +1706,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -1199,30 +1730,51 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.14.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -1232,8 +1784,9 @@ }, "node_modules/less": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -1257,8 +1810,9 @@ }, "node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -1271,40 +1825,28 @@ }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/magic-string": { - "version": "0.30.10", + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "pify": "^4.0.1", @@ -1316,6 +1858,8 @@ }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -1323,8 +1867,9 @@ }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "optional": true, "bin": { "mime": "cli.js" @@ -1335,8 +1880,9 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1345,17 +1891,21 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/muggle-string": { "version": "0.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -1363,7 +1913,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1373,8 +1922,9 @@ }, "node_modules/needle": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.3", @@ -1389,13 +1939,15 @@ }, "node_modules/nice-try": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -1405,8 +1957,9 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -1428,25 +1981,31 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -1462,8 +2021,9 @@ }, "node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -1474,34 +2034,39 @@ }, "node_modules/parse-node-version": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/path-browserify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -1511,21 +2076,24 @@ }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/pidtree": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -1535,8 +2103,9 @@ }, "node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -1544,14 +2113,17 @@ }, "node_modules/possible-typed-array-names": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.38", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -1567,11 +2139,10 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -1579,14 +2150,16 @@ }, "node_modules/prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -1596,15 +2169,37 @@ "node": ">=4" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -1615,8 +2210,9 @@ }, "node_modules/resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -1630,9 +2226,10 @@ } }, "node_modules/rollup": { - "version": "3.29.4", + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", "dev": true, - "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -1646,8 +2243,9 @@ }, "node_modules/safe-array-concat": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -1663,8 +2261,9 @@ }, "node_modules/safe-regex-test": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -1679,28 +2278,32 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/sax": { - "version": "1.3.0", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, - "license": "ISC", "optional": true }, "node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -1715,8 +2318,9 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -1729,8 +2333,9 @@ }, "node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -1740,24 +2345,27 @@ }, "node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/shell-quote": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -1773,25 +2381,28 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -1799,27 +2410,31 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "dev": true, - "license": "CC0-1.0" + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true }, "node_modules/string.prototype.padend": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -1835,8 +2450,9 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -1852,8 +2468,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -1865,8 +2482,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -1881,16 +2499,18 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -1900,8 +2520,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1909,19 +2530,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/three": { - "version": "0.156.1", - "license": "MIT" - }, "node_modules/tslib": { - "version": "2.6.2", - "dev": true, - "license": "0BSD" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true }, "node_modules/typed-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -1933,8 +2552,9 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -1950,16 +2570,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -1970,8 +2592,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -1989,8 +2612,9 @@ }, "node_modules/typescript": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2001,8 +2625,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -2015,30 +2640,34 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/vite": { - "version": "4.5.3", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.5.tgz", + "integrity": "sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -2091,8 +2720,9 @@ }, "node_modules/vite-plugin-compression": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", + "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "debug": "^4.3.3", @@ -2104,8 +2734,9 @@ }, "node_modules/vite-plugin-compression/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2118,8 +2749,9 @@ }, "node_modules/vite-plugin-compression/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2133,8 +2765,9 @@ }, "node_modules/vite-plugin-compression/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2144,21 +2777,24 @@ }, "node_modules/vite-plugin-compression/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/vite-plugin-compression/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/vite-plugin-compression/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2167,16 +2803,17 @@ } }, "node_modules/vue": { - "version": "3.4.24", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.4.24", - "@vue/compiler-sfc": "3.4.24", - "@vue/runtime-dom": "3.4.24", - "@vue/server-renderer": "3.4.24", - "@vue/shared": "3.4.24" + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" @@ -2189,8 +2826,9 @@ }, "node_modules/vue-template-compiler": { "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", "dev": true, - "license": "MIT", "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" @@ -2198,8 +2836,9 @@ }, "node_modules/vue-tsc": { "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", "dev": true, - "license": "MIT", "dependencies": { "@volar/typescript": "~1.11.1", "@vue/language-core": "1.8.27", @@ -2213,12 +2852,10 @@ } }, "node_modules/vue-tsc/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -2228,8 +2865,9 @@ }, "node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -2239,8 +2877,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -2252,10 +2891,55 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -2269,11 +2953,6 @@ "funding": { "url": "https://github.com/sponsors/ljharb" } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" } } } diff --git a/package.json b/package.json index f5fa3bf..fb00161 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ddei-editor", - "version": "1.2.43", + "version": "1.2.44-4", "private": false, "type": "module", "author": "hoslay <3697355039@qq.com>", @@ -50,13 +50,10 @@ "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false" }, "dependencies": { - "ddei-framework": "^1.2.43", - "lodash": "^4.17.21", - "three": "^0.156.1" + }, "devDependencies": { "@tsconfig/node18": "^18.2.0", - "@types/lodash": "^4.14.197", "@types/node": "^18.17.6", "@vitejs/plugin-vue": "^4.2.3", "@vue/tsconfig": "^0.4.0", @@ -65,6 +62,7 @@ "typescript": "~5.1.6", "vite": "^4.4.6", "vite-plugin-compression": "^0.5.1", - "vue-tsc": "^1.8.6" + "vue-tsc": "^1.8.6", + "ddei-framework": "file:///Users/hoslay/work/ddei/ddei-framework/ddei-framework-1.2.44-4.tgz" } } diff --git a/plugins/core/components/buttons/QBTFontFamily.vue b/plugins/core/components/buttons/QBTFontFamily.vue index eb3eff8..d2eb461 100644 --- a/plugins/core/components/buttons/QBTFontFamily.vue +++ b/plugins/core/components/buttons/QBTFontFamily.vue @@ -17,7 +17,7 @@