@windoc/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/close-L5SCCSCB.svg +1 -0
- package/dist/delete-col-PJ7H2VME.svg +1 -0
- package/dist/delete-row-KRYK75UN.svg +1 -0
- package/dist/delete-row-col-AXTTBTJL.svg +1 -0
- package/dist/delete-table-ZQGIE7OX.svg +1 -0
- package/dist/image-KPDHUCUH.svg +1 -0
- package/dist/image-change-6XDDRDRA.svg +1 -0
- package/dist/image-download-SO26QHKO.svg +1 -0
- package/dist/image-next-JCBVCCB6.svg +1 -0
- package/dist/image-pre-AYOSFV6K.svg +1 -0
- package/dist/index.css +1246 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +3200 -0
- package/dist/index.d.ts +3200 -0
- package/dist/index.js +26497 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +26423 -0
- package/dist/index.mjs.map +1 -0
- package/dist/insert-bottom-row-UXTNCMIA.svg +1 -0
- package/dist/insert-left-col-WKNVQRJU.svg +1 -0
- package/dist/insert-right-col-GFY3POPH.svg +1 -0
- package/dist/insert-row-col-DPJQ5OT2.svg +1 -0
- package/dist/insert-top-row-YCIWVAKE.svg +1 -0
- package/dist/merge-cancel-cell-L27MJAPT.svg +1 -0
- package/dist/merge-cell-NRL3YFFW.svg +1 -0
- package/dist/original-size-PECN7EBE.svg +1 -0
- package/dist/print-LVCRTYBR.svg +1 -0
- package/dist/rotate-7DOTSPFX.svg +1 -0
- package/dist/submenu-dropdown-YTAUMLFH.svg +1 -0
- package/dist/table-border-all-44ZWUFEF.svg +1 -0
- package/dist/table-border-dash-WAJLONDH.svg +1 -0
- package/dist/table-border-empty-JJV7KGOH.svg +1 -0
- package/dist/table-border-external-TB57BNDP.svg +1 -0
- package/dist/table-border-internal-ODMAMVLL.svg +1 -0
- package/dist/table-border-td-XRMSRWS4.svg +1 -0
- package/dist/table-border-td-back-NJJGCRBU.svg +1 -0
- package/dist/table-border-td-bottom-CUNHU7Z5.svg +1 -0
- package/dist/table-border-td-forward-5N5PN7SK.svg +1 -0
- package/dist/table-border-td-left-PH2BQBNW.svg +1 -0
- package/dist/table-border-td-right-IG6XSDFO.svg +1 -0
- package/dist/table-border-td-top-RNZ7YE2E.svg +1 -0
- package/dist/vertical-align-GRMW6UMN.svg +1 -0
- package/dist/vertical-align-bottom-KOLLKBRO.svg +1 -0
- package/dist/vertical-align-middle-SNHGOWIM.svg +1 -0
- package/dist/vertical-align-top-EGVPDCAJ.svg +1 -0
- package/dist/zoom-in-377XBLTC.svg +1 -0
- package/dist/zoom-out-M6FQBFNX.svg +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/dataset/enum/Common.ts","../src/dataset/constant/Common.ts","../src/dataset/enum/Row.ts","../src/dataset/constant/Regular.ts","../src/utils/index.ts","../src/core/cursor/Cursor.ts","../src/dataset/constant/Editor.ts","../src/dataset/enum/Element.ts","../src/utils/ua.ts","../src/dataset/constant/Element.ts","../src/core/draw/particle/block/modules/IFrameBlock.ts","../src/core/draw/particle/ImageParticle.ts","../src/core/draw/particle/latex/utils/hershey.ts","../src/core/draw/particle/latex/utils/symbols.ts","../src/core/draw/particle/latex/utils/LaTexUtils.ts","../src/core/draw/particle/latex/LaTexParticle.ts","../src/dataset/enum/List.ts","../src/dataset/constant/List.ts","../src/dataset/enum/Title.ts","../src/dataset/constant/Title.ts","../src/dataset/enum/Block.ts","../src/dataset/enum/Control.ts","../src/dataset/enum/Editor.ts","../src/dataset/enum/table/Table.ts","../src/dataset/enum/Background.ts","../src/dataset/constant/Background.ts","../src/dataset/enum/VerticalAlign.ts","../src/dataset/constant/Checkbox.ts","../src/dataset/constant/Control.ts","../src/dataset/constant/Cursor.ts","../src/dataset/constant/Footer.ts","../src/dataset/constant/Group.ts","../src/dataset/constant/Header.ts","../src/dataset/constant/Label.ts","../src/dataset/constant/LineBreak.ts","../src/dataset/constant/PageBreak.ts","../src/dataset/constant/PageNumber.ts","../src/dataset/constant/Placeholder.ts","../src/dataset/constant/Radio.ts","../src/dataset/constant/Separator.ts","../src/dataset/constant/Table.ts","../src/dataset/enum/Watermark.ts","../src/dataset/constant/Watermark.ts","../src/dataset/constant/Zone.ts","../src/dataset/enum/LineNumber.ts","../src/dataset/constant/LineNumber.ts","../src/dataset/constant/PageBorder.ts","../src/dataset/constant/Badge.ts","../src/dataset/constant/Graffiti.ts","../src/dataset/constant/Column.ts","../src/dataset/constant/WhiteSpace.ts","../src/utils/option.ts","../src/utils/element.ts","../src/utils/clipboard.ts","../src/core/event/handlers/paste.ts","../src/core/cursor/CursorAgent.ts","../src/utils/hotkey.ts","../src/dataset/enum/KeyMap.ts","../src/core/draw/control/checkbox/CheckboxControl.ts","../src/core/draw/control/radio/RadioControl.ts","../src/core/event/handlers/mousedown.ts","../src/core/event/handlers/mouseup.ts","../src/core/event/handlers/mouseleave.ts","../src/core/event/handlers/mousemove.ts","../src/core/event/handlers/keydown/backspace.ts","../src/core/event/handlers/keydown/delete.ts","../src/core/event/handlers/keydown/enter.ts","../src/core/event/handlers/keydown/left.ts","../src/core/event/handlers/keydown/right.ts","../src/core/event/handlers/keydown/tab.ts","../src/core/event/handlers/keydown/updown.ts","../src/core/event/handlers/keydown/index.ts","../src/core/event/handlers/input.ts","../src/core/event/handlers/cut.ts","../src/core/event/handlers/copy.ts","../src/core/event/handlers/drop.ts","../src/core/event/handlers/click.ts","../src/core/event/handlers/composition.ts","../src/core/event/handlers/drag.ts","../src/core/event/CanvasEvent.ts","../src/dataset/constant/Shortcut.ts","../src/core/event/GlobalEvent.ts","../src/core/history/HistoryManager.ts","../src/core/position/Position.ts","../src/core/range/RangeManager.ts","../src/core/draw/frame/Background.ts","../src/core/draw/richtext/AbstractRichText.ts","../src/core/draw/richtext/Highlight.ts","../src/core/draw/frame/Margin.ts","../src/core/draw/interactive/Search.ts","../src/core/draw/richtext/Strikeout.ts","../src/dataset/enum/Text.ts","../src/core/draw/richtext/Underline.ts","../src/core/draw/particle/TextParticle.ts","../src/core/draw/frame/PageNumber.ts","../src/core/observer/ScrollObserver.ts","../src/core/observer/SelectionObserver.ts","../src/core/draw/particle/table/TableParticle.ts","../src/core/draw/particle/table/TableTool.ts","../src/core/draw/particle/HyperlinkParticle.ts","../src/core/draw/particle/LabelParticle.ts","../src/core/draw/frame/Header.ts","../src/core/draw/particle/SuperscriptParticle.ts","../src/core/draw/particle/SubscriptParticle.ts","../src/core/draw/particle/SeparatorParticle.ts","../src/core/draw/particle/PageBreakParticle.ts","../src/core/draw/particle/ColumnBreakParticle.ts","../src/core/draw/frame/Watermark.ts","../src/core/draw/control/interactive/ControlSearch.ts","../src/core/draw/control/richtext/Border.ts","../src/core/draw/control/select/SelectControl.ts","../src/core/draw/control/text/TextControl.ts","../src/core/draw/particle/date/DatePicker.ts","../src/core/draw/control/date/DateControl.ts","../src/core/draw/control/number/Calculator.ts","../src/core/draw/control/number/NumberControl.ts","../src/core/draw/control/Control.ts","../src/core/draw/particle/CheckboxParticle.ts","../src/core/draw/particle/RadioParticle.ts","../src/core/worker/WorkerManager.ts","../src/core/draw/particle/previewer/Previewer.ts","../src/core/draw/particle/date/DateParticle.ts","../src/core/draw/particle/block/modules/VideoBlock.ts","../src/core/draw/particle/block/modules/BaseBlock.ts","../src/core/draw/particle/block/BlockParticle.ts","../src/core/i18n/lang/zh-CN.json","../src/core/i18n/lang/en.json","../src/core/i18n/I18n.ts","../src/core/observer/ImageObserver.ts","../src/utils/unit.ts","../src/components/dialog/Dialog.ts","../src/core/zone/ZoneTip.ts","../src/core/zone/Zone.ts","../src/core/draw/frame/Footer.ts","../src/core/draw/particle/ListParticle.ts","../src/core/draw/particle/LineBreakParticle.ts","../src/core/draw/frame/Placeholder.ts","../src/core/draw/interactive/Group.ts","../src/core/draw/particle/WhiteSpaceParticle.ts","../src/core/observer/MouseObserver.ts","../src/core/draw/frame/LineNumber.ts","../src/core/draw/frame/PageBorder.ts","../src/core/actuator/handlers/positionContextChange.ts","../src/core/actuator/Actuator.ts","../src/core/draw/particle/table/TableOperate.ts","../src/dataset/enum/Area.ts","../src/core/draw/interactive/Area.ts","../src/core/draw/frame/Badge.ts","../src/core/draw/graffiti/Graffiti.ts","../src/core/draw/Draw.ts","../src/core/command/Command.ts","../src/utils/print.ts","../src/core/command/CommandAdapt.ts","../src/core/listener/Listener.ts","../src/core/register/Register.ts","../src/dataset/constant/ContextMenu.ts","../src/core/contextmenu/menus/controlMenus.ts","../src/core/contextmenu/menus/globalMenus.ts","../src/core/contextmenu/menus/hyperlinkMenus.ts","../src/core/contextmenu/menus/imageMenus.ts","../src/core/contextmenu/menus/tableMenus.ts","../src/core/contextmenu/ContextMenu.ts","../src/core/shortcut/keys/richtextKeys.ts","../src/core/shortcut/keys/titleKeys.ts","../src/core/shortcut/keys/listKeys.ts","../src/core/shortcut/Shortcut.ts","../src/core/plugin/Plugin.ts","../src/core/event/eventbus/EventBus.ts","../src/core/override/Override.ts","../src/components/signature/Signature.ts","../src/index.ts"],"sourcesContent":["export const version = '0.9.47'\n","export enum MaxHeightRatio {\n HALF = 'half',\n ONE_THIRD = 'one-third',\n QUARTER = 'quarter'\n}\n\nexport enum NumberType {\n ARABIC = 'arabic',\n CHINESE = 'chinese'\n}\n\nexport enum ImageDisplay {\n INLINE = 'inline',\n BLOCK = 'block',\n SURROUND = 'surround',\n FLOAT_TOP = 'float-top',\n FLOAT_BOTTOM = 'float-bottom'\n}\n\nexport enum LocationPosition {\n BEFORE = 'before',\n AFTER = 'after',\n OUTER_BEFORE = 'outer-before',\n OUTER_AFTER = 'outer-after'\n}\n\nexport enum FlexDirection {\n ROW = 'row',\n COLUMN = 'column'\n}\n","import { MaxHeightRatio } from '../enum/Common'\n\nexport const ZERO = '\\u200B'\nexport const WRAP = '\\n'\nexport const HORIZON_TAB = '\\t'\nexport const NBSP = '\\u0020'\nexport const NON_BREAKING_SPACE = ' '\nexport const PUNCTUATION_LIST = [\n ':',\n ',',\n '.',\n ';',\n '?',\n '!'\n]\n\nexport const maxHeightRadioMapping: Record<MaxHeightRatio, number> = {\n [MaxHeightRatio.HALF]: 1 / 2,\n [MaxHeightRatio.ONE_THIRD]: 1 / 3,\n [MaxHeightRatio.QUARTER]: 1 / 4\n}\n\nexport const LETTER_CLASS = {\n ENGLISH: 'A-Za-z',\n SPANISH: 'A-Za-zÁÉÍÓÚáéíóúÑñÜü',\n FRENCH: 'A-Za-zÀÂÇàâçÉéÈèÊêËëÎîÏïÔôÙùÛûŸÿ',\n GERMAN: 'A-Za-zÄäÖöÜüß',\n RUSSIAN: 'А-Яа-яЁё',\n PORTUGUESE: 'A-Za-zÁÉÍÓÚáéíóúÃÕãõÇç',\n ITALIAN: 'A-Za-zÀàÈèÉéÌìÍíÎîÓóÒòÙù',\n DUTCH: 'A-Za-zÀàÁáÂâÄäÈèÉéÊêËëÌìÍíÎîÏïÓóÒòÔôÖöÙùÛûÜü',\n SWEDISH: 'A-Za-zÅåÄäÖö',\n GREEK: 'ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩω'\n}\n\nexport const METRICS_BASIS_TEXT = 'M'\n","export enum RowFlex {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n ALIGNMENT = 'alignment',\n JUSTIFY = 'justify'\n}\n","import { ZERO } from './Common'\n\nexport const NUMBER_REG = /[0-9]/\nexport const NUMBER_LIKE_REG = /[0-9.]/\nexport const CHINESE_REG = /[\\u4e00-\\u9fa5]/\nexport const SURROGATE_PAIR_REG = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/\n// https://github.com/mathiasbynens/emoji-test-regex-pattern\nexport const EMOJI_REG =\n /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g\n\nexport const UNICODE_SYMBOL_REG = new RegExp(\n `${EMOJI_REG.source}|${SURROGATE_PAIR_REG.source}`,\n 'g'\n)\n\nexport const PUNCTUATION_REG =\n /[、,。?!;:……「」“”‘’*()【】〔〕〖〗〘〙〚〛《》———﹝﹞–—\\\\/·.,!?;:`~<>()[\\]{}'\"|]/\n\nexport const START_LINE_BREAK_REG = new RegExp(`^[${ZERO}\\n]`)\n\nexport const NON_NUMBER_STR_REG = /[^0-9\\+\\-\\.eE,]/\n\nexport const WHITE_SPACE_REG = /\\s/\n","import { UNICODE_SYMBOL_REG } from '../dataset/constant/Regular'\nimport { IElementFillRect } from '../interface/Element'\n\nexport function debounce<T extends unknown[]>(\n func: (...arg: T) => unknown,\n delay: number\n) {\n let timer: number\n return function (this: unknown, ...args: T) {\n if (timer) {\n window.clearTimeout(timer)\n }\n timer = window.setTimeout(() => {\n func.apply(this, args)\n }, delay)\n }\n}\n\nexport function throttle<T extends unknown[]>(\n func: (...arg: T) => unknown,\n delay: number\n) {\n let lastExecTime = 0\n let timer: number\n return function (this: unknown, ...args: T) {\n const currentTime = Date.now()\n if (currentTime - lastExecTime >= delay) {\n window.clearTimeout(timer)\n func.apply(this, args)\n lastExecTime = currentTime\n } else {\n window.clearTimeout(timer)\n timer = window.setTimeout(() => {\n func.apply(this, args)\n lastExecTime = currentTime\n }, delay)\n }\n }\n}\n\nexport function deepCloneOmitKeys<T, K>(obj: T, omitKeys: (keyof K)[]): T {\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n let newObj = {} as T\n if (Array.isArray(obj)) {\n newObj = obj.map(item => deepCloneOmitKeys(item, omitKeys)) as T\n } else {\n // prettier-ignore\n (Object.keys(obj) as (keyof T)[]).forEach(key => {\n if (omitKeys.includes(key as unknown as keyof K)) return\n newObj[key] = deepCloneOmitKeys(obj[key] , omitKeys)\n })\n }\n return newObj\n}\n\nexport function deepClone<T>(obj: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(obj)\n }\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n let newObj = {} as T\n if (Array.isArray(obj)) {\n newObj = obj.map(item => deepClone(item)) as T\n } else {\n // prettier-ignore\n (Object.keys(obj) as (keyof T)[]).forEach(key => {\n newObj[key] = deepClone(obj[key])\n })\n }\n return newObj\n}\n\nexport function isBody(node: Element): boolean {\n return node && node.nodeType === 1 && node.tagName.toLowerCase() === 'body'\n}\n\nexport function findParent(\n node: Element,\n filterFn: Function,\n includeSelf: boolean\n) {\n if (node && !isBody(node)) {\n node = includeSelf ? node : (node.parentNode as Element)\n while (node) {\n if (!filterFn || filterFn(node) || isBody(node)) {\n return filterFn && !filterFn(node) && isBody(node) ? null : node\n }\n node = node.parentNode as Element\n }\n }\n return null\n}\n\nexport function getUUID(): string {\n function S4(): string {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)\n }\n return (\n S4() +\n S4() +\n '-' +\n S4() +\n '-' +\n S4() +\n '-' +\n S4() +\n '-' +\n S4() +\n S4() +\n S4()\n )\n}\n\nexport function splitText(text: string): string[] {\n const data: string[] = []\n if (Intl.Segmenter) {\n const segmenter = new Intl.Segmenter()\n const segments = segmenter.segment(text)\n for (const { segment } of segments) {\n data.push(segment)\n }\n } else {\n const symbolMap = new Map<number, string>()\n for (const match of text.matchAll(UNICODE_SYMBOL_REG)) {\n symbolMap.set(match.index!, match[0])\n }\n let t = 0\n while (t < text.length) {\n const symbol = symbolMap.get(t)\n if (symbol) {\n data.push(symbol)\n t += symbol.length\n } else {\n data.push(text[t])\n t++\n }\n }\n }\n return data\n}\n\nexport function downloadFile(href: string, fileName: string) {\n const a = document.createElement('a')\n a.href = href\n a.download = fileName\n a.click()\n}\n\nexport function threeClick(dom: HTMLElement, fn: (evt: MouseEvent) => void) {\n nClickEvent(3, dom, fn)\n}\n\nfunction nClickEvent(\n n: number,\n dom: HTMLElement,\n fn: (evt: MouseEvent) => void\n) {\n let count = 0\n let lastTime = 0\n\n const handler = function (evt: MouseEvent) {\n const currentTime = new Date().getTime()\n count = currentTime - lastTime < 300 ? count + 1 : 0\n lastTime = new Date().getTime()\n if (count >= n - 1) {\n fn(evt)\n count = 0\n }\n }\n\n dom.addEventListener('click', handler)\n}\n\nexport function isObject(type: unknown): type is Record<string, unknown> {\n return Object.prototype.toString.call(type) === '[object Object]'\n}\n\nexport function isArray(type: unknown): type is Array<unknown> {\n return Array.isArray(type)\n}\n\nexport function isNumber(type: unknown): type is number {\n return Object.prototype.toString.call(type) === '[object Number]'\n}\n\nexport function isString(type: unknown): type is string {\n return Object.prototype.toString.call(type) === '[object String]'\n}\n\nexport function mergeObject<T>(source: T, target: T): T {\n if (isObject(source) && isObject(target)) {\n const objectTarget = <Record<string, unknown>>target\n for (const [key, val] of Object.entries(source)) {\n if (!objectTarget[key]) {\n objectTarget[key] = val\n } else {\n objectTarget[key] = mergeObject(val, objectTarget[key])\n }\n }\n } else if (isArray(source) && isArray(target)) {\n target.push(...source)\n }\n return target\n}\n\nexport function nextTick(fn: Function) {\n setTimeout(() => {\n fn()\n }, 0)\n}\n\nexport function cloneProperty<T>(\n properties: (keyof T)[],\n sourceElement: T,\n targetElement: T\n) {\n for (let i = 0; i < properties.length; i++) {\n const property = properties[i]\n const value = sourceElement[property]\n if (value !== undefined) {\n targetElement[property] = value\n } else {\n delete targetElement[property]\n }\n }\n}\n\nexport function deleteProperty<T>(sourceKeys: T[], deleteKeys: T[]) {\n if (!deleteKeys.length || !sourceKeys.length) return\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n if (deleteKeys.includes(sourceKeys[i])) {\n sourceKeys.splice(i, 1)\n }\n }\n}\n\nexport function pickObject<T>(object: T, pickKeys: (keyof T)[]): T {\n const newObject: T = <T>{}\n for (const key in object) {\n if (pickKeys.includes(key)) {\n newObject[key] = object[key]\n }\n }\n return newObject\n}\n\nexport function omitObject<T>(object: T, omitKeys: (keyof T)[]): T {\n const newObject: T = <T>{}\n for (const key in object) {\n if (!omitKeys.includes(key)) {\n newObject[key] = object[key]\n }\n }\n return newObject\n}\n\nexport function convertStringToBase64(input: string) {\n const encoder = new TextEncoder()\n const data = encoder.encode(input)\n const charArray = Array.from(data, byte => String.fromCharCode(byte))\n const base64 = window.btoa(charArray.join(''))\n return base64\n}\n\nexport function findScrollContainer(element: HTMLElement) {\n let parent = element.parentElement\n while (parent) {\n const style = window.getComputedStyle(parent)\n const overflowY = style.getPropertyValue('overflow-y')\n if (\n parent.scrollHeight > parent.clientHeight &&\n (overflowY === 'auto' || overflowY === 'scroll')\n ) {\n return parent\n }\n parent = parent.parentElement\n }\n return document.documentElement\n}\n\nexport function isArrayEqual(arr1: unknown[], arr2: unknown[]): boolean {\n if (arr1.length !== arr2.length) {\n return false\n }\n return !arr1.some(item => !arr2.includes(item))\n}\n\nexport function isObjectEqual(obj1: unknown, obj2: unknown): boolean {\n if (!isObject(obj1) || !isObject(obj2)) return false\n const obj1Keys = Object.keys(obj1)\n const obj2Keys = Object.keys(obj2)\n if (obj1Keys.length !== obj2Keys.length) {\n return false\n }\n return !obj1Keys.some(key => obj2[key] !== obj1[key])\n}\n\nexport function isRectIntersect(\n rect1: IElementFillRect,\n rect2: IElementFillRect\n): boolean {\n const rect1Left = rect1.x\n const rect1Right = rect1.x + rect1.width\n const rect1Top = rect1.y\n const rect1Bottom = rect1.y + rect1.height\n const rect2Left = rect2.x\n const rect2Right = rect2.x + rect2.width\n const rect2Top = rect2.y\n const rect2Bottom = rect2.y + rect2.height\n if (\n rect1Left > rect2Right ||\n rect1Right < rect2Left ||\n rect1Top > rect2Bottom ||\n rect1Bottom < rect2Top\n ) {\n return false\n }\n return true\n}\n\nexport function isNonValue(value: unknown): boolean {\n return value === undefined || value === null\n}\n\nexport function normalizeLineBreak(text: string): string {\n return text.replace(/\\r\\n|\\r/g, '\\n')\n}\n\nexport function indexOf(\n source: string,\n search: string | RegExp,\n fromIndex = 0\n): { index: number; length: number } {\n const start = Math.max(0, Math.floor(fromIndex))\n\n if (start >= source.length) {\n if (typeof search === 'string' && search === '') {\n return { index: source.length, length: 0 }\n }\n return { index: -1, length: 0 }\n }\n\n if (typeof search === 'string') {\n if (search === '') {\n return { index: start, length: 0 }\n }\n const index = source.indexOf(search, start)\n return index === -1\n ? { index: -1, length: 0 }\n : { index, length: search.length }\n }\n\n const originalFlags = search.flags\n const flags = originalFlags.includes('g')\n ? originalFlags\n : originalFlags + 'g'\n const re = new RegExp(search.source, flags)\n re.lastIndex = start\n const match = re.exec(source)\n if (!match) {\n return { index: -1, length: 0 }\n }\n return { index: match.index, length: match[0].length }\n}\n\nexport function scrollIntoView(container: HTMLElement, selected: HTMLElement) {\n if (!selected) {\n container.scrollTop = 0\n return\n }\n const offsetParents: HTMLElement[] = []\n let pointer = <HTMLElement>selected.offsetParent\n while (pointer && container !== pointer && container.contains(pointer)) {\n offsetParents.push(pointer)\n pointer = <HTMLElement>pointer.offsetParent\n }\n const top =\n selected.offsetTop +\n offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0)\n const bottom = top + selected.offsetHeight\n const viewRectTop = container.scrollTop\n const viewRectBottom = viewRectTop + container.clientHeight\n if (top < viewRectTop) {\n container.scrollTop = top\n } else if (bottom > viewRectBottom) {\n container.scrollTop = bottom - container.clientHeight\n }\n}\n","import { nextTick } from 'process'\nimport { EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { ElementType } from '../../dataset/enum/Element'\nimport { MoveDirection } from '../../dataset/enum/Observer'\nimport { DeepRequired } from '../../interface/Common'\nimport { ICursorOption } from '../../interface/Cursor'\nimport { IEditorOption } from '../../interface/Editor'\nimport { IElementMetrics, IElementPosition } from '../../interface/Element'\nimport { findScrollContainer } from '../../utils'\nimport { isMobile } from '../../utils/ua'\nimport { Draw } from '../draw/Draw'\nimport { CanvasEvent } from '../event/CanvasEvent'\nimport { Position } from '../position/Position'\nimport { CursorAgent } from './CursorAgent'\n\nexport type IDrawCursorOption = ICursorOption & {\n isShow?: boolean\n isBlink?: boolean\n isFocus?: boolean\n hitLineStartIndex?: number\n}\n\nexport interface IMoveCursorToVisibleOption {\n direction: MoveDirection\n cursorPosition: IElementPosition\n}\n\nexport class Cursor {\n private readonly ANIMATION_CLASS = `${EDITOR_PREFIX}-cursor--animation`\n\n private draw: Draw\n private container: HTMLDivElement\n private options: DeepRequired<IEditorOption>\n private position: Position\n private cursorDom: HTMLDivElement\n private cursorAgent: CursorAgent\n private blinkTimeout: number | null\n private hitLineStartIndex: number | undefined\n\n constructor(draw: Draw, canvasEvent: CanvasEvent) {\n this.draw = draw\n this.container = draw.getContainer()\n this.position = draw.getPosition()\n this.options = draw.getOptions()\n\n this.cursorDom = document.createElement('div')\n this.cursorDom.classList.add(`${EDITOR_PREFIX}-cursor`)\n this.container.append(this.cursorDom)\n this.cursorAgent = new CursorAgent(draw, canvasEvent)\n this.blinkTimeout = null\n }\n\n public getCursorDom(): HTMLDivElement {\n return this.cursorDom\n }\n\n public getAgentDom(): HTMLTextAreaElement {\n return this.cursorAgent.getAgentCursorDom()\n }\n\n public getAgentIsActive(): boolean {\n return this.getAgentDom() === document.activeElement\n }\n\n public getAgentDomValue(): string {\n return this.getAgentDom().value\n }\n\n public clearAgentDomValue() {\n this.getAgentDom().value = ''\n }\n\n public getHitLineStartIndex() {\n return this.hitLineStartIndex\n }\n\n private _blinkStart() {\n this.cursorDom.classList.add(this.ANIMATION_CLASS)\n }\n\n private _blinkStop() {\n this.cursorDom.classList.remove(this.ANIMATION_CLASS)\n }\n\n private _setBlinkTimeout() {\n this._clearBlinkTimeout()\n this.blinkTimeout = window.setTimeout(() => {\n this._blinkStart()\n }, 500)\n }\n\n private _clearBlinkTimeout() {\n if (this.blinkTimeout) {\n this._blinkStop()\n window.clearTimeout(this.blinkTimeout)\n this.blinkTimeout = null\n }\n }\n\n public focus() {\n if (isMobile && this.draw.isReadonly()) return\n const agentCursorDom = this.cursorAgent.getAgentCursorDom()\n if (document.activeElement !== agentCursorDom) {\n agentCursorDom.focus()\n agentCursorDom.setSelectionRange(0, 0)\n }\n }\n\n public drawCursor(payload?: IDrawCursorOption) {\n let cursorPosition = this.position.getCursorPosition()\n if (!cursorPosition) return\n const { scale, cursor } = this.options\n const {\n color,\n width,\n isShow = true,\n isBlink = true,\n isFocus = true,\n hitLineStartIndex\n } = { ...cursor, ...payload }\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n this.hitLineStartIndex = hitLineStartIndex\n if (hitLineStartIndex) {\n const positionList = this.position.getPositionList()\n cursorPosition = positionList[hitLineStartIndex]\n }\n const {\n metrics,\n coordinate: { leftTop, rightTop },\n ascent,\n pageNo\n } = cursorPosition\n const zoneManager = this.draw.getZone()\n const curPageNo = zoneManager.isMainActive()\n ? pageNo\n : this.draw.getPageNo()\n const preY = curPageNo * (height + pageGap)\n const agentCursorDom = this.cursorAgent.getAgentCursorDom()\n if (isFocus) {\n setTimeout(() => {\n this.focus()\n })\n }\n // If cursor is adjacent to an image, use default text metrics for height\n let effectiveMetrics: IElementMetrics = metrics\n const elementList = this.draw.getElementList()\n const curIndex = cursorPosition.index\n const curElement = elementList[curIndex]\n const nextElement = elementList[curIndex + 1]\n if (\n (curElement && curElement.type === ElementType.IMAGE) ||\n (nextElement && nextElement.type === ElementType.IMAGE)\n ) {\n const { defaultSize, defaultFont } = this.options\n const ctx = this.draw.getCtx()\n ctx.save()\n ctx.font = `${defaultSize * scale}px ${defaultFont}`\n const textMetrics = ctx.measureText('M')\n ctx.restore()\n const textHeight =\n textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent\n effectiveMetrics = {\n width: metrics.width,\n height: textHeight,\n boundingBoxAscent: textMetrics.actualBoundingBoxAscent,\n boundingBoxDescent: textMetrics.actualBoundingBoxDescent\n }\n }\n const descent =\n effectiveMetrics.boundingBoxDescent < 0 ? 0 : effectiveMetrics.boundingBoxDescent\n const cursorPadding = 2 * scale\n const cursorHeight = effectiveMetrics.height + descent + cursorPadding\n const cursorTop =\n leftTop[1] + ascent - effectiveMetrics.height + cursorPadding / 2 + preY\n const cursorLeft = hitLineStartIndex ? leftTop[0] : rightTop[0]\n agentCursorDom.style.left = `${cursorLeft}px`\n agentCursorDom.style.top = `${\n cursorTop\n }px`\n if (!isShow) {\n this.recoveryCursor()\n return\n }\n const oldTop = this.cursorDom.style.top\n const isReadonly = this.draw.isReadonly()\n this.cursorDom.style.width = `${width * scale}px`\n this.cursorDom.style.backgroundColor = color\n this.cursorDom.style.left = `${cursorLeft}px`\n this.cursorDom.style.top = `${cursorTop}px`\n this.cursorDom.style.display = isReadonly ? 'none' : 'block'\n this.cursorDom.style.height = `${cursorHeight}px`\n if (isBlink) {\n this._setBlinkTimeout()\n } else {\n this._clearBlinkTimeout()\n }\n nextTick(() => {\n this.moveCursorToVisible({\n cursorPosition: cursorPosition!,\n direction:\n parseInt(oldTop) > cursorTop ? MoveDirection.UP : MoveDirection.DOWN\n })\n })\n }\n\n public recoveryCursor() {\n this.cursorDom.style.display = 'none'\n this._clearBlinkTimeout()\n }\n\n public moveCursorToVisible(payload: IMoveCursorToVisibleOption) {\n const { cursorPosition, direction } = payload\n if (!cursorPosition || !direction) return\n const {\n pageNo,\n coordinate: { leftTop, leftBottom }\n } = cursorPosition\n const prePageY =\n pageNo * (this.draw.getHeight() + this.draw.getPageGap()) +\n this.container.getBoundingClientRect().top\n const isUp = direction === MoveDirection.UP\n const x = leftBottom[0]\n const y = isUp ? leftTop[1] + prePageY : leftBottom[1] + prePageY\n const scrollContainer = findScrollContainer(this.container)\n const rect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }\n if (scrollContainer === document.documentElement) {\n rect.right = window.innerWidth\n rect.bottom = window.innerHeight\n } else {\n const { left, right, top, bottom } =\n scrollContainer.getBoundingClientRect()\n rect.left = left\n rect.right = right\n rect.top = top\n rect.bottom = bottom\n }\n const { maskMargin } = this.options\n rect.top += maskMargin[0]\n rect.bottom -= maskMargin[2]\n if (\n !(x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom)\n ) {\n const { scrollLeft, scrollTop } = scrollContainer\n isUp\n ? scrollContainer.scroll(scrollLeft, scrollTop - (rect.top - y))\n : scrollContainer.scroll(scrollLeft, scrollTop + y - rect.bottom)\n }\n }\n}\n","import { DeepRequired } from '../../interface/Common'\nimport { IModeRule } from '../../interface/Editor'\n\nexport const EDITOR_COMPONENT = 'editor-component'\nexport const EDITOR_PREFIX = 'ce'\nexport const EDITOR_CLIPBOARD = `${EDITOR_PREFIX}-clipboard`\n\nexport const defaultModeRuleOption: Readonly<DeepRequired<IModeRule>> = {\n print: {\n imagePreviewerDisabled: false,\n backgroundDisabled: false\n },\n readonly: {\n imagePreviewerDisabled: false\n },\n form: {\n controlDeletableDisabled: false\n }\n}\n","export enum ElementType {\n TEXT = 'text',\n IMAGE = 'image',\n TABLE = 'table',\n HYPERLINK = 'hyperlink',\n SUPERSCRIPT = 'superscript',\n SUBSCRIPT = 'subscript',\n SEPARATOR = 'separator',\n PAGE_BREAK = 'pageBreak',\n CONTROL = 'control',\n AREA = 'area',\n CHECKBOX = 'checkbox',\n RADIO = 'radio',\n LATEX = 'latex',\n TAB = 'tab',\n DATE = 'date',\n BLOCK = 'block',\n TITLE = 'title',\n LIST = 'list',\n LABEL = 'label',\n COLUMN_BREAK = 'columnBreak'\n}\n","export const isApple =\n typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent)\n\nexport const isIOS =\n typeof navigator !== 'undefined' && /iPad|iPhone/.test(navigator.userAgent)\n\nexport const isMobile =\n /Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n\nexport const isFirefox =\n typeof navigator !== 'undefined' && /Firefox/.test(navigator.userAgent)\n","import { ElementType } from '../enum/Element'\nimport { IElement } from '../../interface/Element'\nimport { ITd } from '../../interface/table/Td'\nimport { IControlStyle } from '../../interface/Control'\n\nexport const EDITOR_ELEMENT_STYLE_ATTR: Array<keyof IElement> = [\n 'bold',\n 'color',\n 'highlight',\n 'font',\n 'size',\n 'italic',\n 'underline',\n 'strikeout',\n 'textDecoration'\n]\n\nexport const EDITOR_ROW_ATTR: Array<keyof IElement> = ['rowFlex', 'rowMargin']\n\nexport const EDITOR_ELEMENT_COPY_ATTR: Array<keyof IElement> = [\n 'type',\n 'font',\n 'size',\n 'bold',\n 'color',\n 'italic',\n 'highlight',\n 'underline',\n 'strikeout',\n 'rowFlex',\n 'url',\n 'areaId',\n 'hyperlinkId',\n 'dateId',\n 'dateFormat',\n 'groupIds',\n 'rowMargin',\n 'textDecoration'\n]\n\nexport const EDITOR_ELEMENT_ZIP_ATTR: Array<keyof IElement> = [\n 'type',\n 'font',\n 'size',\n 'bold',\n 'color',\n 'italic',\n 'highlight',\n 'underline',\n 'strikeout',\n 'rowFlex',\n 'rowMargin',\n 'dashArray',\n 'trList',\n 'tableToolDisabled',\n 'borderType',\n 'borderColor',\n 'translateX',\n 'width',\n 'height',\n 'url',\n 'colgroup',\n 'valueList',\n 'control',\n 'checkbox',\n 'radio',\n 'dateFormat',\n 'block',\n 'level',\n 'title',\n 'listType',\n 'listStyle',\n 'listWrap',\n 'listLevel',\n 'listPreset',\n 'groupIds',\n 'conceptId',\n 'imgDisplay',\n 'imgFloatPosition',\n 'imgToolDisabled',\n 'imgPreviewDisabled',\n 'textDecoration',\n 'extension',\n 'externalId',\n 'areaId',\n 'area',\n 'hide',\n 'label',\n 'labelId',\n 'lineWidth'\n]\n\nexport const TABLE_TD_ZIP_ATTR: Array<keyof ITd> = [\n 'conceptId',\n 'extension',\n 'externalId',\n 'verticalAlign',\n 'backgroundColor',\n 'borderTypes',\n 'slashTypes',\n 'disabled',\n 'deletable'\n]\n\nexport const TABLE_CONTEXT_ATTR: Array<keyof IElement> = [\n 'tdId',\n 'trId',\n 'tableId'\n]\n\nexport const TITLE_CONTEXT_ATTR: Array<keyof IElement> = [\n 'level',\n 'titleId',\n 'title'\n]\n\nexport const LIST_CONTEXT_ATTR: Array<keyof IElement> = [\n 'listId',\n 'listType',\n 'listStyle',\n 'listLevel',\n 'listPreset'\n]\n\nexport const CONTROL_CONTEXT_ATTR: Array<keyof IElement> = [\n 'control',\n 'controlId',\n 'controlComponent'\n]\n\nexport const CONTROL_STYLE_ATTR: Array<keyof IControlStyle> = [\n 'font',\n 'size',\n 'bold',\n 'highlight',\n 'italic',\n 'strikeout'\n]\n\nexport const AREA_CONTEXT_ATTR: Array<keyof IElement> = ['areaId', 'area']\n\nexport const EDITOR_ELEMENT_CONTEXT_ATTR: Array<keyof IElement> = [\n ...TABLE_CONTEXT_ATTR,\n ...TITLE_CONTEXT_ATTR,\n ...LIST_CONTEXT_ATTR,\n ...AREA_CONTEXT_ATTR\n]\n\nexport const TEXTLIKE_ELEMENT_TYPE: ElementType[] = [\n ElementType.TEXT,\n ElementType.HYPERLINK,\n ElementType.SUBSCRIPT,\n ElementType.SUPERSCRIPT,\n ElementType.CONTROL,\n ElementType.DATE\n]\n\nexport const IMAGE_ELEMENT_TYPE: ElementType[] = [\n ElementType.IMAGE,\n ElementType.LATEX\n]\n\nexport const BLOCK_ELEMENT_TYPE: ElementType[] = [\n ElementType.BLOCK,\n ElementType.PAGE_BREAK,\n ElementType.SEPARATOR,\n ElementType.TABLE\n]\n\nexport const INLINE_NODE_NAME: string[] = ['HR', 'TABLE', 'UL', 'OL']\n\nexport const VIRTUAL_ELEMENT_TYPE: ElementType[] = [\n ElementType.TITLE,\n ElementType.LIST\n]\n","import { IRowElement } from '../../../../../interface/Row'\n\nexport class IFrameBlock {\n public static readonly sandbox = ['allow-scripts', 'allow-same-origin']\n public static readonly allow = ['fullscreen']\n\n private element: IRowElement\n\n constructor(element: IRowElement) {\n this.element = element\n }\n\n private _defineIframeProperties(iframeWindow: Window) {\n Object.defineProperties(iframeWindow, {\n parent: {\n get: () => null\n },\n __POWERED_BY_CANVAS_EDITOR__: {\n get: () => true\n }\n })\n }\n\n public render(blockItemContainer: HTMLDivElement) {\n const { iframeBlock } = this.element.block || {}\n const iframe = document.createElement('iframe')\n iframe.setAttribute('data-id', this.element.id!)\n iframe.sandbox.add(...(iframeBlock?.sandbox || IFrameBlock.sandbox))\n iframe.setAttribute(\n 'allow',\n [iframeBlock?.allow || IFrameBlock.allow].join(' ')\n )\n iframe.style.border = 'none'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n if (iframeBlock?.src) {\n iframe.src = iframeBlock.src\n } else if (iframeBlock?.srcdoc) {\n iframe.srcdoc = iframeBlock.srcdoc\n }\n blockItemContainer.append(iframe)\n this._defineIframeProperties(iframe.contentWindow!)\n }\n}\n","import { EDITOR_PREFIX } from '../../../dataset/constant/Editor'\nimport { ImageDisplay } from '../../../dataset/enum/Common'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement } from '../../../interface/Element'\nimport { convertStringToBase64 } from '../../../utils'\nimport { Draw } from '../Draw'\n\nexport class ImageParticle {\n private draw: Draw\n protected options: Required<IEditorOption>\n protected imageCache: Map<string, HTMLImageElement>\n private container: HTMLDivElement\n private floatImageContainer: HTMLDivElement | null\n private floatImage: HTMLImageElement | null\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.container = draw.getContainer()\n this.imageCache = new Map()\n this.floatImageContainer = null\n this.floatImage = null\n }\n\n public getOriginalMainImageList(): IElement[] {\n const imageList: IElement[] = []\n const getImageList = (elementList: IElement[]) => {\n for (const element of elementList) {\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n getImageList(td.value)\n }\n }\n } else if (element.type === ElementType.IMAGE) {\n imageList.push(element)\n }\n }\n }\n getImageList(this.draw.getOriginalMainElementList())\n return imageList\n }\n\n public createFloatImage(element: IElement) {\n const { scale } = this.options\n let floatImageContainer = this.floatImageContainer\n let floatImage = this.floatImage\n if (!floatImageContainer) {\n floatImageContainer = document.createElement('div')\n floatImageContainer.classList.add(`${EDITOR_PREFIX}-float-image`)\n this.container.append(floatImageContainer)\n this.floatImageContainer = floatImageContainer\n }\n if (!floatImage) {\n floatImage = document.createElement('img')\n floatImageContainer.append(floatImage)\n this.floatImage = floatImage\n }\n floatImageContainer.style.display = 'none'\n floatImage.style.width = `${element.width! * scale}px`\n floatImage.style.height = `${element.height! * scale}px`\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const preY = this.draw.getPageNo() * (height + pageGap)\n const imgFloatPosition = element.imgFloatPosition!\n floatImageContainer.style.left = `${imgFloatPosition.x * scale}px`\n floatImageContainer.style.top = `${preY + imgFloatPosition.y * scale}px`\n floatImage.src = element.value\n }\n\n public dragFloatImage(movementX: number, movementY: number) {\n if (!this.floatImageContainer) return\n this.floatImageContainer.style.display = 'block'\n const x = parseFloat(this.floatImageContainer.style.left) + movementX\n const y = parseFloat(this.floatImageContainer.style.top) + movementY\n this.floatImageContainer.style.left = `${x}px`\n this.floatImageContainer.style.top = `${y}px`\n }\n\n public destroyFloatImage() {\n if (this.floatImageContainer) {\n this.floatImageContainer.style.display = 'none'\n }\n }\n\n protected addImageObserver(promise: Promise<unknown>) {\n this.draw.getImageObserver().add(promise)\n }\n\n protected getFallbackImage(width: number, height: number): HTMLImageElement {\n const tileSize = 8\n const x = (width - Math.ceil(width / tileSize) * tileSize) / 2\n const y = (height - Math.ceil(height / tileSize) * tileSize) / 2\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\">\n <rect width=\"${width}\" height=\"${height}\" fill=\"url(#mosaic)\" />\n <defs>\n <pattern id=\"mosaic\" x=\"${x}\" y=\"${y}\" width=\"${\n tileSize * 2\n }\" height=\"${tileSize * 2}\" patternUnits=\"userSpaceOnUse\">\n <rect width=\"${tileSize}\" height=\"${tileSize}\" fill=\"#cccccc\" />\n <rect width=\"${tileSize}\" height=\"${tileSize}\" fill=\"#cccccc\" transform=\"translate(${tileSize}, ${tileSize})\" />\n </pattern>\n </defs>\n </svg>`\n const fallbackImage = new Image()\n fallbackImage.src = `data:image/svg+xml;base64,${convertStringToBase64(\n svg\n )}`\n return fallbackImage\n }\n\n private _drawImageWithCrop(\n ctx: CanvasRenderingContext2D,\n img: HTMLImageElement,\n element: IElement,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n if (element.imgCrop) {\n const {\n x: cropX,\n y: cropY,\n width: cropWidth,\n height: cropHeight\n } = element.imgCrop\n ctx.drawImage(\n img,\n cropX,\n cropY,\n cropWidth,\n cropHeight,\n x,\n y,\n width,\n height\n )\n } else {\n ctx.drawImage(img, x, y, width, height)\n }\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n x: number,\n y: number\n ) {\n const { scale } = this.options\n const width = element.width! * scale\n const height = element.height! * scale\n if (this.imageCache.has(element.value)) {\n const img = this.imageCache.get(element.value)!\n this._drawImageWithCrop(ctx, img, element, x, y, width, height)\n } else {\n const cacheRenderCount = this.draw.getRenderCount()\n const imageLoadPromise = new Promise((resolve, reject) => {\n const img = new Image()\n img.setAttribute('crossOrigin', 'Anonymous')\n img.src = element.value\n img.onload = () => {\n this.imageCache.set(element.value, img)\n resolve(element)\n if (cacheRenderCount !== this.draw.getRenderCount()) return\n if (element.imgDisplay === ImageDisplay.FLOAT_BOTTOM) {\n this.draw.render({\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n })\n } else {\n this._drawImageWithCrop(ctx, img, element, x, y, width, height)\n }\n }\n img.onerror = error => {\n const fallbackImage = this.getFallbackImage(width, height)\n fallbackImage.onload = () => {\n this._drawImageWithCrop(\n ctx,\n fallbackImage,\n element,\n x,\n y,\n width,\n height\n )\n this.imageCache.set(element.value, fallbackImage)\n }\n reject(error)\n }\n })\n this.addImageObserver(imageLoadPromise)\n }\n }\n}\n","interface HersheyEntry {\n w: number\n xmin: number\n xmax: number\n ymin: number\n ymax: number\n polylines: Array<Array<Array<number>>>\n}\n\nconst ordR = 'R'.charCodeAt(0)\n\nexport function HERSHEY(i: number): HersheyEntry {\n if (data[i] == null) {\n compile(i)\n }\n return data[i]\n}\n\nfunction compile(i: number): void {\n const entry: string = raw[i]\n if (entry == null) {\n return\n }\n const bound: string = entry.substring(3, 5)\n const xmin: number = 1 * bound.charCodeAt(0) - ordR\n const xmax: number = 1 * bound.charCodeAt(1) - ordR\n const content: string = entry.substring(5)\n\n const polylines: Array<Array<Array<number>>> = [[]]\n let ymin = Infinity\n let ymax = -Infinity\n let zmin = Infinity\n let zmax = -Infinity\n let j = 0\n while (j < content.length) {\n const digit: string = content.substring(j, j + 2)\n if (digit == ' R') {\n polylines.push([])\n } else {\n const x: number = digit.charCodeAt(0) - ordR - xmin\n const y: number = digit.charCodeAt(1) - ordR\n ymin = Math.min(y, ymin)\n ymax = Math.max(y, ymax)\n zmin = Math.min(x, zmin)\n zmax = Math.max(x, zmax)\n polylines[polylines.length - 1].push([x, y])\n }\n j += 2\n }\n data[i] = {\n w: xmax - xmin,\n xmin: zmin,\n xmax: zmax,\n ymin: ymin,\n ymax: ymax,\n polylines: polylines\n }\n}\nconst data: Record<number, HersheyEntry> = {}\n\nconst raw: Record<number, string> = {\n 1: ' 9MWRMNV RRMVV RPSTS',\n 2: ' 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV',\n 3: ' 11MXVNTMRMPNOPOSPURVTVVU',\n 4: ' 12MWOMOV ROMRMTNUPUSTURVOV',\n 5: ' 12MWOMOV ROMUM ROQSQ ROVUV',\n 6: ' 9MVOMOV ROMUM ROQSQ',\n 7: ' 15MXVNTMRMPNOPOSPURVTVVUVR RSRVR',\n 8: ' 9MWOMOV RUMUV ROQUQ',\n 9: ' 3PTRMRV',\n 10: ' 7NUSMSTRVPVOTOS',\n 11: ' 9MWOMOV RUMOS RQQUV',\n 12: ' 6MVOMOV ROVUV',\n 13: ' 12LXNMNV RNMRV RVMRV RVMVV',\n 14: ' 9MWOMOV ROMUV RUMUV',\n 15: ' 14MXRMPNOPOSPURVSVUUVSVPUNSMRM',\n 16: ' 10MWOMOV ROMSMUNUQSROR',\n 17: ' 17MXRMPNOPOSPURVSVUUVSVPUNSMRM RSTVW',\n 18: ' 13MWOMOV ROMSMUNUQSROR RRRUV',\n 19: ' 13MWUNSMQMONOOPPTRUSUUSVQVOU',\n 20: ' 6MWRMRV RNMVM',\n 21: ' 9MXOMOSPURVSVUUVSVM',\n 22: ' 6MWNMRV RVMRV',\n 23: ' 12LXNMPV RRMPV RRMTV RVMTV',\n 24: ' 6MWOMUV RUMOV',\n 25: ' 7MWNMRQRV RVMRQ',\n 26: ' 9MWUMOV ROMUM ROVUV',\n 27: ' 9MWRMNV RRMVV RPSTS',\n 28: ' 16MWOMOV ROMSMUNUPSQ ROQSQURUUSVOV',\n 29: ' 6MVOMOV ROMUM',\n 30: ' 9MWRMNV RRMVV RNVVV',\n 31: ' 12MWOMOV ROMUM ROQSQ ROVUV',\n 32: ' 9MWUMOV ROMUM ROVUV',\n 33: ' 9MWOMOV RUMUV ROQUQ',\n 34: ' 20MXRMPNOPOSPURVSVUUVSVPUNSMRM RQQTR RTQQR',\n 35: ' 3PTRMRV',\n 36: ' 9MWOMOV RUMOS RQQUV',\n 37: ' 6MWRMNV RRMVV',\n 38: ' 12LXNMNV RNMRV RVMRV RVMVV',\n 39: ' 9MWOMOV ROMUV RUMUV',\n 40: ' 12MWOMUM RPQTR RTQPR ROVUV',\n 41: ' 14MXRMPNOPOSPURVSVUUVSVPUNSMRM',\n 42: ' 9MWOMOV RUMUV ROMUM',\n 43: ' 10MWOMOV ROMSMUNUQSROR',\n 44: ' 10MWOMRQOV ROMUM ROVUV',\n 45: ' 6MWRMRV RNMVM',\n 46: ' 15MWNONNOMPMQNRPRV RVOVNUMTMSNRP',\n 47: ' 13LXRMRV RPONPNSPTTTVSVPTOPO',\n 48: ' 6MWOMUV RUMOV',\n 49: ' 12LXRMRV RNOOPOSQTSTUSUPVO',\n 50: ' 13MXOVQVOROPPNRMSMUNVPVRTVVV',\n 200: ' 12MWRMPNOPOSPURVTUUSUPTNRM',\n 201: ' 4MWPORMRV',\n 202: ' 9MWONQMSMUNUPTROVUV',\n 203: ' 15MWONQMSMUNUPSQ RRQSQURUUSVQVOU',\n 204: ' 7MWSMSV RSMNSVS',\n 205: ' 14MWPMOQQPRPTQUSTURVQVOU RPMTM',\n 206: ' 14MWTMRMPNOPOSPURVTUUSTQRPPQOS',\n 207: ' 6MWUMQV ROMUM',\n 208: ' 19MWQMONOPQQSQUPUNSMQM RQQOROUQVSVUUURSQ',\n 209: ' 14MWUPTRRSPROPPNRMTNUPUSTURVPV',\n 210: ' 6PURURVSVSURU',\n 211: ' 7PUSVRVRUSUSWRY',\n 212: ' 12PURPRQSQSPRP RRURVSVSURU',\n 213: ' 13PURPRQSQSPRP RSVRVRUSUSWRY',\n 214: ' 12PURMRR RSMSR RRURVSVSURU',\n 215: ' 17NWPNRMSMUNUPRQRRSRSQUP RRURVSVSURU',\n 216: ' 3PTRMRQ',\n 217: ' 6NVPMPQ RTMTQ',\n 218: ' 10NVQMPNPPQQSQTPTNSMQM',\n 219: ' 16MWUNSMQMONOPQQTRUSUUSVQVOU RRLRW',\n 220: ' 3MWVLNW',\n 221: ' 7OVTLRNQPQSRUTW',\n 222: ' 7NUPLRNSPSSRUPW',\n 223: ' 3PTRLRW',\n 224: ' 3LXNRVR',\n 225: ' 6LXRNRV RNRVR',\n 226: ' 6LXNPVP RNTVT',\n 227: ' 6MWOOUU RUOOU',\n 228: ' 9MWRORU ROPUT RUPOT',\n 229: ' 6PURQRRSRSQRQ',\n 230: ' 7PUSMRORQSQSPRP',\n 231: ' 7PUSNRNRMSMSORQ',\n 232: ' 7LXSOVRSU RNRVR',\n 233: ' 12MXRLPW RULSW ROPVP ROSVS',\n 234: ' 21LXVRURTSSURVOVNUNSORRQSPSNRMPMONOPQSSUUVVV',\n 235: ' 20LXNNOQOSNV RVNUQUSVV RNNQOSOVN RNVQUSUVV',\n 501: ' 9I[RFJ[ RRFZ[ RMTWT',\n 502: ' 24G\\\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[',\n 503: ' 19H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV',\n 504: ' 16G\\\\KFK[ RKFRFUGWIXKYNYSXVWXUZR[K[',\n 505: ' 12H[LFL[ RLFYF RLPTP RL[Y[',\n 506: ' 9HZLFL[ RLFYF RLPTP',\n 507: ' 23H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZS RUSZS',\n 508: ' 9G]KFK[ RYFY[ RKPYP',\n 509: ' 3NVRFR[',\n 510: ' 11JZVFVVUYTZR[P[NZMYLVLT',\n 511: ' 9G\\\\KFK[ RYFKT RPOY[',\n 512: ' 6HYLFL[ RL[X[',\n 513: ' 12F^JFJ[ RJFR[ RZFR[ RZFZ[',\n 514: ' 9G]KFK[ RKFY[ RYFY[',\n 515: ' 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF',\n 516: ' 14G\\\\KFK[ RKFTFWGXHYJYMXOWPTQKQ',\n 517: ' 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RSWY]',\n 518: ' 17G\\\\KFK[ RKFTFWGXHYJYLXNWOTPKP RRPY[',\n 519: ' 21H\\\\YIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX',\n 520: ' 6JZRFR[ RKFYF',\n 521: ' 11G]KFKULXNZQ[S[VZXXYUYF',\n 522: ' 6I[JFR[ RZFR[',\n 523: ' 12F^HFM[ RRFM[ RRFW[ R\\\\FW[',\n 524: ' 6H\\\\KFY[ RYFK[',\n 525: ' 7I[JFRPR[ RZFRP',\n 526: ' 9H\\\\YFK[ RKFYF RK[Y[',\n 527: ' 9I[RFJ[ RRFZ[ RMTWT',\n 528: ' 24G\\\\KFK[ RKFTFWGXHYJYLXNWOTP RKPTPWQXRYTYWXYWZT[K[',\n 529: ' 6HYLFL[ RLFXF',\n 530: ' 9I[RFJ[ RRFZ[ RJ[Z[',\n 531: ' 12H[LFL[ RLFYF RLPTP RL[Y[',\n 532: ' 9H\\\\YFK[ RKFYF RK[Y[',\n 533: ' 9G]KFK[ RYFY[ RKPYP',\n 534: ' 25G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF ROPUP',\n 535: ' 3NVRFR[',\n 536: ' 9G\\\\KFK[ RYFKT RPOY[',\n 537: ' 6I[RFJ[ RRFZ[',\n 538: ' 12F^JFJ[ RJFR[ RZFR[ RZFZ[',\n 539: ' 9G]KFK[ RKFY[ RYFY[',\n 540: ' 9I[KFYF ROPUP RK[Y[',\n 541: ' 22G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF',\n 542: ' 9G]KFK[ RYFY[ RKFYF',\n 543: ' 14G\\\\KFK[ RKFTFWGXHYJYMXOWPTQKQ',\n 544: ' 10I[KFRPK[ RKFYF RK[Y[',\n 545: ' 6JZRFR[ RKFYF',\n 546: ' 19I[KKKILGMFOFPGQIRMR[ RYKYIXGWFUFTGSIRM',\n 547: ' 21H\\\\RFR[ RPKMLLMKOKRLTMUPVTVWUXTYRYOXMWLTKPK',\n 548: ' 6H\\\\KFY[ RK[YF',\n 549: ' 18G]RFR[ RILJLKMLQMSNTQUSUVTWSXQYMZL[L',\n 550: ' 17H\\\\K[O[LTKPKLLINGQFSFVGXIYLYPXTU[Y[',\n 551: ' 20G[G[IZLWOSSLVFV[UXSUQSNQLQKRKTLVNXQZT[Y[',\n 552: ' 41F]SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFXFZG[I[KZMYNWOTP RSPTPWQXRYTYWXYWZU[R[PZOX',\n 553: ' 24H\\\\TLTMUNWNYMZKZIYGWFTFQGOIMLLNKRKVLYMZO[Q[TZVXWV',\n 554: ' 35G^TFRGQIPMOSNVMXKZI[G[FZFXGWIWKXMZP[S[VZXXZT[O[KZHYGWFTFRHRJSMUPWRZT\\\\U',\n 555: ' 28H\\\\VJVKWLYLZKZIYGVFRFOGNINLONPOSPPPMQLRKTKWLYMZP[S[VZXXYV',\n 556: ' 28H\\\\RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV RQPZP',\n 557: ' 29G^G[IZMVPQQNRJRGQFPFOGNINLONQOUOXNYMZKZQYVXXVZS[O[LZJXIVIT',\n 558: ' 38F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX RMRVOXN[L]J^H^G]F\\\\FZHXLVRUWUZV[W[YZZY\\\\V',\n 559: ' 25IZWVUTSQROQLQIRGSFUFVGWIWLVQTVSXQZO[M[KZJXJVKUMUOV',\n 560: ' 25JYT^R[PVOPOJPGRFTFUGVJVMURR[PaOdNfLgKfKdLaN^P\\\\SZWX',\n 561: ' 39F^MMKLJJJIKGMFNFPGQIQKPONULYJ[H[GZGX R^I^G]F\\\\FZGXIVLTNROPO RROSQSXTZU[V[XZYY[V',\n 562: ' 29I\\\\MRORSQVOXMYKYHXFVFUGTISNRSQVPXNZL[J[IZIXJWLWNXQZT[V[YZ[X',\n 563: ' 45@aEMCLBJBICGEFFFHGIIIKHPGTE[ RGTJLLHMGOFPFRGSISKRPQTO[ RQTTLVHWGYFZF\\\\G]I]K\\\\PZWZZ[[\\\\[^Z_YaV',\n 564: ' 32E]JMHLGJGIHGJFKFMGNINKMPLTJ[ RLTOLQHRGTFVFXGYIYKXPVWVZW[X[ZZ[Y]V',\n 565: ' 29H]TFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGVFTFRHRKSNUQWSZU\\\\V',\n 566: ' 31F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFZF\\\\G]H^J^M]O\\\\PZQWQUPTO',\n 567: ' 32H^ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[YZ[X',\n 568: ' 38F_SHTITLSPRSQUOXMZK[J[IZIWJRKOLMNJPHRGUFYF[G\\\\H]J]M\\\\O[PYQVQSPTQUSUXVZX[ZZ[Y]V',\n 569: ' 28H\\\\H[JZLXOTQQSMTJTGSFRFQGPIPKQMSOVQXSYUYWXYWZT[P[MZKXJVJT',\n 570: ' 25H[RLPLNKMINGQFTFXG[G]F RXGVNTTRXPZN[L[JZIXIVJULUNV',\n 571: ' 33E]JMHLGJGIHGJFKFMGNINKMOLRKVKXLZN[P[RZSYUUXMZF RXMWQVWVZW[X[ZZ[Y]V',\n 572: ' 32F]KMILHJHIIGKFLFNGOIOKNOMRLVLYM[O[QZTWVTXPYMZIZGYFXFWGVIVKWNYP[Q',\n 573: ' 25C_HMFLEJEIFGHFIFKGLILLK[ RUFK[ RUFS[ RaF_G\\\\JYNVTS[',\n 574: ' 36F^NLLLKKKILGNFPFRGSISLQUQXRZT[V[XZYXYVXUVU R]I]G\\\\FZFXGVITLPUNXLZJ[H[GZGX',\n 575: ' 38F]KMILHJHIIGKFLFNGOIOKNOMRLVLXMZN[P[RZTXVUWSYM R[FYMVWT]RbPfNgMfMdNaP^S[VY[V',\n 576: ' 40H]ULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWTTWPZN[K[JZJXKWNWPXQYR[R^QaPcNfLgKfKdLaN^Q[TYZV',\n 583: ' 9I[JFR[ RZFR[ RJFZF',\n 601: ' 18I\\\\XMX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 602: ' 18H[LFL[ RLPNNPMSMUNWPXSXUWXUZS[P[NZLX',\n 603: ' 15I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 604: ' 18I\\\\XFX[ RXPVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 605: ' 18I[LSXSXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 606: ' 9MYWFUFSGRJR[ ROMVM',\n 607: ' 23I\\\\XMX]W`VaTbQbOa RXPVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 608: ' 11I\\\\MFM[ RMQPNRMUMWNXQX[',\n 609: ' 9NVQFRGSFREQF RRMR[',\n 610: ' 12MWRFSGTFSERF RSMS^RaPbNb',\n 611: ' 9IZMFM[ RWMMW RQSX[',\n 612: ' 3NVRFR[',\n 613: ' 19CaGMG[ RGQJNLMOMQNRQR[ RRQUNWMZM\\\\N]Q][',\n 614: ' 11I\\\\MMM[ RMQPNRMUMWNXQX[',\n 615: ' 18I\\\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM',\n 616: ' 18H[LMLb RLPNNPMSMUNWPXSXUWXUZS[P[NZLX',\n 617: ' 18I\\\\XMXb RXPVNTMQMONMPLSLUMXOZQ[T[VZXX',\n 618: ' 9KXOMO[ ROSPPRNTMWM',\n 619: ' 18J[XPWNTMQMNNMPNRPSUTWUXWXXWZT[Q[NZMX',\n 620: ' 9MYRFRWSZU[W[ ROMVM',\n 621: ' 11I\\\\MMMWNZP[S[UZXW RXMX[',\n 622: ' 6JZLMR[ RXMR[',\n 623: ' 12G]JMN[ RRMN[ RRMV[ RZMV[',\n 624: ' 6J[MMX[ RXMM[',\n 625: ' 10JZLMR[ RXMR[P_NaLbKb',\n 626: ' 9J[XMM[ RMMXM RM[X[',\n 627: ' 24H]QMONMPLRKUKXLZN[P[RZUWWTYPZM RQMSMTNUPWXXZY[Z[',\n 628: ' 31I\\\\UFSGQIOMNPMTLZKb RUFWFYHYKXMWNUORO RROTPVRWTWWVYUZS[Q[OZNYMV',\n 629: ' 17I\\\\JPLNNMOMQNROSRSVR[ RZMYPXRR[P_Ob',\n 630: ' 24I[TMQMONMPLSLVMYNZP[R[TZVXWUWRVOTMRKQIQGRFTFVGXI',\n 631: ' 19JZWOVNTMQMONOPPRSS RSSOTMVMXNZP[S[UZWX',\n 632: ' 23JYTFRGQHQIRJUKXK RXKTMQONRMUMWNYP[S]T_TaSbQbP`',\n 633: ' 19H\\\\IQJOLMNMONOPNTL[ RNTPPRNTMVMXOXRWWTb',\n 634: ' 27G\\\\HQIOKMMMNNNPMUMXNZO[Q[SZUWVUWRXMXJWGUFSFRHRJSMUPWRZT',\n 635: ' 9LWRMPTOXOZP[R[TYUW',\n 636: ' 19I[OMK[ RYNXMWMUNQROSNS RNSPTQUSZT[U[VZ',\n 637: ' 9JZKFMFOGPHX[ RRML[',\n 638: ' 21H]OMIb RNQMVMYO[Q[SZUXWT RYMWTVXVZW[Y[[Y\\\\W',\n 639: ' 14I[LMOMNSMXL[ RYMXPWRUURXOZL[',\n 640: ' 29JZTFRGQHQIRJUKXK RUKRLPMOOOQQSTTVT RTTPUNVMXMZO\\\\S^T_TaRbPb',\n 641: ' 18J[RMPNNPMSMVNYOZQ[S[UZWXXUXRWOVNTMRM',\n 642: ' 13G]PML[ RUMVSWXX[ RIPKNNM[M',\n 643: ' 19I[MSMVNYOZQ[S[UZWXXUXRWOVNTMRMPNNPMSIb',\n 644: ' 18I][MQMONMPLSLVMYNZP[R[TZVXWUWRVOUNSM',\n 645: ' 8H\\\\SMP[ RJPLNOMZM',\n 646: ' 16H\\\\IQJOLMNMONOPMVMYO[Q[TZVXXTYPYM',\n 647: ' 21G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb',\n 648: ' 14I[KMMMOOU`WbYb RZMYOWRM]K`Jb',\n 649: ' 20F]VFNb RGQHOJMLMMNMPLULXMZO[Q[TZVXXUZP[M',\n 650: ' 23F]NMLNJQITIWJZK[M[OZQW RRSQWRZS[U[WZYWZTZQYNXM',\n 651: ' 22L\\\\UUTSRRPRNSMTLVLXMZO[Q[SZTXVRUWUZV[W[YZZY\\\\V',\n 652: ' 23M[MVOSRNSLTITGSFQGPIOMNTNZO[P[RZTXUUURVVWWYW[V',\n 653: ' 14MXTTTSSRQROSNTMVMXNZP[S[VYXV',\n 654: ' 24L\\\\UUTSRRPRNSMTLVLXMZO[Q[SZTXZF RVRUWUZV[W[YZZY\\\\V',\n 655: ' 17NXOYQXRWSUSSRRQROSNUNXOZQ[S[UZVYXV',\n 656: ' 24OWOVSQUNVLWIWGVFTGSIQQNZKaJdJfKgMfNcOZP[R[TZUYWV',\n 657: ' 28L[UUTSRRPRNSMTLVLXMZO[Q[SZTY RVRTYPdOfMgLfLdMaP^S\\\\U[XY[V',\n 658: ' 29M\\\\MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUUXUZV[W[YZZY\\\\V',\n 659: ' 16PWSMSNTNTMSM RPVRRPXPZQ[R[TZUYWV',\n 660: ' 20PWSMSNTNTMSM RPVRRLdKfIgHfHdIaL^O\\\\Q[TYWV',\n 661: ' 33M[MVOSRNSLTITGSFQGPIOMNSM[ RM[NXOVQSSRURVSVUTVQV RQVSWTZU[V[XZYY[V',\n 662: ' 18OWOVQSTNULVIVGUFSGRIQMPTPZQ[R[TZUYWV',\n 663: ' 33E^EVGSIRJSJTIXH[ RIXJVLSNRPRQSQTPXO[ RPXQVSSURWRXSXUWXWZX[Y[[Z\\\\Y^V',\n 664: ' 23J\\\\JVLSNROSOTNXM[ RNXOVQSSRURVSVUUXUZV[W[YZZY\\\\V',\n 665: ' 23LZRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXWXYWZV',\n 666: ' 24KZKVMSNQMUGg RMUNSPRRRTSUUUWTYSZQ[ RMZO[R[UZWYZV',\n 667: ' 27L[UUTSRRPRNSMTLVLXMZO[Q[SZ RVRUUSZPaOdOfPgRfScS\\\\U[XY[V',\n 668: ' 15MZMVOSPQPSSSTTTVSYSZT[U[WZXYZV',\n 669: ' 16NYNVPSQQQSSVTXTZR[ RNZP[T[VZWYYV',\n 670: ' 16OXOVQSSO RVFPXPZQ[S[UZVYXV RPNWN',\n 671: ' 19L[LVNRLXLZM[O[QZSXUU RVRTXTZU[V[XZYY[V',\n 672: ' 17L[LVNRMWMZN[O[RZTXUUUR RURVVWWYW[V',\n 673: ' 25I^LRJTIWIYJ[L[NZPX RRRPXPZQ[S[UZWXXUXR RXRYVZW\\\\W^V',\n 674: ' 20JZJVLSNRPRQSQZR[U[XYZV RWSVRTRSSOZN[L[KZ',\n 675: ' 23L[LVNRLXLZM[O[QZSXUU RVRPdOfMgLfLdMaP^S\\\\U[XY[V',\n 676: ' 23LZLVNSPRRRTTTVSXQZN[P\\\\Q^QaPdOfMgLfLdMaP^S\\\\WYZV',\n 677: ' 22J\\\\K[NZQXSVUSWOXKXIWGUFSGRHQJPOPTQXRZT[V[XZYY',\n 683: ' 26I[WUWRVOUNSMQMONMPLSLVMYNZP[R[TZVXWUXPXKWHVGTFRFPGNI',\n 684: ' 16JZWNUMRMPNNPMSMVNYOZQ[T[VZ RMTUT',\n 685: ' 23J[TFRGPJOLNOMTMXNZO[Q[SZUWVUWRXMXIWGVFTF RNPWP',\n 686: ' 21H\\\\VFNb RQMNNLPKSKVLXNZQ[S[VZXXYUYRXPVNSMQM',\n 687: ' 16I[XOWNTMQMNNMOLQLSMUOWSZT\\\\T^S_Q_',\n 700: ' 18H\\\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF',\n 701: ' 5H\\\\NJPISFS[',\n 702: ' 15H\\\\LKLJMHNGPFTFVGWHXJXLWNUQK[Y[',\n 703: ' 16H\\\\MFXFRNUNWOXPYSYUXXVZS[P[MZLYKW',\n 704: ' 7H\\\\UFKTZT RUFU[',\n 705: ' 18H\\\\WFMFLOMNPMSMVNXPYSYUXXVZS[P[MZLYKW',\n 706: ' 24H\\\\XIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQLT',\n 707: ' 6H\\\\YFO[ RKFYF',\n 708: ' 30H\\\\PFMGLILKMMONSOVPXRYTYWXYWZT[P[MZLYKWKTLRNPQOUNWMXKXIWGTFPF',\n 709: ' 24H\\\\XMWPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLX',\n 710: ' 6MWRYQZR[SZRY',\n 711: ' 9MWSZR[QZRYSZS\\\\R^Q_',\n 712: ' 12MWRMQNROSNRM RRYQZR[SZRY',\n 713: ' 15MWRMQNROSNRM RSZR[QZRYSZS\\\\R^Q_',\n 714: ' 9MWRFRT RRYQZR[SZRY',\n 715: ' 21I[LKLJMHNGPFTFVGWHXJXLWNVORQRT RRYQZR[SZRY',\n 716: ' 3NVRFRM',\n 717: ' 6JZNFNM RVFVM',\n 718: ' 14KYQFOGNINKOMQNSNUMVKVIUGSFQF',\n 719: ' 27H\\\\PBP_ RTBT_ RYIWGTFPFMGKIKKLMMNOOUQWRXSYUYXWZT[P[MZKX',\n 720: ' 3G][BIb',\n 721: ' 11KYVBTDRGPKOPOTPYR]T`Vb',\n 722: ' 11KYNBPDRGTKUPUTTYR]P`Nb',\n 723: ' 3NVRBRb',\n 724: ' 3E_IR[R',\n 725: ' 6E_RIR[ RIR[R',\n 726: ' 6E_IO[O RIU[U',\n 727: ' 6G]KKYY RYKKY',\n 728: ' 9JZRLRX RMOWU RWOMU',\n 729: ' 6MWRQQRRSSRRQ',\n 730: ' 8MWSFRGQIQKRLSKRJ',\n 731: ' 8MWRHQGRFSGSIRKQL',\n 732: ' 9E_UMXP[RXTUW RIR[R',\n 733: ' 12H]SBLb RYBRb RLOZO RKUYU',\n 734: ' 35E_\\\\O\\\\N[MZMYNXPVUTXRZP[L[JZIYHWHUISJRQNRMSKSIRGPFNGMIMKNNPQUXWZY[[[\\\\Z\\\\Y',\n 735: ' 28G]IIJKKOKUJYI[ R[IZKYOYUZY[[ RIIKJOKUKYJ[I RI[KZOYUYYZ[[',\n 737: ' 6KYOBO[ RUBU[',\n 738: ' 6F^RBR[ RI[[[',\n 739: ' 4F^[BI[[[',\n 740: ' 18E_RIQJRKSJRI RIYHZI[JZIY R[YZZ[[\\\\Z[Y',\n 741: ' 33F^RHNLKPJSJUKWMXOXQWRU RRHVLYPZSZUYWWXUXSWRU RRUQYP\\\\ RRUSYT\\\\ RP\\\\T\\\\',\n 742: ' 26F^RNQKPINHMHKIJKJOKRLTNWR\\\\ RRNSKTIVHWHYIZKZOYRXTVWR\\\\',\n 743: ' 20F^RGPJLOIR RRGTJXO[R RIRLUPZR] R[RXUTZR]',\n 744: ' 48F^RTTWVXXXZW[U[SZQXPVPSQ RSQUOVMVKUISHQHOINKNMOOQQ RQQNPLPJQISIUJWLXNXPWRT RRTQYP\\\\ RRTSYT\\\\ RP\\\\T\\\\',\n 745: ' 55F^RRR[Q\\\\ RRVQ\\\\ RRIQHOHNINKONRR RRISHUHVIVKUNRR RRRNOLNJNIOIQJR RRRVOXNZN[O[QZR RRRNULVJVIUISJR RRRVUXVZV[U[SZR',\n 746: ' 55F^ISJSLTMVMXLZ RISIRJQLQMRNTNWMYLZ RRGPIOLOOQUQXPZR\\\\ RRGTIULUOSUSXTZR\\\\ R[S[RZQXQWRVTVWWYXZ R[SZSXTWVWXXZ RKVYV',\n 750: ' 18PSSRRSQSPRPQQPRPSQSSRUQV RQQQRRRRQQQ',\n 751: ' 16PTQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ',\n 752: ' 9NVPOTU RTOPU RNRVR',\n 753: ' 28MWRKQMOPMR RRKSMUPWR RRMOQ RRMUQ RROPQ RROTQ RQQSQ RMRWR',\n 754: ' 26MWMRMQNOONQMSMUNVOWQWR RPNTN ROOUO RNPVP RNQVQ RMRWR',\n 755: ' 14LRLFLRRRLF RLIPQ RLLOR RLOMQ',\n 756: ' 10MWRKQMOPMR RRKSMUPWR',\n 757: ' 11MWWRWQVOUNSMQMONNOMQMR',\n 758: ' 13G]]R]P\\\\MZJWHTGPGMHJJHMGPGR',\n 759: ' 11MWMRMSNUOVQWSWUVVUWSWR',\n 760: ' 7LXLPNRQSSSVRXP',\n 761: ' 6RURUTTURTPRO',\n 762: ' 7RVRRUPVNVLUKTK',\n 763: ' 7NRRROPNNNLOKPK',\n 764: ' 21MWWHVGTFQFOGNHMJMLNNOOUSVTWVWXVZU[S\\\\P\\\\N[MZ',\n 765: ' 21G]IWHVGTGQHOINKMMMONPOTUUVWWYW[V\\\\U]S]P\\\\N[M',\n 766: ' 31G]RRTUUVWWYW[V\\\\U]S]Q\\\\O[NYMWMUNTOPUOVMWKWIVHUGSGQHOINKMMMONPORR',\n 767: ' 22H\\\\KFK[ RHF[FQP[Z RZV[Y\\\\[ RZVZY RWYZY RWYZZ\\\\[',\n 768: ' 30KYUARBPCNELHKLKRLUNWQXSXVWXUYR RKPLMNKQJSJVKXMYPYVXZV]T_R`Oa',\n 796: ' 3>f>RfR',\n 797: ' 3D`D``D',\n 798: ' 3RRR>Rf',\n 799: ' 3D`DD``',\n 800: ' 3D`DR`R',\n 801: ' 3F^FY^K',\n 802: ' 3KYK^YF',\n 803: ' 3RRRDR`',\n 804: ' 3KYKFY^',\n 805: ' 3F^FK^Y',\n 806: ' 3KYKRYR',\n 807: ' 3MWMWWM',\n 808: ' 3RRRKRY',\n 809: ' 3MWMMWW',\n 810: ' 8GRRGPGMHJJHMGPGR',\n 811: ' 8GRGRGTHWJZM\\\\P]R]',\n 812: ' 8R]R]T]W\\\\ZZ\\\\W]T]R',\n 813: ' 8R]]R]P\\\\MZJWHTGRG',\n 814: ' 9D`DOGQKSPTTTYS]Q`O',\n 815: ' 9PUUDSGQKPPPTQYS]U`',\n 816: ' 9OTODQGSKTPTTSYQ]O`',\n 817: ' 9D`DUGSKQPPTPYQ]S`U',\n 818: ' 5KYRJYNKVRZ',\n 819: ' 5JZJRNKVYZR',\n 820: ' 5KYKVKNYVYN',\n 821: ' 5JZLXJPZTXL',\n 822: ' 23JZJ]L]O\\\\Q[TXUVVSVOULTJSIQIPJOLNONSOVPXS[U\\\\X]Z]',\n 823: ' 23I]]Z]X\\\\U[SXPVOSNONLOJPIQISJTLUOVSVVUXT[Q\\\\O]L]J',\n 824: ' 23JZZGXGUHSIPLONNQNUOXPZQ[S[TZUXVUVQUNTLQIOHLGJG',\n 825: ' 23G[GJGLHOIQLTNUQVUVXUZT[S[QZPXOUNQNNOLPISHUGXGZ',\n 826: ' 21E[EPFRHTJUMVQVUUXSZP[NZLWLSMQNNPLSKVKYL\\\\M^',\n 827: ' 19EYETHVKWPWSVVTXQYNYLXKVKSLPNNQMTMYN\\\\P_',\n 828: ' 26OUQOOQOSQUSUUSUQSOQO RQPPQPSQTSTTSTQSPQP RRQQRRSSRRQ',\n 829: ' 11RWRMSMUNVOWQWSVUUVSWRW',\n 830: ' 9D`DRJR RORUR RZR`R',\n 831: ' 5D`DUDO`O`U',\n 832: ' 6JZRDJR RRDZR',\n 833: ' 9D`DR`R RJYZY RP`T`',\n 834: ' 9D`DR`R RDRRb R`RRb',\n 840: ' 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK',\n 841: ' 6LXLLLXXXXLLL',\n 842: ' 5KYRJKVYVRJ',\n 843: ' 6LXRHLRR\\\\XRRH',\n 844: ' 12JZRIPOJOOSMYRUWYUSZOTORI',\n 845: ' 6KYRKRY RKRYR',\n 846: ' 6MWMMWW RWMMW',\n 847: ' 9MWRLRX RMOWU RWOMU',\n 850: ' 35NVQNOONQNSOUQVSVUUVSVQUOSNQN ROQOS RPPPT RQOQU RRORU RSOSU RTPTT RUQUS',\n 851: ' 27NVNNNVVVVNNN ROOOU RPOPU RQOQU RRORU RSOSU RTOTU RUOUU',\n 852: ' 17MWRLMUWURL RROOT RROUT RRRQT RRRST',\n 853: ' 17LULRUWUMLR RORTU RORTO RRRTS RRRTQ',\n 854: ' 17MWRXWOMORX RRUUP RRUOP RRRSP RRRQP',\n 855: ' 17OXXROMOWXR RURPO RURPU RRRPQ RRRPS',\n 856: ' 22LXRLNWXPLPVWRL RRRRL RRRLP RRRNW RRRVW RRRXP',\n 857: ' 11RYRKRY RRKYNRQ RSMVNSO',\n 860: ' 13MWRLRX ROOUO RMUOWQXSXUWWU',\n 861: ' 11LXRLRX RLQMOWOXQ RPWTW',\n 862: ' 14KYMNWX RWNMX ROLLOKQ RULXOYQ',\n 863: ' 18I[NII[ RVI[[ RMM[[ RWMI[ RNIVI RMMWM',\n 864: ' 21I[RGRV RMJWP RWJMP RIVL\\\\ R[VX\\\\ RIV[V RL\\\\X\\\\',\n 865: ' 11G[MJSV RKPSL RG\\\\[\\\\[RG\\\\',\n 866: ' 14LXPLPPLPLTPTPXTXTTXTXPTPTLPL',\n 867: ' 32KYYPXNVLSKQKNLLNKQKSLVNXQYSYVXXVYT RYPWNUMSMQNPOOQOSPUQVSWUWWVYT',\n 868: ' 10KYRJKVYVRJ RRZYNKNRZ',\n 869: ' 34G]PIPGQFSFTGTI RGZHXJVKTLPLKMJOIUIWJXKXPYTZV\\\\X]Z RGZ]Z RQZP[Q\\\\S\\\\T[SZ',\n 870: ' 64JZRMRS RRSQ\\\\ RRSS\\\\ RQ\\\\S\\\\ RRMQJPHNG RQJNG RRMSJTHVG RSJVG RRMNKLKJM RPLLLJM RRMVKXKZM RTLXLZM RRMPNOOOR RRMPOOR RRMTNUOUR RRMTOUR',\n 871: ' 94JZRIRK RRNRP RRSRU RRYQ\\\\ RRYS\\\\ RQ\\\\S\\\\ RRGQIPJ RRGSITJ RPJRITJ RRKPNNOMN RRKTNVOWN RNOPORNTOVO RRPPSNTLTKRKSLT RRPTSVTXTYRYSXT RNTPTRSTTVT RRUPXOYMZLZKYJWJYLZ RRUTXUYWZXZYYZWZYXZ RMZOZRYUZWZ',\n 872: ' 40JZRYQ\\\\ RRYS\\\\ RQ\\\\S\\\\ RRYUZXZZXZUYTWTYRZOYMWLUMVJUHSGQGOHNJOMMLKMJOKRMTKTJUJXLZOZRY',\n 873: ' 32JZRYQ\\\\ RRYS\\\\ RQ\\\\S\\\\ RRYVXVVXUXRZQZLYIXHVHTGPGNHLHKIJLJQLRLUNVNXRY',\n 874: ' 15I[IPKR RLKNP RRGRO RXKVP R[PYR',\n 899: ' 6QSRQQRRSSRRQ',\n 900: ' 10PTQPPQPSQTSTTSTQSPQP',\n 901: ' 14NVQNOONQNSOUQVSVUUVSVQUOSNQN',\n 902: ' 18MWQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM',\n 903: ' 18KYQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK',\n 904: ' 22G]PGMHJJHMGPGTHWJZM\\\\P]T]W\\\\ZZ\\\\W]T]P\\\\MZJWHTGPG',\n 905: ' 34AcPALBJCGEEGCJBLAPATBXCZE]G_JaLbPcTcXbZa]__]aZbXcTcPbLaJ_G]EZCXBTAPA',\n 906: ' 34<hP<K=G?DAAD?G=K<P<T=Y?]A`DcGeKgPhThYg]e`cc`e]gYhThPgKeGcD`A]?Y=T<P<',\n 907: ' 50){O)I*E+@-;073370;-@+E*I)O)U*[+_-d0i3m7q;t@wEyIzO{U{[z_ydwitmqqmtiwdy_z[{U{OzIyEw@t;q7m3i0d-_+[*U)O)',\n 908: ' 34>fRAPCMDJDGCEA>H@JAMAZB]D_G`M`PaRc RRATCWDZD]C_AfHdJcMcZb]`_]`W`TaRc',\n 909: ' 33AcRAPCMDJDGCEABGAKAPBTDXG\\\\L`Rc RRATCWDZD]C_AbGcKcPbT`X]\\\\X`Rc RBHbH',\n 997: ' 3MWMXWX',\n 998: ' 3JZJZZZ',\n 999: ' 3JZJ]Z]',\n 1001: ' 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX',\n 1002: ' 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX',\n 1003: ' 24KYVLWKWOVLTKQKOLNMMPMSNVOWQXTXVWWU RQKOMNPNSOVQX',\n 1004: ' 26JZNKNX ROKOX RLKSKVLWMXPXSWVVWSXLX RSKULVMWPWSVVUWSX',\n 1005: ' 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX',\n 1006: ' 20JXNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXQX',\n 1007: ' 36K[VLWKWOVLTKQKOLNMMPMSNVOWQXTXVW RQKOMNPNSOVQX RTXUWVU RVSVX RWSWX RTSYS',\n 1008: ' 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX',\n 1009: ' 12NWRKRX RSKSX RPKUK RPXUX',\n 1010: ' 19LXSKSURWQX RTKTUSWQXPXNWMUNTOUNV RQKVK',\n 1011: ' 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX',\n 1012: ' 14KXOKOX RPKPX RMKRK RMXWXWTVX',\n 1013: ' 30I\\\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX',\n 1014: ' 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX',\n 1015: ' 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK',\n 1016: ' 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX',\n 1017: ' 47KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RPWPUQTSTTUUZV[W[XZ RTUUXVZW[',\n 1018: ' 37JZNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX RSRTSUWVXWXXW RSRUSVWWX',\n 1019: ' 32KZVMWKWOVMULSKQKOLNMNOOPQQTRVSWT RNNOOQPTQVRWSWVVWTXRXPWOVNTNXOV',\n 1020: ' 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX',\n 1021: ' 20J[NKNUOWQXTXVWWUWK ROKOUPWQX RLKQK RUKYK',\n 1022: ' 15KYMKRX RNKRU RWKRX RKKPK RTKYK',\n 1023: ' 24I[LKOX RMKOT RRKOX RRKUX RSKUT RXKUX RJKOK RVKZK',\n 1024: ' 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX',\n 1025: ' 20LYNKRRRX ROKSR RWKSRSX RLKQK RTKYK RPXUX',\n 1026: ' 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX',\n 1027: ' 18KYRKMX RRNVX RRKWX ROTTT RKXPX RTXYX',\n 1028: ' 35JZNKNX ROKOX RLKSKVLWNVPSQ RSKULVNUPSQ ROQSQVRWTWUVWSXLX RSQURVTVUUWSX',\n 1029: ' 14KXOKOX RPKPX RMKWKWOVK RMXRX',\n 1030: ' 15KYRKLX RRMWX RRKXX RMWVW RLXXX',\n 1031: ' 22JYNKNX ROKOX RSOSS RLKVKVOUK ROQSQ RLXVXVTUX',\n 1032: ' 16LYVKNX RWKOX ROKNONKWK RNXWXWTVX',\n 1033: ' 27J[NKNX ROKOX RVKVX RWKWX RLKQK RTKYK ROQVQ RLXQX RTXYX',\n 1034: ' 44KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK RQOQT RTOTT RQQTQ RQRTR',\n 1035: ' 12NWRKRX RSKSX RPKUK RPXUX',\n 1036: ' 27JZNKNX ROKOX RWKOS RQQVX RRQWX RLKQK RTKYK RLXQX RTXYX',\n 1037: ' 15KYRKMX RRNVX RRKWX RKXPX RTXYX',\n 1038: ' 30I\\\\MKMX RNNRX RNKRU RWKRX RWKWX RXKXX RKKNK RWKZK RKXOX RUXZX',\n 1039: ' 21JZNKNX ROMVX ROKVV RVKVX RLKOK RTKXK RLXPX',\n 1040: ' 36JZMJLM RXJWM RPPOS RUPTS RMVLY RXVWY RMKWK RMLWL RPQTQ RPRTR RMWWW RMXWX',\n 1041: ' 32KZQKOLNMMPMSNVOWQXTXVWWVXSXPWMVLTKQK RQKOMNPNSOVQX RTXVVWSWPVMTK',\n 1042: ' 21J[NKNX ROKOX RVKVX RWKWX RLKYK RLXQX RTXYX',\n 1043: ' 25JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXQX',\n 1044: ' 20K[MKRQ RNKSQMX RMKWKXOVK RNWWW RMXWXXTVX',\n 1045: ' 16KZRKRX RSKSX RNKMOMKXKXOWK RPXUX',\n 1046: ' 33KZMONLOKPKQLRORX RXOWLVKUKTLSOSX RMONMOLPLQMRO RXOWMVLULTMSO RPXUX',\n 1047: ' 40KZRKRX RSKSX RQNNOMQMRNTQUTUWTXRXQWOTNQN RQNOONQNROTQU RTUVTWRWQVOTN RPKUK RPXUX',\n 1048: ' 21KZNKVX ROKWX RWKNX RLKQK RTKYK RLXQX RTXYX',\n 1049: ' 33J[RKRX RSKSX RLPMONOOSQU RTUVSWOXOYP RMONROTQUTUVTWRXO RPKUK RPXUX',\n 1050: ' 35KZMVNXQXMRMONMOLQKTKVLWMXOXRTXWXXV ROUNRNOOMQK RTKVMWOWRVU RNWPW RUWWW',\n 1051: ' 18KYTKKX RSMTX RTKUX RNTTT RIXNX RRXWX',\n 1052: ' 34JYPKLX RQKMX RNKUKWLWNVPSQ RUKVLVNUPSQ ROQRQTRUSUUTWQXJX RRQTSTUSWQX',\n 1053: ' 25KXVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUU RRKPMOONRNVPX',\n 1054: ' 26JYPKLX RQKMX RNKTKVLWNWQVTUVTWQXJX RTKULVNVQUTTVSWQX',\n 1055: ' 22JYPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXTXUUSX',\n 1056: ' 20JXPKLX RQKMX RSORS RNKXKWNWK ROQRQ RJXOX',\n 1057: ' 33KYVLWLXKWNVLTKRKPLOMNOMRMUNWPXRXTWUVVS RRKPMOONRNVPX RRXTVUS RSSXS',\n 1058: ' 27J[PKLX RQKMX RXKTX RYKUX RNKSK RVK[K ROQVQ RJXOX RRXWX',\n 1059: ' 12NWTKPX RUKQX RRKWK RNXSX',\n 1060: ' 19LXUKRUQWPX RVKSURWPXOXMWLUMTNUMV RSKXK',\n 1061: ' 27JZPKLX RQKMX RYKOR RRPTX RSPUX RNKSK RVK[K RJXOX RRXWX',\n 1062: ' 14KXQKMX RRKNX ROKTK RKXUXVUTX',\n 1063: ' 30I\\\\OKKX ROMPX RPKQV RYKPX RYKUX RZKVX RMKPK RYK\\\\K RIXMX RSXXX',\n 1064: ' 21JZPKLX RPKTX RQKTU RXKTX RNKQK RVKZK RJXNX',\n 1065: ' 32KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK',\n 1066: ' 24JYPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RJXOX',\n 1067: ' 46KYRKPLOMNOMRMUNWPXRXTWUVVTWQWNVLTKRK RRKPMOONRNVPX RRXTVUTVQVMTK ROWOVPUQURVRZS[T[UZ RRVSZT[',\n 1068: ' 35JZPKLX RQKMX RNKUKWLXMXOWQTROR RUKWMWOVQTR RSRTWUXVXWW RSRTSUWVX RJXOX',\n 1069: ' 28KZWLXLYKXNWLUKRKPLOMOOPPUSVT RONPOURVSVVUWSXPXNWMULXMWNW',\n 1070: ' 16KZTKPX RUKQX RPKNNOKZKYNYK RNXSX',\n 1071: ' 20J[PKMUMWOXSXUWVUYK RQKNUNWOX RNKSK RWK[K',\n 1072: ' 15KYOKPX RPKQV RYKPX RMKRK RVK[K',\n 1073: ' 24I[NKMX ROKNV RTKMX RTKSX RUKTV RZKSX RLKQK RXK\\\\K',\n 1074: ' 21KZPKTX RQKUX RYKLX RNKSK RVK[K RJXOX RRXWX',\n 1075: ' 20LYPKRQPX RQKSQ RYKSQQX RNKSK RVK[K RNXSX',\n 1076: ' 16LYXKLX RYKMX RQKONPKYK RLXUXVUTX',\n 1101: ' 32LZQOPPPQOQOPQOTOVQVWWXXX RTOUQUWWX RURRSPTOUOWPXSXTWUU RRSPUPWQX',\n 1102: ' 29JYNKNX ROKOX RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLKOK',\n 1103: ' 24LXVQUQURVRVQUPSOQOOPNRNUOWQXSXUWVV RQOPPOROUPWQX',\n 1104: ' 32L[VKVX RWKWX RVRUPSOQOOPNRNUOWQXSXUWVU RQOPPOROUPWQX RTKWK RVXYX',\n 1105: ' 26LXOSVSVRUPSOQOOPNRNUOWQXSXUWVV RUSUQSO RQOPPOROUPWQX',\n 1106: ' 20LWTKULUMVMVLTKRKPMPX RRKQMQX RNOSO RNXSX',\n 1107: ' 42LYQOOQOSQUSUUSUQSOQO RQOPQPSQU RSUTSTQSO RTPUOVO RPTOUOXPYTYVZ ROWPXTXVYV[T\\\\P\\\\N[NYPX',\n 1108: ' 28J[NKNX ROKOX RORPPROTOVPWRWX RTOUPVRVX RLKOK RLXQX RTXYX',\n 1109: ' 18NWRKRLSLSKRK RRORX RSOSX RPOSO RPXUX',\n 1110: ' 23NWSKSLTLTKSK RSOSZR\\\\ RTOTZR\\\\P\\\\O[OZPZP[O[ RQOTO',\n 1111: ' 27JZNKNX ROKOX RWOOU RRSVX RSSWX RLKOK RTOYO RLXQX RTXYX',\n 1112: ' 12NWRKRX RSKSX RPKSK RPXUX',\n 1113: ' 44F_JOJX RKOKX RKRLPNOPORPSRSX RPOQPRRRX RSRTPVOXOZP[R[X RXOYPZRZX RHOKO RHXMX RPXUX RXX]X',\n 1114: ' 28J[NONX ROOOX RORPPROTOVPWRWX RTOUPVRVX RLOOO RLXQX RTXYX',\n 1115: ' 28LYQOOPNRNUOWQXTXVWWUWRVPTOQO RQOPPOROUPWQX RTXUWVUVRUPTO',\n 1116: ' 32JYNON\\\\ ROOO\\\\ RORPPROTOVPWRWUVWTXRXPWOU RTOUPVRVUUWTX RLOOO RL\\\\Q\\\\',\n 1117: ' 29KYUOU\\\\ RVOV\\\\ RURTPROPONPMRMUNWPXRXTWUU RPOOPNRNUOWPX RS\\\\X\\\\',\n 1118: ' 22KXOOOX RPOPX RPRQPSOUOVPVQUQUPVP RMOPO RMXRX',\n 1119: ' 26LYTOUPUQVQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWOVPVPWQX',\n 1120: ' 14LWPKPVRXTXUWUV RQKQVRX RNOTO',\n 1121: ' 28J[NONUOWQXSXUWVU ROOOUPWQX RVOVX RWOWX RLOOO RTOWO RVXYX',\n 1122: ' 15KYNORX ROORV RVORX RLOQO RTOXO',\n 1123: ' 24I[LOOX RMOOU RROOX RROUX RSOUU RXOUX RJOOO RVOZO',\n 1124: ' 21KYNOUX ROOVX RVONX RLOQO RTOXO RLXPX RSXXX',\n 1125: ' 23KYNORX ROORV RVORXP[N\\\\M\\\\L[LZMZM[L[ RLOQO RTOXO',\n 1126: ' 16LXUONX RVOOX ROONQNOVO RNXVXVVUX',\n 1127: ' 32K[QOOPNQMSMUNWPXQXSWUUWRXO RQOOQNSNUOWPX RQOSOUPWWXX RSOTPVWXXYX',\n 1128: ' 40KXRKPMOOMUK\\\\ RQLPNNTL\\\\ RRKTKVLVNUPRQ RTKULUNTPRQ RRQTRUTUVTWRXQXOWNT RRQSRTTTVRX',\n 1129: ' 19KYLQNOPORPSSSXR\\\\ RLQNPPPRQSS RWOVRSXQ\\\\',\n 1130: ' 39KYSOQOOPNQMSMUNWPXRXTWUVVTVRUPRNQLQKRJTJUKVM RQOOQNSNVPX RRXTVUTUQSO RQLRKTKVM',\n 1131: ' 27LXVPTOQOOPOQPRRS RQOPPPQRS RRSOTNUNWPXSXUW RRSPTOUOWPX',\n 1132: ' 28LWRKQLQMSNVNVMSNPOOPNRNTOVPWRXSYS[R\\\\P\\\\O[ RSNQOPPOROTPVRX',\n 1133: ' 26IYJRKPLONOOPOQMX RMONPNQLX ROQPPROTOVPVRS\\\\ RTOUPURR\\\\',\n 1134: ' 35IYJSKQLPNPOQOVPX RMPNQNUOWPXQXSWTVUTVQVNULTKRKQLQNRPURWS RQXSVTTUQUNTK',\n 1135: ' 13NWROPVPWQXSXUWVU RSOQVQWRX',\n 1136: ' 26KYOOLX RPOMX RUOVPWPVOTORQOR RORPSRWTXVWWU RORQSSWTX',\n 1137: ' 15LXLKNKPLWX RNKOLVX RRPMX RRPNX',\n 1138: ' 26KZOOK\\\\ RPOL\\\\ RNUNWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX',\n 1139: ' 19JYNOMX ROONUMX RVRVOWOVRTUQWNXMX RLOOO',\n 1140: ' 36MXRKQLQMSNVN RTNQOPPPRRSUS RTNROQPQRRS RSSPTOUOWQXSYTZT[S\\\\Q\\\\ RSSQTPUPWQX',\n 1141: ' 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO',\n 1142: ' 20IZPPMX RPPNX RTPSX RTPTX RKQMOXO RKQMPXP',\n 1143: ' 29JXSOQOOPNQMSJ\\\\ RQOOQNSK\\\\ RSOUPVRVTUVTWRXPXNWMU RSOUQUTTVRX',\n 1144: ' 28K[YOQOOPNQMSMUNWPXRXTWUVVTVRUPYP RQOOQNSNVPX RRXTVUTUQSO',\n 1145: ' 14KZSPQX RSPRX RMQOOXO RMQOPXP',\n 1146: ' 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP',\n 1147: ' 35KZOPNQMSMUNWPXRXUWWUXRXPWOUOTPSRRUO\\\\ RMUNVPWRWUVWTXR RXQWPUPSR RRUQXP\\\\',\n 1148: ' 17KXMONOPPS[T\\\\ RNOOPR[T\\\\U\\\\ RVOTRNYL\\\\',\n 1149: ' 28I[TKQ\\\\ RUKP\\\\ RJRKPLONOOPOVPWSWUVWT RMONPNTOWPXSXUWWTXRYO',\n 1150: ' 36JZNPPPPONPMQLSLUMWNXPXQWRUSR RLUNWPWRU RRRRWSXUXWVXTXRWPVOVPWP RRUSWUWWV',\n 1151: ' 32KZVOTVTWUXWXXWYU RWOUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX',\n 1152: ' 32JXOKMR RPKNRNVPX RNROPQOSOUPVRVTUVTWRXPXNWMUMR RSOUQUTTVRX RMKPK',\n 1153: ' 22KXUPUQVQUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX',\n 1154: ' 35KZWKTVTWUXWXXWYU RXKUVUWVX RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RUKXK',\n 1155: ' 23KWNURTTSURUPSOQOOPNQMSMUNWPXRXTWUV RQOOQNSNVPX',\n 1156: ' 23MXWKXLXKVKTLSNPYO[N\\\\ RVKULTNQYP[N\\\\L\\\\L[M\\\\ RPOVO',\n 1157: ' 34KYVOTVSYR[ RWOUVTYR[P\\\\M\\\\L[M[N\\\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX',\n 1158: ' 29KZPKLX RQKMX ROQPPROTOVPVRUUUWVX RTOUPURTUTWUXWXXWYU RNKQK',\n 1159: ' 26MWSKSLTLTKSK RNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU',\n 1160: ' 26MWTKTLULUKTK RORPPQOSOTPTRRYQ[O\\\\M\\\\M[N\\\\ RROSPSRQYP[O\\\\',\n 1161: ' 32KXPKLX RQKMX RVPUQVQVPUOTORQPROR RORPSQWRXTXUWVU RORQSRWSX RNKQK',\n 1162: ' 16NVSKPVPWQXSXTWUU RTKQVQWRX RQKTK',\n 1163: ' 46F^GRHPIOKOLPLQJX RJOKPKQIX RLQMPOOQOSPSQQX RQORPRQPX RSQTPVOXOZPZRYUYWZX RXOYPYRXUXWYX[X\\\\W]U',\n 1164: ' 33J[KRLPMOOOPPPQNX RNOOPOQMX RPQQPSOUOWPWRVUVWWX RUOVPVRUUUWVXXXYWZU',\n 1165: ' 28KXQOOPNQMSMUNWPXRXTWUVVTVRUPSOQO RQOOQNSNVPX RRXTVUTUQSO',\n 1166: ' 35JYKRLPMOOOPPPQM\\\\ RNOOPOQL\\\\ RPQROTOVPWRWTVVUWSXQXOVOT RTOVQVTUVSX RJ\\\\O\\\\',\n 1167: ' 28KYVOR\\\\ RWOS\\\\ RUSUQSOQOOPNQMSMUNWPXRXTV RQOOQNSNVPX RP\\\\U\\\\',\n 1168: ' 22LXMRNPOOQORPRQPX RPOQPQQOX RRQSPUOVOWPWQVQWP',\n 1169: ' 24LYVPVQWQVPTOQOOPORQSTTVU ROQQRTSVTVWTXQXOWNVOVOW',\n 1170: ' 16NWSKPVPWQXSXTWUU RTKQVQWRX RPOUO',\n 1171: ' 33IZJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVTWUXWXXWYU RWOUVUWVX',\n 1172: ' 24JXKRLPMOOOPPPROUOWPX RNOOPORNUNWPXQXSWUUVRVOUOVP',\n 1173: ' 37H\\\\IRJPKOMONPNRMUMWNX RLOMPMRLULWNXOXQWRV RTORVRWTX RUOSVSWTXUXWWYUZRZOYOZP',\n 1174: ' 38JZMRNPPOROSPSR RQORPRRQUPWNXMXLWLVMVLW RXPWQXQXPWOVOTPSRRURWSX RQUQWRXTXVWWU',\n 1175: ' 35IYJRKPLONOOPORNUNWOX RMONPNRMUMWOXQXSWTV RVOTVSYR[ RWOUVTYR[P\\\\M\\\\L[M[N\\\\',\n 1176: ' 27KYWOWPVQNVMWMX RNQOOROUQ ROPRPUQVQ RNVOVRWUW ROVRXUXVV',\n 1177: ' 39H[RKSLSMTMTLRKOKMLLNLX ROKNLMNMX RXKYLYMZMZLXKVKTMTX RVKUMUX RJOWO RJXOX RRXWX',\n 1178: ' 29J[UKVLWLWKQKOLNNNX RQKPLONOX RVOVX RWOWX RLOWO RLXQX RTXYX',\n 1179: ' 27J[WKQKOLNNNX RQKPLONOX RUKVLVX RWKWX RLOVO RLXQX RTXYX',\n 1180: ' 48F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX RYKZL[L[KUKSLRNRX RUKTLSNSX RZOZX R[O[X RHO[O RHXMX RPXUX RXX]X',\n 1181: ' 46F_PKQLQMRMRLPKMKKLJNJX RMKLLKNKX R[KUKSLRNRX RUKTLSNSX RYKZLZX R[K[X RHOZO RHXMX RPXUX RXX]X',\n 1182: ' 12NWRORX RSOSX RPOSO RPXUX',\n 1184: ' 21LXVPTOROPPOQNSNUOWQXSXUW RROPQOSOVQX ROSSS',\n 1185: ' 35LYSKQLPMOONRNUOWPXRXTWUVVTWQWNVLUKSK RSKQMPOOSOVPX RRXTVUTVPVMUK ROQVQ',\n 1186: ' 34KZTKQ\\\\ RUKP\\\\ RQONPMRMUNWQXTXWWXUXRWPTOQO RQOOPNRNUOWQX RTXVWWUWRVPTO',\n 1187: ' 22LXUPVRVQUPSOQOOPNRNTOVRX RQOOQOTPVRXSYS[R\\\\P\\\\',\n 1191: ' 45I[VKWLXLVKSKQLPMOOLYK[J\\\\ RSKQMPOMYL[J\\\\H\\\\H[I\\\\ RZK[L[KYKWLVNSYR[Q\\\\ RYKXLWNTYS[Q\\\\O\\\\O[P\\\\ RLOYO',\n 1192: ' 38IZVKWLXLXKSKQLPMOOLYK[J\\\\ RSKQMPOMYL[J\\\\H\\\\H[I\\\\ RVOTVTWUXWXXWYU RWOUVUWVX RLOWO',\n 1193: ' 38IZVKWL RXKSKQLPMOOLYK[J\\\\ RSKQMPOMYL[J\\\\H\\\\H[I\\\\ RWKTVTWUXWXXWYU RXKUVUWVX RLOVO',\n 1194: ' 63F^SKTLTM RULSKPKNLMMLOIYH[G\\\\ RPKNMMOJYI[G\\\\E\\\\E[F\\\\ RZK[L\\\\L\\\\KWKUL RTMSOPYO[N\\\\ RWKUMTOQYP[N\\\\L\\\\L[M\\\\ RZOXVXWYX[X\\\\W]U R[OYVYWZX RIO[O',\n 1195: ' 63F^SKTLTM RULSKPKNLMMLOIYH[G\\\\ RPKNMMOJYI[G\\\\E\\\\E[F\\\\ RZK[L R\\\\KWKUL RTMSOPYO[N\\\\ RWKUMTOQYP[N\\\\L\\\\L[M\\\\ R[KXVXWYX[X\\\\W]U R\\\\KYVYWZX RIOZO',\n 1196: ' 20MWNROPPOROSPSRRURWSX RQORPRRQUQWRXTXUWVU',\n 1200: ' 28LYQKOLNONTOWQXTXVWWTWOVLTKQK RQKPLOOOTPWQX RTXUWVTVOULTK',\n 1201: ' 10LYPNSKSX RRLRX ROXVX',\n 1202: ' 35LYOMONNNNMOLQKTKVLWNVPTQQROSNUNX RTKULVNUPTQ RNWOVPVSWVWWV RPVSXVXWVWU',\n 1203: ' 39LYOMONNNNMOLQKTKVLWNVPTQ RTKULVNUPTQ RRQTQVRWTWUVWTXQXOWNVNUOUOV RTQURVTVUUWTX',\n 1204: ' 13LYSMSX RTKTX RTKMTXT RQXVX',\n 1205: ' 33LYOKNQ ROKVK ROLSLVK RNQOPQOTOVPWRWUVWTXQXOWNVNUOUOV RTOUPVRVUUWTX',\n 1206: ' 36LYVMVNWNWMVLTKRKPLOMNPNUOWQXTXVWWUWSVQTPQPNR RRKPMOPOUPWQX RTXUWVUVSUQTP',\n 1207: ' 22LYNKNO RVMRTPX RWKTQQX RNMPKRKUM RNMPLRLUMVM',\n 1208: ' 51LYQKOLNNOPQQTQVPWNVLTKQK RQKPLONPPQQ RTQUPVNULTK RQQORNTNUOWQXTXVWWUWTVRTQ RQQPROTOUPWQX RTXUWVUVTURTQ',\n 1209: ' 36LYOVOUNUNVOWQXSXUWVVWSWNVLTKQKOLNNNPORQSTSWQ RSXUVVSVNULTK RQKPLONOPPRQS',\n 1210: ' 6NVRVQWRXSWRV',\n 1211: ' 8NVSWRXQWRVSWSYQ[',\n 1212: ' 12NVROQPRQSPRO RRVQWRXSWRV',\n 1213: ' 14NVROQPRQSPRO RSWRXQWRVSWSYQ[',\n 1214: ' 15NVRKQLRSSLRK RRLRO RRVQWRXSWRV',\n 1215: ' 29LYNNONOONONNOLQKTKVLWNWOVQSRRSRTST RTKVMVPUQSR RRWRXSXSWRW',\n 1216: ' 6OVRKRP RSKRP',\n 1217: ' 12LXOKOP RPKOP RUKUP RVKUP',\n 1218: ' 10MWQKPLPNQOSOTNTLSKQK',\n 1219: ' 9MWRJRP ROKUO RUKOO',\n 1220: ' 3KZXHM\\\\',\n 1221: ' 16MWUHSJQMPPPTQWSZU\\\\ RSJRLQPQTRXSZ',\n 1222: ' 16MWOHQJSMTPTTSWQZO\\\\ RQJRLSPSTRXQZ',\n 1223: ' 12MWPHP\\\\ RQHQ\\\\ RPHUH RP\\\\U\\\\',\n 1224: ' 12MWSHS\\\\ RTHT\\\\ ROHTH RO\\\\T\\\\',\n 1225: ' 38LWSHQIPJPLRNSP RQIPL RSNRQ RPJQLSNSPRQPRRSSTSVQXPZ RRSSV RPXQ[ RSTRVPXPZQ[S\\\\',\n 1226: ' 38MXQHSITJTLRNQP RSITL RQNRQ RTJSLQNQPRQTRRSQTQVSXTZ RRSQV RTXS[ RQTRVTXTZS[Q\\\\',\n 1227: ' 4MWTHPRT\\\\',\n 1228: ' 4MWPHTRP\\\\',\n 1229: ' 3OURHR\\\\',\n 1230: ' 6MWPHP\\\\ RTHT\\\\',\n 1231: ' 3I[LRXR',\n 1232: ' 6I[RLRX RLRXR',\n 1233: ' 9JZRMRX RMRWR RMXWX',\n 1234: ' 9JZRMRX RMMWM RMRWR',\n 1235: ' 6JZMMWW RWMMW',\n 1236: ' 6NVRQQRRSSRRQ',\n 1237: ' 15I[RLQMRNSMRL RLRXR RRVQWRXSWRV',\n 1238: ' 6I[LPXP RLTXT',\n 1239: ' 9I[WLMX RLPXP RLTXT',\n 1240: ' 9I[LNXN RLRXR RLVXV',\n 1241: ' 4JZWLMRWX',\n 1242: ' 4JZMLWRMX',\n 1243: ' 10JZWKMOWS RMTWT RMXWX',\n 1244: ' 10JZMKWOMS RMTWT RMXWX',\n 1245: ' 21H[YUWUUTTSRPQOONNNLOKQKRLTNUOUQTRSTPUOWNYN',\n 1246: ' 16JZLTLRMPOPUSWSXR RLRMQOQUTWTXRXP',\n 1247: ' 8JZMSRPWS RMSRQWS',\n 1248: ' 7NVSKPO RSKTLPO',\n 1249: ' 7NVQKTO RQKPLTO',\n 1250: ' 14LXNKOMQNSNUMVK RNKONQOSOUNVK',\n 1251: ' 8NVSLRMQLRKSLSNQP',\n 1252: ' 8NVSKQMQORPSORNQO',\n 1253: ' 8NVQLRMSLRKQLQNSP',\n 1254: ' 8NVQKSMSORPQORNSO',\n 1256: ' 11JZWMQMONNOMQMSNUOVQWWW',\n 1257: ' 11JZMMMSNUOVQWSWUVVUWSWM',\n 1258: ' 11JZMMSMUNVOWQWSVUUVSWMW',\n 1259: ' 11JZMWMQNOONQMSMUNVOWQWW',\n 1260: ' 14JZWMQMONNOMQMSNUOVQWWW RMRUR',\n 1261: ' 13I[TOUPXRUTTU RUPWRUT RLRWR',\n 1262: ' 13MWRMRX ROPPORLTOUP RPORMTO',\n 1263: ' 13I[POOPLROTPU ROPMROT RMRXR',\n 1264: ' 13MWRLRW ROTPURXTUUT RPURWTU',\n 1265: ' 37KYVSUPSOQOOPNQMSMUNWPXRXTWUVVTWQWNVLTKQKPLQLRK RQOOQNSNVPX RRXTVUTVQVNULTK',\n 1266: ' 15JZLKRX RMKRV RXKRX RLKXK RNLWL',\n 1267: ' 10G[IOLORW RKORX R[FRX',\n 1268: ' 26I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\\\L\\\\K[KZLZL[',\n 1269: ' 40I[XIXJYJYIXHVHTJSLROQUPYO[ RUITKSORUQXPZN\\\\L\\\\K[KZLZL[ RQNOONQNSOUQVSVUUVSVQUOSNQN',\n 1270: ' 26H\\\\ZRYTWUVUTTSSQPPONNMNKOJQJRKTMUNUPTQSSPTOVNWNYOZQZR',\n 1271: ' 26JZXKLX ROKPLPNOOMOLNLLMKOKSLVLXK RUTTUTWUXWXXWXUWTUT',\n 1272: ' 41J[YPXPXQYQYPXOWOVPUTTVSWQXOXMWLVLTMSORRPSNSLRKPKOLONPQUWWXXXYW ROXMVMTOR RONPPVWWX',\n 1273: ' 29J[UPSOQOPQPRQTSTUS RUOUSVTXTYRYQXNVLSKRKOLMNLQLRMUOWRXSXVW',\n 1274: ' 34KZQHQ\\\\ RTHT\\\\ RWLVLVMWMWLUKPKNLNNOPVSWT RNNOOVRWTWVVWTXQXOWNVNUOUOVNV',\n 1275: ' 12KYRKN\\\\ RVKR\\\\ RNQWQ RMVVV',\n 1276: ' 40LXTLSLSMTMTLSKQKPLPNQPTRUS RPNQOTQUSUUSW RQPOROTPVSXTY ROTPUSWTYT[S\\\\Q\\\\P[PZQZQ[P[',\n 1277: ' 29LXRKQLRMSLRK RRMRQ RRQQSRVSSRQ RRVR\\\\ RPOONNOOPPOTOUNVOUPTO',\n 1278: ' 42LXRMSLRKQLRMRQQRSURV RRQSRQURVRZQ[R\\\\S[RZ RPOONNOOPPOTOUNVOUPTO RPXOWNXOYPXTXUWVXUYTX',\n 1279: ' 12LYVKVX RNKVK RQQVQ RNXVX',\n 1281: ' 24H\\\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRQQRRSSRRQ',\n 1282: ' 33LYQKPLPMQN RTKULUMTN RRNPOOQORPTRUSUUTVRVQUOSNRN RRURY RSUSY ROWVW',\n 1283: ' 23LYRKPLONOOPQRRSRUQVOVNULSKRK RRRRX RSRSX ROUVU',\n 1284: ' 24H\\\\QKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK RRKRY RKRYR',\n 1285: ' 25JYRRPQOQMRLTLUMWOXPXRWSUSTRR RWMRR RRMWMWR RRMVNWR',\n 1286: ' 25JZLLMKOKQLRNRPQRPSNT ROKPLQNQQPS RVKUX RWKTX RNTXT',\n 1287: ' 27JYNKNU ROKNR RNROPQOSOUPVQVTTVTXUYVYWX RSOUQUTTV RLKOK',\n 1288: ' 27LYONRKRQ RVNSKSQ RRQPROTOUPWRXSXUWVUVTURSQ RRTRUSUSTRT',\n 1289: ' 27JZRKRY RMKMPNRPSTSVRWPWK RLMMKNM RQMRKSM RVMWKXM ROVUV',\n 1290: ' 27JYNKNX ROKOX RLKSKVLWNWOVQSROR RSKULVNVOUQSR RLXVXVUUX',\n 1291: ' 20LYWKTKQLONNQNSOVQXTYWY RWKTLRNQQQSRVTXWY',\n 1292: ' 23JZRRPQOQMRLTLUMWOXPXRWSUSTRR RSLQQ RWMRR RXQSS',\n 1293: ' 12KYPMTW RTMPW RMPWT RWPMT',\n 1294: ' 34J[OUMULVLXMYOYPXPVNTMRMONMOLQKTKVLWMXOXRWTUVUXVYXYYXYVXUVU RNMPLULWM',\n 1295: ' 34J[OOMOLNLLMKOKPLPNNPMRMUNWOXQYTYVXWWXUXRWPUNULVKXKYLYNXOVO RNWPXUXWW',\n 1401: ' 21F^KHK\\\\ RLHL\\\\ RXHX\\\\ RYHY\\\\ RHH\\\\H RH\\\\O\\\\ RU\\\\\\\\\\\\',\n 1402: ' 20H]KHRQJ\\\\ RJHQQ RJHYHZMXH RK[X[ RJ\\\\Y\\\\ZWX\\\\',\n 1403: ' 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\\\T`',\n 1404: ' 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\\\P`',\n 1405: ' 12KYOBOb RPBPb ROBVB RObVb',\n 1406: ' 12KYTBTb RUBUb RNBUB RNbUb',\n 1407: ' 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\\\P^Q`RaTb',\n 1408: ' 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\\\T^S`RaPb',\n 1409: ' 24KYU@RCPFOIOLPOSVTYT\\\\S_Ra RRCQEPHPKQNTUUXU[T^RaOd',\n 1410: ' 24KYO@RCTFUIULTOQVPYP\\\\Q_Ra RRCSETHTKSNPUOXO[P^RaUd',\n 1411: ' 13AXCRGRR` RGSRa RFSRb RX:Rb',\n 1412: ' 32F^[CZD[E\\\\D\\\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia',\n 2001: ' 18H\\\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[',\n 2002: ' 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[',\n 2003: ' 32G\\\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[',\n 2004: ' 30G]LFL[ RMFM[ RIFSFVGXIYKZNZSYVXXVZS[I[ RSFUGWIXKYNYSXVWXUZS[',\n 2005: ' 22G\\\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[',\n 2006: ' 20G[LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[P[',\n 2007: ' 40G^XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXX RQFOGMILKKNKSLVMXOZQ[ RXSX[ RYSY[ RUS\\\\S',\n 2008: ' 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RLPXP RH[O[ RU[\\\\[',\n 2009: ' 12MXRFR[ RSFS[ ROFVF RO[V[',\n 2010: ' 20KZUFUWTZR[P[NZMXMVNUOVNW RTFTWSZR[ RQFXF',\n 2011: ' 27F\\\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[',\n 2012: ' 14I[NFN[ ROFO[ RKFRF RK[Z[ZUY[',\n 2013: ' 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][',\n 2014: ' 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\\\F RI[O[',\n 2015: ' 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF',\n 2016: ' 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[',\n 2017: ' 64G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF RNYNXOVQURUTVUXV_W`Y`Z^Z] RUXV\\\\W^X_Y_Z^',\n 2018: ' 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUPMP RUFWGXHYJYLXNWOUP RI[P[ RRPTQURXYYZZZ[Y RTQUSWZX[Z[[Y[X',\n 2019: ' 34H\\\\XIYFYLXIVGSFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[Q[NZLXKUK[LX',\n 2020: ' 16I\\\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[',\n 2021: ' 23F^KFKULXNZQ[S[VZXXYUYF RLFLUMXOZQ[ RHFOF RVF\\\\F',\n 2022: ' 15H\\\\KFR[ RLFRX RYFR[ RIFOF RUF[F',\n 2023: ' 24F^JFN[ RKFNV RRFN[ RRFV[ RSFVV RZFV[ RGFNF RWF]F',\n 2024: ' 21H\\\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[',\n 2025: ' 20H]KFRQR[ RLFSQS[ RZFSQ RIFOF RVF\\\\F RO[V[',\n 2026: ' 16H\\\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[',\n 2027: ' 18H\\\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[',\n 2028: ' 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[',\n 2029: ' 14I[NFN[ ROFO[ RKFZFZLYF RK[R[',\n 2030: ' 15H\\\\RFJ[ RRFZ[ RRIY[ RKZYZ RJ[Z[',\n 2031: ' 22G\\\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[',\n 2032: ' 16H\\\\XFK[ RYFL[ RLFKLKFYF RK[Y[YUX[',\n 2033: ' 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RLPXP RH[O[ RU[\\\\[',\n 2034: ' 56G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF ROMOT RUMUT ROPUP ROQUQ',\n 2035: ' 12MXRFR[ RSFS[ ROFVF RO[V[',\n 2036: ' 27F\\\\KFK[ RLFL[ RYFLS RQOY[ RPOX[ RHFOF RUF[F RH[O[ RU[[[',\n 2037: ' 15H\\\\RFK[ RRFY[ RRIX[ RI[O[ RU[[[',\n 2038: ' 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][',\n 2039: ' 21G^LFL[ RMFYY RMHY[ RYFY[ RIFMF RVF\\\\F RI[O[',\n 2040: ' 36G]KEJJ RZEYJ RONNS RVNUS RKWJ\\\\ RZWY\\\\ RKGYG RKHYH ROPUP ROQUQ RKYYY RKZYZ',\n 2041: ' 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF',\n 2042: ' 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\\\F RH[O[ RU[\\\\[',\n 2043: ' 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[',\n 2044: ' 20H]KFRPJ[ RJFQP RJFYFZLXF RKZXZ RJ[Y[ZUX[',\n 2045: ' 16I\\\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[',\n 2046: ' 33I\\\\KKKILGMFOFPGQIRMR[ RKIMGOGQI RZKZIYGXFVFUGTISMS[ RZIXGVGTI RO[V[',\n 2047: ' 48H]RFR[ RSFS[ RPKMLLMKOKRLTMUPVUVXUYTZRZOYMXLUKPK RPKNLMMLOLRMTNUPV RUVWUXTYRYOXMWLUK ROFVF RO[V[',\n 2048: ' 21H\\\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[',\n 2049: ' 41G^RFR[ RSFS[ RIMJLLMMQNSOTQU RJLKMLQMSNTQUTUWTXSYQZM[L RTUVTWSXQYM[L\\\\M ROFVF RO[V[',\n 2050: ' 43G]JXK[O[MWKSJPJLKIMGPFTFWGYIZLZPYSWWU[Y[ZX RMWLTKPKLLINGPF RTFVGXIYLYPXTWW RKZNZ RVZYZ',\n 2051: ' 18H\\\\UFH[ RUFV[ RTHU[ RLUUU RF[L[ RR[X[',\n 2052: ' 41F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVP RWFYGZIZKYNXOVP RMPVPXQYSYUXXVZR[F[ RVPWQXSXUWXUZR[',\n 2053: ' 34H]ZH[H\\\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RTFRGPINLMOLSLVMYNZP[',\n 2054: ' 30F]OFI[ RPFJ[ RLFUFXGYHZKZOYSWWUYSZO[F[ RUFWGXHYKYOXSVWTYRZO[',\n 2055: ' 22F]OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[U[WVT[',\n 2056: ' 20F\\\\OFI[ RPFJ[ RTLRT RLF[FZLZF RMPSP RF[M[',\n 2057: ' 42H^ZH[H\\\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RTFRGPINLMOLSLVMYNZP[ RR[TZVXXT RUT\\\\T',\n 2058: ' 27E_NFH[ ROFI[ R[FU[ R\\\\FV[ RKFRF RXF_F RLPXP RE[L[ RR[Y[',\n 2059: ' 12LYUFO[ RVFP[ RRFYF RL[S[',\n 2060: ' 21I[XFSWRYQZO[M[KZJXJVKULVKW RWFRWQYO[ RTF[F',\n 2061: ' 27F]OFI[ RPFJ[ R]FLS RSOW[ RROV[ RLFSF RYF_F RF[M[ RS[Y[',\n 2062: ' 14H\\\\QFK[ RRFL[ RNFUF RH[W[YUV[',\n 2063: ' 30E`NFH[ RNFO[ ROFPY R\\\\FO[ R\\\\FV[ R]FW[ RKFOF R\\\\F`F RE[K[ RS[Z[',\n 2064: ' 21F_OFI[ ROFVX ROIV[ R\\\\FV[ RLFOF RYF_F RF[L[',\n 2065: ' 42G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF',\n 2066: ' 27F]OFI[ RPFJ[ RLFXF[G\\\\I\\\\K[NYPUQMQ RXFZG[I[KZNXPUQ RF[M[',\n 2067: ' 61G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF RSFQGOIMLLOKSKVLYN[ RQ[SZUXWUXRYNYKXHVF RLYLXMVOUPURVSXS_T`V`W^W] RSXT^U_V_W^',\n 2068: ' 42F^OFI[ RPFJ[ RLFWFZG[I[KZNYOVPMP RWFYGZIZKYNXOVP RRPTQURVZW[Y[ZYZX RURWYXZYZZY RF[M[',\n 2069: ' 35G^ZH[H\\\\F[L[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJUI[JYKY',\n 2070: ' 16H]UFO[ RVFP[ ROFLLNF]F\\\\L\\\\F RL[S[',\n 2071: ' 25F_NFKQJUJXKZN[R[UZWXXU\\\\F ROFLQKUKXLZN[ RKFRF RYF_F',\n 2072: ' 15H\\\\NFO[ ROFPY R\\\\FO[ RLFRF RXF^F',\n 2073: ' 24E_MFK[ RNFLY RUFK[ RUFS[ RVFTY R]FS[ RJFQF RZF`F',\n 2074: ' 21G]NFU[ ROFV[ R\\\\FH[ RLFRF RXF^F RF[L[ RR[X[',\n 2075: ' 20H]NFRPO[ ROFSPP[ R]FSP RLFRF RYF_F RL[S[',\n 2076: ' 16G][FH[ R\\\\FI[ ROFLLNF\\\\F RH[V[XUU[',\n 2077: ' 46H\\\\KILKXWYYY[ RLLXX RKIKKLMXYY[ RPPLTKVKXLZK[ RKVMZ RLTLVMXMZK[ RSSXN RVIVLWNYNYLWKVI RVIWLYN',\n 2101: ' 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[',\n 2102: ' 33G\\\\LFL[ RMFM[ RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIFMF',\n 2103: ' 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[',\n 2104: ' 36H]WFW[ RXFX[ RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTFXF RW[[[',\n 2105: ' 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[',\n 2106: ' 22KXUGTHUIVHVGUFSFQGPIP[ RSFRGQIQ[ RMMUM RM[T[',\n 2107: ' 60I\\\\QMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM RONNPNTOV RUVVTVPUN RVOWNYMYNWN RNUMVLXLYM[P\\\\U\\\\X]Y^ RLYMZP[U[X\\\\Y^Y_XaUbObLaK_K^L\\\\O[',\n 2108: ' 28G]LFL[ RMFM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIFMF RI[P[ RT[[[',\n 2109: ' 18MXRFQGRHSGRF RRMR[ RSMS[ ROMSM RO[V[',\n 2110: ' 25MXSFRGSHTGSF RTMT_SaQbObNaN`O_P`Oa RSMS_RaQb RPMTM',\n 2111: ' 27G\\\\LFL[ RMFM[ RWMMW RRSX[ RQSW[ RIFMF RTMZM RI[P[ RT[Z[',\n 2112: ' 12MXRFR[ RSFS[ ROFSF RO[V[',\n 2113: ' 44BcGMG[ RHMH[ RHPJNMMOMRNSPS[ ROMQNRPR[ RSPUNXMZM]N^P^[ RZM\\\\N]P][ RDMHM RD[K[ RO[V[ RZ[a[',\n 2114: ' 28G]LML[ RMMM[ RMPONRMTMWNXPX[ RTMVNWPW[ RIMMM RI[P[ RT[[[',\n 2115: ' 36H\\\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM',\n 2116: ' 36G\\\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb',\n 2117: ' 33H\\\\WMWb RXMXb RWPUNSMQMNNLPKSKULXNZQ[S[UZWX RQMONMPLSLUMXOZQ[ RTb[b',\n 2118: ' 23IZNMN[ ROMO[ ROSPPRNTMWMXNXOWPVOWN RKMOM RK[R[',\n 2119: ' 32J[WOXMXQWOVNTMPMNNMOMQNRPSUUWVXW RMPNQPRUTWUXVXYWZU[Q[OZNYMWM[NY',\n 2120: ' 16KZPFPWQZS[U[WZXX RQFQWRZS[ RMMUM',\n 2121: ' 28G]LMLXMZP[R[UZWX RMMMXNZP[ RWMW[ RXMX[ RIMMM RTMXM RW[[[',\n 2122: ' 15I[LMR[ RMMRY RXMR[ RJMPM RTMZM',\n 2123: ' 24F^JMN[ RKMNX RRMN[ RRMV[ RSMVX RZMV[ RGMNM RWM]M',\n 2124: ' 21H\\\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[',\n 2125: ' 22H[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM',\n 2126: ' 16I[WML[ RXMM[ RMMLQLMXM RL[X[XWW[',\n 2127: ' 40G^QMNNLPKRJUJXKZN[P[RZUWWTYPZM RQMONMPLRKUKXLZN[ RQMSMUNVPXXYZZ[ RSMTNUPWXXZZ[[[',\n 2128: ' 57G\\\\TFQGOIMMLPKTJZIb RTFRGPINMMPLTKZJb RTFVFXGYHYKXMWNTOPO RVFXHXKWMVNTO RPOTPVRWTWWVYUZR[P[NZMYLV RPOSPURVTVWUYTZR[',\n 2129: ' 28H\\\\IPKNMMOMQNROSRSVRZOb RJOLNPNRO RZMYPXRSYP^Nb RYMXPWRSY',\n 2130: ' 44I\\\\VNTMRMONMQLTLWMYNZP[R[UZWWXTXQWOSJRHRFSEUEWFYH RRMPNNQMTMXNZ RR[TZVWWTWPVNTKSISGTFVFYH',\n 2131: ' 32I[XPVNTMPMNNNPPRSS RPMONOPQRSS RSSNTLVLXMZP[S[UZWX RSSOTMVMXNZP[',\n 2132: ' 31I[TFRGQHQIRJUKZKZJWKSMPOMRLULWMYP[S]T_TaSbQbPa RULQONRMUMWNYP[',\n 2133: ' 32G]HQIOKMNMONOPNTL[ RMMNNNPMTK[ RNTPPRNTMVMXNYOYRXWUb RVMXOXRWWTb',\n 2134: ' 44F]GQHOJMMMNNNPMUMXNZO[ RLMMNMPLULXMZO[Q[SZUXWUXRYMYIXGVFTFRHRJSMUPWRZT RSZUWVUWRXMXIWGVF',\n 2135: ' 15LXRMPTOXOZP[S[UYVW RSMQTPXPZQ[',\n 2136: ' 29H\\\\NMJ[ ROMK[ RXMYNZNYMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW',\n 2137: ' 23H\\\\KFMFOGPHQJWXXZY[ RMFOHPJVXWZY[Z[ RRMJ[ RRMK[',\n 2138: ' 28F]MMGb RNMHb RMPLVLYN[P[RZTXVU RXMUXUZV[Y[[Y\\\\W RYMVXVZW[',\n 2139: ' 24H\\\\NML[ ROMNSMXL[ RYMXQVU RZMYPXRVUTWQYOZL[ RKMOM',\n 2140: ' 45IZTFRGQHQIRJUKXK RUKQLOMNONQPSSTVT RUKRLPMOOOQQSST RSTOUMVLXLZN\\\\S^T_TaRbPb RSTPUNVMXMZO\\\\S^',\n 2141: ' 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN',\n 2142: ' 22G]PNL[ RPNM[ RVNV[ RVNW[ RIPKNNM[M RIPKONN[N',\n 2143: ' 31H[LVMYNZP[R[UZWWXTXQWOVNTMRMONMQLTHb RR[TZVWWTWPVN RRMPNNQMTIb',\n 2144: ' 35H][MQMNNLQKTKWLYMZO[Q[TZVWWTWQVOUNSM RQMONMQLTLXMZ RQ[SZUWVTVPUN RUN[N',\n 2145: ' 16H\\\\SNP[ RSNQ[ RJPLNOMZM RJPLOONZN',\n 2146: ' 31H\\\\IQJOLMOMPNPPNVNYP[ RNMONOPMVMYNZP[Q[TZVXXUYRYOXMWNXOYR RXUYO',\n 2147: ' 37G]ONMOKQJTJWKYLZN[Q[TZWXYUZRZOXMVMTORSPXMb RJWLYNZQZTYWWYU RZOXNVNTPRSPYNb',\n 2148: ' 23I[KMMMONPPU_VaWb RMMNNOPT_UaWbYb RZMYOWRM]K`Jb',\n 2149: ' 34F]UFOb RVFNb RGQHOJMMMNNNPMUMXOZRZTYWVYS RLMMNMPLULXMZO[R[TZVXXUYS[M',\n 2150: ' 44F]JQLOONNMLNJQITIWJZK[M[OZQWRT RIWJYKZMZOYQW RQTQWRZS[U[WZYWZTZQYNXMWNYOZQ RQWRYSZUZWYYW',\n 2151: ' 39H]XMVTUXUZV[Y[[Y\\\\W RYMWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ',\n 2152: ' 36H[PFLSLVMYNZ RQFMS RMSNPPNRMTMVNWOXQXTWWUZR[P[NZMWMS RVNWPWTVWTZR[ RMFQF',\n 2153: ' 25I[WPWQXQXPWNUMRMONMQLTLWMYNZP[R[UZWW RRMPNNQMTMXNZ',\n 2154: ' 42H]ZFVTUXUZV[Y[[Y\\\\W R[FWTVXVZW[ RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RWF[F',\n 2155: ' 26I[MVQUTTWRXPWNUMRMONMQLTLWMYNZP[R[UZWX RRMPNNQMTMXNZ',\n 2156: ' 35KZZGYHZI[H[GZFXFVGUHTJSMP[O_Na RXFVHUJTNRWQ[P^O`NaLbJbIaI`J_K`Ja ROMYM',\n 2157: ' 43H\\\\YMU[T^RaObLbJaI`I_J^K_J` RXMT[S^QaOb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ',\n 2158: ' 31H]PFJ[ RQFK[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\\\W RMFQF',\n 2159: ' 26LYUFTGUHVGUF RMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW',\n 2160: ' 32LYVFUGVHWGVF RNQOOQMTMUNUQR[Q^P`OaMbKbJaJ`K_L`Ka RSMTNTQQ[P^O`Mb',\n 2161: ' 34H\\\\PFJ[ RQFK[ RXNWOXPYOYNXMWMUNQROSMS ROSQTSZT[ ROSPTRZS[U[WZYW RMFQF',\n 2162: ' 18MYUFQTPXPZQ[T[VYWW RVFRTQXQZR[ RRFVF',\n 2163: ' 52AbBQCOEMHMINIPHTF[ RGMHNHPGTE[ RHTJPLNNMPMRNSOSQP[ RPMRORQO[ RRTTPVNXMZM\\\\N]O]Q[W[Z\\\\[ RZM\\\\O\\\\QZWZZ[[^[`YaW',\n 2164: ' 37F]GQHOJMMMNNNPMTK[ RLMMNMPLTJ[ RMTOPQNSMUMWNXOXQVWVZW[ RUMWOWQUWUZV[Y[[Y\\\\W',\n 2165: ' 32I[RMONMQLTLWMYNZP[R[UZWWXTXQWOVNTMRM RRMPNNQMTMXNZ RR[TZVWWTWPVN',\n 2166: ' 42G\\\\HQIOKMNMONOPNTJb RMMNNNPMTIb RNTOQQNSMUMWNXOYQYTXWVZS[Q[OZNWNT RWNXPXTWWUZS[ RFbMb',\n 2167: ' 33H\\\\XMRb RYMSb RVTVQUNSMQMNNLQKTKWLYMZO[Q[SZUWVT RQMONMQLTLXMZ RObVb',\n 2168: ' 26IZJQKOMMPMQNQPPTN[ ROMPNPPOTM[ RPTRPTNVMXMYNYOXPWOXN',\n 2169: ' 28J[XOXPYPYOXNUMRMONNONQORVVWW RNPOQVUWVWYVZS[P[MZLYLXMXMY',\n 2170: ' 18KYTFPTOXOZP[S[UYVW RUFQTPXPZQ[ RNMWM',\n 2171: ' 37F]GQHOJMMMNNNQLWLYN[ RLMMNMQKWKYLZN[P[RZTXVT RXMVTUXUZV[Y[[Y\\\\W RYMWTVXVZW[',\n 2172: ' 26H\\\\IQJOLMOMPNPQNWNYP[ RNMONOQMWMYNZP[Q[TZVXXUYQYMXMYO',\n 2173: ' 41C`DQEOGMJMKNKQIWIYK[ RIMJNJQHWHYIZK[M[OZQXRV RTMRVRYSZU[W[YZ[X\\\\V]R]M\\\\M]O RUMSVSYU[',\n 2174: ' 42H\\\\KQMNOMRMSOSR RQMRORRQVPXNZL[K[JZJYKXLYKZ RQVQYR[U[WZYW RYNXOYPZOZNYMXMVNTPSRRVRYS[',\n 2175: ' 41G\\\\HQIOKMNMONOQMWMYO[ RMMNNNQLWLYMZO[Q[SZUXWT RZMV[U^SaPbMbKaJ`J_K^L_K` RYMU[T^RaPb',\n 2176: ' 31H\\\\YMXOVQNWLYK[ RLQMOOMRMVO RMOONRNVOXO RLYNYRZUZWY RNYR[U[WYXW',\n 2177: ' 43G^VGUHVIWHWGUFRFOGMILLL[ RRFPGNIMLM[ R\\\\G[H\\\\I]H]G\\\\FZFXGWIW[ RZFYGXIX[ RIM[M RI[P[ RT[[[',\n 2178: ' 33G]WGVHWIXHWGUFRFOGMILLL[ RRFPGNIMLM[ RWMW[ RXMX[ RIMXM RI[P[ RT[[[',\n 2179: ' 35G]VGUHVIWHWGUF RXFRFOGMILLL[ RRFPGNIMLM[ RWHW[ RXFX[ RIMWM RI[P[ RT[[[',\n 2180: ' 54BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R]G\\\\H]I^H]G[FXFUGSIRLR[ RXFVGTISLS[ R]M][ R^M^[ RDM^M RD[K[ RO[V[ RZ[a[',\n 2181: ' 56BcRGQHRISHRGPFMFJGHIGLG[ RMFKGIIHLH[ R\\\\G[H\\\\I]H]G[F R^FXFUGSIRLR[ RXFVGTISLS[ R]H][ R^F^[ RDM]M RD[K[ RO[V[ RZ[a[',\n 2182: ' 12MXRMR[ RSMS[ ROMSM RO[V[',\n 2184: ' 25IZWNUMRMONMPLSLVMYNZQ[T[VZ RRMPNNPMSMVNYOZQ[ RMTUT',\n 2185: ' 43I\\\\TFQGOJNLMOLTLXMZO[Q[TZVWWUXRYMYIXGVFTF RTFRGPJOLNOMTMXNZO[ RQ[SZUWVUWRXMXIWGVF RNPWP',\n 2186: ' 42G]UFOb RVFNb RQMMNKPJSJVKXMZP[S[WZYXZUZRYPWNTMQM RQMNNLPKSKVLXNZP[ RS[VZXXYUYRXPVNTM',\n 2187: ' 27I[TMVNXPXOWNTMQMNNMOLQLSMUOWSZ RQMONNOMQMSNUSZT\\\\T^S_Q_',\n 2190: ' 45G]LMKNJPJRKUOYP[ RJRKTOXP[P]O`MbLbKaJ_J\\\\KXMTOQRNTMVMYNZPZTYXWZU[T[SZSXTWUXTY RVMXNYPYTXXWZ',\n 2191: ' 69E_YGXHYIZHYGWFTFQGOINKMNLRJ[I_Ha RTFRGPIOKNNLWK[J^I`HaFbDbCaC`D_E`Da R_G^H_I`H`G_F]F[GZHYJXMU[T_Sa R]F[HZJYNWWV[U^T`SaQbObNaN`O_P`Oa RIM^M',\n 2192: ' 52F^[GZH[I\\\\H[GXFUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea RYMWTVXVZW[Z[\\\\Y]W RZMXTWXWZX[ RJMZM',\n 2193: ' 54F^YGXHYIZHZGXF R\\\\FUFRGPIOKNNMRK[J_Ia RUFSGQIPKONMWL[K^J`IaGbEbDaD`E_F`Ea R[FWTVXVZW[Z[\\\\Y]W R\\\\FXTWXWZX[ RJMYM',\n 2194: ' 86@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R`G_H`IaH`G]FZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R^M\\\\T[X[Z\\\\[_[aYbW R_M]T\\\\X\\\\Z][ RDM_M',\n 2195: ' 88@cTGSHTIUHTGRFOFLGJIIKHNGRE[D_Ca ROFMGKIJKINGWF[E^D`CaAb?b>a>`?_@`?a R^G]H^I_H_G]F RaFZFWGUITKSNRRP[O_Na RZFXGVIUKTNRWQ[P^O`NaLbJbIaI`J_K`Ja R`F\\\\T[X[Z\\\\[_[aYbW RaF]T\\\\X\\\\Z][ RDM^M',\n 2196: ' 20LYMQNOPMSMTNTQRWRZS[ RRMSNSQQWQZR[U[WYXW',\n 2200: ' 40H\\\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RQFOGNHMJLOLRMWNYOZQ[ RS[UZVYWWXRXOWJVHUGSF',\n 2201: ' 11H\\\\NJPISFS[ RRGR[ RN[W[',\n 2202: ' 45H\\\\LJMKLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RTFVGWHXJXLWNTPPR RKYLXNXSZVZXYYX RNXS[W[XZYXYV',\n 2203: ' 47H\\\\LJMKLLKKKJLHMGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[P[MZLYKWKVLUMVLW RWQXTXWWYVZT[',\n 2204: ' 13H\\\\THT[ RUFU[ RUFJUZU RQ[X[',\n 2205: ' 39H\\\\MFKP RKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMVLW RSMUNWPXSXUWXUZS[ RMFWF RMGRGWF',\n 2206: ' 48H\\\\WIVJWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNRNOOMQLT RRFPGNIMKLOLUMXOZQ[ RS[UZWXXUXTWQUOSN',\n 2207: ' 31H\\\\KFKL RKJLHNFPFUIWIXHYF RLHNGPGUI RYFYIXLTQSSRVR[ RXLSQRSQVQ[',\n 2208: ' 63H\\\\PFMGLILLMNPOTOWNXLXIWGTFPF RPFNGMIMLNNPO RTOVNWLWIVGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RPONPMQLSLWMYNZP[ RT[VZWYXWXSWQVPTO',\n 2209: ' 48H\\\\XMWPURRSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNWMX RQSORMPLMLLMIOGQF RSFUGWIXLXRWVVXTZR[',\n 2210: ' 6MWRYQZR[SZRY',\n 2211: ' 8MWR[QZRYSZS\\\\R^Q_',\n 2212: ' 12MWRMQNROSNRM RRYQZR[SZRY',\n 2213: ' 14MWRMQNROSNRM RR[QZRYSZS\\\\R^Q_',\n 2214: ' 15MWRFQHRTSHRF RRHRN RRYQZR[SZRY',\n 2215: ' 32I[MJNKMLLKLJMHNGPFSFVGWHXJXLWNVORQRT RSFUGVHWJWLVNTP RRYQZR[SZRY',\n 2216: ' 6NVRFQM RSFQM',\n 2217: ' 12JZNFMM ROFMM RVFUM RWFUM',\n 2218: ' 14KYQFOGNINKOMQNSNUMVKVIUGSFQF',\n 2219: ' 9JZRFRR RMIWO RWIMO',\n 2220: ' 3G][BIb',\n 2221: ' 20KYVBTDRGPKOPOTPYR]T`Vb RTDRHQKPPPTQYR\\\\T`',\n 2222: ' 20KYNBPDRGTKUPUTTYR]P`Nb RPDRHSKTPTTSYR\\\\P`',\n 2223: ' 12KYOBOb RPBPb ROBVB RObVb',\n 2224: ' 12KYTBTb RUBUb RNBUB RNbUb',\n 2225: ' 40KYTBRCQDPFPHQJRKSMSOQQ RRCQEQGRISJTLTNSPORSTTVTXSZR[Q]Q_Ra RQSSUSWRYQZP\\\\P^Q`RaTb',\n 2226: ' 40KYPBRCSDTFTHSJRKQMQOSQ RRCSESGRIQJPLPNQPURQTPVPXQZR[S]S_Ra RSSQUQWRYSZT\\\\T^S`RaPb',\n 2227: ' 4KYUBNRUb',\n 2228: ' 4KYOBVROb',\n 2229: ' 3NVRBRb',\n 2230: ' 6KYOBOb RUBUb',\n 2231: ' 3E_IR[R',\n 2232: ' 6E_RIR[ RIR[R',\n 2233: ' 9F^RJR[ RJRZR RJ[Z[',\n 2234: ' 9F^RJR[ RJJZJ RJRZR',\n 2235: ' 6G]KKYY RYKKY',\n 2236: ' 6MWRQQRRSSRRQ',\n 2237: ' 15E_RIQJRKSJRI RIR[R RRYQZR[SZRY',\n 2238: ' 6E_IO[O RIU[U',\n 2239: ' 9E_YIK[ RIO[O RIU[U',\n 2240: ' 9E_IM[M RIR[R RIW[W',\n 2241: ' 4F^ZIJRZ[',\n 2242: ' 4F^JIZRJ[',\n 2243: ' 10F^ZFJMZT RJVZV RJ[Z[',\n 2244: ' 10F^JFZMJT RJVZV RJ[Z[',\n 2245: ' 21F_[WYWWVUTRPQOONMNKOJQJSKUMVOVQURTUPWNYM[M',\n 2246: ' 24F^IUISJPLONOPPTSVTXTZS[Q RISJQLPNPPQTTVUXUZT[Q[O',\n 2247: ' 8G]JTROZT RJTRPZT',\n 2248: ' 7LXTFOL RTFUGOL',\n 2249: ' 7LXPFUL RPFOGUL',\n 2250: ' 18H\\\\KFLHNJQKSKVJXHYF RKFLINKQLSLVKXIYF',\n 2251: ' 8MWRHQGRFSGSIRKQL',\n 2252: ' 8MWSFRGQIQKRLSKRJ',\n 2253: ' 8MWRHSGRFQGQIRKSL',\n 2254: ' 8MWQFRGSISKRLQKRJ',\n 2255: ' 10E[HMLMRY RKMR[ R[BR[',\n 2256: ' 13F^ZJSJOKMLKNJQJSKVMXOYSZZZ',\n 2257: ' 13F^JJJQKULWNYQZSZVYXWYUZQZJ',\n 2258: ' 13F^JJQJUKWLYNZQZSYVWXUYQZJZ',\n 2259: ' 13F^JZJSKOLMNKQJSJVKXMYOZSZZ',\n 2260: ' 16F^ZJSJOKMLKNJQJSKVMXOYSZZZ RJRVR',\n 2261: ' 11E_XP[RXT RUMZRUW RIRZR',\n 2262: ' 11JZPLRITL RMORJWO RRJR[',\n 2263: ' 11E_LPIRLT ROMJROW RJR[R',\n 2264: ' 11JZPXR[TX RMURZWU RRIRZ',\n 2265: ' 44I\\\\XRWOVNTMRMONMQLTLWMYNZP[R[UZWXXUYPYKXHWGUFRFPGOHOIPIPH RRMPNNQMTMXNZ RR[TZVXWUXPXKWHUF',\n 2266: ' 15H\\\\JFR[ RKFRY RZFR[ RJFZF RKGYG',\n 2267: ' 10AbDMIMRY RHNR[ Rb:R[',\n 2268: ' 32F^[CZD[E\\\\D\\\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia',\n 2269: ' 50F^[CZD[E\\\\D\\\\C[BYBWCUETGSJRNPZO^N` RVDUFTJRVQZP]O_MaKbIbHaH`I_J`Ia RQKNLLNKQKSLVNXQYSYVXXVYSYQXNVLSKQK',\n 2270: ' 26F_\\\\S[UYVWVUUTTQPPONNLNJOIQISJULVNVPUQTTPUOWNYN[O\\\\Q\\\\S',\n 2271: ' 32F^[FI[ RNFPHPJOLMMKMIKIIJGLFNFPGSHVHYG[F RWTUUTWTYV[X[ZZ[X[VYTWT',\n 2272: ' 49F_[NZO[P\\\\O\\\\N[MZMYNXPVUTXRZP[M[JZIXIUJSPORMSKSIRGPFNGMIMKNNPQUXWZZ[[[\\\\Z\\\\Y RM[KZJXJUKSMQ RMKNMVXXZZ[',\n 2273: ' 56E`WNVLTKQKOLNMMPMSNUPVSVUUVS RQKOMNPNSOUPV RWKVSVUXVZV\\\\T]Q]O\\\\L[JYHWGTFQFNGLHJJILHOHRIUJWLYNZQ[T[WZYYZX RXKWSWUXV',\n 2274: ' 42H\\\\PBP_ RTBT_ RXIWJXKYJYIWGTFPFMGKIKKLMMNOOUQWRYT RKKMMONUPWQXRYTYXWZT[P[MZKXKWLVMWLX',\n 2275: ' 12H]SFLb RYFRb RLQZQ RKWYW',\n 2276: ' 46JZUITJUKVJVIUGSFQFOGNINKOMQOVR ROMTPVRWTWVVXTZ RPNNPMRMTNVPXU[ RNVSYU[V]V_UaSbQbOaN_N^O]P^O_',\n 2277: ' 30JZRFQHRJSHRF RRFRb RRQQTRbSTRQ RLMNNPMNLLM RLMXM RTMVNXMVLTM',\n 2278: ' 56JZRFQHRJSHRF RRFRT RRPQRSVRXQVSRRP RRTRb RR^Q`RbS`R^ RLMNNPMNLLM RLMXM RTMVNXMVLTM RL[N\\\\P[NZL[ RL[X[ RT[V\\\\X[VZT[',\n 2279: ' 12I\\\\XFX[ RKFXF RPPXP RK[X[',\n 2281: ' 38E`QFNGKIILHOHRIUKXNZQ[T[WZZX\\\\U]R]O\\\\LZIWGTFQF RROQPQQRRSRTQTPSORO RRPRQSQSPRP',\n 2282: ' 45J[PFNGOIQJ RPFOGOI RUFWGVITJ RUFVGVI RQJOKNLMNMQNSOTQUTUVTWSXQXNWLVKTJQJ RRUR[ RSUS[ RNXWX',\n 2283: ' 27I\\\\RFOGMILLLMMPORRSSSVRXPYMYLXIVGSFRF RRSR[ RSSS[ RNWWW',\n 2284: ' 28D`PFMGJIHLGOGSHVJYM[P\\\\T\\\\W[ZY\\\\V]S]O\\\\LZIWGTFPF RRFR\\\\ RGQ]Q',\n 2285: ' 31G`PMMNKPJSJTKWMYPZQZTYVWWTWSVPTNQMPM R]GWG[HUN R]G]M\\\\IVO R\\\\HVN',\n 2286: ' 28F\\\\IIJGLFOFQGRIRLQOPQNSKU ROFPGQIQMPPNS RVFT[ RWFS[ RKUYU',\n 2287: ' 30I\\\\MFMU RNFMQ RMQNOONQMTMWNXPXRWTUV RTMVNWPWRTXTZU[W[YY RKFNF',\n 2288: ' 44I\\\\RNOOMQLTLUMXOZR[S[VZXXYUYTXQVOSNRN RRHNJRFRN RSHWJSFSN RRSQTQURVSVTUTTSSRS RRTRUSUSTRT',\n 2289: ' 37G^QHRFR[ RTHSFS[ RJHKFKMLPNRQSRS RMHLFLNMQ R[HZFZMYPWRTSSS RXHYFYNXQ RNWWW',\n 2290: ' 31G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[Y[YVX[',\n 2291: ' 24H[YGUGQHNJLMKPKSLVNYQ[U\\\\Y\\\\ RYGVHSJQMPPPSQVSYV[Y\\\\',\n 2292: ' 27F_OQMQKRJSIUIWJYKZM[O[QZRYSWSURSQROQ RSHPQ RZJRR R\\\\QST',\n 2293: ' 12H\\\\OKUY RUKOY RKOYU RYOKU',\n 2294: ' 48F^NVLUKUIVHXHYI[K\\\\L\\\\N[OYOXNVKRJOJMKJMHPGTGWHYJZMZOYRVVUXUYV[X\\\\Y\\\\[[\\\\Y\\\\X[VYUXUVV RJMKKMIPHTHWIYKZM',\n 2295: ' 48F^NMLNKNIMHKHJIHKGLGNHOJOKNMKQJTJVKYM[P\\\\T\\\\W[YYZVZTYQVMUKUJVHXGYG[H\\\\J\\\\K[MYNXNVM RJVKXMZP[T[WZYXZV',\n 2301: ' 40F_JMILIJJHLGNGPHQIRKSP RIJKHMHOIPJQLRPR[ R[M\\\\L\\\\J[HYGWGUHTISKRP R\\\\JZHXHVIUJTLSPS[',\n 2302: ' 51F^IGJKKMMOPPTPWOYMZK[G RIGJJKLMNPOTOWNYLZJ[G RPONPMQLSLVMXOZQ[S[UZWXXVXSWQVPTO RPPNQMSMVNY RVYWVWSVQTP',\n 2303: ' 30F^MJMV RNKNU RVKVU RWJWV RIGKIMJPKTKWJYI[G RIYKWMVPUTUWVYW[Y',\n 2304: ' 48F^[ILIJJILINJPLQNQPPQNQLPJ[J RIMJOKPMQ RQMPKOJMI RIXXXZW[U[SZQXPVPTQSSSUTWIW R[TZRYQWP RSTTVUWWX',\n 2305: ' 48F]OUMTLTJUIWIXJZL[M[OZPXPWOUJPINIKJILHOGSGWHYJZLZOYRVUUWUYV[X[YZZX RMSKPJNJKKILH RSGVHXJYLYOXRVU',\n 2306: ' 48G_HKKHMKMV RJILLLV RMKPHRKRU ROIQLQU RRKUHWKW[ RTIVLV[ RWKZH[J\\\\M\\\\P[SZUXWUYP[ RYIZJ[M[PZSYUWWTYP[',\n 2307: ' 41F^ISMSLRKOKMLJNHQGSGVHXJYMYOXRWS[S RITOTMRLOLMMJOHQG RSGUHWJXMXOWRUT[T RKXYX RKYYY',\n 2308: ' 30F_GLJIMLMX RIJLMLX RMLPISLSX ROJRMRX RSLVIYLYW[Y RUJXMXXZZ]W',\n 2309: ' 33G]ZIJY RZIWJQJ RXKUKQJ RZIYLYR RXKXNYR RQRJR RPSMSJR RQRQY RPSPVQY',\n 2310: ' 33F^HOJKOU RJMOWRPWPZO[M[KZIXHWHUITKTMUPVRWUWXUZ RWHVIUKUMWQXTXWWYUZ',\n 2311: ' 36F^IOLLPN RKMOORLUN RQMTOWLYN RVMXO[L RIULRPT RKSOURRUT RQSTUWRYT RVSXU[R',\n 2312: ' 48F^JHNJPLQOQRPUNWJY RJHMIOJQLRO RRRQUOWMXJY RZHWIUJSLRO RRRSUUWWXZY RZHVJTLSOSRTUVWZY RIP[P RIQ[Q',\n 2317: ' 12NVQQQSSSSQQQ RQQSS RSQQS',\n 2318: ' 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY',\n 2319: ' 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT',\n 2320: ' 36H\\\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR',\n 2321: ' 36H\\\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR',\n 2322: ' 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT',\n 2323: ' 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV',\n 2324: ' 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV',\n 2325: ' 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU',\n 2326: ' 18E_HIHL R\\\\I\\\\L RHI\\\\I RHJ\\\\J RHK\\\\K RHL\\\\L',\n 2327: ' 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ',\n 2328: ' 49JZMLWX RMLONQOTOVNWMWKUKUMTO RONTO RQOWM RVKVN RULWL RWXUVSUPUNVMWMYOYOWPU RUVPU RSUMW RNVNY RMXOX',\n 2329: ' 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLWY',\n 2330: ' 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\\\R\\\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\\\U[WZYWZTZPYMXKVITH',\n 2331: '103EfNSOUQVSVUUVSVQUOSNQNOONPMSMVNYP[S\\\\V\\\\Y[[Y\\\\W]T]P\\\\MZJXIUHRHOIMJKLIOHSHXI]KaMcPeTfYf]e`cba RKLJNIRIXJ\\\\L`NbQdUeYe]d_cba RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU RaLaNcNcLaL RbLbN RaMcM RaVaXcXcVaV RbVbX RaWcW',\n 2332: ' 30D`H@Hd RM@Md RW@Wd R\\\\@\\\\d RMMWK RMNWL RMOWM RMWWU RMXWV RMYWW',\n 2367: ' 12NVQQQSSSSQQQ RQQSS RSQQS',\n 2368: ' 18JZMPQRTTVVWYW[V]U^ RMQST RMRPSTUVWWY',\n 2369: ' 18JZWKVMTOPQMR RSPMS RUFVGWIWKVNTPQRMT',\n 2370: ' 32H\\\\PMMNLOKQKSLUMVPWTWWVXUYSYQXOWNTMPM RMNLPLSMUNVPW RWVXTXQWOVNTM',\n 2371: ' 36H\\\\SMONLPKRKTLVNWQWUVXTYRYPXNVMSM RXNSM RVMQNLP RONKR RLVQW RNWSVXT RUVYR',\n 2372: ' 34J[SMPNNPMRMTNVPWRWUVWTXRXPWNUMSM ROPUM RNRVN RMTWO RNUXP ROVWR RPWVT',\n 2373: ' 18JZOGO^ RUFU] RMNWL RMOWM RMWWU RMXWV',\n 2374: ' 18JZNFNX RVLV^ RNNVL RNOVM RNWVU RNXVV',\n 2375: ' 25JZNBNW RNNQLTLVMWOWQVSSUQVNW RNNQMTMVN RUMVOVQUSSU',\n 2376: ' 18E_HIHL R\\\\I\\\\L RHI\\\\I RHJ\\\\J RHK\\\\K RHL\\\\L',\n 2377: ' 18JZMNMQ RWNWQ RMNWN RMOWO RMPWP RMQWQ',\n 2378: ' 36JZQCVMRTRU RULQS RTITKPRRUUY RW\\\\UYSXQXOYN[N]O_Ra RW\\\\UZSYOYO]P_Ra RSXPZN]',\n 2379: ' 26JZPOOMOKMKMMNNPOSOUNWL RNKNN RMLOL RMMSO RPOUN RWLSY',\n 2380: ' 86A^GfHfIeIdHcGcFdFfGhIiKiNhPfQdR`RUQ;Q4R/S-U,V,X-Y/Y3X6W8U;P?JCHEFHEJDNDREVGYJ[N\\\\R\\\\V[XZZW[T[PZMYKWITHPHMIKKJNJRKUMW RGdGeHeHdGd RU;Q?LCIFGIFKENERFVGXJ[ RR\\\\U[WZYWZTZPYMXKVITH',\n 2381: ' 89IjNQOOQNSNUOVQVSUUSVQVOUNTMQMNNKPISHWH[I^K`NaRaW`[_]]`ZcVfQiMk RWHZI]K_N`R`W_[^]\\\\`YcTgQi RPOTO ROPUP RNQVQ RNRVR RNSVS ROTUT RPUTU ReLeNgNgLeL RfLfN ReMgM ReVeXgXgVeV RfVfX ReWgW',\n 2382: ' 85D`H>Hf RI>If RM>Mf RQBSBSDQDQAR?T>W>Y?[A\\\\D\\\\I[LYNWOUOSNRLQNOQNROSQVRXSVUUWUYV[X\\\\[\\\\`[cYeWfTfReQcQ`S`SbQb RRBRD RQCSC RY?ZA[D[IZLYN RRLRNPQNRPSRVRX RYVZX[[[`ZcYe RR`Rb RQaSa',\n 2401: ' 21AcHBHb RIBIb R[B[b R\\\\B\\\\b RDB`B RDbMb RWb`b',\n 2402: ' 23BaGBQPFb RFBPP REBPQ REB\\\\B^I[B RGa\\\\a RFb\\\\b^[[b',\n 2403: ' 28I[X+U1R8P=OANFMNMVN^OcPgRlUsXy RU1S6Q<P@OFNNNVO^PdQhSnUs',\n 2404: ' 28I[L+O1R8T=UAVFWNWVV^UcTgRlOsLy RO1Q6S<T@UFVNVVU^TdShQnOs',\n 2405: ' 14I[M+MRMy RN+NRNy RM+X+ RMyXy',\n 2406: ' 14I[V+VRVy RW+WRWy RL+W+ RLyWy',\n 2407: ' 48I[V+S-Q/P1O4O8P<TDUGUJTMRP RS-Q0P4P8Q;UCVGVJUMRPNRRTUWVZV]UaQiPlPpQtSw RRTTWUZU]T`PhOlOpPsQuSwVy',\n 2408: ' 48I[N+Q-S/T1U4U8T<PDOGOJPMRP RQ-S0T4T8S;OCNGNJOMRPVRRTOWNZN]OaSiTlTpStQw RRTPWOZO]P`ThUlUpTsSuQwNy',\n 2409: ' 32I[V.S1Q4O8N=NCOIPMSXT\\\\UbUgTlSoQs RS1Q5P8O=OBPHQLTWU[VaVgUlSpQsNv',\n 2410: ' 32I[N.Q1S4U8V=VCUITMQXP\\\\ObOgPlQoSs RQ1S5T8U=UBTHSLPWO[NaNgOlQpSsVv',\n 2411: ' 147Z:RARRo R@RQo R?RRr RZ\"VJRr',\n 2412: ' 57Ca].\\\\.[/[0\\\\1]1^0^.],[+Y+W,U.T0S3R:QJQjPsOv R\\\\/\\\\0]0]/\\\\/ RR:Rj RU.T1S:SZRjQqPtOvMxKyIyGxFvFtGsHsItIuHvGv RGtGuHuHtGt',\n 2501: ' 20H\\\\RFJ[ RRIK[J[ RRIY[Z[ RRFZ[ RMUWU RLVXV',\n 2502: ' 44H\\\\LFL[ RMGMZ RLFTFWGXHYJYMXOWPTQ RMGTGWHXJXMWOTP RMPTPWQXRYTYWXYWZT[L[ RMQTQWRXTXWWYTZMZ',\n 2503: ' 38H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZV RZKYKXIWHUGQGOHMKLNLSMVOYQZUZWYXXYVZV',\n 2504: ' 32H]LFL[ RMGMZ RLFSFVGXIYKZNZSYVXXVZS[L[ RMGSGVHWIXKYNYSXVWXVYSZMZ',\n 2505: ' 27I\\\\MFM[ RNGNZ RMFYF RNGYGYF RNPTPTQ RNQTQ RNZYZY[ RM[Y[',\n 2506: ' 21I[MFM[ RNGN[M[ RMFYF RNGYGYF RNPTPTQ RNQTQ',\n 2507: ' 44H]ZKYIWGUFQFOGMILKKNKSLVMXOZQ[U[WZYXZVZRUR RZKYKXIWHUGQGOHNIMKLNLSMVNXOYQZUZWYXXYVYSUSUR',\n 2508: ' 22G]KFK[ RKFLFL[K[ RYFXFX[Y[ RYFY[ RLPXP RLQXQ',\n 2509: ' 8NWRFR[S[ RRFSFS[',\n 2510: ' 20J[VFVVUYSZQZOYNVMV RVFWFWVVYUZS[Q[OZNYMV',\n 2511: ' 22H]LFL[M[ RLFMFM[ RZFYFMR RZFMS RPOY[Z[ RQOZ[',\n 2512: ' 14IZMFM[ RMFNFNZ RNZYZY[ RM[Y[',\n 2513: ' 26F^JFJ[ RKKK[J[ RKKR[ RJFRX RZFRX RYKR[ RYKY[Z[ RZFZ[',\n 2514: ' 20G]KFK[ RLIL[K[ RLIY[ RKFXX RXFXX RXFYFY[',\n 2515: ' 40G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG',\n 2516: ' 27H\\\\LFL[ RMGM[L[ RLFUFWGXHYJYMXOWPUQMQ RMGUGWHXJXMWOUPMP',\n 2517: ' 48G]PFNGLIKKJNJSKVLXNZP[T[VZXXYVZSZNYKXIVGTFPF RQGNHLKKNKSLVNYQZSZVYXVYSYNXKVHSGQG RSXX]Y] RSXTXY]',\n 2518: ' 34H\\\\LFL[ RMGM[L[ RLFTFWGXHYJYMXOWPTQMQ RMGTGWHXJXMWOTPMP RRQX[Y[ RSQY[',\n 2519: ' 43H\\\\YIWGTFPFMGKIKKLMMNOOTQVRWSXUXXWYTZPZNYMXKX RYIWIVHTGPGMHLILKMMONTPVQXSYUYXWZT[P[MZKX',\n 2520: ' 15J[RGR[ RSGS[R[ RLFYFYG RLFLGYG',\n 2521: ' 24G]KFKULXNZQ[S[VZXXYUYF RKFLFLUMXNYQZSZVYWXXUXFYF',\n 2522: ' 14H\\\\JFR[ RJFKFRX RZFYFRX RZFR[',\n 2523: ' 26E_GFM[ RGFHFMX RRFMX RRIM[ RRIW[ RRFWX R]F\\\\FWX R]FW[',\n 2524: ' 16H\\\\KFX[Y[ RKFLFY[ RYFXFK[ RYFL[K[',\n 2525: ' 17I\\\\KFRPR[S[ RKFLFSP RZFYFRP RZFSPS[',\n 2526: ' 20H\\\\XFK[ RYFL[ RKFYF RKFKGXG RLZYZY[ RK[Y[',\n 2551: ' 38E\\\\XFVHTKQPOSLWIZG[E[DZDXEWFXEY RXFWJUTT[ RXFU[ RT[TYSVRTPRNQLQKRKTLWOZR[V[XZ',\n 2552: ' 70F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFXFZG[I[KZMXNTORO RXFYGZIZKYMXN RTOWPXQYSYVXYWZU[S[RZRXSU RTOVPWQXSXVWYU[',\n 2553: ' 41H]KHJJJLKNNOQOUNWMYKZIZGYFWFTGQJOMMQLULXMZP[R[UZWXXVXTWRURSSRU RWFUGRJPMNQMUMXNZP[',\n 2554: ' 43F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWJWLXNZP[S[UZWXYTZOZLYIWGUFPFMGKIJKJMKNMNNMOK',\n 2555: ' 49I\\\\WIVJVLWMYMZKZIYGWFTFRGQHPJPLQNSO RTFRHQJQMSO RSOQONPLRKTKWLYMZO[R[UZWXXVXTWRURSSRU RQOOPMRLTLXMZ',\n 2556: ' 46G\\\\WHVJTORUQWOZM[ RQLPNNOLOKMKKLINGQF[FXGWHVKTSSVRXPZM[K[IZHYHXIWJXIY RSFWGXG ROSPRRQVQXPZMXT',\n 2557: ' 53G]JIIKIMJOLPOPROTNWKXHXGWFVFTGRIQKPNPQQSSTUTWSYQZO RWFUGSIRKQNQRST RZOYSWWUYSZO[L[JZIXIWJVKWJX RYSWVUXRZO[',\n 2558: ' 55F^LLKKKILGOFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RJTKSMRVOXN[L]J^H^G]F\\\\FZGXJWLURTVTYV[W[YZ[X R\\\\FZHXLVRUVUYV[',\n 2559: ' 33IYWHUKSPQUPWNZL[ RYLWNTOQOONNLNJOHQGUFYFWHVJTPRVQXOZL[J[IZIXJWKXJY',\n 2560: ' 34IZYFWHUKSPPYN] RYMWOTPQPOONMNKOIQGUFYFWIVKSTQXPZN]M^K_J^J\\\\KZMXOWRVVU',\n 2561: ' 59F^LLKKKIMGPFRFOQMWLYKZI[G[FZFXGWHXGY RRFOONRLWKYI[ RZGWKUMSNPO R]G\\\\H]I^H^G]F\\\\FZGWLVMTNPO RPOSPTRUYV[ RPORPSRTYV[W[YZ[X',\n 2562: ' 40I[MILKLMMOOPRPUOWNZK[H[GZFYFWGVHTKPUOWMZK[ RVHTLRSQVPXNZK[I[HZHXIWKWMXPZR[U[WZYX',\n 2563: ' 49D`RFNOKUIXGZE[C[BZBXCWDXCY RRFPMOQNVNZP[ RRFQJPOOVOZP[ R[FWORXP[ R[FYMXQWVWZY[Z[\\\\Z^X R[FZJYOXVXZY[',\n 2564: ' 38G^RFQJOPMULWJZH[F[EZEXFWGXFY RRFRKSVT[ RRFSKTVT[ R`G_H`IaHaG`F^F\\\\GZJYLWQUWT[',\n 2565: ' 34H]SFQGOIMLLNKRKVLYMZO[Q[TZVXXUYSZOZKYHXGWGUHSJQNPSPV RQGOJMNLRLVMYO[',\n 2566: ' 53F]UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFVFYGZH[J[MZOYPVQTQRP RVFXGYHZJZMYOXPVQ',\n 2567: ' 43H]UJULTNSOQPOPNNNLOIQGTFWFYGZIZMYPWSSWPYNZK[I[HZHXIWKWMXPZS[V[XZZX RWFXGYIYMXPVSSVOYK[',\n 2568: ' 65F^UGTHSJQOOUNWLZJ[ RTHSKQSPVOXMZJ[H[GZGXHWIXHY ROLNNMOKOJNJLKJMHOGRFWFZG[I[KZMYNVORO RWFYGZIZKYMXNVO RROUPVRWYX[ RROTPURVYX[Y[[Z]X',\n 2569: ' 36H\\\\NIMKMMNOPPSPVOXN[K\\\\H\\\\G[FZFXGWHVJUMSTRWPZN[ RVJUNTUSXQZN[K[IZHXHWIVJWIX',\n 2570: ' 38I[YHXJVOTUSWQZO[ RSLRNPONOMMMKNIPGSF\\\\FZGYHXKVSUVTXRZO[M[KZJYJXKWLXKY RUFYGZG',\n 2571: ' 39G]HJJGLFMFOHOKNNKVKYL[ RMFNHNKKSJVJYL[N[PZSWUTVR RZFVRUVUYW[X[ZZ\\\\X R[FWRVVVYW[',\n 2572: ' 36G\\\\HJJGLFMFOHOKNOLVLYM[ RMFNHNKLRKVKYM[N[QZTWVTXPYMZIZGYFXFWGVIVLWNYP[Q]Q',\n 2573: ' 41F]ILHLGKGIHGJFNFMHLLKUJ[ RLLLUK[ RVFTHRLOUMYK[ RVFUHTLSUR[ RTLTUS[ R`F^G\\\\IZLWUUYS[',\n 2574: ' 52H\\\\PKOLMLLKLIMGOFQFSGTITLSPQUOXMZJ[H[GZGXHWIXHY RQFRGSISLRPPUNXLZJ[ R]G\\\\H]I^H^G]F[FYGWIULSPRURXSZT[U[WZYX',\n 2575: ' 42G]JJLGNFOFQGQIOOORPT ROFPGPINONRPTRTUSWQYNZL R\\\\FZLWTUX R]F[LYQWUUXSZP[L[JZIXIWJVKWJX',\n 2576: ' 44G\\\\ZHYJWOVRUTSWQYOZL[ RSLRNPONOMMMKNIPGSF]F[GZHYKXOVUTXQZL[H[GZGXHWJWLXOZQ[T[WZYX RVFZG[G',\n 2601: ' 36H\\\\WMW[X[ RWMXMX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX',\n 2602: ' 36H\\\\LFL[M[ RLFMFM[ RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX',\n 2603: ' 32I[XPVNTMQMONMPLSLUMXOZQ[T[VZXX RXPWQVOTNQNOONPMSMUNXOYQZTZVYWWXX',\n 2604: ' 36H\\\\WFW[X[ RWFXFX[ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX',\n 2605: ' 36I[MTXTXQWOVNTMQMONMPLSLUMXOZQ[T[VZXX RMSWSWQVOTNQNOONPMSMUNXOYQZTZVYWWXX',\n 2606: ' 24LZWFUFSGRJR[S[ RWFWGUGSH RTGSJS[ ROMVMVN ROMONVN',\n 2607: ' 48H\\\\XMWMW\\\\V_U`SaQaO`N_L_ RXMX\\\\W_UaSbPbNaL_ RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX',\n 2608: ' 25H\\\\LFL[M[ RLFMFM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[',\n 2609: ' 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMR[S[ RRMSMS[',\n 2610: ' 24NWRFQGQHRISITHTGSFRF RRGRHSHSGRG RRMRbSb RRMSMSb',\n 2611: ' 22H[LFL[M[ RLFMFM[ RXMWMMW RXMMX RPTV[X[ RQSX[',\n 2612: ' 8NWRFR[S[ RRFSFS[',\n 2613: ' 42CbGMG[H[ RGMHMH[ RHQKNMMPMRNSQS[ RHQKOMNONQORQR[S[ RSQVNXM[M]N^Q^[ RSQVOXNZN\\\\O]Q][^[',\n 2614: ' 25H\\\\LML[M[ RLMMMM[ RMQPNRMUMWNXQX[ RMQPORNTNVOWQW[X[',\n 2615: ' 36I\\\\QMONMPLSLUMXOZQ[T[VZXXYUYSXPVNTMQM RQNOONPMSMUNXOYQZTZVYWXXUXSWPVOTNQN',\n 2616: ' 36H\\\\LMLbMb RLMMMMb RMPONQMTMVNXPYSYUXXVZT[Q[OZMX RMPQNTNVOWPXSXUWXVYTZQZMX',\n 2617: ' 36H\\\\WMWbXb RWMXMXb RWPUNSMPMNNLPKSKULXNZP[S[UZWX RWPSNPNNOMPLSLUMXNYPZSZWX',\n 2618: ' 21KYOMO[P[ ROMPMP[ RPSQPSNUMXM RPSQQSOUNXNXM',\n 2619: ' 50J[XPWNTMQMNNMPNRPSUUWV RVUWWWXVZ RWYTZQZNY ROZNXMX RXPWPVN RWOTNQNNO RONNPOR RNQPRUTWUXWXXWZT[Q[NZMX',\n 2620: ' 16MXRFR[S[ RRFSFS[ ROMVMVN ROMONVN',\n 2621: ' 25H\\\\LMLWMZO[R[TZWW RLMMMMWNYPZRZTYWW RWMW[X[ RWMXMX[',\n 2622: ' 14JZLMR[ RLMMMRY RXMWMRY RXMR[',\n 2623: ' 26F^IMN[ RIMJMNX RRMNX RRPN[ RRPV[ RRMVX R[MZMVX R[MV[',\n 2624: ' 16I[LMW[X[ RLMMMX[ RXMWML[ RXMM[L[',\n 2625: ' 17JZLMR[ RLMMMRY RXMWMRYNb RXMR[ObNb',\n 2626: ' 20I[VNL[ RXMNZ RLMXM RLMLNVN RNZXZX[ RL[X[',\n 2651: ' 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRTXTZV[XZYY[V RWRUXUZV[',\n 2652: ' 23LZLVNSPO RSFMXMZO[P[RZTXUUURVVWWXWZV RTFNXNZO[',\n 2653: ' 22LXTSSTTTTSSRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[',\n 2654: ' 33K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RZFTXTZV[XZYY[V R[FUXUZV[',\n 2655: ' 23LXOYQXRWSUSSRRQROSNTMVMXNZP[S[VYXV RQROTNVNYP[',\n 2656: ' 27OXRRUOWLXIXGWFUGTIKdKfLgNfOcPZQ[S[UZVYXV RTISNRRO[M`Kd',\n 2657: ' 38K[UUTSRRPRNSMTLVLXMZO[Q[SZTX RPRNTMVMYO[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V',\n 2658: ' 30L[LVNSPO RSFL[ RTFM[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V',\n 2659: ' 19NVSLRMSNTMSL RQROXOZQ[SZTYVV RRRPXPZQ[',\n 2660: ' 24NVSLRMSNTMSL RQRKd RRRO[M`KdJfHgGfGdHaJ_M]Q[TYVV',\n 2661: ' 31LZLVNSPO RSFL[ RTFM[ RURUSVSURTRRTOU ROURVSZT[ ROUQVRZT[U[XYZV',\n 2662: ' 17NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[',\n 2663: ' 45E^EVGSIRKSKUI[ RIRJSJUH[ RKUMSORPRRSRUP[ RPRQSQUO[ RRUTSVRWRYSYUXXXZY[ RWRXSXUWXWZY[[Z\\\\Y^V',\n 2664: ' 32I[IVKSMROSOUM[ RMRNSNUL[ ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V',\n 2665: ' 29KYRRPRNSMTLVLXMZO[Q[SZTYUWUUTSRRQSQURWTXVXXWYV RPRNTMVMYO[',\n 2666: ' 30L[LVNSPO RQLHg RRLIg ROUQSSRTRVSVUUXUZV[ RTRUSUUTXTZV[XZYY[V',\n 2667: ' 35K[UUTSRRPRNSMTLVLXMZO[Q[SZ RPRNTMVMYO[ RVRPdPfQgSfTcT[V[YY[V RWRT[R`Pd',\n 2668: ' 24LZLVNSPRRSRUP[ RPRQSQUO[ RRUTSVRWRVU RVRVUWWXWZV',\n 2669: ' 22NZNVPSQQQSTUUWUYTZR[ RQSSUTWTYR[ RNZP[U[XYZV',\n 2670: ' 20NVNVPSRO RUFOXOZQ[SZTYVV RVFPXPZQ[ RPNVN',\n 2671: ' 27K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRTXTZV[XZYY[V RWRUXUZV[',\n 2672: ' 23KZNRMTLWLZN[O[RZTXUUUR RORNTMWMZN[ RURVVWWXWZV',\n 2673: ' 36H]LRJTIWIZK[L[NZPX RMRKTJWJZK[ RRRPXPZR[S[UZWXXUXR RSRQXQZR[ RXRYVZW[W]V',\n 2674: ' 42JZJVLSNRPRQSQUPXOZM[L[KZKYLYKZ RWSVTWTWSVRURSSRUQXQZR[U[XYZV RQSRU RSSQU RPXQZ RQXOZ',\n 2675: ' 32K[NRLXLZN[O[QZSXUU RORMXMZN[ RVRPd RWRT[R`PdOfMgLfLdMaO_R]V[YY[V',\n 2676: ' 38LYLVNSPRRRTSTVSXPZN[ RRRSSSVRXPZ RN[P\\\\Q^QaPdNfLgKfKdLaO^R\\\\VYYV RN[O\\\\P^PaOdNf',\n 2700: ' 42H\\\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF ROGMJLOLRMWOZ RNYQZSZVY RUZWWXRXOWJUG RVHSGQGNH',\n 2701: ' 12H\\\\NJPISFS[ RNJNKPJRHR[S[',\n 2702: ' 34H\\\\LKLJMHNGPFTFVGWHXJXLWNUQL[ RLKMKMJNHPGTGVHWJWLVNTQK[ RLZYZY[ RK[Y[',\n 2703: ' 48H\\\\MFXFQO RMFMGWG RWFPO RQNSNVOXQYTYUXXVZS[P[MZLYKWLW RPOSOVPXS RTOWQXTXUWXTZ RXVVYSZPZMYLW ROZLX',\n 2704: ' 18H\\\\UIU[V[ RVFV[ RVFKVZV RUILV RLUZUZV',\n 2705: ' 53H\\\\MFLO RNGMN RMFWFWG RNGWG RMNPMSMVNXPYSYUXXVZS[P[MZLYKWLW RLOMOONSNVOXR RTNWPXSXUWXTZ RXVVYSZPZMYLW ROZLX',\n 2706: ' 62H\\\\VGWIXIWGTFRFOGMJLOLTMXOZR[S[VZXXYUYTXQVOSNRNOOMQ RWHTGRGOH RPGNJMOMTNXQZ RMVOYRZSZVYXV RTZWXXUXTWQTO RXSVPSOROOPMS RQONQMT',\n 2707: ' 12H\\\\KFYFO[ RKFKGXG RXFN[O[',\n 2708: ' 68H\\\\PFMGLILKMMNNPOTPVQWRXTXWWYTZPZMYLWLTMRNQPPTOVNWMXKXIWGTFPF RNGMIMKNMPNTOVPXRYTYWXYWZT[P[MZLYKWKTLRNPPOTNVMWKWIVG RWHTGPGMH RLXOZ RUZXX',\n 2709: ' 62H\\\\WPURRSQSNRLPKMKLLINGQFRFUGWIXMXRWWUZR[P[MZLXMXNZ RWMVPSR RWNUQRRQRNQLN RPRMPLMLLMIPG RLKNHQGRGUHWK RSGVIWMWRVWTZ RUYRZPZMY',\n 2710: ' 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 2711: ' 24MXTZS[R[QZQYRXSXTYT\\\\S^Q_ RRYRZSZSYRY RS[T\\\\ RTZS^',\n 2712: ' 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 2713: ' 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\\\S^Q_ RRYRZSZSYRY RS[T\\\\ RTZS^',\n 2714: ' 24MXRFRTST RRFSFST RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 2715: ' 58I\\\\LKLJMHNGQFTFWGXHYJYLXNWOUPRQ RLKMKMJNHQGTGWHXJXLWNUORP RMIPG RUGXI RXMTP RRPRTSTSP RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 2716: ' 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ',\n 2717: ' 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL',\n 2718: ' 71F_\\\\MZMXNWPUVTXSYQZMZKYJWJUKSLRQOSMTKTISGQFPFNGMIMKNNPQUWXZZ[\\\\[ R\\\\M\\\\NZNXO RYNXPVVUXSZQ[M[KZJYIWIUJSLQQNRMSKSIRG RSHQGPGNH ROGNINKONQQVWXYZZ\\\\Z\\\\[',\n 2719: ' 51I\\\\RBR_S_ RRBSBS_ RWIYIWGTFQFNGLILKMMNNVRWSXUXWWYTZQZOYNX RWIVHTGQGNHMIMKNMVQXSYUYWXYWZT[Q[NZLXNX RXXUZ',\n 2720: ' 8G^[BIbJb R[B\\\\BJb',\n 2721: ' 24KYUBSDQGOKNPNTOYQ]S`UbVb RUBVBTDRGPKOPOTPYR]T`Vb',\n 2722: ' 24KYNBPDRGTKUPUTTYR]P`NbOb RNBOBQDSGUKVPVTUYS]Q`Ob',\n 2723: ' 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO',\n 2724: ' 8F_JQ[Q[R RJQJR[R',\n 2725: ' 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R',\n 2726: ' 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V',\n 2727: ' 11NWSFRGRM RSGRM RSFTGRM',\n 2728: ' 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM',\n 2729: ' 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF',\n 2750: ' 42H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RTFRGPINLMOLSLVMYO[ RQ[SZUXWUXRYNYKXHVF',\n 2751: ' 15H]TJO[ RVFP[ RVFSIPKNL RUIQKNL',\n 2752: ' 42H]OJPKOLNKNJOHPGSFVFYGZIZKYMWOTQPSMUKWI[ RVFXGYIYKXMVOPS RJYKXMXRZUZWYXW RMXR[U[WZXW',\n 2753: ' 50H]OJPKOLNKNJOHPGSFVFYGZIZKYMVOSP RVFXGYIYKXMVO RQPSPVQWRXTXWWYVZS[O[LZKYJWJVKULVKW RSPUQVRWTWWVYUZS[',\n 2754: ' 10H]XGR[ RYFS[ RYFJUZU',\n 2755: ' 39H]QFLP RQF[F RQGVG[F RLPMOPNSNVOWPXRXUWXUZR[O[LZKYJWJVKULVKW RSNUOVPWRWUVXTZR[',\n 2756: ' 46H]YIXJYKZJZIYGWFTFQGOIMLLOKSKWLYMZO[R[UZWXXVXSWQVPTOQOOPMRLT RTFRGPINLMOLSLXMZ RR[TZVXWVWRVP',\n 2757: ' 30H]NFLL R[FZIXLSRQUPWO[ RXLRRPUOWN[ RMIPFRFWI RNHPGRGWIYIZH[F',\n 2758: ' 63H]SFPGOHNJNMOOQPTPXOYNZLZIYGVFSF RSFQGPHOJOMPOQP RTPWOXNYLYIXGVF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RQPNQLSKUKXLZN[ RR[UZVYWWWSVQ',\n 2759: ' 46H]YMXOVQTRQROQNPMNMKNIPGSFVFXGYHZJZNYRXUVXTZQ[N[LZKXKWLVMWLX ROQNONKOIQGSF RXGYIYNXRWUUXSZQ[',\n 2760: ' 6MXPYOZP[QZPY',\n 2761: ' 8MXP[OZPYQZQ[P]N_',\n 2762: ' 11MXSMRNSOTNSM RPYOZP[QZ',\n 2763: ' 14MXSMRNSOTNSM RP[OZPYQZQ[P]N_',\n 2764: ' 17MXUFTGRS RUGRS RUFVGRS RPYOZP[QZPY',\n 2765: ' 34H]OJPKOLNKNJOHPGSFWFZG[I[KZMYNSPQQQSRTTT RWFYGZIZKYMXNVO RPYOZP[QZPY',\n 2766: ' 8MXVFTHSJSKTLUKTJ',\n 2767: ' 8MXUHTGUFVGVHUJSL',\n 2768: ' 55E_\\\\N[O\\\\P]O]N\\\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQUSXUZW[Y[ZYZX RK[IZHXHVITJSPP ROLPQQTSWUYWZYZZY',\n 2769: ' 41H]TBL_ RYBQ_ RZJYKZL[K[JZHYGVFRFOGMIMKNMONVRXT RMKOMVQWRXTXWWYVZS[O[LZKYJWJVKULVKW',\n 2770: ' 3G]_BEb',\n 2771: ' 20KZZBVESHQKOONTNXO]P`Qb RVESIQMPPOUOZP_Qb',\n 2772: ' 20JYSBTDUGVLVPUUSYQ\\\\N_Jb RSBTEUJUOTTSWQ[N_',\n 2773: ' 9J[TFTR ROIYO RYIOO',\n 2774: ' 3E_IR[R',\n 2775: ' 6E_RIR[ RIR[R',\n 2776: ' 6E_IO[O RIU[U',\n 2777: ' 6NWUFSM RVFSM',\n 2778: ' 12I[PFNM RQFNM RYFWM RZFWM',\n 2779: ' 14KZSFQGPIPKQMSNUNWMXKXIWGUFSF',\n 2801: ' 18H\\\\RFK[ RRFY[ RRIX[ RMUVU RI[O[ RU[[[',\n 2802: ' 31G]LFL[ RMFM[ RIFYFYLXF RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[',\n 2803: ' 45G]LFL[ RMFM[ RIFUFXGYHZJZLYNXOUP RUFWGXHYJYLXNWOUP RMPUPXQYRZTZWYYXZU[I[ RUPWQXRYTYWXYWZU[',\n 2804: ' 14I[NFN[ ROFO[ RKFZFZLYF RK[R[',\n 2805: ' 31F^NFNLMTLXKZJ[ RXFX[ RYFY[ RKF\\\\F RG[\\\\[ RG[Gb RH[Gb R[[\\\\b R\\\\[\\\\b',\n 2806: ' 22G\\\\LFL[ RMFM[ RSLST RIFYFYLXF RMPSP RI[Y[YUX[',\n 2807: ' 71CbRFR[ RSFS[ ROFVF RGGHHGIFHFGGFHFIGJIKMLONPWPYOZM[I\\\\G]F^F_G_H^I]H^G RNPLQKSJXIZH[ RNPMQLSKXJZI[G[FZEX RWPYQZS[X\\\\Z][ RWPXQYSZX[Z\\\\[^[_Z`X RO[V[',\n 2808: ' 45H\\\\LIKFKLLINGPFTFWGXIXLWNTOQO RTFVGWIWLVNTO RTOVPXRYTYWXYWZT[O[MZLYKWKVLUMVLW RWQXTXWWYVZT[',\n 2809: ' 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RXHLY RH[O[ RU[\\\\[',\n 2810: ' 37F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RXHLY RH[O[ RU[\\\\[ RN@N?M?M@NBPCTCVBW@',\n 2811: ' 43F^KFK[ RLFL[ RHFOF RLPSPUOVMWIXGYFZF[G[HZIYHZG RSPUQVSWXXZY[ RSPTQUSVXWZX[Z[[Z\\\\X RH[O[',\n 2812: ' 25E^MFMLLTKXJZI[H[GZGYHXIYHZ RXFX[ RYFY[ RJF\\\\F RU[\\\\[',\n 2813: ' 30F_KFK[ RLFRX RKFR[ RYFR[ RYFY[ RZFZ[ RHFLF RYF]F RH[N[ RV[][',\n 2814: ' 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RLPXP RH[O[ RU[\\\\[',\n 2815: ' 44G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RQFOGMILKKOKRLVMXOZQ[ RS[UZWXXVYRYOXKWIUGSF',\n 2816: ' 21F^KFK[ RLFL[ RXFX[ RYFY[ RHF\\\\F RH[O[ RU[\\\\[',\n 2817: ' 29G]LFL[ RMFM[ RIFUFXGYHZJZMYOXPUQMQ RUFWGXHYJYMXOWPUQ RI[P[',\n 2818: ' 32G\\\\XIYLYFXIVGSFQFNGLIKKJNJSKVLXNZQ[S[VZXXYV RQFOGMILKKNKSLVMXOZQ[',\n 2819: ' 16I\\\\RFR[ RSFS[ RLFKLKFZFZLYF RO[V[',\n 2820: ' 24H]KFRV RLFSV RZFSVQYPZN[M[LZLYMXNYMZ RIFOF RVF\\\\F',\n 2821: ' 48F_RFR[ RSFS[ ROFVF RPILJJLIOIRJULWPXUXYW[U\\\\R\\\\O[LYJUIPI RPIMJKLJOJRKUMWPX RUXXWZU[R[OZLXJUI RO[V[',\n 2822: ' 21H\\\\KFX[ RLFY[ RYFK[ RIFOF RUF[F RI[O[ RU[[[',\n 2823: ' 27F^KFK[ RLFL[ RXFX[ RYFY[ RHFOF RUF\\\\F RH[\\\\[ R[[\\\\b R\\\\[\\\\b',\n 2824: ' 28F]KFKQLSOTRTUSWQ RLFLQMSOT RWFW[ RXFX[ RHFOF RTF[F RT[[[',\n 2825: ' 30BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[',\n 2826: ' 36BcGFG[ RHFH[ RRFR[ RSFS[ R]F][ R^F^[ RDFKF ROFVF RZFaF RD[a[ R`[ab Ra[ab',\n 2827: ' 31F`PFP[ RQFQ[ RIFHLHFTF RQPXP[Q\\\\R]T]W\\\\Y[ZX[M[ RXPZQ[R\\\\T\\\\W[YZZX[',\n 2828: ' 41CaHFH[ RIFI[ REFLF RIPPPSQTRUTUWTYSZP[E[ RPPRQSRTTTWSYRZP[ R[F[[ R\\\\F\\\\[ RXF_F RX[_[',\n 2829: ' 29H]MFM[ RNFN[ RJFQF RNPUPXQYRZTZWYYXZU[J[ RUPWQXRYTYWXYWZU[',\n 2830: ' 39H]LIKFKLLINGQFSFVGXIYKZNZSYVXXVZS[P[MZLYKWKVLUMVLW RSFUGWIXKYNYSXVWXUZS[ RPPYP',\n 2831: ' 59CbHFH[ RIFI[ REFLF RE[L[ RVFSGQIPKOOORPVQXSZV[X[[Z]X^V_R_O^K]I[GXFVF RVFTGRIQKPOPRQVRXTZV[ RX[ZZ\\\\X]V^R^O]K\\\\IZGXF RIPOP',\n 2832: ' 45G]WFW[ RXFX[ R[FOFLGKHJJJLKNLOOPWP ROFMGLHKJKLLNMOOP RRPPQORLYKZJZIY RPQOSMZL[J[IYIX RT[[[',\n 2901: ' 39I]NONPMPMONNPMTMVNWOXQXXYZZ[ RWOWXXZZ[[[ RWQVRPSMTLVLXMZP[S[UZWX RPSNTMVMXNZP[',\n 2902: ' 48H\\\\XFWGQINKLNKQKULXNZQ[S[VZXXYUYSXPVNSMQMNNLPKS RXFWHUIQJNLLN RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM',\n 2903: ' 37H\\\\MMM[ RNMN[ RJMUMXNYPYQXSUT RUMWNXPXQWSUT RNTUTXUYWYXXZU[J[ RUTWUXWXXWZU[',\n 2904: ' 14HZMMM[ RNMN[ RJMXMXRWM RJ[Q[',\n 2905: ' 22F]NMNQMWLZK[ RWMW[ RXMX[ RKM[M RI[H`H[[[[`Z[',\n 2906: ' 31H[LSXSXQWOVNTMQMNNLPKSKULXNZQ[S[VZXX RWSWPVN RQMONMPLSLUMXOZQ[',\n 2907: ' 59E`RMR[ RSMS[ ROMVM RJNIOHNIMJMKNMRNSPTUTWSXRZN[M\\\\M]N\\\\O[N RPTNUMVKZJ[ RPTNVLZK[I[HZGX RUTWUXVZZ[[ RUTWVYZZ[\\\\[]Z^X RO[V[',\n 2908: ' 42I[MOLMLQMONNPMTMWNXPXQWSTT RTMVNWPWQVSTT RQTTTWUXWXXWZT[P[MZLXLWMVNWMX RTTVUWWWXVZT[',\n 2909: ' 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ',\n 2910: ' 37G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[P[ RT[[[ RWNMZ ROGOFNFNGOIQJSJUIVG',\n 2911: ' 38H\\\\MMM[ RNMN[ RJMQM RNTPTSSTRVNWMXMYNXOWN RPTSUTVVZW[ RPTRUSVUZV[X[YZZX RJ[Q[',\n 2912: ' 22G]NMNQMWLZK[J[IZJYKZ RWMW[ RXMX[ RKM[M RT[[[',\n 2913: ' 30G^LML[ RLMR[ RMMRY RXMR[ RXMX[ RYMY[ RIMMM RXM\\\\M RI[O[ RU[\\\\[',\n 2914: ' 27G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RMTWT RI[P[ RT[[[',\n 2915: ' 36H\\\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RQMONMPLSLUMXOZQ[ RS[UZWXXUXSWPUNSM',\n 2916: ' 21G]LML[ RMMM[ RWMW[ RXMX[ RIM[M RI[P[ RT[[[',\n 2917: ' 36G\\\\LMLb RMMMb RMPONQMSMVNXPYSYUXXVZS[Q[OZMX RSMUNWPXSXUWXUZS[ RIMMM RIbPb',\n 2918: ' 28H[WPVQWRXQXPVNTMQMNNLPKSKULXNZQ[S[VZXX RQMONMPLSLUMXOZQ[',\n 2919: ' 16I\\\\RMR[ RSMS[ RMMLRLMYMYRXM RO[V[',\n 2920: ' 22I[LMR[ RMMRY RXMR[P_NaLbKbJaK`La RJMPM RTMZM',\n 2921: ' 52H]RFRb RSFSb ROFSF RRPQNPMNMLNKQKWLZN[P[QZRX RNMMNLQLWMZN[ RWMXNYQYWXZW[ RSPTNUMWMYNZQZWYZW[U[TZSX RObVb',\n 2922: ' 21H\\\\LMW[ RMMX[ RXML[ RJMPM RTMZM RJ[P[ RT[Z[',\n 2923: ' 23G]LML[ RMMM[ RWMW[ RXMX[ RIMPM RTM[M RI[[[[`Z[',\n 2924: ' 28G]LMLTMVPWRWUVWT RMMMTNVPW RWMW[ RXMX[ RIMPM RTM[M RT[[[',\n 2925: ' 30CbHMH[ RIMI[ RRMR[ RSMS[ R\\\\M\\\\[ R]M][ REMLM ROMVM RYM`M RE[`[',\n 2926: ' 32CbHMH[ RIMI[ RRMR[ RSMS[ R\\\\M\\\\[ R]M][ REMLM ROMVM RYM`M RE[`[``_[',\n 2927: ' 27H]QMQ[ RRMR[ RLMKRKMUM RRTVTYUZWZXYZV[N[ RVTXUYWYXXZV[',\n 2928: ' 37E_JMJ[ RKMK[ RGMNM RKTOTRUSWSXRZO[G[ ROTQURWRXQZO[ RYMY[ RZMZ[ RVM]M RV[][',\n 2929: ' 25J[OMO[ RPMP[ RLMSM RPTTTWUXWXXWZT[L[ RTTVUWWWXVZT[',\n 2930: ' 34I\\\\MOLMLQMONNPMSMVNXPYSYUXXVZS[P[NZLXLWMVNWMX RSMUNWPXSXUWXUZS[ RRTXT',\n 2931: ' 51DaIMI[ RJMJ[ RFMMM RF[M[ RVMSNQPPSPUQXSZV[X[[Z]X^U^S]P[NXMVM RVMTNRPQSQURXTZV[ RX[ZZ\\\\X]U]S\\\\PZNXM RJTPT',\n 2932: ' 40G\\\\VMV[ RWMW[ RZMOMLNKPKQLSOTVT ROMMNLPLQMSOT RTTQUPVNZM[ RTTRUQVOZN[L[KZJX RS[Z[',\n 3001: ' 36H\\\\RFKZ RQIW[ RRIX[ RRFY[ RMUVU RI[O[ RT[[[ RKZJ[ RKZM[ RWZU[ RWYV[ RXYZ[',\n 3002: ' 78G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUP RXHYJYLXN RUFWGXIXMWOUP RNPUPXQYRZTZWYYXZU[I[ RXRYTYWXY RUPWQXSXXWZU[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[',\n 3003: ' 37G\\\\XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXXYV RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[',\n 3004: ' 62G]LFL[ RMGMZ RNFN[ RIFSFVGXIYKZNZSYVXXVZS[I[ RWIXKYNYSXVWX RSFUGWJXNXSWWUZS[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[',\n 3005: ' 83G\\\\LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Y[YU RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[ RT[YZ RV[YY RW[YX RX[YU',\n 3006: ' 70G[LFL[ RMGMZ RNFN[ RIFYFYL RNPTP RTLTT RI[Q[ RJFLG RKFLH ROFNH RPFNG RTFYG RVFYH RWFYI RXFYL RTLSPTT RTNRPTR RTOPPTQ RLZJ[ RLYK[ RNYO[ RNZP[',\n 3007: ' 60G^XIYFYLXIVGTFQFNGLIKKJNJSKVLXNZQ[T[VZXZY[YS RMILKKNKSLVMX RQFOGMJLNLSMWOZQ[ RXTXY RWSWYVZ RTS\\\\S RUSWT RVSWU RZSYU R[SYT',\n 3008: ' 81F^KFK[ RLGLZ RMFM[ RWFW[ RXGXZ RYFY[ RHFPF RTF\\\\F RMPWP RH[P[ RT[\\\\[ RIFKG RJFKH RNFMH ROFMG RUFWG RVFWH RZFYH R[FYG RKZI[ RKYJ[ RMYN[ RMZO[ RWZU[ RWYV[ RYYZ[ RYZ[[',\n 3009: ' 39LXQFQ[ RRGRZ RSFS[ RNFVF RN[V[ ROFQG RPFQH RTFSH RUFSG RQZO[ RQYP[ RSYT[ RSZU[',\n 3010: ' 45JYSFSWRZQ[ RTGTWSZ RUFUWTZQ[O[MZLXLVMUNUOVOWNXMX RMVMWNWNVMV RPFXF RQFSG RRFSH RVFUH RWFUG',\n 3011: ' 69F\\\\KFK[ RLGLZ RMFM[ RXGMR RPPW[ RQPX[ RQNY[ RHFPF RUF[F RH[P[ RT[[[ RIFKG RJFKH RNFMH ROFMG RWFXG RZFXG RKZI[ RKYJ[ RMYN[ RMZO[ RWYU[ RWYZ[',\n 3012: ' 52I[NFN[ ROGOZ RPFP[ RKFSF RK[Z[ZU RLFNG RMFNH RQFPH RRFPG RNZL[ RNYM[ RPYQ[ RPZR[ RU[ZZ RW[ZY RX[ZX RY[ZU',\n 3013: ' 63E_JFJZ RJFQ[ RKFQX RLFRX RXFQ[ RXFX[ RYGYZ RZFZ[ RGFLF RXF]F RG[M[ RU[][ RHFJG R[FZH R\\\\FZG RJZH[ RJZL[ RXZV[ RXYW[ RZY[[ RZZ\\\\[',\n 3014: ' 39F^KFKZ RKFY[ RLFXX RMFYX RYGY[ RHFMF RVF\\\\F RH[N[ RIFKG RWFYG R[FYG RKZI[ RKZM[',\n 3015: ' 54G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF',\n 3016: ' 59G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZMYOXPUQNQ RXHYJYMXO RUFWGXIXNWPUQ RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[',\n 3017: ' 77G]QFNGLIKKJOJRKVLXNZQ[S[VZXXYVZRZOYKXIVGSFQF RMILKKNKSLVMX RWXXVYSYNXKWI RQFOGMJLNLSMWOZQ[ RS[UZWWXSXNWJUGSF RNXOVQURUTVUXV^W`Y`Z^Z\\\\ RV\\\\W^X_Y_ RUXW]X^Y^Z]',\n 3018: ' 80G]LFL[ RMGMZ RNFN[ RIFUFXGYHZJZLYNXOUPNP RXHYJYLXN RUFWGXIXMWOUP RRPTQUSWYX[Z[[Y[W RWWXYYZZZ RTQURXXYYZY[X RI[Q[ RJFLG RKFLH ROFNH RPFNG RLZJ[ RLYK[ RNYO[ RNZP[',\n 3019: ' 44H\\\\XIYFYLXIVGSFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[Q[NZLXKUK[LX',\n 3020: ' 57H\\\\JFJL RQFQ[ RRGRZ RSFS[ RZFZL RJFZF RN[V[ RKFJL RLFJI RMFJH ROFJG RUFZG RWFZH RXFZI RYFZL RQZO[ RQYP[ RSYT[ RSZU[',\n 3021: ' 45F^KFKULXNZQ[S[VZXXYUYG RLGLVMX RMFMVNYOZQ[ RHFPF RVF\\\\F RIFKG RJFKH RNFMH ROFMG RWFYG R[FYG',\n 3022: ' 34H\\\\KFR[ RLFRXR[ RMFSX RYGR[ RIFPF RUF[F RJFLH RNFMH ROFMG RWFYG RZFYG',\n 3023: ' 55F^JFN[ RKFNVN[ RLFOV RRFOVN[ RRFV[ RSFVVV[ RTFWV RZGWVV[ RGFOF RRFTF RWF]F RHFKG RIFKH RMFLH RNFLG RXFZG R\\\\FZG',\n 3024: ' 54H\\\\KFW[ RLFX[ RMFY[ RXGLZ RIFPF RUF[F RI[O[ RT[[[ RJFMH RNFMH ROFMG RVFXG RZFXG RLZJ[ RLZN[ RWZU[ RWYV[ RWYZ[',\n 3025: ' 48G]JFQQQ[ RKFRQRZ RLFSQS[ RYGSQ RHFOF RVF\\\\F RN[V[ RIFKG RNFLG RWFYG R[FYG RQZO[ RQYP[ RSYT[ RSZU[',\n 3026: ' 41H\\\\YFKFKL RWFK[ RXFL[ RYFM[ RK[Y[YU RLFKL RMFKI RNFKH RPFKG RT[YZ RV[YY RW[YX RX[YU',\n 3051: ' 38H\\\\UFIZ RSJT[ RTHUZ RUFUHVYV[ RLUTU RF[L[ RQ[X[ RIZG[ RIZK[ RTZR[ RTYS[ RVYW[',\n 3052: ' 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVP RYGZIZKYNXO RWFXGYIYKXNVP RNPVPXQYSYUXXVZR[F[ RWQXSXUWXUZ RVPWRWUVXTZR[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[',\n 3053: ' 41H]ZH[H\\\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[S[UZWXXV RQHOJNLMOLSLWMY RTFRGPJOLNOMSMXNZP[',\n 3054: ' 63F]OFI[ RPFJ[ RQFK[ RLFUFXGYHZKZOYSWWUYSZO[F[ RWGXHYKYOXSVWTY RUFWHXKXOWSUWRZO[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[',\n 3055: ' 80F]OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[U[WV RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[ RP[UZ RR[UY RUYWV',\n 3056: ' 70F\\\\OFI[ RPFJ[ RQFK[ RULST RLF[FZL RNPTP RF[N[ RMFPG RNFOH RRFPH RSFPG RWFZG RXFZH RYFZI RZFZL RULSPST RTNRPSR RTOQPSQ RJZG[ RJYH[ RKYL[ RJZM[',\n 3057: ' 65H^ZH[H\\\\F[L[JZHYGWFTFQGOIMLLOKSKVLYMZP[R[UZWXYT RQHOJNLMOLSLWMY RVXWWXT RTFRGPJOLNOMSMXNZP[ RR[TZVWWT RTT\\\\T RUTWU RVTWW RZTXV R[TXU',\n 3058: ' 81E_NFH[ ROFI[ RPFJ[ RZFT[ R[FU[ R\\\\FV[ RKFSF RWF_F RLPXP RE[M[ RQ[Y[ RLFOG RMFNH RQFOH RRFOG RXF[G RYFZH R]F[H R^F[G RIZF[ RIYG[ RJYK[ RIZL[ RUZR[ RUYS[ RVYW[ RUZX[',\n 3059: ' 39KYTFN[ RUFO[ RVFP[ RQFYF RK[S[ RRFUG RSFTH RWFUH RXFUG ROZL[ ROYM[ RPYQ[ ROZR[',\n 3060: ' 47I\\\\WFRWQYO[ RXFTSSVRX RYFUSSXQZO[M[KZJXJVKULUMVMWLXKX RKVKWLWLVKV RTF\\\\F RUFXG RVFWH RZFXH R[FXG',\n 3061: ' 72F]OFI[ RPFJ[ RQFK[ R\\\\GMR RQOU[ RROV[ RSNWZ RLFTF RYF_F RF[N[ RR[Y[ RMFPG RNFOH RRFPH RSFPG RZF\\\\G R^F\\\\G RJZG[ RJYH[ RKYL[ RJZM[ RUZS[ RUYT[ RVYX[',\n 3062: ' 49H\\\\QFK[ RRFL[ RSFM[ RNFVF RH[W[YU ROFRG RPFQH RTFRH RUFRG RLZI[ RLYJ[ RMYN[ RLZO[ RR[WZ RT[XX RV[YU',\n 3063: ' 68D`MFGZ RMGNYN[ RNFOY ROFPX R[FPXN[ R[FU[ R\\\\FV[ R]FW[ RJFOF R[F`F RD[J[ RR[Z[ RKFMG RLFMH R^F\\\\H R_F\\\\G RGZE[ RGZI[ RVZS[ RVYT[ RWYX[ RVZY[',\n 3064: ' 43F_OFIZ ROFV[ RPFVX RQFWX R\\\\GWXV[ RLFQF RYF_F RF[L[ RMFPG RNFPH RZF\\\\G R^F\\\\G RIZG[ RIZK[',\n 3065: ' 56G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF',\n 3066: ' 60F]OFI[ RPFJ[ RQFK[ RLFXF[G\\\\I\\\\K[NYPUQMQ RZG[I[KZNXP RXFYGZIZKYNWPUQ RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[',\n 3067: ' 78G]SFPGNILLKOJSJVKYLZN[Q[TZVXXUYRZNZKYHXGVFSF ROIMLLOKSKWLY RUXWUXRYNYJXH RSFQGOJNLMOLSLXMZN[ RQ[SZUWVUWRXNXIWGVF RLXMVOUPURVSXT]U^V^W] RT^U_V_ RSXS_T`V`W]W\\\\',\n 3068: ' 78F^OFI[ RPFJ[ RQFK[ RLFWFZG[I[KZNYOVPNP RYGZIZKYNXO RWFXGYIYKXNVP RRPTQURWXXYYYZX RWYXZYZ RURVZW[Y[ZXZW RF[N[ RMFPG RNFOH RRFPH RSFPG RJZG[ RJYH[ RKYL[ RJZM[',\n 3069: ' 44G^ZH[H\\\\F[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJUI[JYKY',\n 3070: ' 54G]TFN[ RUFO[ RVFP[ RMFKL R]F\\\\L RMF]F RK[S[ RNFKL RPFLI RRFMG RYF\\\\G RZF\\\\H R[F\\\\I R\\\\F\\\\L ROZL[ ROYM[ RPYQ[ ROZR[',\n 3071: ' 48F_NFKQJUJXKZN[R[UZWXXU\\\\G ROFLQKUKYLZ RPFMQLULYN[ RKFSF RYF_F RLFOG RMFNH RQFOH RRFOG RZF\\\\G R^F\\\\G',\n 3072: ' 35H\\\\NFNHOYO[ ROGPX RPFQW R[GO[ RLFSF RXF^F RMFNH RQFPH RRFOG RYF[G R]F[G',\n 3073: ' 57E_MFMHKYK[ RNGLX ROFMW RUFMWK[ RUFUHSYS[ RVGTX RWFUW R]GUWS[ RJFRF RUFWF RZF`F RKFNG RLFMH RPFNI RQFNG R[F]G R_F]G',\n 3074: ' 54G]NFT[ ROFU[ RPFV[ R[GIZ RLFSF RXF^F RF[L[ RQ[X[ RMFOH RQFPH RRFPG RYF[G R]F[G RIZG[ RIZK[ RTZR[ RTYS[ RUYW[',\n 3075: ' 51G]MFQPN[ RNFRPO[ ROFSPP[ R\\\\GSP RKFRF RYF_F RK[S[ RLFNG RPFOH RQFNG RZF\\\\G R^F\\\\G ROZL[ ROYM[ RPYQ[ ROZR[',\n 3076: ' 35G]ZFH[ R[FI[ R\\\\FJ[ R\\\\FNFLL RH[V[XU ROFLL RPFMI RRFNG RR[VZ RT[WX RU[XU',\n 3101: ' 54I]NPNOOOOQMQMONNPMTMVNWOXQXXYZZ[ RVOWQWXXZ RTMUNVPVXWZZ[[[ RVRUSPTMULWLXMZP[S[UZVX RNUMWMXNZ RUSQTOUNWNXOZP[',\n 3102: ' 47G\\\\LFL[MZOZ RMGMY RIFNFNZ RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RJFLG RKFLH',\n 3103: ' 34H[WQWPVPVRXRXPVNTMQMNNLPKSKULXNZQ[S[VZXX RMPLRLVMX RQMONNOMRMVNYOZQ[',\n 3104: ' 52H]VFV[[[ RWGWZ RSFXFX[ RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RTFVG RUFVH RXYY[ RXZZ[',\n 3105: ' 41H[MSXSXQWOVNSMQMNNLPKSKULXNZQ[S[VZXX RWRWQVO RMPLRLVMX RVSVPUNSM RQMONNOMRMVNYOZQ[',\n 3106: ' 40KYWHWGVGVIXIXGWFTFRGQHPKP[ RRHQKQZ RTFSGRIR[ RMMVM RM[U[ RPZN[ RPYO[ RRYS[ RRZT[',\n 3107: ' 89I\\\\XNYOZNYMXMVNUO RQMONNOMQMSNUOVQWSWUVVUWSWQVOUNSMQM ROONQNSOU RUUVSVQUO RQMPNOPOTPVQW RSWTVUTUPTNSM RNUMVLXLYM[N\\\\Q]U]X^Y_ RN[Q\\\\U\\\\X] RLYMZP[U[X\\\\Y^Y_XaUbObLaK_K^L\\\\O[ RObMaL_L^M\\\\O[',\n 3108: ' 65G^LFL[ RMGMZ RIFNFN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\\\[ RJFLG RKFLH RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[',\n 3109: ' 43LXQFQHSHSFQF RRFRH RQGSG RQMQ[ RRNRZ RNMSMS[ RN[V[ ROMQN RPMQO RQZO[ RQYP[ RSYT[ RSZU[',\n 3110: ' 41KXRFRHTHTFRF RSFSH RRGTG RRMR^QaPb RSNS]R` ROMTMT]S`RaPbMbLaL_N_NaMaM` RPMRN RQMRO',\n 3111: ' 61G]LFL[ RMGMZ RIFNFN[ RWNNW RRSY[ RRTX[ RQTW[ RTM[M RI[Q[ RT[[[ RJFLG RKFLH RUMWN RZMWN RLZJ[ RLYK[ RNYO[ RNZP[ RWYU[ RVYZ[',\n 3112: ' 31LXQFQ[ RRGRZ RNFSFS[ RN[V[ ROFQG RPFQH RQZO[ RQYP[ RSYT[ RSZU[',\n 3113: ' 99AcFMF[ RGNGZ RCMHMH[ RHQIOJNLMOMQNROSRS[ RQORRRZ ROMPNQQQ[ RSQTOUNWMZM\\\\N]O^R^[ R\\\\O]R]Z RZM[N\\\\Q\\\\[ RC[K[ RN[V[ RY[a[ RDMFN REMFO RFZD[ RFYE[ RHYI[ RHZJ[ RQZO[ RQYP[ RSYT[ RSZU[ R\\\\ZZ[ R\\\\Y[[ R^Y_[ R^Z`[',\n 3114: ' 65G^LML[ RMNMZ RIMNMN[ RNQOOPNRMUMWNXOYRY[ RWOXRXZ RUMVNWQW[ RI[Q[ RT[\\\\[ RJMLN RKMLO RLZJ[ RLYK[ RNYO[ RNZP[ RWZU[ RWYV[ RYYZ[ RYZ[[',\n 3115: ' 46H\\\\QMNNLPKSKULXNZQ[S[VZXXYUYSXPVNSMQM RMPLRLVMX RWXXVXRWP RQMONNOMRMVNYOZQ[ RS[UZVYWVWRVOUNSM',\n 3116: ' 60G\\\\LMLb RMNMa RIMNMNb RNPONQMSMVNXPYSYUXXVZS[Q[OZNX RWPXRXVWX RSMUNVOWRWVVYUZS[ RIbQb RJMLN RKMLO RLaJb RL`Kb RN`Ob RNaPb',\n 3117: ' 55H\\\\VNVb RWOWa RUNWNXMXb RVPUNSMQMNNLPKSKULXNZQ[S[UZVX RMPLRLVMX RQMONNOMRMVNYOZQ[ RSb[b RVaTb RV`Ub RX`Yb RXaZb',\n 3118: ' 43IZNMN[ RONOZ RKMPMP[ RWOWNVNVPXPXNWMUMSNQPPS RK[S[ RLMNN RMMNO RNZL[ RNYM[ RPYQ[ RPZR[',\n 3119: ' 43J[WOXMXQWOVNTMPMNNMOMQNSPTUUWVXY RNNMQ RNRPSUTWU RXVWZ RMONQPRUSWTXVXYWZU[Q[OZNYMWM[NY',\n 3120: ' 22KZPHPVQYRZT[V[XZYX RQHQWRY RPHRFRWSZT[ RMMVM',\n 3121: ' 43G^LMLVMYNZP[S[UZVYWW RMNMWNY RIMNMNWOZP[ RWMW[\\\\[ RXNXZ RTMYMY[ RJMLN RKMLO RYYZ[ RYZ[[',\n 3122: ' 31I[LMR[ RMMRY RNMSY RXNSYR[ RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN',\n 3123: ' 45F^JMN[ RKMNX RLMOX RRMOXN[ RRMV[ RSMVX RRMTMWX RZNWXV[ RGMOM RWM]M RHMKN RNMLN RXMZN R\\\\MZN',\n 3124: ' 48H\\\\LMV[ RMMW[ RNMX[ RWNMZ RJMQM RTMZM RJ[P[ RS[Z[ RKMMN RPMNN RUMWN RYMWN RMZK[ RMZO[ RVZT[ RWZY[',\n 3125: ' 40H[LMR[ RMMRY RNMSY RXNSYP_NaLbJbIaI_K_KaJaJ` RJMQM RTMZM RKMNO RPMNN RVMXN RYMXN',\n 3126: ' 41I[VML[ RWMM[ RXMN[ RXMLMLQ RL[X[XW RMMLQ RNMLP ROMLO RQMLN RS[XZ RU[XY RV[XX RW[XW',\n 3151: ' 50G]WMUTUXVZW[Y[[Y\\\\W RXMVTVZ RWMYMWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RNNLQKTKWLY RPMNOMQLTLWMZN[',\n 3152: ' 52I\\\\PFNMMSMWNYOZQ[S[VZXWYTYRXOWNUMSMQNPOOQNT RQFOMNQNWOZ RVYWWXTXQWO RMFRFPMNT RS[UYVWWTWQVNUM RNFQG ROFPH',\n 3153: ' 34I[WQWPVPVRXRXPWNUMRMONMQLTLVMYNZP[R[UZWW ROONQMTMWNY RRMPOOQNTNWOZP[',\n 3154: ' 58G]YFVQUUUXVZW[Y[[Y\\\\W RZFWQVUVZ RVF[FWTVX RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RWFZG RXFYH',\n 3155: ' 33I[MVQUTTWRXPWNUMRMONMQLTLVMYNZP[R[UZWX ROONQMTMWNY RRMPOOQNTNWOZP[',\n 3156: ' 45JZZHZGYGYI[I[GZFXFVGTISKRNQRO[N^M`Kb RTJSMRRP[O^ RXFVHUJTMSRQZP]O_MaKbIbHaH_J_JaIaI` RNMYM',\n 3157: ' 57H]XMT[S^QaOb RYMU[S_ RXMZMV[T_RaObLbJaI`I^K^K`J`J_ RVTVQUNSMQMNNLQKTKVLYMZO[Q[SZTYUWVT RNOMQLTLWMY RQMOONQMTMWNZO[',\n 3158: ' 41G]OFI[K[ RPFJ[ RLFQFK[ RMTOPQNSMUMWNXPXSVX RWNWRVVVZ RWPUUUXVZW[Y[[Y\\\\W RMFPG RNFOH',\n 3159: ' 35KXSFSHUHUFSF RTFTH RSGUG RLQMOOMQMRNSPSSQX RRNRRQVQZ RRPPUPXQZR[T[VYWW',\n 3160: ' 45KXUFUHWHWFUF RVFVH RUGWG RMQNOPMRMSNTPTSRZQ]P_NaLbJbIaI_K_KaJaJ` RSNSSQZP]O_ RSPRTP[O^N`Lb',\n 3161: ' 49G]OFI[K[ RPFJ[ RLFQFK[ RYOYNXNXPZPZNYMWMUNQROS RMSOSQTRUTYUZWZ RQUSYTZ ROSPTRZS[U[WZYW RMFPG RNFOH',\n 3162: ' 26LXTFQQPUPXQZR[T[VYWW RUFRQQUQZ RQFVFRTQX RRFUG RSFTH',\n 3163: ' 61@cAQBODMFMGNHPHSF[ RGNGSE[ RGPFTD[F[ RHSJPLNNMPMRNSPSSQ[ RRNRSP[ RRPQTO[Q[ RSSUPWNYM[M]N^P^S\\\\X R]N]R\\\\V\\\\Z R]P[U[X\\\\Z][_[aYbW',\n 3164: ' 42F^GQHOJMLMMNNPNSL[ RMNMSK[ RMPLTJ[L[ RNSPPRNTMVMXNYPYSWX RXNXRWVWZ RXPVUVXWZX[Z[\\\\Y]W',\n 3165: ' 46H\\\\QMNNLQKTKVLYMZP[S[VZXWYTYRXOWNTMQM RNOMQLTLWMY RVYWWXTXQWO RQMOONQMTMWNZP[ RS[UYVWWTWQVNTM',\n 3166: ' 66G]HQIOKMMMNNOPOSNWKb RNNNSMWJb RNPMTIb ROTPQQORNTMVMXNYOZRZTYWWZT[R[PZOWOT RXOYQYTXWWY RVMWNXQXTWWVYT[ RFbNb RJaGb RJ`Hb RK`Lb RJaMb',\n 3167: ' 57G\\\\WMQb RXMRb RWMYMSb RUTUQTNRMPMMNKQJTJVKYLZN[P[RZSYTWUT RMOLQKTKWLY RPMNOMQLTLWMZN[ RNbVb RRaOb RR`Pb RS`Tb RRaUb',\n 3168: ' 30I[JQKOMMOMPNQPQTO[ RPNPTN[ RPPOTM[O[ RYOYNXNXPZPZNYMWMUNSPQT',\n 3169: ' 47J[XPXOWOWQYQYOXNUMRMONNONQOSQTTUVVWX RONNQ RORQSTTVU RWVVZ RNOOQQRTSVTWVWXVZS[P[MZLYLWNWNYMYMX',\n 3170: ' 23KYTFQQPUPXQZR[T[VYWW RUFRQQUQZ RTFVFRTQX RNMXM',\n 3171: ' 42F^GQHOJMLMMNNPNSLX RMNMRLVLZ RMPKUKXLZN[P[RZTXVU RXMVUVXWZX[Z[\\\\Y]W RYMWUWZ RXMZMXTWX',\n 3172: ' 29H\\\\IQJOLMNMONPPPSNX RONORNVNZ ROPMUMXNZP[R[TZVXXUYQYMXMXNYP',\n 3173: ' 48CaDQEOGMIMJNKPKSIX RJNJRIVIZ RJPHUHXIZK[M[OZQXRU RTMRURXSZU[W[YZ[X]U^Q^M]M]N^P RUMSUSZ RTMVMTTSX',\n 3174: ' 51G]JQLNNMPMRNSPSR RPMQNQRPVOXMZK[I[HZHXJXJZIZIY RRORRQVQY RZOZNYNYP[P[NZMXMVNTPSRRVRZS[ RPVPXQZS[U[WZYW',\n 3175: ' 49G]HQIOKMMMNNOPOSMX RNNNRMVMZ RNPLULXMZO[Q[SZUXWT RYMU[T^RaPb RZMV[T_ RYM[MW[U_SaPbMbKaJ`J^L^L`K`K_',\n 3176: ' 39H\\\\YMXOVQNWLYK[ RXOOOMPLR RVORNONNO RVORMOMMOLR RLYUYWXXV RNYRZUZVY RNYR[U[WYXV',\n 3200: ' 50H\\\\QFNGLJKOKRLWNZQ[S[VZXWYRYOXJVGSFQF RNHMJLNLSMWNY RVYWWXSXNWJVH RQFOGNIMNMSNXOZQ[ RS[UZVXWSWNVIUGSF',\n 3201: ' 28H\\\\QHQ[ RRHRZ RSFS[ RSFPINJ RM[W[ RQZO[ RQYP[ RSYT[ RSZU[',\n 3202: ' 62H\\\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXHYJYLXNUPPRNSLUKXK[ RWHXJXLWN RTFVGWJWLVNTPPR RKYLXNXSYWYYX RNXSZWZXY RNXS[W[XZYXYV',\n 3203: ' 76H\\\\LJLKMKMJLJ RLIMINJNKMLLLKKKJLHMGPFTFWGXIXLWNTO RVGWIWLVN RSFUGVIVLUNSO RQOTOVPXRYTYWXYWZT[P[MZLYKWKVLUMUNVNWMXLX RWRXTXWWY RSOUPVQWTWWVZT[ RLVLWMWMVLV',\n 3204: ' 28H\\\\SIS[ RTHTZ RUFU[ RUFJUZU RP[X[ RSZQ[ RSYR[ RUYV[ RUZW[',\n 3205: ' 55H\\\\MFKPMNPMSMVNXPYSYUXXVZS[P[MZLYKWKVLUMUNVNWMXLX RWPXRXVWX RSMUNVOWRWVVYUZS[ RLVLWMWMVLV RMFWF RMGUG RMHQHUGWF',\n 3206: ' 69H\\\\VIVJWJWIVI RWHVHUIUJVKWKXJXIWGUFRFOGMILKKOKULXNZQ[S[VZXXYUYTXQVOSNQNOONPMR RNIMKLOLUMXNY RWXXVXSWQ RRFPGOHNJMNMUNXOZQ[ RS[UZVYWVWSVPUOSN',\n 3207: ' 43H\\\\KFKL RYFYIXLTQSSRWR[ RSRRTQWQ[ RXLSQQTPWP[R[ RKJLHNFPFUIWIXHYF RMHNGPGRH RKJLINHPHUI',\n 3208: ' 79H\\\\PFMGLILLMNPOTOWNXLXIWGTFPF RNGMIMLNN RVNWLWIVG RPFOGNINLONPO RTOUNVLVIUGTF RPOMPLQKSKWLYMZP[T[WZXYYWYSXQWPTO RMQLSLWMY RWYXWXSWQ RPONPMSMWNZP[ RT[VZWWWSVPTO',\n 3209: ' 69H\\\\MWMXNXNWMW RWOVQURSSQSNRLPKMKLLINGQFSFVGXIYLYRXVWXUZR[O[MZLXLWMVNVOWOXNYMY RMPLNLKMI RVHWIXLXRWVVX RQSORNQMNMKNHOGQF RSFUGVIWLWSVWUYTZR[',\n 3210: ' 16MXRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 3211: ' 24MXTZS[R[QZQYRXSXTYT\\\\S^Q_ RRYRZSZSYRY RS[T\\\\ RTZS^',\n 3212: ' 32MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 3213: ' 40MXRMQNQORPSPTOTNSMRM RRNROSOSNRN RTZS[R[QZQYRXSXTYT\\\\S^Q_ RRYRZSZSYRY RS[T\\\\ RTZS^',\n 3214: ' 34MXRFQGQIRQ RRFRTST RRFSFST RSFTGTISQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 3215: ' 52I\\\\MKMJNJNLLLLJMHNGPFTFWGXHYJYLXNWOSQ RWHXIXMWN RTFVGWIWMVOUP RRQRTSTSQRQ RRXQYQZR[S[TZTYSXRX RRYRZSZSYRY',\n 3216: ' 24MXTFRGQIQLRMSMTLTKSJRJQK RRKRLSLSKRK RRGQK RQIRJ',\n 3217: ' 24MXTHSIRIQHQGRFSFTGTJSLQM RRGRHSHSGRG RSITJ RTHSL',\n 3218: ' 74E_[O[NZNZP\\\\P\\\\N[MZMYNXPVUTXRZP[L[JZIXIUJSPORMSKSIRGPFNGMIMLNOPRTWWZY[[[\\\\Y\\\\X RKZJXJUKSLR RRMSI RSKRG RNGMK RNNPQTVWYYZ RN[LZKXKULSPO RMINMQQUVXYZZ[Z\\\\Y',\n 3219: ' 56H\\\\PBP_ RTBT_ RXKXJWJWLYLYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RLLMNOOUQWRXT RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWKUMUMWLWLV',\n 3220: ' 8G^[BIbJb R[B\\\\BJb',\n 3221: ' 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\\\ RSDRFQIPOPUQ[R^S`',\n 3222: ' 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\\\ RQDRFSITOTUS[R^Q`',\n 3223: ' 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO',\n 3224: ' 8F_JQ[Q[R RJQJR[R',\n 3225: ' 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R',\n 3226: ' 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V',\n 3227: ' 11NWSFRGRM RSGRM RSFTGRM',\n 3228: ' 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM',\n 3229: ' 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF',\n 3250: ' 58H]TFQGOIMLLOKSKVLYMZO[Q[TZVXXUYRZNZKYHXGVFTF RQHOJNLMOLSLWMY RTYVWWUXRYNYJXH RTFRGPJOLNOMSMXNZO[ RQ[SZUWVUWRXNXIWGVF',\n 3251: ' 20H]TJO[Q[ RWFUJP[ RWFQ[ RWFTIQKOL RTJRKOL',\n 3252: ' 52H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMWOMUKWI[ RXGYIYKXMVOSQ RVFWGXIXKWMUOMU RJYKXMXRYWYXX RMXRZWZ RMXR[U[WZXXXW',\n 3253: ' 64H]OKOJPJPLNLNJOHPGSFVFYGZIZKYMXNVOSP RXGYIYKXMWN RVFWGXIXKWMUOSP RQPSPVQWRXTXWWYUZR[O[LZKYJWJULULWKWKV RVRWTWWVY RSPUQVSVWUYTZR[',\n 3254: ' 15H]WJR[T[ RZFXJS[ RZFT[ RZFJUZU',\n 3255: ' 49H]QFLP RQF[F RQGYG RPHUHYG[F RLPMOPNSNVOWPXRXUWXUZQ[N[LZKYJWJULULWKWKV RVPWRWUVXTZ RSNUOVQVUUXSZQ[',\n 3256: ' 61H]YJYIXIXKZKZIYGWFTFQGOIMLLOKSKVLYMZO[R[UZWXXVXSWQVPTOQOOPNQMS RPINLMOLSLWMY RVXWVWSVQ RTFRGPJOLNOMSMXNZO[ RR[TZUYVVVRUPTO',\n 3257: ' 39H]NFLL R[FZIXLTQRTQWP[ RRSPWO[ RXLRRPUOWN[P[ RMIPFRFWI ROGRGWI RMIOHRHWIYIZH[F',\n 3258: '104H]SFPGOHNJNMOOQPTPWOYNZLZIYGWFSF RUFPG RPHOJONPO ROORP RSPWO RXNYLYIXG RYGUF RSFQHPJPNQP RTPVOWNXLXHWF RQPMQKSJUJXKZN[R[VZWYXWXTWRVQTP RRPMQ RNQLSKUKXLZ RKZP[VZ RVYWWWTVR RVQSP RQPOQMSLULXMZN[ RR[TZUYVWVSUQTP',\n 3259: ' 61H]XNWPVQTRQROQNPMNMKNIPGSFVFXGYHZKZNYRXUVXTZQ[N[LZKXKVMVMXLXLW ROPNNNKOI RXHYJYNXRWUUX RQRPQOOOKPHQGSF RVFWGXIXNWRVUUWSZQ[',\n 3260: ' 16MXPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY',\n 3261: ' 22MXQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\\\P^',\n 3262: ' 32MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY',\n 3263: ' 38MXSMRNROSPTPUOUNTMSM RSNSOTOTNSN RQ[P[OZOYPXQXRYR[Q]P^N_ RPYPZQZQYPY RQ[Q\\\\P^',\n 3264: ' 34MXVFUFTGRT RVGUGRT RVGVHRT RVFWGWHRT RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY',\n 3265: ' 59H]OKOJPJPLNLNJOHPGSFWFZG[I[KZMYNWOSPQQQSSTTT RUFZG RYGZIZKYMXNVO RWFXGYIYKXMWNSPRQRSST RPXOYOZP[Q[RZRYQXPX RPYPZQZQYPY',\n 3266: ' 22MXWFUGTHSJSLTMUMVLVKUJTJ RUGTITJ RTKTLULUKTK',\n 3267: ' 22MXVIUITHTGUFVFWGWIVKULSM RUGUHVHVGUG RVIVJUL',\n 3268: ' 72E_\\\\O\\\\N[N[P]P]N\\\\M[MYNWPRXPZN[K[HZGXGVHTISKRPPROTMUKUITGRFPGOIOLPRQURWTZV[X[YYYX RL[HZ RIZHXHVITJSLR RPPQSTYVZ RK[JZIXIVJTKSMRRO ROLPOQRSVUYWZXZYY',\n 3269: ' 52H]TBL_ RYBQ_ RZKZJYJYL[L[JZHYGVFRFOGMIMLNNPPVSWUWXVZ RNLONVRWT ROGNINKOMUPWRXTXWWYVZS[O[LZKYJWJULULWKWKV',\n 3270: ' 8G^_BEbFb R_B`BFb',\n 3271: ' 32JZZBXCUERHPKNOMSMXN\\\\O_Qb RSHQKOONTN\\\\ RZBWDTGRJQLPOOSN\\\\ RNTO]P`Qb',\n 3272: ' 32JZSBUEVHWLWQVUTYR\\\\O_LaJb RVHVPUUSYQ\\\\ RSBTDUGVP RVHUQTUSXRZP]M`Jb',\n 3273: ' 39J[TFSGUQTR RTFTR RTFUGSQTR ROIPIXOYO ROIYO ROIOJYNYO RYIXIPOOO RYIOO RYIYJONOO',\n 3274: ' 8F_JQ[Q[R RJQJR[R',\n 3275: ' 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R',\n 3276: ' 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V',\n 3277: ' 11MWUFTGRM RUGRM RUFVGRM',\n 3278: ' 22H\\\\PFOGMM RPGMM RPFQGMM RZFYGWM RZGWM RZF[GWM',\n 3279: ' 30KZSFQGPIPKQMSNUNWMXKXIWGUFSF RSFPIQMUNXKWGSF RUFQGPKSNWMXIUF',\n 3301: ' 62F^IHJIIJHIIGKFMFOGPHQKQOPRNTLUIV ROHPKPPOR RMFNGOJOPNSLU RLVOY RKVOZ RIVN[UV R\\\\G[H\\\\H\\\\G[FYFWGVHUJUYW[[W RWHVJVXXZ RYFXGWJWWYY',\n 3302: '101E_GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYGZH[J\\\\K RYHZJ RWFXGYJZK\\\\K R\\\\KRP RYM[O\\\\R\\\\U[XYZV[S[PZJWIWHX RXNYN[P RVNYO[Q\\\\S RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY',\n 3303: ' 79F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G',\n 3304: ' 79E_HLHKIIKGNFRFUGWHYJ[M\\\\Q\\\\U[XYZV[S[PZJWIWHX RKHMGRGUHWIYK[N RTZRZLWKW RHKJIMHRHUIWJYL[O\\\\R RZYXZUZRYNWKVIVHXHZI[JZIY RPHMKLMLONSNU RMNMONQNR RMKMMOQOSNUMVKVJUJT',\n 3305: ' 95F^RHPFNFLGJJINIRJVLYNZQ[T[WZYY[W RLHKJJMJRKVMYPZ RNFMGLIKMKQLUMWOYRZUZXY[W RUFRHQIPKPLQNTPURUT RQKQLUPUQ RQIQJRLUNVPVRUTSURUPTOR RUFVGXHZH RUGVHWH RTGVIXIZH[G RUNYK RYKZL\\\\L RXLYMZM RWMXNZN\\\\L',\n 3306: ' 94F^MNKMJKJIKGNFQFTGXI RKHMGRGUH RJKKIMHRHXIZI[H[GZFYF RSHRIQKQMROVSWVWYV\\\\U]S^ RTPWSXVXYW[ RQMSOVQXSYVYYX[V]S^O^L]K\\\\JZJWLTLRKQ RL\\\\K[KWLU RO^M]L[LWMTMRLQJQIRIS RUPYL RYLZM\\\\M RXMYNZN RWNXOZO\\\\M',\n 3307: ' 99E_UJTHSGQFNFKGIJHNHRIUJWLYNZQ[T[WZYY[W\\\\T\\\\Q[NYL RKHJJIMIRJUKW RZW[U[QZNYM RNFLGKIJMJRKVLXNZ RWZYXZUZQYOWM RUFRHPJOLOMPOSQTSTU RPLPMTQTR RPJPKQMTOUQUSTURVQVOUNS RTOYLZJ R\\\\FZJ RYG]I R\\\\F[GYGZHZJ[I]I\\\\H\\\\F',\n 3308: ' 92F_RFPGNIMKMMNOPQQSQU RNLNMQQQR RNINKOMQORQRSQUPVNWLWJVIUHSHQIPJQIR RRFTHVHXG RQGSH RPGQHSIUIXG RRPYK RYK[N\\\\Q\\\\T[WYYVZR[ RXLZN[Q[UZW RVMWMYOZRZVYXXYVZ RVZTZRYPYNZM\\\\N^P_R_T^ RSZQZ RR[PZNZ',\n 3309: ' 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\\\J\\\\H[GYG RJXKYJZIYIWJVLVNWPYR\\\\T^ RNXOYQ\\\\R] RLVMWNYP\\\\Q]S^V^X]Y\\\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP',\n 3310: ' 83F_PPNPLOKNJLJJKHLGOFQFTGWJYK RLHNGRGTHUI RJJKIMHQHTIVJYK[K\\\\J\\\\H[GYG RJXKYJZIYIWJVLVNWPYR\\\\T^ RNXOYQ\\\\R] RLVMWNYP\\\\Q]S^V^X]Y\\\\ZZZWYUWRVPVO RYXYWVRVQ RX]Y[YYXWVTURUPWNYNZOZP',\n 3311: ' 81E_[KZIXGUFRFOGMILKLNMQPWPYN[ RMNMOPUPV RNHMJMMNOPSQVQXPZN[L[JZ RHVJZ RGYKW RHVHXGYIYJZJXKWIWHV RNONMOKQJTJVKXMYM RUKWM RRJTKULVN RYMPQ RUOYXZY[Y RTPXXZZ RSPWYY[\\\\X',\n 3312: ' 73G^ZSYTVTUSUQVOXLYJYH RVQVPYLYK RWTVSVRWPYNZLZJYHXGUFPFMGLHKJKLLNNQOSOTNV RLKLLOQOR RLHLJMLOOPQPSOUMWJY RMWOWRYUZXZZY RNXOXSZTZ RJYLXMXQZT[V[YZZY[W',\n 3313: '128BbEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFKFMGOIPLPROUNWLYI[HZGZ RNIOLORNUMW RJZIYHY RKFMHNKNRMVLXKYJXIXF[ RNGPFRFTGVIWLWRVUUWSYQ[PZOZ RUIVLVRUV RRZQYPY RRFTHUKUSTWSYRXQXN[ RUHVGXFZF\\\\G]H^J_K R\\\\H]J RZF[G\\\\J]K_K R_K\\\\M[NZQZT[X][`X R\\\\N[P[T\\\\W^Z R_K]M\\\\O\\\\S]W_Y',\n 3314: ' 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGRISLSRRUQWOYL[KZIZG[ RQIRKRRQUPWOX RMZKYIY RNFPHQKQRPVNYLXJXG[ RRHSGUFWFYGZH[J\\\\K RYHZJ RWFXGYJZK\\\\K R\\\\KYMXNWQWTXXZ[]X RYNXPXTYW[Z R\\\\KZMYOYSZW\\\\Y',\n 3315: ' 72D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\\\P\\\\S[VZXXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\\\P RSZQZKWJW RYYWZTZQYMWJVHVGXGZH[IZHY',\n 3316: '100E`HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSU RSWS\\\\R^P_M_L^L\\\\M[N\\\\M] RQHRJR\\\\Q^ ROFPGQJQU RQWQ\\\\P^O_ RSJXF RXFZI[K\\\\O\\\\R[UYXV[ RWGZK[N[O RVHXJZM[P[SZVYX RWYUVSU RQUOVMX RWZUWSVPV RV[TXSW RQWOWMX',\n 3317: ' 88D`PFNGLIKKKMMQMS RLLLMMOMP RLILKNONQMSLTJTISIR RPFQGWIZK[M\\\\P\\\\S[VZX RXZU[R[OZIWHWGX RPGQHWJYKZL RPFPHQIWKYL[N\\\\P RSZQZKWJW RXZTZQYMWJVHVGXGZH[IZHY RTXVVXV\\\\Z]Z RWWXW[Z RUWVWZ[\\\\[^Y',\n 3318: ' 96D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRVQXOZM[K[IZ RPHQJQVPX RNFOGPJPVOYM[ RGVIZ RFYJW RGVGXFYHYIZIXJWHWGV RRISGUFWFYGZH[J\\\\K RYHZJ RWFXGYJZK\\\\K R\\\\KRP RTOXYZ[]X RUOYX[Z RVNZX[Y\\\\Y',\n 3319: ' 83E`\\\\H[G\\\\F]G]I\\\\KZKVISHOHKIIK RYJVHSGOGLH R]I\\\\JZJVGSFOFLGJIIKHNHRIUJWLYNZQ[U[XZZY\\\\W]T]Q\\\\OZNWNUOSRQSOS RLXNYQZUZYY RIUKWMXPYUYYX[W\\\\V]T RXOWOSSRS R]Q[OYOWPUSSTQTOSNQNOOMQL',\n 3320: ' 81F_LNJMIKIIJGMFRFUGYJ[J\\\\I RJHLGRGUHXJ RIKJILHRHUIYK[K\\\\I\\\\G[FZG[H RUIRLQNQPSTSV RRORPSRSS RRLRNTRTTSVRWPWOVOT RJYKZJ[IZIXJVLVOWSYVZYZ[Y RLWMWSZUZ RIXJWKWMXQZT[W[ZZ\\\\X',\n 3321: ' 45G]JHKHLILWJX RKGMHMXPZ RIILFNHNWPYRY RJXKXMYO[RYVV RTHUHVIVYX[[X RUGWHWYYZ RSIVFYHXIXXYYZY',\n 3322: '100D`GQGRHSJSLRLOKMIJIHKF RKOIK RJSKRKPIMHKHIIGKFNFPGQHRJRRQUOW RPHQJQT RNFOGPJPUOW RRISGUFWFYG[J\\\\K RYHZJ RWFXGYJZK\\\\K RZKXKWLWNXP[R\\\\T RXO[Q RWMXN[P\\\\R\\\\V[XYZW[S[PZJWIWHX RTZRZLWKW RZYXZUZRYNWKVIVHXHZI[JZIY',\n 3323: '143BcEQERFSHSJRJOIMGJGHIF RIOGK RHSIRIPGMFKFIGGIFLFNGOHPJPNOQMTKV RNHOJOONR RLFMGNJNOMSKV RNGPFSFUG RWFTGSISMTPVSWUWWVY RTMTNWSWT RWFUGTITLUNWQXTXVWXUZS[O[MZKXIWGWFX RNZKWJW RQ[OZLWJVGVFXFZG[HZGY RWFZF\\\\G^J_K R\\\\H]J RZF[G\\\\J]K_K R]K[KZLZN[P^R_T R[O^Q RZM[N^P_R_W^Y]Z[[X[UZ RYZXZVY R^Y\\\\ZZZXYWX',\n 3324: ' 86F^KHMHOIPJQMQO RQQQUPXM[KZI[ RNZLYKY ROYNYLXI[ RMGPHQIRLRUSWUYWZ RIINFPGRISLSO RSQSTTWUXWYYY RQURXTZV[[X RSLTIWFYG[F RVGXHYH RUHVHXI[F RKSMOQO RSOWOYM RMPWP RKSMQQQ RSQWQYM',\n 3325: ' 74E_HQHRISKSMRMOLMJJJHLF RLOJK RKSLRLPJMIKIIJGLFOFQGRHSJSORRQTQUSWTW RQHRJRPQSPUSX ROFPGQJQPPTOVRYUV RSJ[F RYGYZX] RZGZXY[ R[F[VZZY\\\\W^T_P_M^K\\\\JZKYLZK[',\n 3326: ' 74F^NIOGQFTFVGWHXJXMWOVPTQ RQQOPNN RVHWIWNVO RTFUGVIVNUPTQ RMUNSORQQTQWRYTZVZZY\\\\W^T_P_N^KZJY RXTYVYZX\\\\ RTQWSXUX[W]V^T_ RO^N]LZKY RR_P^O]MZLYIYHZH\\\\I]J]',\n 3401: ' 46J[TMQNOONPMSMVNYO[UX RNVOYPZ RQNOPNSNUOXQZ RRNSOUPUYW[ZX RSNVPVXXZ RTMUNWOXO RWPXO RWPWXXYYY',\n 3402: ' 50J[LHMINK RTFQGOINKNXMY RPIOKOXRZ RTFRGQHPKPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ',\n 3403: ' 27KXRNTPVOTMRNOPNRNWOYQ[UY RSNUO RPPOROWPYQZ RQOPQPVQXSZ',\n 3404: ' 47J[QFNINKOLSNVPWRWUVXTZ ROJOKSMVOWP ROHOIPJUMWOXRXUWXTZQ[ RRNNPNXMY ROPOXRZ RPOPXRYSZ RMYNYPZQ[',\n 3405: ' 27KXPUVQSMOPNRNWOYQ[UY RUQRN RPPOROWPYQZ RTRROQOPQPVQXSZ',\n 3406: ' 49LYXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKQMRNTOVOVP RNPPP RRPVP RPPPTQ` RSOPOQNQ[ RRPRTQ`',\n 3407: ' 53J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV[V]U_ RSNVPVZ RTMUNWOXO RWPXO RWPW\\\\V^U_S`P`N_M^M]N]N^',\n 3408: ' 50J[LHMINK RTFQGOINKNXMY RPIOKOYPZ RTFRGQHPKPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\\\T^Q` RUNVOWR RTNVQWTWWV[T^',\n 3409: ' 39MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQYS[VX RPNRORXTZ RNPQMRNTO RSPTO RSPSXTYUY',\n 3410: ' 45MWRFQGQHRISHSGRF RQGSH RQHSG ROOPOQPQ[P^O_M` RPNROR[Q] RNPQMRNTO RSPTO RSPS[R]P_M` RS[T]U^',\n 3411: ' 63KYNHOIPK RUFSGQIPKPMOONP RPPPXOY RRIQKQM RQOPOQMQXSZ RUFSHRKRO RRPRXSYTY ROYQZR[UX RRLVIWJWLUNSO RUJVKVLUN RROWOWP RNPPP RRPWP',\n 3412: ' 29MWOHPIQK RWFTGRIQKQXPY RSIRKRYTZ RWFUGTHSKSXTYUY RPYRZS[VX',\n 3413: ' 74E_GOHOIPIXHYJ[ RHNJPJXIYJZKYJX RFPIMKOKXLYJ[ RNNPOQQQXPYR[ RPNQORQRXQYRZSYRX RKPNNPMRNSPSXTYR[ RVNWOYPYY[[^X RWNZPZX\\\\Z RSPVNXMYN[O\\\\O R[P\\\\O R[P[X\\\\Y]Y',\n 3414: ' 49I[KOLOMPMXLYN[ RLNNPNXMYNZOYNX RJPMMOOOXPYN[ RRNSOUPUYW[ZX RSNVPVXXZ ROPRNTMUNWOXO RWPXO RWPWXXYYY',\n 3415: ' 41J[NPNXMY ROPOXRZ RQOPPPXRYSZ RMYNYPZQ[TZ RNPQOVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ',\n 3416: ' 57J[OJMLMNNQNXLZ RNYO` RNMNNOQO[ RNKNLONPQPXQXSYTZ RPYO` RSZQY RTZR[PY RNYLZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ',\n 3417: ' 43J[TMQNOONPMSMVNYO[UX RNWOYPZ RQNOPNSNUOXQZ RRNSOUPUXV` RSNVPV[ RTMUNWOXO RWPXO RWPWXV`',\n 3418: ' 32KYNOOOPPPXOY RONQPQYSZ RMPPMRORXSYTY ROYQZR[UX RTNUPWOVMRO RUNVO',\n 3419: ' 42LWXFWGUGSFQFPHPMOONP RVHTHRGQG RXFWHVITIRHQHPI RPKRP RPPPTQ` RQOPOQNQ[ RRPRTQ` RNPPP',\n 3420: ' 37LXSIRLQNPONP RSISOVOVP RNPQP RSPVP RQPQXPY RROQORMRXTZ RSPSXTYUY RPYRZS[VX',\n 3421: ' 47I[KOLOMPMXLY RLNNPNXPZ RJPMMOOOXQYRZ RLYMYOZP[RZUX RVMTOUPUYW[ZX RVPWOVNUOVPVXXZ RVMXOWPWXXYYY',\n 3422: ' 47J[OKMMMONRNXMY RNNNOOROXRZ RNLNMOOPRPXRYSZ RMYNYPZQ[TZ RPPVMWOXRXUWXVYTZ RUNVOWQ RTNVPWSWUVXTZ',\n 3423: ' 72F_KKIMIOJRJXIYK[ RJNJOKRKXJYKZLYKX RJLJMKOLRLXMYK[ RONQORQRXQY RQNROSQSXVZ RLPONQMSNTPTXVYWZ RQYRYTZU[XZ RTPZM[O\\\\R\\\\T[XZYXZ RYNZO[Q RXNZP[S[UZXXZ',\n 3424: ' 44KZOOPOQPQXPXNYM[M]N_P`S`V_V^U^U_ RPNRPRXUZ RNPQMSOSXUYVZ RXYT[SZQYOYM[ RUNVPXOWMSO RVNWO',\n 3425: ' 47J[OKMMMONRNXMY RNNNOOROYQZ RNLNMOOPRPXQYRY RMYOZP[SX RPPVMWOXSXWWZV\\\\T^Q` RUNVOWR RTNVQWTWWV[T^',\n 3426: ' 43KYNPSMUNVPVRUTQV RSNUO RRNTOUQURTTSU RSUUWVYV]U_S`Q`O_N]N[OYQXWV RRVTWUY RQVTXUZU]T_S`',\n 3427: ' 61JZRMPNMPMRNU RNPNROT RPNOOORPT RPNROTOVNWMWKVJTJ RQNSN RRMTNVN RNUVRWUWWVYR[ RUSVUVXUY RTSUUUXTZ RTZRYOYL[ RSZQZ RR[PZNZL[',\n 3428: ' 78J[VFUGSGQFOFNHNMMOLP RTHRHPGOG RVFUHTIRIPHOHNI RNKPP RNPNTO` ROONOONO[ RPPPTO` RLPNP RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\\\V^',\n 3429: ' 62J[PIOLNNMOKP RPIPXQYO[ ROONOONOXNYOZPYOX RKPNPNXMYO[ RPPUMWNXPXRWTSV RUNWO RTNVOWQWRVTUU RUUWVXXX[W]U_R` RUVWW RSVTVVWWYW\\\\V^',\n 3501: ' 60G]LINGPFRFSGZW[X]X RQGRHYXZZ[YYX RNGPGQHXXYZZ[[[]X RLMMLOKPKQL RPLPM RMLOLPN RG[IYKXNXPY RJYNYOZ RG[JZMZN[PY RRJLX RNSVS',\n 3502: '110F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RRIQJPLPU RQKQS RRIRRQTPU RRIXFZG[I[KYMUO RXGZIZK RVGXHYIYLWN RWNZP[R[X RYPZRZW RWNXOYQYX RJ[MYPXTXWY RLZOYTYVZ RJ[NZSZU[WYYX[X RUOUX RURYR RUUYU',\n 3503: ' 69E]NGLHJJILHOHSIVJXMZP[S[VZXYZW[U RJKINISKWNYQZTZWY RNGLIKKJNJRKUNXQYTYWXYW[U RPJPV RQJQT RRIRSQUPV RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RWIWX',\n 3504: ' 72G^IFWFYGZIZX RKGWGYIYW RIFJGLHWHXIXX ROKNLMNMOKOJPJRKQMQMV RNMNT RKPNP ROKOSNUMV RI[LYOXSXVY RKZNYSYUZ RI[MZRZT[VYXXZX RRHRX RRMTNVNXM RRSTRVRXS',\n 3505: ' 94G]IHKFMFOGQF RLGNG RIHKGMHOHQF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RQMRJSHTGVFXF[G RTHVGXGZH RRJSIUHWHYI[G RQURRSPTOVOXP RTPVPWQ RRRSQUQVRXP RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RQMQX',\n 3506: ' 91F]JHLFOFQGSF RMGPG RJHLGNHQHSF RPKOLNNNOLOKPKRLQNQNV ROMOT RLPOP RPKPSOUNV RSJSYRZQZMXKXIYG[ RTJTX RTPXP RPZOZMYJY RUIUOXO RXQUQUWTYP[N[LZJZG[ RSJUIXFZG\\\\G]F RWGYH[H RVHXIZI\\\\H]F RXIXW',\n 3507: ' 87E^NGLHJJILHOHRIUJWLYNZQ[U[XZZX[V[SZQYPWOUO RJKINISJV RNGLIKKJNJSKVLXNZ RYXZWZSYQ RU[WZXYYWYSXQWPUO RPJPW RQJQU RRIRTQVPW RPJRIUFWGYGZF RTGVHXH RSHUIWIYHZF RYHUOU[ RUSYS RUVYV',\n 3508: '112F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZOYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOWNYLZM[P[TZXX[ RXMYNZPZUYX RWNXNYPYUX[ RUOUY RURYR RUUYU',\n 3509: ' 67I\\\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZSZOXMXKYI[ RWKWW RRZQZOYLY RYHXJXVWXUZS[P[NZKZI[',\n 3510: ' 65H\\\\LHNFQFTGVF ROGSG RLHNGQHTHVF RSKRLQNQOOONPNROQQQQV RRMRT ROPRP RSKSSRUQV RYHWJVMVXUZ RWKWW RYHXJXVWXUZR[O[LZJXJVKULUMVLWKW RJVMV',\n 3511: '115F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXSXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRITGVFXFZG RWGXGYH RTGVGXIZG RUOXLYM[N RWMYN[N R[NYQWSUU RWSYTZX[Z\\\\Z RYVZZ RWSXTYZZ[[[\\\\Z RUOUY',\n 3512: ' 85G]IHKFNFPGRF RLGOG RIHKGMHPHRF RNKMLLNLOJOIPIRJQLQLW RMMMU RJPMP RNKNTMVLW RK[NYRXWX[Y RMZPYWYZZ RK[OZVZY[[Y RSIRJQLQU RRKRS RSISRRTQU RSIUGWFYF[G RXGYGZH RUGWGYI[G RWGWX',\n 3513: '107D`LJKKJMJOHOGPGRHQJQJU RKLKS RHPKP RLJLRKTJU RE[GYIXKXMYNYOX RHYKYMZ RE[GZJZL[M[NZOX RLJPFTJTWUYVY RPGSJSXRYSZTYSX RPPSP RNHOHRKROOO ROQRQRXQYS[VYWX RTJXF\\\\J\\\\W]Y^Y RXG[J[X]Z RXP[P RVHWHZKZOWO RWQZQZY\\\\[^Y ROHOX RWHWX',\n 3514: ' 84E^GIIGKFMFOGQJVUXXYY RMGOIPKVWYZ RIGKGMHOKTVVYWZY[ RVHXIZI\\\\H]F RWGYH[H RVHXFZG\\\\G]F RKOIOHPHRIQKQ RIPKP RG[IYKXNXPY RJYMYOZ RG[JZMZN[PY RKGKX RYIY[ RRLSMUNWNYM RKTMSQSST',\n 3515: ' 79E_NFLGJIIKHNHRIUJWLYNZQ[S[VZXYZW[U\\\\R\\\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS',\n 3516: ' 70H^KFLGMIMOKOJPJRKQMQMYJ[MZMbO` RMHNJN` RKPNP RKFMGNHOJO` ROKRIVFZJZX RVGYJYX RTHUHXKXY RRXUXXY RSYUYWZ RRZTZV[XYZX RRIR_ RRMTNVNXM RRSTRVRXS',\n 3517: ' 99E_NFLGJIIKHNHRIUJWLYNZP[T[VZXYZW[U\\\\R\\\\N[KZIXGVFUGRIOJ RJJIMISJV RNFLHKJJMJSKVLXNZ RZV[S[MYIXH RVZXXYVZSZMYKWHUG ROJOW RPJPU RQJQTPVOW RUGUZ RUMWNXNZM RUSWRXRZS RP[QZRZT[X`Za[a RT\\\\V_XaYa RRZS[VaXbZb[a',\n 3518: '108F^HHJFMFOGQF RKGNG RHHJGLHOHQF RMKLLKNKOIOHPHRIQKQKW RLMLU RIPLP RMKMTLVKW RJ[MYPXRXUY RLZNYRYTZ RJ[NZQZS[UY RRIQJPLPU RQKQS RRIRRQTPU RRIUGWFYGZIZLYNXOTQRR RWGXGYIYMXN RUGWHXJXMWOTQ RTQVRWSZX[Y\\\\Y RWTYX[Z RTQVSXYZ[\\\\Y',\n 3519: ' 94G^UITHRGOF RVHTG RWGSFOFLGKHJJKLLMONWNYOZPZRYU RKKLLOMXMZN[O[QZS RKHKJLKOLYL[M\\\\O\\\\QYUU[ RIOJPLQUQVRVSUU RJQLRTRUS RIOIPJRLSSSUTUU RI[LYPXSXVY RKZNYRYUZ RI[MZRZU[ RWGUISL RRNPQ ROSMUKVJVJUKV',\n 3520: ' 71E]JJILHOHSIVKYMZP[S[VZXYZW[U RISJVLXNYQZTZWY RJJIMIQJTLWNXQYTYWXYW[U RHIIGKFOFUGYG[F RPGTHXH RHIIHKGNGTIWIYH[F RSIRJPKPV RQKQT RRJRSQUPV RWIWX',\n 3521: ' 89F^HHJFLFOGQF RKGNG RHHJGMHOHQF RKJJLIOISJVKXMZP[S[VZXYZ[\\\\Y RJSKVNYQZTZ RKJJNJQKTLVNXQYUYXX RUIQJPLPV RQKQT RRJRSQUPV RUIWHYFZG\\\\HZIZW[Y\\\\Y RYIZHYGXHYIYX[Z RWHXIXX RUIUY RUNXN RURXR',\n 3522: ' 72G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXXZX RRJUIWHYFZG\\\\HZIZX RYIZHYGXHYIYW RWHXIXX RRJRX RRMTNVNXM RRSTRVRXS',\n 3523: ' 95E`HFIGJIJOHOGPGRHQJQJXHY RJHKJKX RHPKP RLYNYPZ RHFJGKHLJLXOXQY RHYKYNZO[QYTXVYW[YY\\\\X ROHRFTHTXWXYY RRGSHSX ROHQHRIRXQY RWYXZ RWHZF\\\\H\\\\X RZG[H[X RWHYHZIZXYY ROHOX RWHWX RONRN RORRR RWNZN RWRZR',\n 3524: ' 65G]HIJGLFNFOGWYXZZZ RMGNHVYWZ RJGLGMHUZV[X[ZZ\\\\X RWFYG[G\\\\F RWGXHZH RVHWIYI[H\\\\F RH[IYKXMXNY RJYLYMZ RH[IZKZM[ RWFSO RQRM[ RLPPP RSPXP',\n 3525: ' 86G^JFKGLILOJOIPIRJQLQLXJY RLHMJMX RJPMP RNYQYSZ RJFLGMHNJNXRXUY RJYMYPZR[UYXX RRJUIWHYFZG\\\\HZIZ^Y`WbUaQ`L` RYIZHYGXHYIYY RWHXIXXZ[ RXaV`S` RY`V_P_L` RRJRX RRMTNVNXM RRSTRVRXS',\n 3526: ' 57H\\\\XGWIROOSMWJ[ RVKNV RZFWJUNRRMXLZ RJHLFOGUGZF RKGOHSHWG RJHNIRIVHXG RLZNYRXVXZY RMZQYUYYZ RJ[OZUZX[ZY RMPQP RTPXP',\n 3601: ' 53J[PRNTMVMXNZP[RYUX RMVNXOYQZ RNTNVOXQYRY RNPPPSOUNVMXOWPWXXYYY RONNOQO RTOWOVNVYWZ RMOOMPNROUPUYW[YY RMORT',\n 3602: ' 44I[LHMJMXKY RNJMHNGNXQZ RLHOFOXQYRZ RKYMYOZP[RZUYWY ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY',\n 3603: ' 35JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMUNWOXO RSNTOVO RPORNTPVPXO',\n 3604: ' 41IZRMPNMOMXKY RNONXQZ RRMOOOXQYRZ RKYMYOZP[RZUYWY RMHPFQIWOWY RPINHOGPIVOVX RMHUPUY',\n 3605: ' 32JXNONXLYMYOZP[ ROOOYQZ RPOPXRYSYQZP[ RNORNTMWQURPU RSNVQ RPORNUR',\n 3606: ' 41JWNHNXLYMYOZP[ ROHOYQZ RPHPXRYSYQZP[ RNHQGSFTGVHWH RRGSHUH RPHQGSIUIWH RKMNM RPMTM',\n 3607: ' 56I[MOMXKYLYNZO[PZRYUX RNPNYPZ ROOOXQYRY RMOOORNTMUNWOYOWPW\\\\V_TaRbQaO`M` RSNVPV\\\\ RSaQ`P` RRNSOUPUZV]V_ RTaS`Q_O_M`',\n 3608: ' 47I[LHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPROTNUMVNXOYOWPWYU[T] RTNVOVYU[ RROSOUPUYT]T`UbVbT`',\n 3609: ' 35MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[UY RRPSORNQORPRYSZ RRMSNUOSPSXTYUY',\n 3610: ' 39MWRFPHRITHRF RRGQHSHRG RRMQNOOQPQYS[T] RRPSORNQORPRYS[ RRMSNUOSPSYT]T`RbPbPaRb',\n 3611: ' 50IZLHMJMXKYLYNZO[ RNJMHNGNYPZ RLHOFOXQYO[ ROPRNTMVPSROU RSNUP RRNTQ RSRTSVXWYXY RSSTTUYVZ RRSSTTYV[XY',\n 3612: ' 22MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[',\n 3613: ' 67E_GOHOIPIXGYHYJZK[ RINJOJYLZ RGOIMKOKXMYK[ RKPNOPNQMSOSXUYS[ RPNRORYTZ RNOOOQPQXPYRZS[ RSPVOXNYMZN\\\\O]O[P[X\\\\Y]Y RXNZOZY[Z RVOWOYPYY[[]Y',\n 3614: ' 45I[KOLOMPMXKYLYNZO[ RMNNONYPZ RKOMMOOOXQYO[ ROPROTNUMVNXOYOWPWXXYYY RTNVOVYWZ RROSOUPUYW[YY',\n 3615: ' 40I[MOMXKY RNPNXQZ ROOOXQYRZ RKYMYOZP[RZUYWY RMOOORNTMUNWOYOWPWY RSNVPVX RRNSOUPUY',\n 3616: ' 54I[LMMOMXKYMYMb RMNNONaO`N^ RNYOYQZ RLMNNOOOXQYRZ ROZP[RZUYWY ROZO^P`Mb ROPROTNUMVNXOYOWPWY RTNVOVX RROSOUPUY',\n 3617: ' 44I[MOMXKY RNPNYPZ ROOOXQYRY RKYLYNZO[PZRYUX RMOOORNTMUNWOYOWPWb RSNVPVaU`V^ RRNSOUPU^T`Wb',\n 3618: ' 38JXLOMONPNXLYMYOZP[ RMNOOOYQZ RLONMPOPXRYSYQZP[ RPOTMUNWOXO RSNTOVO RRNTPVPXO',\n 3619: ' 59JZMOMSOTUTWUWY RNONS RVUVY RPNOOOSQT RSTUUUYTZ RMOPNRMTNVNWM RQNSN RPNROTOVN RWYTZR[PZNZL[ RSZQZ RTZRYOYL[ RWMVOTROWL[',\n 3620: ' 28MWPHQJQXOYPYRZS[ RRJQHRGRYTZ RPHSFSXUYVYTZS[ RNMQM RSMVM',\n 3621: ' 47I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPWXXYYY RTNVOVYWZ RUMSOUPUYW[YY',\n 3622: ' 36I[LMMOMXP[RYUXWX RMNNONXQZ RLMNNOOOWPXRY RUMVNXOYOWPWX RTNVOVW RUMSOUPUX',\n 3623: ' 57E_HMIOIXL[NYQX RINJOJXMZ RHMJNKOKWLXNY RQMOOQPQXT[VYYX[X RPNRORXUZ RQMRNTOSPSWTXVY RYMZN\\\\O]O[P[X RXNZOZW RYMWOYPYX',\n 3624: ' 59H[KOLONPOQSYTZV[XY RMNOOTYVZ RKOMMONPOTWUXWYXY RRSUMVNXNYM RUNVOWO RTOVPXOYM RQUN[MZKZJ[ RNZMYLY ROYMXKYJ[ RMTPT RSTVT',\n 3625: ' 60I[KOLOMPMXKY RLNNONYPZ RKOMMOOOXQYRY RKYLYNZO[PZRYUX RUMVNXOYOWPW\\\\V_TaRbQaO`M` RTNVOV\\\\ RSaQ`P` RUMSOUPUZV]V_ RTaS`Q_O_M`',\n 3626: ' 38I[XML[ RLONPQPTOXM RMNOOSO RLONMPNTNXM RL[PYSXVXXY RQYUYWZ RL[PZTZV[XY RNTVT',\n 3700: ' 42H\\\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJYLYNZO[QZVYXY',\n 3701: ' 27H\\\\OHPIQKQXOY RQIPHQGRIRYTZ ROHRFSHSXUYVY ROYPYRZS[TZVY',\n 3702: ' 48H\\\\LHNHPGQFSGVHXH RPHRG RLHNIPIRHSG RVHVP RWIWO RXHXPQPNQLSKVK[ RK[OYSXVXZY RNZQYVYYZ RK[PZUZX[ZY',\n 3703: ' 57H\\\\LHMHOGPFRGVHXH ROHQG RLHNIPIRG RVHVO RWIWN RXHXOVOSPQQ RQPSQVRXRXY RWSWX RVRVY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY',\n 3704: ' 41H\\\\UFKPKUTU RVUZU[V[TZU RLPLT RMNMU RTGTXRY RUJVHUGUYWZ RUFWHVJVXXYYY RRYSYUZV[WZYY',\n 3705: ' 53H\\\\LFLO RLFXF RMGVG RLHUHWGXF RVLUMSNOOLO RSNTNVOVY RUMWNWX RVLWMYNZNXOXY RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY',\n 3706: ' 59H\\\\LHLXJY RMIMXPZ RNHNXPYQZ RLHNHRGTFUGWHXH RSGUH RRGTIVIXH RNPOPSOUNVM RSOTOVPVY RUNWPWX RVMWNYOZOXPXY RJYLYNZO[QZVYXY',\n 3707: ' 38H\\\\KHMFPGUGZF RLGOHTHWG RKHOIRIVHZF RZFYHWKSOQRPUPXQ[ RRQQTQWRZ RUMSPRSRVSYQ[',\n 3708: ' 71H\\\\LILO RMJMN RNINO RLINISHUGVF RSHTHVIVO RUGWHWN RVFWGYHZHXIXO RLONOVRXR RXOVONRLR RLRLXJY RMSMXPZ RNRNXPYQZ RVRVY RWSWX RXRXY RJYLYNZO[QZVYXY',\n 3709: ' 60H\\\\LHLQJR RMIMROS RNHNQPRQR RLHNHSGUF RSGTHVIVY RTGWIWX RUFVGXHZHXIXY RJRKRMSNTOSQRUQVQ RKYMXOXQYRZ ROYQZ RKYMYOZP[RZVYXY',\n 3710: ' 11LXRXPZR[TZRX RRYQZSZRY',\n 3711: ' 14LXR^R\\\\PZRXSZS\\\\R^P_ RRYQZR[RY',\n 3712: ' 22LXRMPORPTORM RRNQOSORN RRXPZR[TZRX RRYQZSZRY',\n 3713: ' 25LXRMPORPTORM RRNQOSORN RR^R\\\\PZRXSZS\\\\R^P_ RRYQZR[RY',\n 3714: ' 30LXRFQGOHQIRT RRISHRGQHRIRT RRFSGUHSIRT RRXPZR[TZRX RRYQZSZRY',\n 3715: ' 51I[LJMHNGQFSFVGWHXJXLWNUPSQ RMJNH RVHWIWMVN RLJNKNIOGQF RSFUGVIVMUOSQ RRQRTSQQQRT RRXPZR[TZRX RRYQZSZRY',\n 3716: ' 14LXTFRGQIQKRMTKRIRG RRJRLSKRJ',\n 3717: ' 14LXRLRJPHRFSHSJRLPM RRGQHRIRG',\n 3718: ' 62E_YNZO[O\\\\N RXOYP[P RXPYQZQ[P\\\\N RYNST RRUL[HVNP ROOSKOFJLPRTXVZX[Z[[Z\\\\X RLZIV RRKOG RKLPQTWVYXZ[Z RMZIU RRLNG RKKQQUWVXXY[Y\\\\X',\n 3719: ' 60H\\\\PBP_ RTBT_ RTFVGWIWKYJXHWGTFPFMGKIKLLNOPURWSXUXXWZ RXJWH RLLMNOOUQWRXT RMYLW RMGLILKMMONUPXRYTYWXYWZT[P[MZLYKWMVMXNZP[',\n 3720: ' 8G^[BIbJb R[B\\\\BJb',\n 3721: ' 27KYUBSDQGOKNPNTOYQ]S`Ub RQHPKOOOUPYQ\\\\ RSDRFQIPOPUQ[R^S`',\n 3722: ' 27KYOBQDSGUKVPVTUYS]Q`Ob RSHTKUOUUTYS\\\\ RQDRFSITOTUS[R^Q`',\n 3723: ' 39JZRFQGSQRR RRFRR RRFSGQQRR RMINIVOWO RMIWO RMIMJWNWO RWIVINOMO RWIMO RWIWJMNMO',\n 3724: ' 8F_JQ[Q[R RJQJR[R',\n 3725: ' 16F_RIRZSZ RRISISZ RJQ[Q[R RJQJR[R',\n 3726: ' 16F_JM[M[N RJMJN[N RJU[U[V RJUJV[V',\n 3727: ' 11NWSFRGRM RSGRM RSFTGRM',\n 3728: ' 22I[NFMGMM RNGMM RNFOGMM RWFVGVM RWGVM RWFXGVM',\n 3729: ' 30KYQFOGNINKOMQNSNUMVKVIUGSFQF RQFNIOMSNVKUGQF RSFOGNKQNUMVISF',\n 3801: ' 52E_NHLIJKIMHPHSIUKV RJLIOISJU RNHLJKLJOJRKVKXJZH[ RVHXHXYVY RYHYY RZGZZ RHFKGQHVHZG\\\\F RJPXP RH[KZQYVYZZ\\\\[',\n 3802: ' 65E_LGLZ RMGMZ RPFNGNZP[ RHJJHLGPFUFXGZIZKYM RXHYIYKXM RUFWGXIXKWL RQUOTNRNPONPMSLVLYM[O\\\\Q\\\\T[WYYWZT[P[LZJYHW RZO[Q[UZW RVLYNZQZUYXWZ',\n 3803: ' 60E_\\\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS',\n 3804: ' 46E_KGKZ RLGLZ RNFMGMZN[ RHKIIKGNFSFVGXHZJ[L\\\\O\\\\R[UZWXYVZS[N[KZIXHV RZK[N[SZV RVGXIYKZNZSYVXXVZ',\n 3805: ' 86E_\\\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[Y\\\\[ R[HZMZT[Y RZKYJ RZMXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RYWZV RVZXXYVZS RJPKONOUQXQZP RPPRQURWRYQ RMORRUSWSYRZP RZMYLXLWMXNYM',\n 3806: ' 69E_JHJZ RMGKHKY ROFMGLILYNY RHJJHLGOFSFVGXHYI\\\\F R\\\\F[HZLZO[S\\\\U RZIYK RVGXIYLZO RLPMOOOTPWPYO RQPTQVQXP RNOTRVRXQYOYLXKWKVLWMXL RH[JZNYSYYZ\\\\[',\n 3807: ' 90E_\\\\F[HZJXHVGSFQFNGLHJJILHOHRIUJWLYNZQ[T[VZXYYXZV[Y\\\\[ R[HZMZT[Y RZKYJ RZNYKXIVG RJKINISJV RNGLIKKJNJSKVLXNZ RXXYVYR RVZWYXVXQ RKSLRMSLTKTJS RJPKNMMOMRNUPWQ RKOMNONROTP RJPLOOOUQYQZP',\n 3808: ' 50E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\\\F RLPMNOLRKVKYL[N\\\\Q\\\\T[UYV RZN[P[SZU RVKXLYMZOZSYVYXZZ\\\\[ RH[LZPZU[',\n 3809: ' 23E_QIQY RRJRX RSISY RHFLHPITIXH\\\\F RH[KZOYUYYZ\\\\[',\n 3810: ' 42E_TIVIVXUZS[ RWIWXVY RXHXY RHFLHPITIXH\\\\F RIOHQHUIXKZN[S[VZXYZW\\\\T RIUJXKY RHSJUKXLZN[',\n 3811: ' 70E_JGJZH[ RKHKZ RNHLHLZ RHFJGNHSHYG\\\\F RLPMNOLRKUKXLYMYOXPSRQSPTPUQVRUQT RWLXMXOWP RUKWMWOVPSR RSRVRYSZUZWYX RWSYUYW RSRVSXUYXZZ[[\\\\[ RH[LZPZU[',\n 3812: ' 45E_JGJZ RKHKY RNHLHLYNY R\\\\KZNYPXSXUYW[X RZOYRYUZW R\\\\K[MZQZT[X\\\\[ RHFJGNHSHYG\\\\F RH[JZNYSYYZ\\\\[',\n 3813: ' 68E_QIQY RRJRX RSISY RNYLWJVIUHRHMIJKHMGPFTFWGYH[J\\\\M\\\\R[UZVXWVY RJUIRIMJJ RLWKUJRJLKIMG RZJ[M[RZU RWGYIZLZRYUXW RHFLHPITIXH\\\\F RH[KZOYUYYZ\\\\[',\n 3814: ' 48E_JHJZH[ RLHKIKZ ROFMGLILZ RHJJHLGOFSFVGXHZJ[L\\\\O\\\\S[UYV RZK[N[RZU RVGXIYKZNZRYVYXZZ[[\\\\[ RH[LZPZU[',\n 3815: ' 54E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\\\R\\\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG',\n 3816: ' 51E_JIJZ RMHKJKY RQFOGMILKLYNY RHKJINGQFTFWGYH[J\\\\M\\\\O[RYTVURUOTMRLO RZJ[L[PZR RWGYIZLZPYSVU RH[JZNYSYYZ\\\\[',\n 3817: ' 74E_QFNGLHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\\\R\\\\O[LZJXHVGSFQF RJKINISJV RNGLIKKJNJSKVLXNZ RZV[S[NZK RVZXXYVZSZNYKXIVG RJSKUNVTW[W\\\\X\\\\Z[[[Z\\\\Y RPWRW RKUNWQXSXTW',\n 3818: ' 69E_JIJZH[ RKIKZ RLHLZ RHKJILHNGQFUFYG[I\\\\K\\\\N[PZQ RYHZI[K[NZP RUFWGYIZKZOYQ RXRUSRSPRPPROUOXPZR\\\\U\\\\W[XZX RXQYR[V[WZT RTOVPXRYTZX[Z\\\\[ RH[LZPZU[',\n 3819: ' 94E_TFZG\\\\F[H[JYHWGTFPFMGJJIMIOJRLTOURUTTUSVQVP R[GZH[J RJPKRLSOTRTTS RKIJKJNKPMRPSRSTRVPWOXO RLQMQNPPNRMUMWNYPZRZUYXWZ RPMRLULXMZO[R[UZW RIWJYIZ RNPNOOMPLRKUKXL[O\\\\R\\\\T[WYYWZT[P[MZKYIWIYH[JZP[',\n 3820: ' 66E_QHMHKIJJILHOHSIVJXKYMZP[S[VZXYZW[U\\\\R\\\\N[KYIWH RUHTITKULVKUJ RISJVLXNYQZTZWY RJJINIQJTLWNXQYTYWXYW[T\\\\R RHFKI RKHLG RIGJGKFMGQHWHZG\\\\F',\n 3821: ' 51E_LHJJILHOHRIUJWLYNZQ[U[XZZY RKJJLIOISJV RKILJLKKMJPJSKVLXNZ RVHXHXXWZU[ RYHYXXY RZGZY\\\\[ RHFKGQHVHZG\\\\F',\n 3822: ' 31E_HFR[ RIGJHQWRY RJGKHRWSX R\\\\FR[ RWNUS RYLUQTTTV RHFJGOHUHZG\\\\F',\n 3823: ' 67E_LHJJILHOHRIUJWLYNZQ[S[VZXYZW[U\\\\R\\\\O[LZJXH RJLIOIRJUKW RJJKKKLJOJRKVLXNZ RYWZU[R[OZL RVZXXYVZRZOYLYKZJ RQIQ[ RRJRZ RSIS[ RHFLHPITIXH\\\\F',\n 3824: ' 41E_HFXYYZ RIGKHZZ RLH\\\\[ R\\\\FSP RQRJZ RPSMULW RQRMTLUKWKY RHFLHPITIXH\\\\F RH[JZNYSYYZ\\\\[',\n 3825: ' 47E_XHXZ RYHYY RZGZY RKHIJHMHPISKUMVPWSWVVXU RLUOVUV RHPIRKTNUTUVV RHFLHPITIXH\\\\F RHWJYLZP[T[XZ\\\\X',\n 3826: ' 73E_HFIGKHNHSFVFYGZIZKYM RXGYIYKXM RVFWGXIXL RXNTOROPNPLRKTKXL RTKVLWMVNTO RYM[O\\\\R\\\\T[WYYWZT[P[MZKYIWHTHRIOJNLMNMPNPPOQNPOO RXMZO[Q[UZW RXNYOZQZUYXWZ',\n 3901: ' 42J[PQMTMXP[TY RNTNXPZ ROROWRZ RRSMNNMONNO RONSNUMWOWXXY RUNVOVXUYVZWYVX RSNUPUXTYV[XY',\n 3902: ' 31IZNHLFMJMXP[UYWX RNHNXPZ RNHPFOJOWRZ ROOTMWPWX RTNVPVX RRNUQUY',\n 3903: ' 23KWNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMVOTPRN RSNUO',\n 3904: ' 32JZRMMPMXP[RZUYWY RNPNXPZ ROOOWRZ RPIPFQIWPWY RPIVPVX RPIMIPJUPUY',\n 3905: ' 25KXNPNYP[RY ROPOYPZ RPOPXQYRY RNPTMWQPU RSNVQ RRNUR',\n 3906: ' 32KWOIOXNYP[ RPIPXOYPZQYPX RQHQXRYP[ ROIUFWHUISG RTGVH RLMOM RQMUM',\n 3907: ' 41J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW]V_U`SaQaO`MaObQa RTNVPV]U_ RPaNa RRNUQU^T`Sa',\n 3908: ' 42I[NHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROORNTMWPWYT]T`UbVbT` RTNVPVYU[ RRNUQUZT]',\n 3909: ' 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQXPYR[ RRPSORNQORPRXQYRZSYRX RRMTOSPSXTYR[',\n 3910: ' 37MWRFPHRJTHRF RRGQHRISHRG RRMPOQPQYT] RRPSORNQORPRYS[ RRMTOSPSZT]T`RbPaPbRb',\n 3911: ' 51IZNHLFMJMXLYN[ RNHNXMYNZOYNX RNHPFOJOXPYN[ ROPRNTMVPSROU RSNUP RRNTQ RRSSTTYV[XY RSSTUUYVZ RSRTSVXWYXY',\n 3912: ' 21MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[',\n 3913: ' 66E_GOHOIPIXHYJ[ RINJOJXIYJZKYJX RGOIMKOKXLYJ[ RKONNPMSOSXTYR[ RPNRORXQYRZSYRX RNNQPQXPYR[ RSOVNXM[O[X\\\\YZ[ RXNZOZXYYZZ[YZX RVNYPYXXYZ[',\n 3914: ' 44I[KOLOMPMXLYN[ RMNNONXMYNZOYNX RKOMMOOOXPYN[ ROORNTMWOWXXYV[ RTNVOVXUYVZWYVX RRNUPUXTYV[',\n 3915: ' 28JZMPMXP[UYWX RNPNXPZ ROOOWRZ RMPOOTMWPWX RTNVPVX RRNUQUY',\n 3916: ' 47IZLMMOMXKYMYM_LbN` RNON` RLMNNOOOXQYRZ RNYOYQZ ROZP[UYWX ROZO_PbN` ROORNTMWPWX RTNVPVX RRNUQUY',\n 3917: ' 31J[MPMXP[UY RNPNXPZ ROOOWRZ RMPOOTMWPW_XbV` RTNVPV` RRNUQU_TbV`',\n 3918: ' 31KXMONOOPOXNYP[ RONPOPXOYPZQYPX RMOOMQOQXRYP[ RQOUMWOUPSN RTNVO',\n 3919: ' 41JZMPMSOUURWTWX RNPNSOT ROOOSPT RUSVTVX RTSUTUY RMPSMVNTOQN RRNUN RWXQ[MYOXSZ ROYQZ',\n 3920: ' 27MWRHPFQJQXPYR[ RRHRXQYRZSYRX RRHTFSJSXTYR[ RNMQM RSMVM',\n 3921: ' 40I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPWXXYYY RVPWOVNUOVPVYWZ RVMTOUPUYW[YY',\n 3922: ' 36I[LMMOMXQ[SYWW RMNNONXQZ RLMNNOOOWRYSY RVMXOWPWW RVPWOVNUOVPVW RVMTOUPUX',\n 3923: ' 59E_HMIOIXM[OYQX RINJOJXMZ RHMJNKOKWNYOY RRMPOQPQXU[WY[W RRPSORNQORPRXUZ RRMTOSPSWVYWY RZM\\\\O[P[W RZP[OZNYOZPZW RZMXOYPYX',\n 3924: ' 39I[LONPUZV[XY RMNOOUYWZ RLONMONVXXY RXMVMVOXOXMVOSS RQUNYL[N[NYLYL[ RNTQT RSTVT',\n 3925: ' 49I[KOLOMPMYP[UY RMNNONYPZ RKOMMOOOXRZ RVMXOWPW]V_U`SaQaO`MaObQa RVPWOVNUOVPV^U_ RPaNa RVMTOUPU^T`Sa',\n 3926: ' 43L[RNOPOORNTMWOWSRU RTNVOVS RRNUPUSTT RRUWWW]V_U`SaQaO`MaObQa RVWV^U_ RPaNa RTVUWU^T`Sa'\n}\n","/*\nhttps://oeis.org/wiki/List_of_LaTeX_mathematical_symbols\nhttps://en.wikibooks.org/wiki/LaTeX/Mathematics\n*/\nexport interface Symb {\n glyph: number\n arity?: number\n flags: Record<string, boolean>\n}\n\nconst SYMB: Record<string, Symb> = {\n '\\\\frac': { glyph: 0, arity: 2, flags: {} },\n '\\\\binom': { glyph: 0, arity: 2, flags: {} },\n '\\\\sqrt': {\n glyph: 2267,\n arity: 1,\n flags: { opt: true, xfl: true, yfl: true }\n },\n '^': { glyph: 0, arity: 1, flags: {} },\n _: { glyph: 0, arity: 1, flags: {} },\n '(': { glyph: 2221, arity: 0, flags: { yfl: true } },\n ')': { glyph: 2222, arity: 0, flags: { yfl: true } },\n '[': { glyph: 2223, arity: 0, flags: { yfl: true } },\n ']': { glyph: 2224, arity: 0, flags: { yfl: true } },\n '\\\\langle': { glyph: 2227, arity: 0, flags: { yfl: true } },\n '\\\\rangle': { glyph: 2228, arity: 0, flags: { yfl: true } },\n '|': { glyph: 2229, arity: 0, flags: { yfl: true } },\n\n '\\\\|': { glyph: 2230, arity: 0, flags: { yfl: true } },\n '\\\\{': { glyph: 2225, arity: 0, flags: { yfl: true } },\n '\\\\}': { glyph: 2226, arity: 0, flags: { yfl: true } },\n\n '\\\\#': { glyph: 2275, arity: 0, flags: {} },\n '\\\\$': { glyph: 2274, arity: 0, flags: {} },\n '\\\\&': { glyph: 2273, arity: 0, flags: {} },\n '\\\\%': { glyph: 2271, arity: 0, flags: {} },\n\n /*semantics*/\n '\\\\begin': { glyph: 0, arity: 1, flags: {} },\n '\\\\end': { glyph: 0, arity: 1, flags: {} },\n '\\\\left': { glyph: 0, arity: 1, flags: {} },\n '\\\\right': { glyph: 0, arity: 1, flags: {} },\n '\\\\middle': { glyph: 0, arity: 1, flags: {} },\n\n /*operators*/\n '\\\\cdot': { glyph: 2236, arity: 0, flags: {} },\n '\\\\pm': { glyph: 2233, arity: 0, flags: {} },\n '\\\\mp': { glyph: 2234, arity: 0, flags: {} },\n '\\\\times': { glyph: 2235, arity: 0, flags: {} },\n '\\\\div': { glyph: 2237, arity: 0, flags: {} },\n '\\\\leqq': { glyph: 2243, arity: 0, flags: {} },\n '\\\\geqq': { glyph: 2244, arity: 0, flags: {} },\n '\\\\leq': { glyph: 2243, arity: 0, flags: {} },\n '\\\\geq': { glyph: 2244, arity: 0, flags: {} },\n '\\\\propto': { glyph: 2245, arity: 0, flags: {} },\n '\\\\sim': { glyph: 2246, arity: 0, flags: {} },\n '\\\\equiv': { glyph: 2240, arity: 0, flags: {} },\n '\\\\dagger': { glyph: 2277, arity: 0, flags: {} },\n '\\\\ddagger': { glyph: 2278, arity: 0, flags: {} },\n '\\\\ell': { glyph: 662, arity: 0, flags: {} },\n\n /*accents*/\n '\\\\vec': {\n glyph: 2261,\n arity: 1,\n flags: { hat: true, xfl: true, yfl: true }\n },\n '\\\\overrightarrow': {\n glyph: 2261,\n arity: 1,\n flags: { hat: true, xfl: true, yfl: true }\n },\n '\\\\overleftarrow': {\n glyph: 2263,\n arity: 1,\n flags: { hat: true, xfl: true, yfl: true }\n },\n '\\\\bar': { glyph: 2231, arity: 1, flags: { hat: true, xfl: true } },\n '\\\\overline': { glyph: 2231, arity: 1, flags: { hat: true, xfl: true } },\n '\\\\widehat': {\n glyph: 2247,\n arity: 1,\n flags: { hat: true, xfl: true, yfl: true }\n },\n '\\\\hat': { glyph: 2247, arity: 1, flags: { hat: true } },\n '\\\\acute': { glyph: 2248, arity: 1, flags: { hat: true } },\n '\\\\grave': { glyph: 2249, arity: 1, flags: { hat: true } },\n '\\\\breve': { glyph: 2250, arity: 1, flags: { hat: true } },\n '\\\\tilde': { glyph: 2246, arity: 1, flags: { hat: true } },\n '\\\\underline': { glyph: 2231, arity: 1, flags: { mat: true, xfl: true } },\n\n '\\\\not': { glyph: 2220, arity: 1, flags: {} },\n\n '\\\\neq': { glyph: 2239, arity: 1, flags: {} },\n '\\\\ne': { glyph: 2239, arity: 1, flags: {} },\n '\\\\exists': { glyph: 2279, arity: 0, flags: {} },\n '\\\\in': { glyph: 2260, arity: 0, flags: {} },\n '\\\\subset': { glyph: 2256, arity: 0, flags: {} },\n '\\\\supset': { glyph: 2258, arity: 0, flags: {} },\n '\\\\cup': { glyph: 2257, arity: 0, flags: {} },\n '\\\\cap': { glyph: 2259, arity: 0, flags: {} },\n '\\\\infty': { glyph: 2270, arity: 0, flags: {} },\n '\\\\partial': { glyph: 2265, arity: 0, flags: {} },\n '\\\\nabla': { glyph: 2266, arity: 0, flags: {} },\n '\\\\aleph': { glyph: 2077, arity: 0, flags: {} },\n '\\\\wp': { glyph: 2190, arity: 0, flags: {} },\n '\\\\therefore': { glyph: 740, arity: 0, flags: {} },\n '\\\\mid': { glyph: 2229, arity: 0, flags: {} },\n\n '\\\\sum': { glyph: 2402, arity: 0, flags: { big: true } },\n '\\\\prod': { glyph: 2401, arity: 0, flags: { big: true } },\n '\\\\bigoplus': { glyph: 2284, arity: 0, flags: { big: true } },\n '\\\\bigodot': { glyph: 2281, arity: 0, flags: { big: true } },\n '\\\\int': { glyph: 2412, arity: 0, flags: { yfl: true } },\n '\\\\oint': { glyph: 2269, arity: 0, flags: { yfl: true } },\n '\\\\oplus': { glyph: 1284, arity: 0, flags: {} },\n '\\\\odot': { glyph: 1281, arity: 0, flags: {} },\n '\\\\perp': { glyph: 738, arity: 0, flags: {} },\n '\\\\angle': { glyph: 739, arity: 0, flags: {} },\n '\\\\triangle': { glyph: 842, arity: 0, flags: {} },\n '\\\\Box': { glyph: 841, arity: 0, flags: {} },\n\n '\\\\rightarrow': { glyph: 2261, arity: 0, flags: {} },\n '\\\\to': { glyph: 2261, arity: 0, flags: {} },\n '\\\\leftarrow': { glyph: 2263, arity: 0, flags: {} },\n '\\\\gets': { glyph: 2263, arity: 0, flags: {} },\n '\\\\circ': { glyph: 902, arity: 0, flags: {} },\n '\\\\bigcirc': { glyph: 904, arity: 0, flags: {} },\n '\\\\bullet': { glyph: 828, arity: 0, flags: {} },\n '\\\\star': { glyph: 856, arity: 0, flags: {} },\n '\\\\diamond': { glyph: 743, arity: 0, flags: {} },\n '\\\\ast': { glyph: 728, arity: 0, flags: {} },\n\n /*verbatim symbols*/\n '\\\\log': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\ln': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\exp': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\mod': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\lim': { glyph: 0, arity: 0, flags: { txt: true, big: true } },\n\n '\\\\sin': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\cos': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\tan': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\csc': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\sec': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\cot': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\sinh': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\cosh': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\tanh': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\csch': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\sech': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\coth': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arcsin': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arccos': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arctan': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arccsc': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arcsec': { glyph: 0, arity: 0, flags: { txt: true } },\n '\\\\arccot': { glyph: 0, arity: 0, flags: { txt: true } },\n\n /*font modes*/\n '\\\\text': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathnormal': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathrm': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathit': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathbf': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathsf': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathtt': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathfrak': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathcal': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathbb': { glyph: 0, arity: 1, flags: {} },\n '\\\\mathscr': { glyph: 0, arity: 1, flags: {} },\n '\\\\rm': { glyph: 0, arity: 1, flags: {} },\n '\\\\it': { glyph: 0, arity: 1, flags: {} },\n '\\\\bf': { glyph: 0, arity: 1, flags: {} },\n '\\\\sf': { glyph: 0, arity: 1, flags: {} },\n '\\\\tt': { glyph: 0, arity: 1, flags: {} },\n '\\\\frak': { glyph: 0, arity: 1, flags: {} },\n '\\\\cal': { glyph: 0, arity: 1, flags: {} },\n '\\\\bb': { glyph: 0, arity: 1, flags: {} },\n '\\\\scr': { glyph: 0, arity: 1, flags: {} },\n\n '\\\\quad': { glyph: 0, arity: 0, flags: {} },\n '\\\\,': { glyph: 0, arity: 0, flags: {} },\n '\\\\.': { glyph: 0, arity: 0, flags: {} },\n '\\\\;': { glyph: 0, arity: 0, flags: {} },\n '\\\\!': { glyph: 0, arity: 0, flags: {} },\n\n /*greek letters*/\n '\\\\alpha': { glyph: 2127, flags: {} },\n '\\\\beta': { glyph: 2128, flags: {} },\n '\\\\gamma': { glyph: 2129, flags: {} },\n '\\\\delta': { glyph: 2130, flags: {} },\n '\\\\varepsilon': { glyph: 2131, flags: {} },\n '\\\\zeta': { glyph: 2132, flags: {} },\n '\\\\eta': { glyph: 2133, flags: {} },\n '\\\\vartheta': { glyph: 2134, flags: {} },\n '\\\\iota': { glyph: 2135, flags: {} },\n '\\\\kappa': { glyph: 2136, flags: {} },\n '\\\\lambda': { glyph: 2137, flags: {} },\n '\\\\mu': { glyph: 2138, flags: {} },\n '\\\\nu': { glyph: 2139, flags: {} },\n '\\\\xi': { glyph: 2140, flags: {} },\n '\\\\omicron': { glyph: 2141, flags: {} },\n '\\\\pi': { glyph: 2142, flags: {} },\n '\\\\rho': { glyph: 2143, flags: {} },\n '\\\\sigma': { glyph: 2144, flags: {} },\n '\\\\tau': { glyph: 2145, flags: {} },\n '\\\\upsilon': { glyph: 2146, flags: {} },\n '\\\\varphi': { glyph: 2147, flags: {} },\n '\\\\chi': { glyph: 2148, flags: {} },\n '\\\\psi': { glyph: 2149, flags: {} },\n '\\\\omega': { glyph: 2150, flags: {} },\n\n '\\\\epsilon': { glyph: 2184, flags: {} },\n '\\\\theta': { glyph: 2185, flags: {} },\n '\\\\phi': { glyph: 2186, flags: {} },\n '\\\\varsigma': { glyph: 2187, flags: {} },\n\n '\\\\Alpha': { glyph: 2027, flags: {} },\n '\\\\Beta': { glyph: 2028, flags: {} },\n '\\\\Gamma': { glyph: 2029, flags: {} },\n '\\\\Delta': { glyph: 2030, flags: {} },\n '\\\\Epsilon': { glyph: 2031, flags: {} },\n '\\\\Zeta': { glyph: 2032, flags: {} },\n '\\\\Eta': { glyph: 2033, flags: {} },\n '\\\\Theta': { glyph: 2034, flags: {} },\n '\\\\Iota': { glyph: 2035, flags: {} },\n '\\\\Kappa': { glyph: 2036, flags: {} },\n '\\\\Lambda': { glyph: 2037, flags: {} },\n '\\\\Mu': { glyph: 2038, flags: {} },\n '\\\\Nu': { glyph: 2039, flags: {} },\n '\\\\Xi': { glyph: 2040, flags: {} },\n '\\\\Omicron': { glyph: 2041, flags: {} },\n '\\\\Pi': { glyph: 2042, flags: {} },\n '\\\\Rho': { glyph: 2043, flags: {} },\n '\\\\Sigma': { glyph: 2044, flags: {} },\n '\\\\Tau': { glyph: 2045, flags: {} },\n '\\\\Upsilon': { glyph: 2046, flags: {} },\n '\\\\Phi': { glyph: 2047, flags: {} },\n '\\\\Chi': { glyph: 2048, flags: {} },\n '\\\\Psi': { glyph: 2049, flags: {} },\n '\\\\Omega': { glyph: 2050, flags: {} }\n}\n\nexport { SYMB }\n\nexport function asciiMap(x: string, mode = 'math'): number {\n const c = x.charCodeAt(0)\n if (65 <= c && c <= 90) {\n const d = c - 65\n if (mode == 'text' || mode == 'rm') {\n return d + 2001\n } else if (mode == 'tt') {\n return d + 501\n } else if (mode == 'bf' || mode == 'bb') {\n return d + 3001\n } else if (mode == 'sf') {\n return d + 2501\n } else if (mode == 'frak') {\n return d + 3301\n } else if (mode == 'scr' || mode == 'cal') {\n return d + 2551\n } else {\n return d + 2051\n }\n }\n if (97 <= c && c <= 122) {\n const d = c - 97\n if (mode == 'text' || mode == 'rm') {\n return d + 2101\n } else if (mode == 'tt') {\n return d + 601\n } else if (mode == 'bf' || mode == 'bb') {\n return d + 3101\n } else if (mode == 'sf') {\n return d + 2601\n } else if (mode == 'frak') {\n return d + 3401\n } else if (mode == 'scr' || mode == 'cal') {\n return d + 2651\n } else {\n return d + 2151\n }\n }\n if (48 <= c && c <= 57) {\n const d = c - 48\n if (mode == 'it') {\n return d + 2750\n } else if (mode == 'bf') {\n return d + 3200\n } else if (mode == 'tt') {\n return d + 700\n } else {\n return d + 2200\n }\n }\n\n return <number>{\n '.': 2210,\n ',': 2211,\n ':': 2212,\n ';': 2213,\n '!': 2214,\n '?': 2215,\n '\\'': 2216,\n '\"': 2217,\n '*': 2219,\n '/': 2220,\n '-': 2231,\n '+': 2232,\n '=': 2238,\n '<': 2241,\n '>': 2242,\n '~': 2246,\n '@': 2273,\n '\\\\': 804\n }[x]\n}\n","import { HERSHEY } from \"./hershey\";\nimport { SYMB, Symb, asciiMap } from \"./symbols\";\n\nconst CONFIG: Record<string, number> = {\n SUB_SUP_SCALE: 0.5,\n SQRT_MAG_SCALE: 0.5,\n FRAC_SCALE: 0.85,\n LINE_SPACING: 0.5,\n FRAC_SPACING: 0.4,\n};\n\nfunction tokenize(str: string): string[] {\n str = str.replace(/\\n/g, \" \");\n let i = 0;\n const tokens: string[] = [];\n let curr = \"\";\n while (i < str.length) {\n if (str[i] == \" \") {\n if (curr.length) {\n tokens.push(curr);\n curr = \"\";\n }\n } else if (str[i] == \"\\\\\") {\n if (curr.length == 1 && curr[0] == \"\\\\\") {\n curr += str[i];\n tokens.push(curr);\n curr = \"\";\n } else {\n if (curr.length) {\n tokens.push(curr);\n }\n curr = str[i];\n }\n } else if (/[A-Za-z0-9\\.]/.test(str[i])) {\n curr += str[i];\n } else {\n if (curr.length && curr != \"\\\\\") {\n tokens.push(curr);\n curr = \"\";\n }\n curr += str[i];\n tokens.push(curr);\n curr = \"\";\n }\n i++;\n }\n if (curr.length) tokens.push(curr);\n return tokens;\n}\n\ninterface Bbox {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ninterface Expr {\n type: string;\n text: string;\n mode: string;\n chld: Expr[];\n bbox: Bbox;\n}\n\nfunction parseAtom(x: string): Expr {\n return {\n type: SYMB[x] ? \"symb\" : \"char\",\n mode: \"math\",\n text: x,\n chld: [],\n // @ts-ignore\n bbox: null,\n };\n}\n\nfunction parse(tokens: string[]): Expr {\n let i = 0;\n let expr: Expr = {\n type: \"node\",\n text: \"\",\n mode: \"math\",\n chld: [],\n // @ts-ignore\n bbox: null,\n };\n\n function takeOpt(): Expr | null {\n if (tokens[i] != \"[\") {\n return null;\n }\n let lvl = 0;\n let j = i;\n while (j < tokens.length) {\n if (tokens[j] == \"[\") {\n lvl++;\n } else if (tokens[j] == \"]\") {\n lvl--;\n if (!lvl) {\n break;\n }\n }\n j++;\n }\n const ret: Expr = parse(tokens.slice(i + 1, j));\n i = j;\n return ret;\n }\n\n function takeN(n: number): Expr[] {\n let j: number = i;\n let j0: number = j;\n let lvl = 0;\n let cnt = 0;\n const ret: Expr[] = [];\n while (j < tokens.length) {\n if (tokens[j] == \"{\") {\n if (!lvl) {\n j0 = j;\n }\n lvl++;\n } else if (tokens[j] == \"}\") {\n lvl--;\n if (!lvl) {\n ret.push(parse(tokens.slice(j0 + 1, j)));\n cnt++;\n if (cnt == n) {\n break;\n }\n }\n } else {\n if (lvl == 0) {\n ret.push(parseAtom(tokens[j]));\n cnt++;\n if (cnt == n) {\n break;\n }\n }\n }\n j++;\n }\n i = j;\n return ret;\n }\n\n for (i = 0; i < tokens.length; i++) {\n const s: Symb = SYMB[tokens[i]];\n const e: Expr = {\n type: \"\",\n text: tokens[i],\n mode: \"math\",\n chld: [],\n // @ts-ignore\n bbox: null,\n };\n if (s) {\n if (s.arity) {\n i++;\n e.type = \"func\";\n let opt: Expr | null = null;\n if (s.flags.opt) {\n opt = takeOpt();\n if (opt) i++;\n }\n const chld: Expr[] = takeN(s.arity);\n e.chld = chld;\n if (opt) {\n e.chld.push(opt);\n }\n } else {\n e.type = \"symb\";\n }\n } else {\n if (tokens[i] == \"{\") {\n e.type = \"node\";\n e.text = \"\";\n e.chld = takeN(1);\n } else {\n e.type = \"char\";\n }\n }\n expr.chld.push(e);\n }\n if (expr.chld.length == 1) {\n expr = expr.chld[0];\n }\n return expr;\n}\n\nfunction environments(exprs: Expr[]) {\n let i = 0;\n while (i < exprs.length) {\n if (exprs[i].text == \"\\\\begin\") {\n let j: number;\n for (j = i; j < exprs.length; j++) {\n if (exprs[j].text == \"\\\\end\") {\n break;\n }\n }\n const es: Expr[] = exprs.splice(i + 1, j - (i + 1));\n environments(es);\n exprs[i].text = exprs[i].chld[0].text;\n exprs[i].chld = es;\n exprs.splice(i + 1, 1);\n }\n i++;\n }\n}\n\nfunction transform(\n expr: Expr,\n sclx: number,\n scly: number,\n x: number,\n y: number,\n notFirst?: boolean,\n) {\n if (scly == null) {\n scly = sclx;\n }\n if (!expr.bbox) return;\n if (notFirst) {\n expr.bbox.x *= sclx;\n expr.bbox.y *= scly;\n }\n expr.bbox.w *= sclx;\n expr.bbox.h *= scly;\n for (let i = 0; i < expr.chld.length; i++) {\n transform(expr.chld[i], sclx, scly, 0, 0, true);\n }\n expr.bbox.x += x;\n expr.bbox.y += y;\n}\n\nfunction computeBbox(exprs: Expr[]): Bbox {\n let xmin = Infinity;\n let xmax = -Infinity;\n let ymin = Infinity;\n let ymax = -Infinity;\n for (let i = 0; i < exprs.length; i++) {\n if (!exprs[i].bbox) {\n continue;\n }\n xmin = Math.min(xmin, exprs[i].bbox.x);\n ymin = Math.min(ymin, exprs[i].bbox.y);\n xmax = Math.max(xmax, exprs[i].bbox.x + exprs[i].bbox.w);\n ymax = Math.max(ymax, exprs[i].bbox.y + exprs[i].bbox.h);\n }\n return { x: xmin, y: ymin, w: xmax - xmin, h: ymax - ymin };\n}\n\nfunction group(exprs: Expr[]): Expr {\n if (!exprs.length) {\n // @ts-ignore\n return null;\n }\n const bbox: Bbox = computeBbox(exprs);\n // console.log(exprs,bbox);\n for (let i = 0; i < exprs.length; i++) {\n if (!exprs[i].bbox) {\n continue;\n }\n exprs[i].bbox.x -= bbox.x;\n exprs[i].bbox.y -= bbox.y;\n }\n const expr: Expr = {\n type: \"node\",\n text: \"\",\n mode: \"math\",\n chld: exprs,\n bbox,\n };\n return expr;\n}\n\nfunction align(exprs: Expr[], alignment = \"center\"): void {\n for (let i = 0; i < exprs.length; i++) {\n if (exprs[i].text == \"^\" || exprs[i].text == \"'\") {\n let h = 0;\n let j = i;\n while (\n j > 0 &&\n (exprs[j].text == \"^\" || exprs[j].text == \"_\" || exprs[j].text == \"'\")\n ) {\n j--;\n }\n h = exprs[j].bbox.y;\n if (exprs[i].text == \"'\") {\n exprs[i].bbox.y = h;\n } else {\n // @ts-ignore\n transform(exprs[i], CONFIG.SUB_SUP_SCALE, null, 0, 0);\n if (SYMB[exprs[j].text] && SYMB[exprs[j].text].flags.big) {\n exprs[i].bbox.y = h - exprs[i].bbox.h;\n } else if (exprs[j].text == \"\\\\int\") {\n exprs[i].bbox.y = h;\n } else {\n exprs[i].bbox.y = h - exprs[i].bbox.h / 2;\n }\n }\n } else if (exprs[i].text == \"_\") {\n let h = 1;\n let j = i;\n while (\n j > 0 &&\n (exprs[j].text == \"^\" || exprs[j].text == \"_\" || exprs[j].text == \"'\")\n ) {\n j--;\n }\n h = exprs[j].bbox.y + exprs[j].bbox.h;\n // @ts-ignore\n transform(exprs[i], CONFIG.SUB_SUP_SCALE, null, 0, 0);\n if (SYMB[exprs[j].text] && SYMB[exprs[j].text].flags.big) {\n exprs[i].bbox.y = h;\n } else if (exprs[j].text == \"\\\\int\") {\n exprs[i].bbox.y = h - exprs[i].bbox.h;\n } else {\n exprs[i].bbox.y = h - exprs[i].bbox.h / 2;\n }\n }\n }\n function searchHigh(\n i: number,\n l: string,\n r: string,\n dir: number,\n lvl0: number,\n ): number[] {\n let j = i;\n let lvl = lvl0;\n let ymin = Infinity;\n let ymax = -Infinity;\n while (dir > 0 ? j < exprs.length : j >= 0) {\n if (exprs[j].text == l) {\n lvl++;\n } else if (exprs[j].text == r) {\n lvl--;\n if (lvl == 0) {\n break;\n }\n } else if (exprs[j].text == \"^\" || exprs[j].text == \"_\") {\n //skip\n } else if (exprs[j].bbox) {\n ymin = Math.min(ymin, exprs[j].bbox.y);\n ymax = Math.max(ymax, exprs[j].bbox.y + exprs[j].bbox.h);\n }\n j += dir;\n }\n return [ymin, ymax];\n }\n for (let i = 0; i < exprs.length; i++) {\n if (exprs[i].text == \"\\\\left\") {\n const [ymin, ymax] = searchHigh(i, \"\\\\left\", \"\\\\right\", 1, 0);\n if (ymin != Infinity && ymax != -Infinity) {\n exprs[i].bbox.y = ymin;\n transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);\n }\n } else if (exprs[i].text == \"\\\\right\") {\n const [ymin, ymax] = searchHigh(i, \"\\\\right\", \"\\\\left\", -1, 0);\n if (ymin != Infinity && ymax != -Infinity) {\n exprs[i].bbox.y = ymin;\n transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);\n }\n } else if (exprs[i].text == \"\\\\middle\") {\n const [lmin, lmax] = searchHigh(i, \"\\\\right\", \"\\\\left\", -1, 1);\n const [rmin, rmax] = searchHigh(i, \"\\\\left\", \"\\\\right\", 1, 1);\n const ymin = Math.min(lmin, rmin);\n const ymax = Math.max(lmax, rmax);\n if (ymin != Infinity && ymax != -Infinity) {\n exprs[i].bbox.y = ymin;\n transform(exprs[i], 1, (ymax - ymin) / exprs[i].bbox.h, 0, 0);\n }\n }\n }\n\n if (!exprs.some((x) => x.text == \"&\" || x.text == \"\\\\\\\\\")) {\n return;\n }\n\n const rows: Expr[][][] = [];\n let row: Expr[][] = [];\n let cell: Expr[] = [];\n\n for (let i = 0; i < exprs.length; i++) {\n if (exprs[i].text == \"&\") {\n row.push(cell);\n cell = [];\n } else if (exprs[i].text == \"\\\\\\\\\") {\n if (cell.length) {\n row.push(cell);\n cell = [];\n }\n rows.push(row);\n row = [];\n } else {\n cell.push(exprs[i]);\n }\n }\n if (cell.length) {\n row.push(cell);\n }\n if (row.length) {\n rows.push(row);\n }\n const colws: number[] = [];\n const erows: Expr[][] = [];\n for (let i = 0; i < rows.length; i++) {\n const erow: Expr[] = [];\n for (let j = 0; j < rows[i].length; j++) {\n const e: Expr = group(rows[i][j]);\n if (e) {\n colws[j] = colws[j] || 0;\n colws[j] = Math.max(e.bbox.w + 1, colws[j]);\n }\n erow[j] = e;\n }\n erows.push(erow);\n }\n\n const ybds: number[][] = [];\n for (let i = 0; i < erows.length; i++) {\n let ymin = Infinity;\n let ymax = -Infinity;\n for (let j = 0; j < erows[i].length; j++) {\n if (!erows[i][j]) {\n continue;\n }\n ymin = Math.min(ymin, erows[i][j].bbox.y);\n ymax = Math.max(ymax, erows[i][j].bbox.y + erows[i][j].bbox.h);\n }\n ybds.push([ymin, ymax]);\n }\n\n for (let i = 0; i < ybds.length; i++) {\n if (ybds[i][0] == Infinity || ybds[i][1] == Infinity) {\n ybds[i][0] = i == 0 ? 0 : ybds[i - 1][1];\n ybds[i][1] = ybds[i][0] + 2;\n }\n }\n\n for (let i = 1; i < erows.length; i++) {\n const shft = ybds[i - 1][1] - ybds[i][0] + CONFIG.LINE_SPACING;\n for (let j = 0; j < erows[i].length; j++) {\n if (erows[i][j]) {\n erows[i][j].bbox.y += shft;\n }\n }\n ybds[i][0] += shft;\n ybds[i][1] += shft;\n }\n\n exprs.splice(0, exprs.length);\n for (let i = 0; i < erows.length; i++) {\n let dx = 0;\n for (let j = 0; j < erows[i].length; j++) {\n const e: Expr = erows[i][j];\n if (!e) {\n dx += colws[j];\n continue;\n }\n e.bbox.x += dx;\n dx += colws[j] - e.bbox.w;\n // e.bbox.w = colws[j];\n if (alignment == \"center\") {\n e.bbox.x += (colws[j] - e.bbox.w) / 2;\n } else if (alignment == \"left\") {\n //ok\n } else if (alignment == \"right\") {\n e.bbox.x += colws[j] - e.bbox.w;\n } else if (alignment == \"equation\") {\n if (j != erows[i].length - 1) {\n e.bbox.x += colws[j] - e.bbox.w;\n }\n }\n exprs.push(e);\n }\n }\n}\n\nfunction plan(expr: Expr, mode = \"math\"): void {\n const tmd: string =\n {\n \"\\\\text\": \"text\",\n \"\\\\mathnormal\": \"math\",\n \"\\\\mathrm\": \"rm\",\n \"\\\\mathit\": \"it\",\n \"\\\\mathbf\": \"bf\",\n \"\\\\mathsf\": \"sf\",\n \"\\\\mathtt\": \"tt\",\n \"\\\\mathfrak\": \"frak\",\n \"\\\\mathcal\": \"cal\",\n \"\\\\mathbb\": \"bb\",\n \"\\\\mathscr\": \"scr\",\n \"\\\\rm\": \"rm\",\n \"\\\\it\": \"it\",\n \"\\\\bf\": \"bf\",\n \"\\\\sf\": \"tt\",\n \"\\\\tt\": \"tt\",\n \"\\\\frak\": \"frak\",\n \"\\\\cal\": \"cal\",\n \"\\\\bb\": \"bb\",\n \"\\\\scr\": \"scr\",\n }[expr.text] ?? mode;\n if (!expr.chld.length) {\n if (SYMB[expr.text]) {\n if (SYMB[expr.text].flags.big) {\n if (expr.text == \"\\\\lim\") {\n expr.bbox = { x: 0, y: 0, w: 3.5, h: 2 };\n } else {\n expr.bbox = { x: 0, y: -0.5, w: 3, h: 3 };\n }\n } else if (SYMB[expr.text].flags.txt) {\n let w = 0;\n for (let i = 1; i < expr.text.length; i++) {\n w += HERSHEY(asciiMap(expr.text[i], \"text\")).w;\n }\n w /= 16;\n expr.bbox = { x: 0, y: 0, w: w, h: 2 };\n } else if (SYMB[expr.text].glyph) {\n let w = HERSHEY(SYMB[expr.text].glyph).w;\n w /= 16;\n if (expr.text == \"\\\\int\" || expr.text == \"\\\\oint\") {\n expr.bbox = { x: 0, y: -1.5, w: w, h: 5 };\n } else {\n expr.bbox = { x: 0, y: 0, w: w, h: 2 };\n }\n } else {\n expr.bbox = { x: 0, y: 0, w: 1, h: 2 };\n }\n } else {\n let w = 0;\n for (let i = 0; i < expr.text.length; i++) {\n if (!HERSHEY(asciiMap(expr.text[i], tmd))) {\n continue;\n }\n if (tmd == \"tt\") {\n w += 16;\n } else {\n w += HERSHEY(asciiMap(expr.text[i], tmd)).w;\n }\n }\n w /= 16;\n expr.bbox = { x: 0, y: 0, w: w, h: 2 };\n }\n expr.mode = tmd;\n return;\n }\n if (expr.text == \"\\\\frac\") {\n const a: Expr = expr.chld[0];\n const b: Expr = expr.chld[1];\n const s: number = CONFIG.FRAC_SCALE;\n plan(a);\n plan(b);\n a.bbox.x = 0;\n a.bbox.y = 0;\n b.bbox.x = 0;\n b.bbox.y = 0;\n const mw: number = Math.max(a.bbox.w, b.bbox.w) * s;\n // @ts-ignore\n transform(a, s, null, (mw - a.bbox.w * s) / 2, 0);\n transform(\n b,\n s,\n // @ts-ignore\n null,\n (mw - b.bbox.w * s) / 2,\n a.bbox.h + CONFIG.FRAC_SPACING,\n );\n expr.bbox = {\n x: 0,\n y: -a.bbox.h + 1 - CONFIG.FRAC_SPACING / 2,\n w: mw,\n h: a.bbox.h + b.bbox.h + CONFIG.FRAC_SPACING,\n };\n } else if (expr.text == \"\\\\binom\") {\n const a: Expr = expr.chld[0];\n const b: Expr = expr.chld[1];\n plan(a);\n plan(b);\n a.bbox.x = 0;\n a.bbox.y = 0;\n b.bbox.x = 0;\n b.bbox.y = 0;\n const mw: number = Math.max(a.bbox.w, b.bbox.w);\n // @ts-ignore\n transform(a, 1, null, (mw - a.bbox.w) / 2 + 1, 0);\n // @ts-ignore\n transform(b, 1, null, (mw - b.bbox.w) / 2 + 1, a.bbox.h);\n expr.bbox = { x: 0, y: -a.bbox.h + 1, w: mw + 2, h: a.bbox.h + b.bbox.h };\n } else if (expr.text == \"\\\\sqrt\") {\n const e: Expr = expr.chld[0];\n plan(e);\n const f: Expr = expr.chld[1];\n let pl = 0;\n if (f) {\n plan(f);\n pl = Math.max(f.bbox.w * CONFIG.SQRT_MAG_SCALE - 0.5, 0);\n // @ts-ignore\n transform(f, CONFIG.SQRT_MAG_SCALE, null, 0, 0.5);\n }\n // @ts-ignore\n transform(e, 1, null, 1 + pl, 0.5);\n expr.bbox = {\n x: 0,\n y: 2 - e.bbox.h - 0.5,\n w: e.bbox.w + 1 + pl,\n h: e.bbox.h + 0.5,\n };\n } else if (SYMB[expr.text] && SYMB[expr.text].flags.hat) {\n const e: Expr = expr.chld[0];\n plan(e);\n const y0 = e.bbox.y - 0.5;\n e.bbox.y = 0.5;\n expr.bbox = { x: 0, y: y0, w: e.bbox.w, h: e.bbox.h + 0.5 };\n } else if (SYMB[expr.text] && SYMB[expr.text].flags.mat) {\n const e: Expr = expr.chld[0];\n plan(e);\n expr.bbox = { x: 0, y: 0, w: e.bbox.w, h: e.bbox.h + 0.5 };\n } else {\n let dx = 0;\n let dy = 0;\n let mh = 1;\n for (let i = 0; i < expr.chld.length; i++) {\n const c: Expr = expr.chld[i];\n // @ts-ignore\n const spac: number =\n {\n \"\\\\quad\": 2,\n \"\\\\,\": (2 * 3) / 18,\n \"\\\\:\": (2 * 4) / 18,\n \"\\\\;\": (2 * 5) / 18,\n \"\\\\!\": (2 * -3) / 18,\n }[c.text] ?? null;\n\n if (c.text == \"\\\\\\\\\") {\n dy += mh;\n dx = 0;\n mh = 1;\n continue;\n } else if (c.text == \"&\") {\n continue;\n } else if (spac != null) {\n dx += spac;\n continue;\n } else {\n plan(c, tmd);\n // @ts-ignore\n transform(c, 1, null, dx, dy);\n if (c.text == \"^\" || c.text == \"_\" || c.text == \"'\") {\n let j: number = i;\n while (\n j > 0 &&\n (expr.chld[j].text == \"^\" ||\n expr.chld[j].text == \"_\" ||\n expr.chld[j].text == \"'\")\n ) {\n j--;\n }\n const wasBig =\n SYMB[expr.chld[j].text] && SYMB[expr.chld[j].text].flags.big;\n if (c.text == \"'\") {\n let k = j + 1;\n let nth = 0;\n while (k < i) {\n if (expr.chld[k].text == \"'\") {\n nth++;\n }\n k++;\n }\n c.bbox.x =\n expr.chld[j].bbox.x + expr.chld[j].bbox.w + c.bbox.w * nth;\n dx = Math.max(dx, c.bbox.x + c.bbox.w);\n } else {\n if (wasBig) {\n const ex =\n expr.chld[j].bbox.x +\n (expr.chld[j].bbox.w - c.bbox.w * CONFIG.SUB_SUP_SCALE) / 2;\n c.bbox.x = ex;\n dx = Math.max(\n dx,\n expr.chld[j].bbox.x +\n expr.chld[j].bbox.w +\n (c.bbox.w * CONFIG.SUB_SUP_SCALE - expr.chld[j].bbox.w) / 2,\n );\n } else {\n c.bbox.x = expr.chld[j].bbox.x + expr.chld[j].bbox.w;\n dx = Math.max(dx, c.bbox.x + c.bbox.w * CONFIG.SUB_SUP_SCALE);\n }\n }\n } else {\n dx += c.bbox.w;\n }\n if (mode == \"text\") {\n dx += 1;\n }\n mh = Math.max(c.bbox.y + c.bbox.h - dy, mh);\n }\n }\n dy += mh;\n const m2s: Record<string, string[]> = {\n bmatrix: [\"[\", \"]\"],\n pmatrix: [\"(\", \")\"],\n Bmatrix: [\"\\\\{\", \"\\\\}\"],\n cases: [\"\\\\{\"],\n };\n const alt: string =\n {\n bmatrix: \"center\",\n pmatrix: \"center\",\n Bmatrix: \"center\",\n cases: \"left\",\n matrix: \"center\",\n aligned: \"equation\",\n }[expr.text] ?? \"left\";\n\n const hasLp = !!m2s[expr.text];\n const hasRp = !!m2s[expr.text] && m2s[expr.text].length > 1;\n\n align(expr.chld, alt);\n const bb = computeBbox(expr.chld);\n if (expr.text == \"\\\\text\") {\n bb.x -= 1;\n bb.w += 2;\n }\n\n for (let i = 0; i < expr.chld.length; i++) {\n // @ts-ignore\n transform(expr.chld[i], 1, null, -bb.x + (hasLp ? 1.5 : 0), -bb.y);\n }\n expr.bbox = {\n x: 0,\n y: 0,\n w: bb.w + 1.5 * Number(hasLp) + 1.5 * Number(hasRp),\n h: bb.h,\n };\n\n if (hasLp) {\n expr.chld.unshift({\n type: \"symb\",\n text: m2s[expr.text][0],\n mode: expr.mode,\n chld: [],\n bbox: { x: 0, y: 0, w: 1, h: bb.h },\n });\n }\n if (hasRp) {\n expr.chld.push({\n type: \"symb\",\n text: m2s[expr.text][1],\n mode: expr.mode,\n chld: [],\n bbox: { x: bb.w + 2, y: 0, w: 1, h: bb.h },\n });\n }\n if (hasLp || hasRp || expr.text == \"matrix\") {\n expr.type = \"node\";\n expr.text = \"\";\n expr.bbox.y -= (expr.bbox.h - 2) / 2;\n }\n }\n}\n\nfunction flatten(expr: Expr) {\n function flat(expr: Expr, dx: number, dy: number): Expr[] {\n const ff: Expr[] = [];\n if (expr.bbox) {\n dx += expr.bbox.x;\n dy += expr.bbox.y;\n if (expr.text == \"\\\\frac\") {\n const h: number =\n expr.chld[1].bbox.y - (expr.chld[0].bbox.y + expr.chld[0].bbox.h);\n const e: Expr = {\n type: \"symb\",\n mode: expr.mode,\n text: \"\\\\bar\",\n bbox: {\n x: dx,\n y: dy + (expr.chld[1].bbox.y - h / 2) - h / 2,\n w: expr.bbox.w,\n h: h,\n },\n chld: [],\n };\n ff.push(e);\n } else if (expr.text == \"\\\\sqrt\") {\n const h: number = expr.chld[0].bbox.y;\n const xx: number = Math.max(\n 0,\n expr.chld[0].bbox.x - expr.chld[0].bbox.h / 2,\n );\n const e: Expr = {\n type: \"symb\",\n mode: expr.mode,\n text: \"\\\\sqrt\",\n bbox: {\n x: dx + xx,\n y: dy + h / 2,\n w: expr.chld[0].bbox.x - xx,\n h: expr.bbox.h - h / 2,\n },\n chld: [],\n };\n ff.push(e);\n ff.push({\n type: \"symb\",\n text: \"\\\\bar\",\n mode: expr.mode,\n bbox: {\n x: dx + expr.chld[0].bbox.x,\n y: dy,\n w: expr.bbox.w - expr.chld[0].bbox.x,\n h: h,\n },\n chld: [],\n });\n } else if (expr.text == \"\\\\binom\") {\n const w = Math.min(expr.chld[0].bbox.x, expr.chld[1].bbox.x);\n const e: Expr = {\n type: \"symb\",\n mode: expr.mode,\n text: \"(\",\n bbox: {\n x: dx,\n y: dy,\n w: w,\n h: expr.bbox.h,\n },\n chld: [],\n };\n ff.push(e);\n ff.push({\n type: \"symb\",\n text: \")\",\n mode: expr.mode,\n bbox: {\n x: dx + expr.bbox.w - w,\n y: dy,\n w: w,\n h: expr.bbox.h,\n },\n chld: [],\n });\n } else if (SYMB[expr.text] && SYMB[expr.text].flags.hat) {\n const h: number = expr.chld[0].bbox.y;\n const e: Expr = {\n type: \"symb\",\n mode: expr.mode,\n text: expr.text,\n bbox: {\n x: dx,\n y: dy,\n w: expr.bbox.w,\n h: h,\n },\n chld: [],\n };\n ff.push(e);\n } else if (SYMB[expr.text] && SYMB[expr.text].flags.mat) {\n const h: number = expr.chld[0].bbox.h;\n const e: Expr = {\n type: \"symb\",\n text: expr.text,\n mode: expr.mode,\n bbox: {\n x: dx,\n y: dy + h,\n w: expr.bbox.w,\n h: expr.bbox.h - h,\n },\n chld: [],\n };\n ff.push(e);\n } else if (expr.type != \"node\" && expr.text != \"^\" && expr.text != \"_\") {\n const e: Expr = {\n type: expr.type == \"func\" ? \"symb\" : expr.type,\n text: expr.text,\n mode: expr.mode,\n bbox: {\n x: dx,\n y: dy,\n w: expr.bbox.w,\n h: expr.bbox.h,\n },\n chld: [],\n };\n ff.push(e);\n }\n }\n for (let i = 0; i < expr.chld.length; i++) {\n const f = flat(expr.chld[i], dx, dy);\n ff.push(...f);\n }\n return ff;\n }\n const f = flat(expr, -expr.bbox.x, -expr.bbox.y);\n expr.type = \"node\";\n expr.text = \"\";\n expr.chld = f;\n}\n\nfunction render(expr: Expr): number[][][] {\n const o: number[][][] = [];\n for (let i = 0; i < expr.chld.length; i++) {\n const e: Expr = expr.chld[i];\n let s = e.bbox.h / 2;\n let isSmallHat = false;\n if (\n SYMB[e.text] &&\n SYMB[e.text].flags.hat &&\n !SYMB[e.text].flags.xfl &&\n !SYMB[e.text].flags.yfl\n ) {\n s *= 4;\n isSmallHat = true;\n }\n if (SYMB[e.text] && SYMB[e.text].glyph) {\n const d = HERSHEY(SYMB[e.text].glyph);\n for (let j = 0; j < d.polylines.length; j++) {\n const l: number[][] = [];\n\n for (let k = 0; k < d.polylines[j].length; k++) {\n let x = d.polylines[j][k][0];\n let y = d.polylines[j][k][1];\n\n if (SYMB[e.text].flags.xfl) {\n x = ((x - d.xmin) / Math.max(d.xmax - d.xmin, 1)) * e.bbox.w;\n x += e.bbox.x;\n } else if ((d.w / 16) * s > e.bbox.w) {\n x = (x / Math.max(d.w, 1)) * e.bbox.w;\n x += e.bbox.x;\n } else {\n x = (x / 16) * s;\n const p = (e.bbox.w - (d.w / 16) * s) / 2;\n x += e.bbox.x + p;\n }\n if (SYMB[e.text].flags.yfl) {\n y = ((y - d.ymin) / Math.max(d.ymax - d.ymin, 1)) * e.bbox.h;\n y += e.bbox.y;\n } else {\n y = (y / 16) * s;\n if (isSmallHat) {\n const p = (d.ymax + d.ymin) / 2;\n y -= (p / 16) * s;\n }\n y += e.bbox.y + e.bbox.h / 2;\n }\n l.push([x, y]);\n }\n o.push(l);\n }\n } else if ((SYMB[e.text] && SYMB[e.text].flags.txt) || e.type == \"char\") {\n let x0 = e.bbox.x;\n const isVerb = !!(SYMB[e.text] && SYMB[e.text].flags.txt);\n for (let n = Number(isVerb); n < e.text.length; n++) {\n const d = HERSHEY(asciiMap(e.text[n], isVerb ? \"text\" : e.mode));\n if (!d) {\n console.warn(\"unmapped character: \" + e.text[n]);\n continue;\n }\n for (let j = 0; j < d.polylines.length; j++) {\n const l: number[][] = [];\n for (let k = 0; k < d.polylines[j].length; k++) {\n let x = d.polylines[j][k][0];\n let y = d.polylines[j][k][1];\n x /= 16;\n y /= 16;\n x *= s;\n y *= s;\n if (e.mode == \"tt\") {\n if (d.w > 16) {\n x *= 16 / d.w;\n } else {\n x += (16 - d.w) / 2 / 16;\n }\n }\n x += x0;\n y += e.bbox.y + e.bbox.h / 2;\n l.push([x, y]);\n }\n o.push(l);\n }\n if (e.mode == \"tt\") {\n x0 += s;\n } else {\n x0 += (d.w / 16) * s;\n }\n }\n }\n }\n return o;\n}\n\ninterface ExportOpt {\n MIN_CHAR_H?: number;\n MAX_W?: number;\n MAX_H?: number;\n MARGIN_X?: number;\n MARGIN_Y?: number;\n SCALE_X?: number;\n SCALE_Y?: number;\n STROKE_W?: number;\n FG_COLOR?: string;\n BG_COLOR?: string;\n}\n\nfunction nf(x: number): number {\n return Math.round(x * 100) / 100;\n}\n\nexport interface LaTexSVG {\n svg: string;\n width: number;\n height: number;\n}\n\nexport class LaTexUtils {\n _latex: string;\n _tree: Expr;\n _tokens: string[];\n _polylines: number[][][];\n\n constructor(latex: string) {\n this._latex = latex;\n this._tokens = tokenize(latex);\n this._tree = parse(this._tokens);\n environments(this._tree.chld);\n plan(this._tree);\n flatten(this._tree);\n this._polylines = render(this._tree);\n }\n\n private resolveScale(opt?: ExportOpt): number[] {\n if (opt == undefined) {\n return [16, 16, 16, 16];\n }\n let sclx: number = opt.SCALE_X ?? 16;\n let scly: number = opt.SCALE_Y ?? 16;\n\n if (opt.MIN_CHAR_H != undefined) {\n let mh = 0;\n for (let i = 0; i < this._tree.chld.length; i++) {\n const c: Expr = this._tree.chld[i];\n if (\n c.type == \"char\" ||\n (SYMB[c.text] &&\n (SYMB[c.text].flags.txt || !Object.keys(SYMB[c.text].flags).length))\n ) {\n mh = Math.min(c.bbox.h, mh);\n }\n }\n const s: number = Math.max(1, opt.MIN_CHAR_H / mh);\n sclx *= s;\n scly *= s;\n }\n if (opt.MAX_W != undefined) {\n const s0 = sclx;\n sclx = Math.min(sclx, opt.MAX_W / this._tree.bbox.w);\n scly *= sclx / s0;\n }\n if (opt.MAX_H != undefined) {\n const s0 = scly;\n scly = Math.min(scly, opt.MAX_H / this._tree.bbox.h);\n sclx *= scly / s0;\n }\n const px: number = opt.MARGIN_X ?? sclx;\n const py: number = opt.MARGIN_Y ?? scly;\n return [px, py, sclx, scly];\n }\n\n polylines(opt?: ExportOpt): number[][][] {\n if (!opt) opt = {};\n const polylines: number[][][] = [];\n const [px, py, sclx, scly] = this.resolveScale(opt);\n for (let i = 0; i < this._polylines.length; i++) {\n polylines.push([]);\n for (let j = 0; j < this._polylines[i].length; j++) {\n const [x, y] = this._polylines[i][j];\n polylines[polylines.length - 1].push([px + x * sclx, py + y * scly]);\n }\n }\n return polylines;\n }\n\n pathd(opt?: ExportOpt): string {\n if (!opt) opt = {};\n let d = \"\";\n const [px, py, sclx, scly] = this.resolveScale(opt);\n for (let i = 0; i < this._polylines.length; i++) {\n for (let j = 0; j < this._polylines[i].length; j++) {\n const [x, y] = this._polylines[i][j];\n d += !j ? \"M\" : \"L\";\n d += `${nf(px + x * sclx)} ${nf(py + y * scly)}`;\n }\n }\n return d;\n }\n\n svg(opt: ExportOpt): LaTexSVG {\n if (!opt) opt = {};\n const [px, py, sclx, scly] = this.resolveScale(opt);\n const w = nf(this._tree.bbox.w * sclx + px * 2);\n const h = nf(this._tree.bbox.h * scly + py * 2);\n let o = `<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"${w}\" height=\"${h}\"\n fill=\"none\" stroke=\"${opt.FG_COLOR ?? \"black\"}\" stroke-width=\"${\n opt.STROKE_W ?? 1\n }\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\"\n >`;\n if (opt.BG_COLOR) {\n o += `<rect x=\"${0}\" y=\"${0}\" width=\"${w}\" height=\"${h}\" fill=\"${\n opt.BG_COLOR\n }\" stroke=\"none\"></rect>`;\n }\n o += `<path d=\"`;\n for (let i = 0; i < this._polylines.length; i++) {\n o += \"M\";\n for (let j = 0; j < this._polylines[i].length; j++) {\n const [x, y] = this._polylines[i][j];\n o += nf(px + x * sclx) + \" \" + nf(py + y * scly) + \" \";\n }\n }\n o += `\"/>`;\n o += `</svg>`;\n return {\n svg: `data:image/svg+xml;base64,${window.btoa(o)}`,\n width: Math.ceil(w),\n height: Math.ceil(h),\n };\n }\n\n pdf(opt: ExportOpt): string {\n if (!opt) opt = {};\n const [px, py, sclx, scly] = this.resolveScale(opt);\n\n const width = nf(this._tree.bbox.w * sclx + px * 2);\n const height = nf(this._tree.bbox.h * scly + py * 2);\n let head = `%PDF-1.1\\n%%¥±ë\\n1 0 obj\\n<< /Type /Catalog\\n/Pages 2 0 R\\n>>endobj\n 2 0 obj\\n<< /Type /Pages\\n/Kids [3 0 R]\\n/Count 1\\n/MediaBox [0 0 ${width} ${height}]\\n>>\\nendobj\n 3 0 obj\\n<< /Type /Page\\n/Parent 2 0 R\\n/Resources\\n<< /Font\\n<< /F1\\n<< /Type /Font\n /Subtype /Type1\\n/BaseFont /Times-Roman\\n>>\\n>>\\n>>\\n/Contents [`;\n let pdf = \"\";\n let count = 4;\n for (let i = 0; i < this._polylines.length; i++) {\n pdf += `${count} 0 obj \\n<< /Length 0 >>\\n stream\\n 1 j 1 J ${\n opt.STROKE_W ?? 1\n } w\\n`;\n for (let j = 0; j < this._polylines[i].length; j++) {\n const [x, y] = this._polylines[i][j];\n pdf += `${nf(px + x * sclx)} ${nf(height - (py + y * scly))} ${\n j ? \"l\" : \"m\"\n } `;\n }\n pdf += \"\\nS\\nendstream\\nendobj\\n\";\n head += `${count} 0 R `;\n count++;\n }\n head += \"]\\n>>\\nendobj\\n\";\n pdf += \"\\ntrailer\\n<< /Root 1 0 R \\n /Size 0\\n >>startxref\\n\\n%%EOF\\n\";\n return head + pdf;\n }\n\n boxes(opt: ExportOpt): Bbox[] {\n if (!opt) opt = {};\n const [px, py, sclx, scly] = this.resolveScale(opt);\n const bs: Bbox[] = [];\n for (let i = 0; i < this._tree.chld.length; i++) {\n const { x, y, w, h } = this._tree.chld[i].bbox;\n bs.push({ x: px + x * sclx, y: py + y * scly, w: w * sclx, h: h * scly });\n }\n return bs;\n }\n\n box(opt: ExportOpt): Bbox {\n if (!opt) opt = {};\n const [px, py, sclx, scly] = this.resolveScale(opt);\n return {\n x: px + this._tree.bbox.x * sclx,\n y: py + this._tree.bbox.y * scly,\n w: this._tree.bbox.w * sclx,\n h: this._tree.bbox.h * scly,\n };\n }\n}\n\nconst _impl: Record<string, Function> = {\n tokenize,\n parse,\n environments,\n plan,\n flatten,\n render,\n};\n\nexport { CONFIG, _impl };\n","import { IElement } from '../../../../interface/Element'\nimport { ImageParticle } from '../ImageParticle'\nimport { LaTexSVG, LaTexUtils } from './utils/LaTexUtils'\n\nexport class LaTexParticle extends ImageParticle {\n public static convertLaTextToSVG(laTex: string): LaTexSVG {\n return new LaTexUtils(laTex).svg({\n SCALE_X: 10,\n SCALE_Y: 10,\n MARGIN_X: 0,\n MARGIN_Y: 0\n })\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n x: number,\n y: number\n ) {\n const { scale } = this.options\n const width = element.width! * scale\n const height = element.height! * scale\n if (this.imageCache.has(element.value)) {\n const img = this.imageCache.get(element.value)!\n ctx.drawImage(img, x, y, width, height)\n } else {\n const laTexLoadPromise = new Promise((resolve, reject) => {\n const img = new Image()\n img.src = element.laTexSVG!\n img.onload = () => {\n ctx.drawImage(img, x, y, width, height)\n this.imageCache.set(element.value, img)\n resolve(element)\n }\n img.onerror = error => {\n reject(error)\n }\n })\n this.addImageObserver(laTexLoadPromise)\n }\n }\n}\n","export enum ListType {\n UL = 'ul',\n OL = 'ol'\n}\n\nexport enum UlStyle {\n DISC = 'disc',\n CIRCLE = 'circle',\n SQUARE = 'square',\n CHECKBOX = 'checkbox'\n}\n\nexport enum OlStyle {\n DECIMAL = 'decimal',\n LOWER_ALPHA = 'lowerAlpha',\n UPPER_ALPHA = 'upperAlpha',\n LOWER_ROMAN = 'lowerRoman',\n UPPER_ROMAN = 'upperRoman',\n DECIMAL_PAREN = 'decimalParen'\n}\n\nexport enum ListStyle {\n DISC = UlStyle.DISC,\n CIRCLE = UlStyle.CIRCLE,\n SQUARE = UlStyle.SQUARE,\n DECIMAL = OlStyle.DECIMAL,\n CHECKBOX = UlStyle.CHECKBOX\n}\n\nexport enum OlPreset {\n DEFAULT = 'olDefault',\n PARENTHESIS = 'olParen',\n OUTLINE = 'olOutline',\n UPPER_ALPHA = 'olUpperA',\n ROMAN = 'olRoman',\n ZERO_PAD = 'olZeroPad'\n}\n\nexport enum UlPreset {\n DEFAULT = 'ulDefault',\n DIAMOND = 'ulDiamond',\n HOLLOW_SQ = 'ulHollowSq',\n ARROW = 'ulArrow',\n STAR = 'ulStar',\n CHECK_ARROW = 'ulCheckArr'\n}\n","import { ListStyle, ListType, OlPreset, UlPreset, UlStyle } from '../enum/List'\n\nexport const ulStyleMapping: Record<UlStyle, string> = {\n [UlStyle.DISC]: '•',\n [UlStyle.CIRCLE]: '◦',\n [UlStyle.SQUARE]: '▫︎',\n [UlStyle.CHECKBOX]: '☑️'\n}\n\nexport const listTypeElementMapping: Record<ListType, string> = {\n [ListType.OL]: 'ol',\n [ListType.UL]: 'ul'\n}\n\nexport const listStyleCSSMapping: Record<ListStyle, string> = {\n [ListStyle.DISC]: 'disc',\n [ListStyle.CIRCLE]: 'circle',\n [ListStyle.SQUARE]: 'square',\n [ListStyle.DECIMAL]: 'decimal',\n [ListStyle.CHECKBOX]: 'checkbox'\n}\n\n// OL preset cycling: level % 3 → style key\nexport const olPresetCycles: Record<string, string[]> = {\n [OlPreset.DEFAULT]: ['decimal', 'lowerAlpha', 'lowerRoman'],\n [OlPreset.PARENTHESIS]: ['decimalParen', 'lowerAlphaParen', 'lowerRomanParen'],\n [OlPreset.OUTLINE]: ['outline', 'outline', 'outline'],\n [OlPreset.UPPER_ALPHA]: ['upperAlpha', 'lowerAlpha', 'lowerRoman'],\n [OlPreset.ROMAN]: ['upperRoman', 'upperAlpha', 'decimal'],\n [OlPreset.ZERO_PAD]: ['decimalZero', 'lowerAlpha', 'lowerRoman']\n}\n\n// UL preset cycling: level % 3 → bullet character\nexport const ulPresetCycles: Record<string, string[]> = {\n [UlPreset.DEFAULT]: ['●', '○', '■'],\n [UlPreset.DIAMOND]: ['◆', '➤', '■'],\n [UlPreset.HOLLOW_SQ]: ['□', '□', '□'],\n [UlPreset.ARROW]: ['→', '◆', '●'],\n [UlPreset.STAR]: ['★', '○', '■'],\n [UlPreset.CHECK_ARROW]: ['➤', '○', '■']\n}\n\nexport const INDENT_PER_LEVEL = 20\nexport const MAX_LIST_LEVEL = 8\n","export enum TitleLevel {\n FIRST = 'first',\n SECOND = 'second',\n THIRD = 'third',\n FOURTH = 'fourth',\n FIFTH = 'fifth',\n SIXTH = 'sixth'\n}\n","import { ITitleOption, ITitleSizeOption } from '../../interface/Title'\nimport { TitleLevel } from '../enum/Title'\n\nexport const defaultTitleOption: Readonly<Required<ITitleOption>> = {\n defaultFirstSize: 26,\n defaultSecondSize: 24,\n defaultThirdSize: 22,\n defaultFourthSize: 20,\n defaultFifthSize: 18,\n defaultSixthSize: 16\n}\n\nexport const titleSizeMapping: Record<TitleLevel, keyof ITitleSizeOption> = {\n [TitleLevel.FIRST]: 'defaultFirstSize',\n [TitleLevel.SECOND]: 'defaultSecondSize',\n [TitleLevel.THIRD]: 'defaultThirdSize',\n [TitleLevel.FOURTH]: 'defaultFourthSize',\n [TitleLevel.FIFTH]: 'defaultFifthSize',\n [TitleLevel.SIXTH]: 'defaultSixthSize'\n}\n\nexport const titleOrderNumberMapping: Record<TitleLevel, number> = {\n [TitleLevel.FIRST]: 1,\n [TitleLevel.SECOND]: 2,\n [TitleLevel.THIRD]: 3,\n [TitleLevel.FOURTH]: 4,\n [TitleLevel.FIFTH]: 5,\n [TitleLevel.SIXTH]: 6\n}\n\nexport const titleNodeNameMapping: Record<string, TitleLevel> = {\n H1: TitleLevel.FIRST,\n H2: TitleLevel.SECOND,\n H3: TitleLevel.THIRD,\n H4: TitleLevel.FOURTH,\n H5: TitleLevel.FIFTH,\n H6: TitleLevel.SIXTH\n}\n","export enum BlockType {\n IFRAME = 'iframe',\n VIDEO = 'video'\n}\n","export enum ControlType {\n TEXT = 'text',\n SELECT = 'select',\n CHECKBOX = 'checkbox',\n RADIO = 'radio',\n DATE = 'date',\n NUMBER = 'number'\n}\n\nexport enum ControlComponent {\n PREFIX = 'prefix',\n POSTFIX = 'postfix',\n PRE_TEXT = 'preText',\n POST_TEXT = 'postText',\n PLACEHOLDER = 'placeholder',\n VALUE = 'value',\n CHECKBOX = 'checkbox',\n RADIO = 'radio'\n}\n\nexport enum ControlIndentation {\n ROW_START = 'rowStart',\n VALUE_START = 'valueStart'\n}\n\nexport enum ControlState {\n ACTIVE = 'active',\n INACTIVE = 'inactive'\n}\n\nexport enum CalculatorButtonType {\n NUMBER = 'number',\n OPERATOR = 'operator',\n UTILITY = 'utility',\n EQUAL = 'equal'\n}","export enum EditorComponent {\n COMPONENT = 'component',\n MENU = 'menu',\n MAIN = 'main',\n FOOTER = 'footer',\n CONTEXTMENU = 'contextmenu',\n POPUP = 'popup',\n CATALOG = 'catalog',\n COMMENT = 'comment'\n}\n\nexport enum EditorContext {\n PAGE = 'page',\n TABLE = 'table'\n}\n\nexport enum EditorMode {\n EDIT = 'edit',\n CLEAN = 'clean',\n READONLY = 'readonly',\n FORM = 'form',\n PRINT = 'print',\n DESIGN = 'design',\n GRAFFITI = 'graffiti'\n}\n\nexport enum EditorZone {\n HEADER = 'header',\n MAIN = 'main',\n FOOTER = 'footer'\n}\n\nexport enum PageMode {\n PAGING = 'paging',\n CONTINUITY = 'continuity'\n}\n\nexport enum PaperDirection {\n VERTICAL = 'vertical',\n HORIZONTAL = 'horizontal'\n}\n\nexport enum WordBreak {\n BREAK_ALL = 'break-all',\n BREAK_WORD = 'break-word'\n}\n\nexport enum RenderMode {\n SPEED = 'speed',\n COMPATIBILITY = 'compatibility'\n}\n","export enum TableBorder {\n ALL = 'all',\n EMPTY = 'empty',\n EXTERNAL = 'external',\n INTERNAL = 'internal',\n DASH = 'dash'\n}\n\nexport enum TdBorder {\n TOP = 'top',\n RIGHT = 'right',\n BOTTOM = 'bottom',\n LEFT = 'left'\n}\n\nexport enum TdSlash {\n FORWARD = 'forward',\n BACK = 'back'\n}\n","export enum BackgroundSize {\n CONTAIN = 'contain',\n COVER = 'cover'\n}\n\nexport enum BackgroundRepeat {\n REPEAT = 'repeat',\n NO_REPEAT = 'no-repeat',\n REPEAT_X = 'repeat-x',\n REPEAT_Y = 'repeat-y'\n}\n","import { IBackgroundOption } from '../../interface/Background'\nimport { BackgroundRepeat, BackgroundSize } from '../enum/Background'\n\nexport const defaultBackground: Readonly<Required<IBackgroundOption>> = {\n color: '#FFFFFF',\n image: '',\n size: BackgroundSize.COVER,\n repeat: BackgroundRepeat.NO_REPEAT,\n applyPageNumbers: []\n}\n","export enum VerticalAlign {\n TOP = 'top',\n MIDDLE = 'middle',\n BOTTOM = 'bottom'\n}\n","import { ICheckboxOption } from '../../interface/Checkbox'\nimport { VerticalAlign } from '../enum/VerticalAlign'\n\nexport const defaultCheckboxOption: Readonly<Required<ICheckboxOption>> = {\n width: 14,\n height: 14,\n gap: 5,\n lineWidth: 1,\n fillStyle: '#5175f4',\n strokeStyle: '#ffffff',\n verticalAlign: VerticalAlign.BOTTOM\n}\n","import { IControlOption } from '../../interface/Control'\n\nexport const defaultControlOption: Readonly<Required<IControlOption>> = {\n placeholderColor: '#9c9b9b',\n bracketColor: '#000000',\n prefix: '{',\n postfix: '}',\n borderWidth: 1,\n borderColor: '#000000',\n activeBackgroundColor: '',\n disabledBackgroundColor: '',\n existValueBackgroundColor: '',\n noValueBackgroundColor: ''\n}\n","import { ICursorOption } from '../../interface/Cursor'\n\nexport const CURSOR_AGENT_OFFSET_HEIGHT = 12\n\nexport const defaultCursorOption: Readonly<Required<ICursorOption>> = {\n width: 2,\n color: '#000000',\n dragWidth: 2,\n dragColor: '#0000FF',\n dragFloatImageDisabled: false\n}\n","import { IFooter } from '../../interface/Footer'\nimport { MaxHeightRatio } from '../enum/Common'\n\nexport const defaultFooterOption: Readonly<Required<IFooter>> = {\n bottom: 0,\n inactiveAlpha: 1,\n maxHeightRadio: MaxHeightRatio.HALF,\n disabled: false,\n editable: true,\n backgroundColor: ''\n}\n","import { IGroup } from '../../interface/Group'\n\nexport const defaultGroupOption: Readonly<Required<IGroup>> = {\n opacity: 0.1,\n backgroundColor: '#E99D00',\n activeOpacity: 0.5,\n activeBackgroundColor: '#E99D00',\n disabled: false,\n deletable: true\n}\n","import { IHeader } from '../../interface/Header'\nimport { MaxHeightRatio } from '../enum/Common'\n\nexport const defaultHeaderOption: Readonly<Required<IHeader>> = {\n top: 0,\n inactiveAlpha: 1,\n maxHeightRadio: MaxHeightRatio.HALF,\n disabled: false,\n editable: true\n}\n","import { ILabelOption } from '../../interface/Label'\n\nexport const defaultLabelOption: Readonly<Required<ILabelOption>> = {\n defaultColor: '#1976d2',\n defaultBackgroundColor: '#e3f2fd',\n defaultBorderRadius: 4,\n defaultPadding: [4, 4, 4, 4]\n}\n","import { ILineBreakOption } from '../../interface/LineBreak'\n\nexport const defaultLineBreak: Readonly<Required<ILineBreakOption>> = {\n disabled: true,\n color: '#CCCCCC',\n lineWidth: 1.5\n}\n","import { IPageBreak } from '../../interface/PageBreak'\n\nexport const defaultPageBreakOption: Readonly<Required<IPageBreak>> = {\n font: 'Microsoft YaHei',\n fontSize: 12,\n lineDash: [3, 1]\n}\n","import { IPageNumber } from '../../interface/PageNumber'\nimport { NumberType } from '../enum/Common'\nimport { RowFlex } from '../enum/Row'\n\nexport const FORMAT_PLACEHOLDER = {\n PAGE_NO: '{pageNo}',\n PAGE_COUNT: '{pageCount}'\n}\n\nexport const defaultPageNumberOption: Readonly<Required<IPageNumber>> = {\n bottom: 60,\n size: 12,\n font: 'Microsoft YaHei',\n color: '#000000',\n rowFlex: RowFlex.CENTER,\n format: FORMAT_PLACEHOLDER.PAGE_NO,\n numberType: NumberType.ARABIC,\n disabled: false,\n startPageNo: 1,\n fromPageNo: 0,\n maxPageNo: null\n}\n","import { IPlaceholder } from '../../interface/Placeholder'\n\nexport const defaultPlaceholderOption: Readonly<Required<IPlaceholder>> = {\n data: '',\n color: '#DCDFE6',\n opacity: 1,\n size: 12,\n font: 'Arial'\n}\n","import { IRadioOption } from '../../interface/Radio'\nimport { VerticalAlign } from '../enum/VerticalAlign'\n\nexport const defaultRadioOption: Readonly<Required<IRadioOption>> = {\n width: 14,\n height: 14,\n gap: 5,\n lineWidth: 1,\n fillStyle: '#5175f4',\n strokeStyle: '#000000',\n verticalAlign: VerticalAlign.BOTTOM\n}\n","import { ISeparatorOption } from '../../interface/Separator'\n\nexport const defaultSeparatorOption: Readonly<Required<ISeparatorOption>> = {\n lineWidth: 1,\n strokeStyle: '#000000'\n}\n","import { ITableOption } from '../../interface/table/Table'\n\nexport const defaultTableOption: Readonly<Required<ITableOption>> = {\n tdPadding: [0, 5, 5, 5],\n defaultTrMinHeight: 42,\n defaultColMinWidth: 40,\n defaultBorderColor: '#000000',\n overflow: true\n}\n","export enum WatermarkType {\n TEXT = 'text',\n IMAGE = 'image'\n}\n","import { IWatermark } from '../../interface/Watermark'\nimport { NumberType } from '../enum/Common'\nimport { WatermarkType } from '../enum/Watermark'\n\nexport const defaultWatermarkOption: Readonly<Required<IWatermark>> = {\n data: '',\n type: WatermarkType.TEXT,\n width: 0,\n height: 0,\n color: '#AEB5C0',\n opacity: 0.3,\n size: 200,\n font: 'Microsoft YaHei',\n repeat: false,\n gap: [10, 10],\n numberType: NumberType.ARABIC,\n rotation: -45,\n inFront: false\n}\n","import { IZoneOption } from '../../interface/Zone'\n\nexport const defaultZoneOption: Readonly<Required<IZoneOption>> = {\n tipDisabled: true\n}\n","export enum LineNumberType {\n PAGE = 'page',\n CONTINUITY = 'continuity'\n}\n","import { ILineNumberOption } from '../../interface/LineNumber'\nimport { LineNumberType } from '../enum/LineNumber'\n\nexport const defaultLineNumberOption: Readonly<Required<ILineNumberOption>> = {\n size: 12,\n font: 'Microsoft YaHei',\n color: '#000000',\n disabled: true,\n right: 20,\n type: LineNumberType.CONTINUITY\n}\n","import { IPageBorderOption } from '../../interface/PageBorder'\n\nexport const defaultPageBorderOption: Readonly<Required<IPageBorderOption>> = {\n color: '#000000',\n lineWidth: 1,\n padding: [0, 5, 0, 5],\n disabled: true\n}\n","import { IBadgeOption } from '../../interface/Badge'\n\nexport const defaultBadgeOption: Readonly<Required<IBadgeOption>> = {\n top: 0,\n left: 5\n}\n","import { IGraffitiOption } from '../../interface/Graffiti'\n\nexport const defaultGraffitiOption: Readonly<Required<IGraffitiOption>> = {\n defaultLineColor: '#000000',\n defaultLineWidth: 2\n}\n","import { IColumnOption } from '../../interface/Editor'\n\nexport const defaultColumnOption: Required<IColumnOption> = {\n count: 1,\n gap: 20\n}\n","import { IWhiteSpaceOption } from '../../interface/WhiteSpace'\n\nexport const defaultWhiteSpaceOption: Readonly<Required<IWhiteSpaceOption>> = {\n disabled: true,\n color: '#CCCCCC',\n radius: 1\n}\n","import { defaultBackground } from '../dataset/constant/Background'\nimport { defaultCheckboxOption } from '../dataset/constant/Checkbox'\nimport { LETTER_CLASS } from '../dataset/constant/Common'\nimport { defaultControlOption } from '../dataset/constant/Control'\nimport { defaultCursorOption } from '../dataset/constant/Cursor'\nimport { defaultFooterOption } from '../dataset/constant/Footer'\nimport { defaultGroupOption } from '../dataset/constant/Group'\nimport { defaultHeaderOption } from '../dataset/constant/Header'\nimport { defaultLabelOption } from '../dataset/constant/Label'\nimport { defaultLineBreak } from '../dataset/constant/LineBreak'\nimport { defaultPageBreakOption } from '../dataset/constant/PageBreak'\nimport { defaultPageNumberOption } from '../dataset/constant/PageNumber'\nimport { defaultPlaceholderOption } from '../dataset/constant/Placeholder'\nimport { defaultRadioOption } from '../dataset/constant/Radio'\nimport { defaultSeparatorOption } from '../dataset/constant/Separator'\nimport { defaultTableOption } from '../dataset/constant/Table'\nimport { defaultTitleOption } from '../dataset/constant/Title'\nimport { defaultWatermarkOption } from '../dataset/constant/Watermark'\nimport { defaultZoneOption } from '../dataset/constant/Zone'\nimport { defaultLineNumberOption } from '../dataset/constant/LineNumber'\nimport { IBackgroundOption } from '../interface/Background'\nimport { ICheckboxOption } from '../interface/Checkbox'\nimport { DeepRequired } from '../interface/Common'\nimport { IControlOption } from '../interface/Control'\nimport { ICursorOption } from '../interface/Cursor'\nimport { IColumnOption, IEditorOption, IModeRule } from '../interface/Editor'\nimport { IFooter } from '../interface/Footer'\nimport { IGroup } from '../interface/Group'\nimport { IHeader } from '../interface/Header'\nimport { ILabelOption } from '../interface/Label'\nimport { ILineBreakOption } from '../interface/LineBreak'\nimport { IPageBreak } from '../interface/PageBreak'\nimport { IPageNumber } from '../interface/PageNumber'\nimport { IPlaceholder } from '../interface/Placeholder'\nimport { IRadioOption } from '../interface/Radio'\nimport { ISeparatorOption } from '../interface/Separator'\nimport { ITableOption } from '../interface/table/Table'\nimport { ITitleOption } from '../interface/Title'\nimport { IWatermark } from '../interface/Watermark'\nimport { IZoneOption } from '../interface/Zone'\nimport { ILineNumberOption } from '../interface/LineNumber'\nimport { IPageBorderOption } from '../interface/PageBorder'\nimport { defaultPageBorderOption } from '../dataset/constant/PageBorder'\nimport {\n EditorMode,\n PageMode,\n PaperDirection,\n RenderMode,\n WordBreak\n} from '../dataset/enum/Editor'\nimport { defaultBadgeOption } from '../dataset/constant/Badge'\nimport { IBadgeOption } from '../interface/Badge'\nimport { defaultModeRuleOption } from '../dataset/constant/Editor'\nimport { IGraffitiOption } from '../interface/Graffiti'\nimport { defaultGraffitiOption } from '../dataset/constant/Graffiti'\nimport { IWhiteSpaceOption } from '../interface/WhiteSpace'\nimport { defaultColumnOption } from '../dataset/constant/Column'\nimport { defaultWhiteSpaceOption } from '../dataset/constant/WhiteSpace'\n\nexport function mergeOption(\n options: IEditorOption = {}\n): DeepRequired<IEditorOption> {\n const tableOptions: Required<ITableOption> = {\n ...defaultTableOption,\n ...options.table\n }\n const headerOptions: Required<IHeader> = {\n ...defaultHeaderOption,\n ...options.header\n }\n const footerOptions: Required<IFooter> = {\n ...defaultFooterOption,\n ...options.footer\n }\n const pageNumberOptions: Required<IPageNumber> = {\n ...defaultPageNumberOption,\n ...options.pageNumber\n }\n const waterMarkOptions: Required<IWatermark> = {\n ...defaultWatermarkOption,\n ...options.watermark\n }\n const controlOptions: Required<IControlOption> = {\n ...defaultControlOption,\n ...options.control\n }\n const checkboxOptions: Required<ICheckboxOption> = {\n ...defaultCheckboxOption,\n ...options.checkbox\n }\n const radioOptions: Required<IRadioOption> = {\n ...defaultRadioOption,\n ...options.radio\n }\n const cursorOptions: Required<ICursorOption> = {\n ...defaultCursorOption,\n ...options.cursor\n }\n const titleOptions: Required<ITitleOption> = {\n ...defaultTitleOption,\n ...options.title\n }\n const placeholderOptions: Required<IPlaceholder> = {\n ...defaultPlaceholderOption,\n ...options.placeholder\n }\n const groupOptions: Required<IGroup> = {\n ...defaultGroupOption,\n ...options.group\n }\n const pageBreakOptions: Required<IPageBreak> = {\n ...defaultPageBreakOption,\n ...options.pageBreak\n }\n const zoneOptions: Required<IZoneOption> = {\n ...defaultZoneOption,\n ...options.zone\n }\n const backgroundOptions: Required<IBackgroundOption> = {\n ...defaultBackground,\n ...options.background\n }\n const lineBreakOptions: Required<ILineBreakOption> = {\n ...defaultLineBreak,\n ...options.lineBreak\n }\n const whiteSpaceOptions: Required<IWhiteSpaceOption> = {\n ...defaultWhiteSpaceOption,\n ...options.whiteSpace\n }\n const separatorOptions: Required<ISeparatorOption> = {\n ...defaultSeparatorOption,\n ...options.separator\n }\n const lineNumberOptions: Required<ILineNumberOption> = {\n ...defaultLineNumberOption,\n ...options.lineNumber\n }\n const pageBorderOptions: Required<IPageBorderOption> = {\n ...defaultPageBorderOption,\n ...options.pageBorder\n }\n const badgeOptions: Required<IBadgeOption> = {\n ...defaultBadgeOption,\n ...options.badge\n }\n const graffitiOptions: Required<IGraffitiOption> = {\n ...defaultGraffitiOption,\n ...options.graffiti\n }\n const labelOptions: Required<ILabelOption> = {\n ...defaultLabelOption,\n ...options.label\n }\n const columnOptions: Required<IColumnOption> = {\n ...defaultColumnOption,\n ...options.column\n }\n const modeRuleOption: DeepRequired<IModeRule> = {\n print: {\n ...defaultModeRuleOption.print,\n ...options.modeRule?.print\n },\n readonly: {\n ...defaultModeRuleOption.readonly,\n ...options.modeRule?.readonly\n },\n form: {\n ...defaultModeRuleOption.form,\n ...options.modeRule?.form\n }\n }\n\n return {\n mode: EditorMode.EDIT,\n locale: 'zhCN',\n defaultType: 'TEXT',\n defaultColor: '#000000',\n defaultFont: 'Arial',\n defaultSize: 12,\n minSize: 5,\n maxSize: 72,\n defaultRowMargin: 1,\n defaultBasicRowMarginHeight: 8,\n defaultTabWidth: 32,\n width: 794,\n height: 1123,\n scale: 1,\n pageGap: 20,\n underlineColor: '#000000',\n strikeoutColor: '#FF0000',\n rangeAlpha: 0.6,\n rangeColor: '#AECBFA',\n rangeMinWidth: 5,\n searchMatchAlpha: 0.6,\n searchMatchColor: '#FFFF00',\n searchNavigateMatchColor: '#AAD280',\n highlightAlpha: 0.6,\n highlightMarginHeight: 8,\n resizerColor: '#4182D9',\n resizerSize: 5,\n marginIndicatorSize: 35,\n marginIndicatorColor: '#BABABA',\n margins: [100, 120, 100, 120],\n pageMode: PageMode.PAGING,\n renderMode: RenderMode.SPEED,\n defaultHyperlinkColor: '#0000FF',\n paperDirection: PaperDirection.VERTICAL,\n inactiveAlpha: 0.6,\n historyMaxRecordCount: 100,\n wordBreak: WordBreak.BREAK_WORD,\n printPixelRatio: 3,\n maskMargin: [0, 0, 0, 0],\n letterClass: [LETTER_CLASS.ENGLISH],\n contextMenuDisableKeys: [],\n shortcutDisableKeys: [],\n scrollContainerSelector: '',\n pageOuterSelectionDisable: false,\n ...options,\n table: tableOptions,\n header: headerOptions,\n footer: footerOptions,\n pageNumber: pageNumberOptions,\n watermark: waterMarkOptions,\n control: controlOptions,\n checkbox: checkboxOptions,\n radio: radioOptions,\n cursor: cursorOptions,\n title: titleOptions,\n placeholder: placeholderOptions,\n group: groupOptions,\n pageBreak: pageBreakOptions,\n zone: zoneOptions,\n background: backgroundOptions,\n lineBreak: lineBreakOptions,\n whiteSpace: whiteSpaceOptions,\n separator: separatorOptions,\n lineNumber: lineNumberOptions,\n pageBorder: pageBorderOptions,\n badge: badgeOptions,\n modeRule: modeRuleOption,\n graffiti: graffitiOptions,\n label: labelOptions,\n column: columnOptions\n }\n}\n","import {\n cloneProperty,\n deepClone,\n deepCloneOmitKeys,\n deleteProperty,\n getUUID,\n isArrayEqual,\n omitObject,\n pickObject,\n splitText,\n} from \".\";\nimport { IFrameBlock } from \"../core/draw/particle/block/modules/IFrameBlock\";\nimport { LaTexParticle } from \"../core/draw/particle/latex/LaTexParticle\";\nimport { NON_BREAKING_SPACE, ZERO } from \"../dataset/constant/Common\";\nimport {\n AREA_CONTEXT_ATTR,\n BLOCK_ELEMENT_TYPE,\n CONTROL_STYLE_ATTR,\n EDITOR_ELEMENT_CONTEXT_ATTR,\n EDITOR_ELEMENT_ZIP_ATTR,\n EDITOR_ROW_ATTR,\n INLINE_NODE_NAME,\n TABLE_CONTEXT_ATTR,\n TABLE_TD_ZIP_ATTR,\n TEXTLIKE_ELEMENT_TYPE,\n TITLE_CONTEXT_ATTR,\n} from \"../dataset/constant/Element\";\nimport {\n listStyleCSSMapping,\n listTypeElementMapping,\n ulStyleMapping,\n} from \"../dataset/constant/List\";\nimport { START_LINE_BREAK_REG } from \"../dataset/constant/Regular\";\nimport {\n titleNodeNameMapping,\n titleOrderNumberMapping,\n titleSizeMapping,\n} from \"../dataset/constant/Title\";\nimport { BlockType } from \"../dataset/enum/Block\";\nimport { ImageDisplay, LocationPosition } from \"../dataset/enum/Common\";\nimport { ControlComponent, ControlType } from \"../dataset/enum/Control\";\nimport { EditorMode } from \"../dataset/enum/Editor\";\nimport { ElementType } from \"../dataset/enum/Element\";\nimport { ListStyle, ListType, UlStyle } from \"../dataset/enum/List\";\nimport { RowFlex } from \"../dataset/enum/Row\";\nimport { TableBorder, TdBorder } from \"../dataset/enum/table/Table\";\nimport { VerticalAlign } from \"../dataset/enum/VerticalAlign\";\nimport { DeepRequired } from \"../interface/Common\";\nimport { IControlSelect } from \"../interface/Control\";\nimport { IEditorOption } from \"../interface/Editor\";\nimport { IElement } from \"../interface/Element\";\nimport { IRowElement } from \"../interface/Row\";\nimport { ITd } from \"../interface/table/Td\";\nimport { ITr } from \"../interface/table/Tr\";\nimport { mergeOption } from \"./option\";\n\nexport function unzipElementList(elementList: IElement[]): IElement[] {\n const result: IElement[] = [];\n for (let v = 0; v < elementList.length; v++) {\n const valueItem = elementList[v];\n const textList = splitText(valueItem.value);\n for (let d = 0; d < textList.length; d++) {\n result.push({ ...valueItem, value: textList[d] });\n }\n }\n return result;\n}\n\ninterface IFormatElementListOption {\n isHandleFirstElement?: boolean;\n isForceCompensation?: boolean;\n editorOptions: DeepRequired<IEditorOption>;\n}\n\nexport function formatElementList(\n elementList: IElement[],\n options: IFormatElementListOption,\n) {\n const {\n isHandleFirstElement = true,\n isForceCompensation = false,\n editorOptions,\n } = options;\n const startElement = elementList[0];\n if (\n isForceCompensation ||\n (isHandleFirstElement &&\n startElement?.type !== ElementType.LIST &&\n ((startElement?.type && startElement.type !== ElementType.TEXT) ||\n !START_LINE_BREAK_REG.test(startElement?.value)))\n ) {\n elementList.unshift({\n value: ZERO,\n });\n }\n let i = 0;\n while (i < elementList.length) {\n let el = elementList[i];\n if (el.type === ElementType.TITLE) {\n elementList.splice(i, 1);\n const valueList = el.valueList || [];\n formatElementList(valueList, {\n ...options,\n isHandleFirstElement: true,\n isForceCompensation: false,\n });\n if (valueList.length) {\n const titleId = el.titleId || getUUID();\n const titleOptions = editorOptions.title;\n for (let v = 0; v < valueList.length; v++) {\n const value = valueList[v];\n value.title = el.title;\n if (el.level) {\n value.titleId = titleId;\n value.level = el.level;\n }\n if (isTextLikeElement(value)) {\n if (!value.size) {\n value.size = titleOptions[titleSizeMapping[value.level!]];\n }\n if (value.bold === undefined) {\n value.bold = true;\n }\n }\n elementList.splice(i, 0, value);\n i++;\n }\n }\n i--;\n } else if (el.type === ElementType.LIST) {\n elementList.splice(i, 1);\n const valueList = el.valueList || [];\n formatElementList(valueList, {\n ...options,\n isHandleFirstElement: true,\n isForceCompensation: false,\n });\n if (valueList.length) {\n const listId = getUUID();\n for (let v = 0; v < valueList.length; v++) {\n const value = valueList[v];\n value.listId = listId;\n value.listType = el.listType;\n if (!value.listStyle) {\n value.listStyle = el.listStyle;\n }\n elementList.splice(i, 0, value);\n i++;\n }\n }\n i--;\n } else if (el.type === ElementType.AREA) {\n elementList.splice(i, 1);\n const valueList = el?.valueList || [];\n formatElementList(valueList, {\n ...options,\n isHandleFirstElement: true,\n isForceCompensation: true,\n });\n if (valueList.length) {\n const areaId = getUUID();\n for (let v = 0; v < valueList.length; v++) {\n const value = valueList[v];\n value.areaId = el.areaId || areaId;\n value.area = el.area;\n value.areaIndex = v;\n if (value.type === ElementType.TABLE) {\n const trList = value.trList!;\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r];\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d];\n const tdValueList = td.value;\n for (let t = 0; t < tdValueList.length; t++) {\n const tdValue = tdValueList[t];\n tdValue.areaId = el.areaId || areaId;\n tdValue.area = el.area;\n }\n }\n }\n }\n elementList.splice(i, 0, value);\n i++;\n }\n }\n i--;\n } else if (el.type === ElementType.TABLE) {\n const tableId = el.id || getUUID();\n el.id = tableId;\n if (el.trList) {\n const { defaultTrMinHeight } = editorOptions.table;\n for (let t = 0; t < el.trList.length; t++) {\n const tr = el.trList[t];\n const trId = tr.id || getUUID();\n tr.id = trId;\n if (!tr.minHeight || tr.minHeight < defaultTrMinHeight) {\n tr.minHeight = defaultTrMinHeight;\n }\n if (tr.height < tr.minHeight) {\n tr.height = tr.minHeight;\n }\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d];\n const tdId = td.id || getUUID();\n td.id = tdId;\n formatElementList(td.value, {\n ...options,\n isHandleFirstElement: true,\n isForceCompensation: true,\n });\n if (\n !td.value[0].size &&\n td.value[1]?.size &&\n isTextLikeElement(td.value[1])\n ) {\n td.value[0].size = td.value[1].size;\n }\n for (let v = 0; v < td.value.length; v++) {\n const value = td.value[v];\n value.tdId = tdId;\n value.trId = trId;\n value.tableId = tableId;\n }\n }\n }\n }\n } else if (el.type === ElementType.HYPERLINK) {\n elementList.splice(i, 1);\n const valueList = unzipElementList(el.valueList || []);\n if (valueList.length) {\n const hyperlinkId = getUUID();\n for (let v = 0; v < valueList.length; v++) {\n const value = valueList[v];\n value.type = el.type;\n value.url = el.url;\n value.hyperlinkId = hyperlinkId;\n elementList.splice(i, 0, value);\n i++;\n }\n }\n i--;\n } else if (el.type === ElementType.DATE) {\n elementList.splice(i, 1);\n const valueList = unzipElementList(el.valueList || []);\n if (valueList.length) {\n const dateId = getUUID();\n for (let v = 0; v < valueList.length; v++) {\n const value = valueList[v];\n value.type = el.type;\n value.dateFormat = el.dateFormat;\n value.dateId = dateId;\n elementList.splice(i, 0, value);\n i++;\n }\n }\n i--;\n } else if (el.type === ElementType.CONTROL) {\n if (!el.control) {\n i++;\n continue;\n }\n const {\n prefix,\n postfix,\n preText,\n postText,\n value,\n placeholder,\n code,\n type,\n valueSets,\n } = el.control;\n const {\n editorOptions: {\n control: controlOption,\n checkbox: checkboxOption,\n radio: radioOption,\n },\n } = options;\n const controlId = el.controlId || getUUID();\n elementList.splice(i, 1);\n const controlContext = pickObject(el, [\n ...EDITOR_ELEMENT_CONTEXT_ATTR,\n ...EDITOR_ROW_ATTR,\n ]);\n const controlDefaultStyle = pickObject(\n <IElement>(<unknown>el.control),\n CONTROL_STYLE_ATTR,\n );\n const thePrePostfixArg: Omit<IElement, \"value\"> = {\n ...controlDefaultStyle,\n color: editorOptions.control.bracketColor,\n };\n const prefixStrList = splitText(prefix || controlOption.prefix);\n for (let p = 0; p < prefixStrList.length; p++) {\n const value = prefixStrList[p];\n elementList.splice(i, 0, {\n ...controlContext,\n ...thePrePostfixArg,\n controlId,\n value,\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.PREFIX,\n });\n i++;\n }\n if (preText) {\n const preTextStrList = splitText(preText);\n for (let p = 0; p < preTextStrList.length; p++) {\n const value = preTextStrList[p];\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n controlId,\n value,\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.PRE_TEXT,\n });\n i++;\n }\n }\n if (\n (value && value.length) ||\n type === ControlType.CHECKBOX ||\n type === ControlType.RADIO ||\n (type === ControlType.SELECT && code && (!value || !value.length))\n ) {\n let valueList: IElement[] = value ? deepClone(value) : [];\n if (type === ControlType.CHECKBOX) {\n const codeList = code ? code.split(\",\") : [];\n if (Array.isArray(valueSets) && valueSets.length) {\n const valueStyleList = valueList.reduce(\n (pre, cur) =>\n pre.concat(\n cur.value.split(\"\").map((v) => ({ ...cur, value: v })),\n ),\n [] as IElement[],\n );\n let valueStyleIndex = 0;\n for (let v = 0; v < valueSets.length; v++) {\n const valueSet = valueSets[v];\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n controlId,\n value: \"\",\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.CHECKBOX,\n checkbox: {\n code: valueSet.code,\n value: codeList.includes(valueSet.code),\n },\n });\n i++;\n const valueStrList = splitText(valueSet.value);\n for (let e = 0; e < valueStrList.length; e++) {\n const value = valueStrList[e];\n const isLastLetter = e === valueStrList.length - 1;\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n ...valueStyleList[valueStyleIndex],\n controlId,\n value: value === \"\\n\" ? ZERO : value,\n letterSpacing: isLastLetter ? checkboxOption.gap : 0,\n control: el.control,\n controlComponent: ControlComponent.VALUE,\n });\n valueStyleIndex++;\n i++;\n }\n }\n }\n } else if (type === ControlType.RADIO) {\n if (Array.isArray(valueSets) && valueSets.length) {\n const valueStyleList = valueList.reduce(\n (pre, cur) =>\n pre.concat(\n cur.value.split(\"\").map((v) => ({ ...cur, value: v })),\n ),\n [] as IElement[],\n );\n let valueStyleIndex = 0;\n for (let v = 0; v < valueSets.length; v++) {\n const valueSet = valueSets[v];\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n controlId,\n value: \"\",\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.RADIO,\n radio: {\n code: valueSet.code,\n value: code === valueSet.code,\n },\n });\n i++;\n const valueStrList = splitText(valueSet.value);\n for (let e = 0; e < valueStrList.length; e++) {\n const value = valueStrList[e];\n const isLastLetter = e === valueStrList.length - 1;\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n ...valueStyleList[valueStyleIndex],\n controlId,\n value: value === \"\\n\" ? ZERO : value,\n letterSpacing: isLastLetter ? radioOption.gap : 0,\n control: el.control,\n controlComponent: ControlComponent.VALUE,\n });\n valueStyleIndex++;\n i++;\n }\n }\n }\n } else {\n if (!value || !value.length) {\n if (Array.isArray(valueSets) && valueSets.length) {\n const valueSet = valueSets.find((v) => v.code === code);\n if (valueSet) {\n valueList = [\n {\n value: valueSet.value,\n },\n ];\n }\n }\n }\n formatElementList(valueList, {\n ...options,\n isHandleFirstElement: false,\n isForceCompensation: false,\n });\n for (let v = 0; v < valueList.length; v++) {\n const element = valueList[v];\n const value = element.value;\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n ...element,\n controlId,\n value: value === \"\\n\" ? ZERO : value,\n type: element.type || ElementType.TEXT,\n control: el.control,\n controlComponent: ControlComponent.VALUE,\n });\n i++;\n }\n }\n } else if (placeholder) {\n // placeholder\n const thePlaceholderArgs: Omit<IElement, \"value\"> = {\n ...controlDefaultStyle,\n color: editorOptions.control.placeholderColor,\n };\n const placeholderStrList = splitText(placeholder);\n for (let p = 0; p < placeholderStrList.length; p++) {\n const value = placeholderStrList[p];\n elementList.splice(i, 0, {\n ...controlContext,\n ...thePlaceholderArgs,\n controlId,\n value: value === \"\\n\" ? ZERO : value,\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.PLACEHOLDER,\n });\n i++;\n }\n }\n if (postText) {\n const postTextStrList = splitText(postText);\n for (let p = 0; p < postTextStrList.length; p++) {\n const value = postTextStrList[p];\n elementList.splice(i, 0, {\n ...controlContext,\n ...controlDefaultStyle,\n controlId,\n value,\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.POST_TEXT,\n });\n i++;\n }\n }\n const postfixStrList = splitText(postfix || controlOption.postfix);\n for (let p = 0; p < postfixStrList.length; p++) {\n const value = postfixStrList[p];\n elementList.splice(i, 0, {\n ...controlContext,\n ...thePrePostfixArg,\n controlId,\n value,\n type: el.type,\n control: el.control,\n controlComponent: ControlComponent.POSTFIX,\n });\n i++;\n }\n i--;\n } else if (\n (!el.type || TEXTLIKE_ELEMENT_TYPE.includes(el.type)) &&\n el.value?.length > 1\n ) {\n elementList.splice(i, 1);\n const valueList = splitText(el.value);\n for (let v = 0; v < valueList.length; v++) {\n elementList.splice(i + v, 0, { ...el, value: valueList[v] });\n }\n el = elementList[i];\n }\n if (el.value === \"\\n\" || el.value == \"\\r\\n\") {\n el.value = ZERO;\n }\n if (el.type === ElementType.IMAGE || el.type === ElementType.BLOCK) {\n el.id = el.id || getUUID();\n }\n if (el.type === ElementType.LATEX) {\n const { svg, width, height } = LaTexParticle.convertLaTextToSVG(el.value);\n el.width = el.width || width;\n el.height = el.height || height;\n el.laTexSVG = svg;\n el.id = el.id || getUUID();\n }\n i++;\n }\n}\n\nexport function isSameElementExceptValue(\n source: IElement,\n target: IElement,\n): boolean {\n const sourceKeys = Object.keys(source);\n const targetKeys = Object.keys(target);\n if (sourceKeys.length !== targetKeys.length) return false;\n for (let s = 0; s < sourceKeys.length; s++) {\n const key = sourceKeys[s] as never;\n if (key === \"value\") continue;\n if (\n key === \"groupIds\" &&\n Array.isArray(source[key]) &&\n Array.isArray(target[key]) &&\n isArrayEqual(source[key], target[key])\n ) {\n continue;\n }\n if (source[key] !== target[key]) {\n return false;\n }\n }\n return true;\n}\ninterface IPickElementOption {\n extraPickAttrs?: Array<keyof IElement>;\n}\nexport function pickElementAttr(\n payload: IElement,\n option: IPickElementOption = {},\n): IElement {\n const { extraPickAttrs } = option;\n const zipAttrs = [...EDITOR_ELEMENT_ZIP_ATTR];\n if (extraPickAttrs) {\n zipAttrs.push(...extraPickAttrs);\n }\n const element: IElement = {\n value: payload.value === ZERO ? `\\n` : payload.value,\n };\n zipAttrs.forEach((attr) => {\n const value = payload[attr] as never;\n if (value !== undefined) {\n element[attr] = value;\n }\n });\n return element;\n}\n\ninterface IZipElementListOption {\n extraPickAttrs?: Array<keyof IElement>;\n isClassifyArea?: boolean;\n isClone?: boolean;\n}\nexport function zipElementList(\n payload: IElement[],\n options: IZipElementListOption = {},\n): IElement[] {\n const { extraPickAttrs, isClassifyArea = false, isClone = true } = options;\n const elementList = isClone ? deepClone(payload) : payload;\n const zipElementListData: IElement[] = [];\n let e = 0;\n while (e < elementList.length) {\n let element = elementList[e];\n if (\n e === 0 &&\n element.value === ZERO &&\n !element.listId &&\n (!element.type || element.type === ElementType.TEXT)\n ) {\n e++;\n continue;\n }\n if (element.areaId) {\n const areaId = element.areaId;\n const area = element.area;\n const valueList: IElement[] = [];\n while (e < elementList.length) {\n const areaE = elementList[e];\n if (areaId !== areaE.areaId) {\n e--;\n break;\n }\n delete areaE.area;\n delete areaE.areaId;\n valueList.push(areaE);\n e++;\n }\n const areaElementList = zipElementList(valueList, options);\n if (isClassifyArea) {\n const areaElement: IElement = {\n type: ElementType.AREA,\n value: \"\",\n areaId,\n area,\n };\n areaElement.valueList = areaElementList;\n element = areaElement;\n } else {\n zipElementListData.splice(e, 0, ...areaElementList);\n continue;\n }\n } else if (element.titleId && element.level) {\n const titleId = element.titleId;\n if (titleId) {\n const level = element.level;\n const titleElement: IElement = {\n type: ElementType.TITLE,\n title: element.title,\n titleId,\n value: \"\",\n level,\n };\n const valueList: IElement[] = [];\n while (e < elementList.length) {\n const titleE = elementList[e];\n if (titleId !== titleE.titleId) {\n e--;\n break;\n }\n delete titleE.level;\n delete titleE.title;\n valueList.push(titleE);\n e++;\n }\n titleElement.valueList = zipElementList(valueList, options);\n element = titleElement;\n }\n } else if (element.listId && element.listType) {\n const listId = element.listId;\n if (listId) {\n const listType = element.listType;\n const listStyle = element.listStyle;\n const listElement: IElement = {\n type: ElementType.LIST,\n value: \"\",\n listId,\n listType,\n listStyle,\n };\n const valueList: IElement[] = [];\n while (e < elementList.length) {\n const listE = elementList[e];\n if (listId !== listE.listId) {\n e--;\n break;\n }\n delete listE.listType;\n valueList.push(listE);\n e++;\n }\n listElement.valueList = zipElementList(valueList, options);\n element = listElement;\n }\n } else if (element.type === ElementType.TABLE) {\n if (element.pagingId) {\n let tableIndex = e + 1;\n let combineCount = 0;\n while (tableIndex < elementList.length) {\n const nextElement = elementList[tableIndex];\n if (nextElement.pagingId === element.pagingId) {\n element.height! += nextElement.height!;\n element.trList!.push(...nextElement.trList!);\n tableIndex++;\n combineCount++;\n } else {\n break;\n }\n }\n e += combineCount;\n }\n if (element.trList) {\n for (let t = 0; t < element.trList.length; t++) {\n const tr = element.trList[t];\n delete tr.id;\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d];\n const zipTd: ITd = {\n colspan: td.colspan,\n rowspan: td.rowspan,\n value: zipElementList(td.value, {\n ...options,\n isClassifyArea: false,\n }),\n };\n TABLE_TD_ZIP_ATTR.forEach((attr) => {\n const value = td[attr] as never;\n if (value !== undefined) {\n zipTd[attr] = value;\n }\n });\n tr.tdList[d] = zipTd;\n }\n }\n }\n } else if (element.type === ElementType.HYPERLINK) {\n const hyperlinkId = element.hyperlinkId;\n if (hyperlinkId) {\n const hyperlinkElement: IElement = {\n type: ElementType.HYPERLINK,\n value: \"\",\n url: element.url,\n };\n const valueList: IElement[] = [];\n while (e < elementList.length) {\n const hyperlinkE = elementList[e];\n if (hyperlinkId !== hyperlinkE.hyperlinkId) {\n e--;\n break;\n }\n delete hyperlinkE.type;\n delete hyperlinkE.url;\n valueList.push(hyperlinkE);\n e++;\n }\n hyperlinkElement.valueList = zipElementList(valueList, options);\n element = hyperlinkElement;\n }\n } else if (element.type === ElementType.DATE) {\n const dateId = element.dateId;\n if (dateId) {\n const dateElement: IElement = {\n type: ElementType.DATE,\n value: \"\",\n dateFormat: element.dateFormat,\n };\n const valueList: IElement[] = [];\n while (e < elementList.length) {\n const dateE = elementList[e];\n if (dateId !== dateE.dateId) {\n e--;\n break;\n }\n delete dateE.type;\n delete dateE.dateFormat;\n valueList.push(dateE);\n e++;\n }\n dateElement.valueList = zipElementList(valueList, options);\n element = dateElement;\n }\n } else if (element.controlId) {\n const controlId = element.controlId;\n if (element.controlComponent === ControlComponent.PREFIX) {\n const valueList: IElement[] = [];\n let isFull = false;\n let start = e;\n while (start < elementList.length) {\n const controlE = elementList[start];\n if (controlId !== controlE.controlId) break;\n if (controlE.controlComponent === ControlComponent.VALUE) {\n delete controlE.control;\n delete controlE.controlId;\n valueList.push(controlE);\n }\n if (controlE.controlComponent === ControlComponent.POSTFIX) {\n isFull = true;\n }\n start++;\n }\n if (isFull) {\n const controlDefaultStyle = <IControlSelect>(\n (<unknown>pickObject(element, CONTROL_STYLE_ATTR))\n );\n const control = {\n ...element.control!,\n ...controlDefaultStyle,\n };\n const controlElement: IElement = {\n ...pickObject(element, EDITOR_ROW_ATTR),\n type: ElementType.CONTROL,\n value: \"\",\n control,\n controlId,\n };\n controlElement.control!.value = zipElementList(valueList, options);\n element = pickElementAttr(controlElement, { extraPickAttrs });\n e += start - e - 1;\n }\n }\n if (element.controlComponent) {\n delete element.control;\n delete element.controlId;\n if (\n element.controlComponent !== ControlComponent.VALUE &&\n element.controlComponent !== ControlComponent.PRE_TEXT &&\n element.controlComponent !== ControlComponent.POST_TEXT\n ) {\n e++;\n continue;\n }\n }\n }\n const pickElement = pickElementAttr(element, { extraPickAttrs });\n if (\n !element.type ||\n element.type === ElementType.TEXT ||\n element.type === ElementType.SUBSCRIPT ||\n element.type === ElementType.SUPERSCRIPT\n ) {\n while (e < elementList.length) {\n const nextElement = elementList[e + 1];\n e++;\n if (\n nextElement &&\n isSameElementExceptValue(\n pickElement,\n pickElementAttr(nextElement, { extraPickAttrs }),\n )\n ) {\n const nextValue =\n nextElement.value === ZERO ? \"\\n\" : nextElement.value;\n pickElement.value += nextValue;\n } else {\n break;\n }\n }\n } else {\n e++;\n }\n zipElementListData.push(pickElement);\n }\n return zipElementListData;\n}\n\nexport function convertTextAlignToRowFlex(node: HTMLElement) {\n const textAlign = window.getComputedStyle(node).textAlign;\n switch (textAlign) {\n case \"left\":\n case \"start\":\n return RowFlex.LEFT;\n case \"center\":\n return RowFlex.CENTER;\n case \"right\":\n case \"end\":\n return RowFlex.RIGHT;\n case \"justify\":\n return RowFlex.ALIGNMENT;\n case \"justify-all\":\n return RowFlex.JUSTIFY;\n default:\n return RowFlex.LEFT;\n }\n}\n\nexport function convertRowFlexToTextAlign(rowFlex: RowFlex) {\n return rowFlex === RowFlex.ALIGNMENT ? \"justify\" : rowFlex;\n}\n\nexport function convertRowFlexToJustifyContent(rowFlex: RowFlex) {\n switch (rowFlex) {\n case RowFlex.LEFT:\n return \"flex-start\";\n case RowFlex.CENTER:\n return \"center\";\n case RowFlex.RIGHT:\n return \"flex-end\";\n case RowFlex.ALIGNMENT:\n case RowFlex.JUSTIFY:\n return \"space-between\";\n default:\n return \"flex-start\";\n }\n}\n\nexport function isTextLikeElement(element: IElement): boolean {\n return !element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type);\n}\n\nexport function isTextElement(element: IElement): boolean {\n return !element.type || element.type === ElementType.TEXT;\n}\n\nexport function getElementListText(elementList: IElement[]): string {\n return elementList\n .filter((el) => isTextLikeElement(el))\n .map((el) => el.value)\n .join(\"\")\n .replace(new RegExp(ZERO, \"g\"), \"\");\n}\n\nexport function getAnchorElement(\n elementList: IElement[],\n anchorIndex: number,\n): IElement | null {\n const anchorElement = elementList[anchorIndex];\n if (!anchorElement) return null;\n const anchorNextElement = elementList[anchorIndex + 1];\n return !anchorElement.listId &&\n anchorElement.value === ZERO &&\n anchorNextElement &&\n anchorNextElement.value !== ZERO &&\n anchorElement.areaId === anchorNextElement.areaId\n ? anchorNextElement\n : anchorElement;\n}\n\nexport interface IFormatElementContextOption {\n isBreakWhenWrap?: boolean;\n ignoreContextKeys?: Array<keyof IElement>;\n editorOptions?: DeepRequired<IEditorOption>;\n}\n\nexport function formatElementContext(\n sourceElementList: IElement[],\n formatElementList: IElement[],\n anchorIndex: number,\n options?: IFormatElementContextOption,\n) {\n let copyElement = getAnchorElement(sourceElementList, anchorIndex);\n if (!copyElement) return;\n const {\n isBreakWhenWrap = false,\n editorOptions,\n ignoreContextKeys = [],\n } = options || {};\n const { mode } = editorOptions || {};\n if (mode !== EditorMode.DESIGN && copyElement.title?.disabled) {\n copyElement = omitObject(copyElement, TITLE_CONTEXT_ATTR);\n }\n let isBreakWarped = false;\n for (let e = 0; e < formatElementList.length; e++) {\n const targetElement = formatElementList[e];\n if (\n isBreakWhenWrap &&\n !copyElement.listId &&\n START_LINE_BREAK_REG.test(targetElement.value)\n ) {\n isBreakWarped = true;\n }\n if (\n isBreakWarped ||\n (!copyElement.listId && targetElement.type === ElementType.LIST)\n ) {\n const cloneAttr = [\n ...TABLE_CONTEXT_ATTR,\n ...EDITOR_ROW_ATTR,\n ...AREA_CONTEXT_ATTR,\n ];\n deleteProperty(cloneAttr, ignoreContextKeys);\n cloneProperty<IElement>(cloneAttr, copyElement!, targetElement);\n targetElement.valueList?.forEach((valueItem) => {\n cloneProperty<IElement>(cloneAttr, copyElement!, valueItem);\n });\n continue;\n }\n if (targetElement.valueList?.length) {\n formatElementContext(\n sourceElementList,\n targetElement.valueList,\n anchorIndex,\n options,\n );\n }\n const cloneAttr = [...EDITOR_ELEMENT_CONTEXT_ATTR];\n if (!getIsBlockElement(targetElement)) {\n cloneAttr.push(...EDITOR_ROW_ATTR);\n }\n deleteProperty(cloneAttr, ignoreContextKeys);\n cloneProperty<IElement>(cloneAttr, copyElement, targetElement);\n }\n}\n\nexport function convertElementToDom(\n element: IElement,\n options: DeepRequired<IEditorOption>,\n): HTMLElement {\n let tagName: keyof HTMLElementTagNameMap = \"span\";\n if (element.type === ElementType.SUPERSCRIPT) {\n tagName = \"sup\";\n } else if (element.type === ElementType.SUBSCRIPT) {\n tagName = \"sub\";\n }\n const dom = document.createElement(tagName);\n dom.style.fontFamily = element.font || options.defaultFont;\n if (element.rowFlex) {\n dom.style.textAlign = convertRowFlexToTextAlign(element.rowFlex);\n }\n if (element.color) {\n dom.style.color = element.color;\n }\n if (element.bold) {\n dom.style.fontWeight = \"600\";\n }\n if (element.italic) {\n dom.style.fontStyle = \"italic\";\n }\n dom.style.fontSize = `${element.size || options.defaultSize}px`;\n if (element.highlight) {\n dom.style.backgroundColor = element.highlight;\n }\n if (element.underline) {\n dom.style.textDecoration = \"underline\";\n dom.style.textDecorationStyle = element.textDecoration?.style || \"solid\";\n }\n if (element.strikeout) {\n dom.style.textDecoration += \" line-through\";\n }\n if (element.type) {\n dom.setAttribute(\"data-type\", element.type);\n }\n if (element.rowMargin) {\n dom.style.lineHeight = (\n element.rowMargin ?? options.defaultRowMargin\n ).toString();\n }\n dom.innerText = element.value.replace(new RegExp(`${ZERO}`, \"g\"), \"\\n\");\n return dom;\n}\n\nexport function splitListElement(\n elementList: IElement[],\n): Map<number, IElement[]> {\n let curListIndex = 0;\n const listElementListMap: Map<number, IElement[]> = new Map();\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e];\n if (e === 0) {\n if (element.checkbox) continue;\n element.value = element.value.replace(START_LINE_BREAK_REG, \"\");\n }\n if (element.listWrap) {\n const listElementList = listElementListMap.get(curListIndex) || [];\n listElementList.push(element);\n listElementListMap.set(curListIndex, listElementList);\n } else {\n const valueList = element.value.split(\"\\n\");\n for (let c = 0; c < valueList.length; c++) {\n if (c > 0) {\n curListIndex += 1;\n }\n const value = valueList[c];\n const listElementList = listElementListMap.get(curListIndex) || [];\n listElementList.push({\n ...element,\n value,\n });\n listElementListMap.set(curListIndex, listElementList);\n }\n }\n }\n return listElementListMap;\n}\n\nexport interface IElementListGroupRowFlex {\n rowFlex: RowFlex | null;\n data: IElement[];\n}\n\nexport function groupElementListByRowFlex(\n elementList: IElement[],\n): IElementListGroupRowFlex[] {\n const elementListGroupList: IElementListGroupRowFlex[] = [];\n if (!elementList.length) return elementListGroupList;\n let currentRowFlex: RowFlex | null = elementList[0]?.rowFlex || null;\n elementListGroupList.push({\n rowFlex: currentRowFlex,\n data: [elementList[0]],\n });\n for (let e = 1; e < elementList.length; e++) {\n const element = elementList[e];\n const rowFlex = element.rowFlex || null;\n if (\n currentRowFlex === rowFlex &&\n !getIsBlockElement(element) &&\n !getIsBlockElement(elementList[e - 1])\n ) {\n const lastElementListGroup =\n elementListGroupList[elementListGroupList.length - 1];\n lastElementListGroup.data.push(element);\n } else {\n elementListGroupList.push({\n rowFlex,\n data: [element],\n });\n currentRowFlex = rowFlex;\n }\n }\n for (let g = 0; g < elementListGroupList.length; g++) {\n const elementListGroup = elementListGroupList[g];\n elementListGroup.data = zipElementList(elementListGroup.data);\n }\n return elementListGroupList;\n}\n\nexport function createDomFromElementList(\n elementList: IElement[],\n options?: IEditorOption,\n) {\n const editorOptions = mergeOption(options);\n function buildDom(payload: IElement[]): HTMLDivElement {\n const clipboardDom = document.createElement(\"div\");\n for (let e = 0; e < payload.length; e++) {\n const element = payload[e];\n if (element.type === ElementType.TABLE) {\n const tableDom: HTMLTableElement = document.createElement(\"table\");\n tableDom.setAttribute(\"cellSpacing\", \"0\");\n tableDom.setAttribute(\"cellpadding\", \"0\");\n tableDom.setAttribute(\"border\", \"0\");\n const borderStyle = \"1px solid #000000\";\n if (!element.borderType || element.borderType === TableBorder.ALL) {\n tableDom.style.borderTop = borderStyle;\n tableDom.style.borderLeft = borderStyle;\n } else if (element.borderType === TableBorder.EXTERNAL) {\n tableDom.style.border = borderStyle;\n }\n tableDom.style.width = `${element.width}px`;\n // colgroup\n const colgroupDom = document.createElement(\"colgroup\");\n for (let c = 0; c < element.colgroup!.length; c++) {\n const colgroup = element.colgroup![c];\n const colDom = document.createElement(\"col\");\n colDom.setAttribute(\"width\", `${colgroup.width}`);\n colgroupDom.append(colDom);\n }\n tableDom.append(colgroupDom);\n // tr\n const trList = element.trList!;\n for (let t = 0; t < trList.length; t++) {\n const trDom = document.createElement(\"tr\");\n const tr = trList[t];\n trDom.style.height = `${tr.height}px`;\n for (let d = 0; d < tr.tdList.length; d++) {\n const tdDom = document.createElement(\"td\");\n if (!element.borderType || element.borderType === TableBorder.ALL) {\n tdDom.style.borderBottom = tdDom.style.borderRight = \"1px solid\";\n }\n const td = tr.tdList[d];\n tdDom.colSpan = td.colspan;\n tdDom.rowSpan = td.rowspan;\n tdDom.style.verticalAlign = td.verticalAlign || \"top\";\n if (td.borderTypes?.includes(TdBorder.TOP)) {\n tdDom.style.borderTop = borderStyle;\n }\n if (td.borderTypes?.includes(TdBorder.RIGHT)) {\n tdDom.style.borderRight = borderStyle;\n }\n if (td.borderTypes?.includes(TdBorder.BOTTOM)) {\n tdDom.style.borderBottom = borderStyle;\n }\n if (td.borderTypes?.includes(TdBorder.LEFT)) {\n tdDom.style.borderLeft = borderStyle;\n }\n const childDom = createDomFromElementList(td.value!, options);\n tdDom.innerHTML = childDom.innerHTML;\n if (td.backgroundColor) {\n tdDom.style.backgroundColor = td.backgroundColor;\n }\n trDom.append(tdDom);\n }\n tableDom.append(trDom);\n }\n clipboardDom.append(tableDom);\n } else if (element.type === ElementType.HYPERLINK) {\n const a = document.createElement(\"a\");\n a.innerText = element.valueList!.map((v) => v.value).join(\"\");\n if (element.url) {\n a.href = element.url;\n }\n clipboardDom.append(a);\n } else if (element.type === ElementType.TITLE) {\n const h = document.createElement(\n `h${titleOrderNumberMapping[element.level!]}`,\n );\n const childDom = buildDom(element.valueList!);\n h.innerHTML = childDom.innerHTML;\n clipboardDom.append(h);\n } else if (element.type === ElementType.LIST) {\n const list = document.createElement(\n listTypeElementMapping[element.listType!],\n );\n if (element.listStyle) {\n list.style.listStyleType = listStyleCSSMapping[element.listStyle];\n }\n const zipList = zipElementList(element.valueList!);\n const listElementListMap = splitListElement(zipList);\n listElementListMap.forEach((listElementList) => {\n const li = document.createElement(\"li\");\n const childDom = buildDom(listElementList);\n li.innerHTML = childDom.innerHTML;\n list.append(li);\n });\n clipboardDom.append(list);\n } else if (element.type === ElementType.IMAGE) {\n const img = document.createElement(\"img\");\n if (element.value) {\n img.src = element.value;\n img.width = element.width!;\n img.height = element.height!;\n }\n clipboardDom.append(img);\n } else if (element.type === ElementType.BLOCK) {\n if (element.block?.type === BlockType.VIDEO) {\n const src = element.block.videoBlock?.src;\n if (src) {\n const video = document.createElement(\"video\");\n video.style.display = \"block\";\n video.controls = true;\n video.src = src;\n video.width = element.width! || options?.width || window.innerWidth;\n video.height = element.height!;\n clipboardDom.append(video);\n }\n } else if (element.block?.type === BlockType.IFRAME) {\n const { src, srcdoc, sandbox, allow } =\n element.block.iframeBlock || {};\n if (src || srcdoc) {\n const iframe = document.createElement(\"iframe\");\n iframe.sandbox.add(...(sandbox || IFrameBlock.sandbox));\n iframe.setAttribute(\n \"allow\",\n [allow || IFrameBlock.allow].join(\" \"),\n );\n iframe.style.display = \"block\";\n iframe.style.border = \"none\";\n if (src) {\n iframe.src = src;\n } else if (srcdoc) {\n iframe.srcdoc = srcdoc;\n }\n iframe.width = `${\n element.width || options?.width || window.innerWidth\n }`;\n iframe.height = `${element.height!}`;\n clipboardDom.append(iframe);\n }\n }\n } else if (element.type === ElementType.SEPARATOR) {\n const hr = document.createElement(\"hr\");\n if (element.dashArray?.length) {\n hr.setAttribute(\"data-dash-array\", element.dashArray.join(\",\"));\n }\n clipboardDom.append(hr);\n } else if (element.type === ElementType.CHECKBOX) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n if (element.checkbox?.value) {\n checkbox.setAttribute(\"checked\", \"true\");\n }\n clipboardDom.append(checkbox);\n } else if (element.type === ElementType.RADIO) {\n const radio = document.createElement(\"input\");\n radio.type = \"radio\";\n if (element.radio?.value) {\n radio.setAttribute(\"checked\", \"true\");\n }\n clipboardDom.append(radio);\n } else if (element.type === ElementType.LABEL) {\n const span = document.createElement(\"span\");\n span.setAttribute(\"data-component-badge\", \"\");\n const componentId = element.id || element.labelId;\n if (componentId) {\n span.setAttribute(\"data-component-id\", componentId);\n }\n const ext = element.extension as\n | { source?: string; name?: string }\n | undefined;\n if (ext?.name) {\n span.setAttribute(\"data-component-name\", ext.name);\n }\n if (ext?.source) {\n span.setAttribute(\"data-component-source\", ext.source);\n }\n span.innerText = ext?.name || element.value || \"\";\n clipboardDom.append(span);\n } else if (element.type === ElementType.TAB) {\n const tab = document.createElement(\"span\");\n tab.innerHTML = `${NON_BREAKING_SPACE}${NON_BREAKING_SPACE}`;\n clipboardDom.append(tab);\n } else if (element.type === ElementType.CONTROL) {\n const controlElement = document.createElement(\"span\");\n const childDom = buildDom(element.control?.value || []);\n controlElement.innerHTML = childDom.innerHTML;\n clipboardDom.append(controlElement);\n } else if (element.type === ElementType.PAGE_BREAK) {\n const pageBreakElement = document.createElement(\"div\");\n pageBreakElement.style.breakAfter = \"page\";\n clipboardDom.append(pageBreakElement);\n } else if (\n !element.type ||\n element.type === ElementType.LATEX ||\n TEXTLIKE_ELEMENT_TYPE.includes(element.type)\n ) {\n let text = \"\";\n if (element.type === ElementType.DATE) {\n text = element.valueList?.map((v) => v.value).join(\"\") || \"\";\n } else {\n text = element.value;\n }\n if (!text) continue;\n const dom = convertElementToDom(element, editorOptions);\n if (payload[e - 1]?.type === ElementType.TITLE) {\n text = text.replace(/^\\n/, \"\");\n }\n dom.innerText = text.replace(new RegExp(`${ZERO}`, \"g\"), \"\\n\");\n clipboardDom.append(dom);\n }\n }\n return clipboardDom;\n }\n const clipboardDom = document.createElement(\"div\");\n const groupElementList = groupElementListByRowFlex(elementList);\n for (let g = 0; g < groupElementList.length; g++) {\n const elementGroupRowFlex = groupElementList[g];\n const isDefaultRowFlex =\n !elementGroupRowFlex.rowFlex ||\n elementGroupRowFlex.rowFlex === RowFlex.LEFT;\n const rowFlexDom = document.createElement(\"div\");\n if (!isDefaultRowFlex) {\n const firstElement = elementGroupRowFlex.data[0];\n if (getIsBlockElement(firstElement)) {\n rowFlexDom.style.display = \"flex\";\n rowFlexDom.style.justifyContent = convertRowFlexToJustifyContent(\n firstElement.rowFlex!,\n );\n } else {\n rowFlexDom.style.textAlign = convertRowFlexToTextAlign(\n elementGroupRowFlex.rowFlex!,\n );\n if (elementGroupRowFlex.rowFlex === \"justify\") {\n rowFlexDom.style.textAlignLast = \"justify\";\n }\n }\n }\n rowFlexDom.innerHTML = buildDom(elementGroupRowFlex.data).innerHTML;\n if (!isDefaultRowFlex) {\n clipboardDom.append(rowFlexDom);\n } else {\n rowFlexDom.childNodes.forEach((child) => {\n clipboardDom.append(child.cloneNode(true));\n });\n }\n }\n return clipboardDom;\n}\n\nexport function convertTextNodeToElement(\n textNode: Element | Node,\n): IElement | null {\n if (!textNode || textNode.nodeType !== 3) return null;\n const parentNode = <HTMLElement>textNode.parentNode;\n const anchorNode =\n parentNode.nodeName === \"FONT\"\n ? <HTMLElement>parentNode.parentNode\n : parentNode;\n const rowFlex = convertTextAlignToRowFlex(anchorNode);\n const value = textNode.textContent;\n const style = window.getComputedStyle(anchorNode);\n if (!value || anchorNode.nodeName === \"STYLE\") return null;\n const element: IElement = {\n value,\n color: style.color,\n bold: Number(style.fontWeight) > 500,\n italic: style.fontStyle.includes(\"italic\"),\n size: Math.floor(parseFloat(style.fontSize)),\n };\n if (anchorNode.nodeName === \"SUB\" || style.verticalAlign === \"sub\") {\n element.type = ElementType.SUBSCRIPT;\n } else if (anchorNode.nodeName === \"SUP\" || style.verticalAlign === \"super\") {\n element.type = ElementType.SUPERSCRIPT;\n }\n if (rowFlex !== RowFlex.LEFT) {\n element.rowFlex = rowFlex;\n }\n if (style.backgroundColor !== \"rgba(0, 0, 0, 0)\") {\n element.highlight = style.backgroundColor;\n }\n if (style.textDecorationLine.includes(\"underline\")) {\n element.underline = true;\n }\n if (style.textDecorationLine.includes(\"line-through\")) {\n element.strikeout = true;\n }\n return element;\n}\n\nexport interface IGetElementListByHTMLOption {\n innerWidth: number;\n}\n\nexport function getElementListByHTML(\n htmlText: string,\n options: IGetElementListByHTMLOption,\n): IElement[] {\n const elementList: IElement[] = [];\n function findTextNode(dom: Element | Node) {\n if (dom.nodeType === 3) {\n const element = convertTextNodeToElement(dom);\n if (element) {\n elementList.push(element);\n }\n } else if (dom.nodeType === 1) {\n const childNodes = dom.childNodes;\n for (let n = 0; n < childNodes.length; n++) {\n const node = childNodes[n];\n if (node.nodeName === \"BR\") {\n elementList.push({\n value: \"\\n\",\n });\n } else if (node.nodeName === \"A\") {\n const aElement = node as HTMLLinkElement;\n const value = aElement.innerText;\n if (value) {\n elementList.push({\n type: ElementType.HYPERLINK,\n value: \"\",\n valueList: [\n {\n value,\n },\n ],\n url: aElement.href,\n });\n }\n } else if (/H[1-6]/.test(node.nodeName)) {\n const hElement = node as HTMLTitleElement;\n const valueList = getElementListByHTML(\n replaceHTMLElementTag(hElement, \"div\").outerHTML,\n options,\n );\n elementList.push({\n value: \"\",\n type: ElementType.TITLE,\n level: titleNodeNameMapping[node.nodeName],\n valueList,\n });\n if (\n node.nextSibling &&\n !INLINE_NODE_NAME.includes(node.nextSibling.nodeName)\n ) {\n elementList.push({\n value: \"\\n\",\n });\n }\n } else if (node.nodeName === \"UL\" || node.nodeName === \"OL\") {\n const listNode = node as HTMLOListElement | HTMLUListElement;\n const listElement: IElement = {\n value: \"\",\n type: ElementType.LIST,\n valueList: [],\n };\n if (node.nodeName === \"OL\") {\n listElement.listType = ListType.OL;\n } else {\n listElement.listType = ListType.UL;\n listElement.listStyle = <ListStyle>(\n (<unknown>listNode.style.listStyleType)\n );\n }\n listNode.querySelectorAll(\"li\").forEach((li) => {\n const liValueList = getElementListByHTML(li.innerHTML, options);\n liValueList.forEach((list) => {\n if (list.value === \"\\n\") {\n list.listWrap = true;\n }\n });\n liValueList.unshift({\n value: \"\\n\",\n });\n listElement.valueList!.push(...liValueList);\n });\n elementList.push(listElement);\n } else if (node.nodeName === \"HR\") {\n elementList.push({\n value: \"\\n\",\n type: ElementType.SEPARATOR,\n });\n } else if (node.nodeName === \"IMG\") {\n const { src, width, height } = node as HTMLImageElement;\n if (src && width && height) {\n elementList.push({\n width,\n height,\n value: src,\n type: ElementType.IMAGE,\n });\n }\n } else if (node.nodeName === \"VIDEO\") {\n const { src, width, height } = node as HTMLVideoElement;\n if (src && width && height) {\n elementList.push({\n value: \"\",\n type: ElementType.BLOCK,\n block: {\n type: BlockType.VIDEO,\n videoBlock: {\n src,\n },\n },\n width,\n height,\n });\n }\n } else if (node.nodeName === \"IFRAME\") {\n const { src, srcdoc, width, height } = node as HTMLIFrameElement;\n if ((src || srcdoc) && width && height) {\n elementList.push({\n value: \"\",\n type: ElementType.BLOCK,\n block: {\n type: BlockType.IFRAME,\n iframeBlock: {\n src,\n srcdoc,\n },\n },\n width: parseInt(width),\n height: parseInt(height),\n });\n }\n } else if (node.nodeName === \"TABLE\") {\n const tableElement = node as HTMLTableElement;\n const element: IElement = {\n type: ElementType.TABLE,\n value: \"\\n\",\n colgroup: [],\n trList: [],\n };\n // colgroup\n const colElements = tableElement.querySelectorAll(\"colgroup col\");\n tableElement.querySelectorAll(\"tr\").forEach((trElement) => {\n const trHeightStr = Number(\n window.getComputedStyle(trElement).height.replace(\"px\", \"\"),\n );\n const tr: ITr = {\n height: trHeightStr,\n minHeight: trHeightStr,\n tdList: [],\n };\n trElement.querySelectorAll(\"th,td\").forEach((tdElement) => {\n const tableCell = <HTMLTableCellElement>tdElement;\n const valueList = getElementListByHTML(\n tableCell.innerHTML,\n options,\n );\n const td: ITd = {\n colspan: tableCell.colSpan,\n rowspan: tableCell.rowSpan,\n value: valueList,\n verticalAlign: window.getComputedStyle(tdElement)\n .verticalAlign as VerticalAlign,\n width: parseFloat(window.getComputedStyle(tdElement).width),\n };\n if (tableCell.style.backgroundColor) {\n td.backgroundColor = tableCell.style.backgroundColor;\n }\n tr.tdList.push(td);\n });\n element.trList!.push(tr);\n });\n if (element.trList!.length) {\n const tdCount = element.trList![0].tdList.reduce(\n (pre, cur) => pre + cur.colspan,\n 0,\n );\n const width = Math.ceil(options.innerWidth / tdCount);\n for (let i = 0; i < tdCount; i++) {\n const colElement = colElements[i]?.getAttribute(\"width\");\n element.colgroup!.push({\n width: colElement ? parseFloat(colElement) : width,\n });\n }\n elementList.push(element);\n }\n } else if (\n node.nodeName === \"INPUT\" &&\n (<HTMLInputElement>node).type === ControlComponent.CHECKBOX\n ) {\n elementList.push({\n type: ElementType.CHECKBOX,\n value: \"\",\n checkbox: {\n value: (<HTMLInputElement>node).checked,\n },\n });\n } else if (\n node.nodeName === \"INPUT\" &&\n (<HTMLInputElement>node).type === ControlComponent.RADIO\n ) {\n elementList.push({\n type: ElementType.RADIO,\n value: \"\",\n radio: {\n value: (<HTMLInputElement>node).checked,\n },\n });\n } else if (\n node.nodeName === \"SPAN\" &&\n (node as HTMLElement).hasAttribute(\"data-component-badge\")\n ) {\n const spanEl = node as HTMLElement;\n const componentId = spanEl.getAttribute(\"data-component-id\") || \"\";\n const componentName =\n spanEl.getAttribute(\"data-component-name\") || \"\";\n const componentSource =\n spanEl.getAttribute(\"data-component-source\") || \"\";\n elementList.push({\n type: ElementType.LABEL,\n value: `\\u2297 ${componentName}`,\n id: componentId,\n labelId: componentId,\n label: {\n backgroundColor: \"#E8F5F0\",\n color: \"#2D6B4A\",\n borderColor: \"#B8DCC9\",\n borderRadius: 6,\n padding: [4, 8, 4, 6],\n },\n extension: { source: componentSource, name: componentName },\n } as IElement);\n } else {\n findTextNode(node);\n if (node.nodeType === 1 && n !== childNodes.length - 1) {\n const nodeElement = node as Element;\n const display = window.getComputedStyle(nodeElement).display;\n if (\n display === \"block\" &&\n !/(\\n|\\r\\n)$/.test(nodeElement.textContent!)\n ) {\n const lastPushed = elementList[elementList.length - 1];\n if (!lastPushed || lastPushed.value !== \"\\n\") {\n elementList.push({\n value: \"\\n\",\n });\n }\n }\n }\n }\n }\n }\n }\n const clipboardDom = document.createElement(\"div\");\n clipboardDom.innerHTML = htmlText;\n document.body.appendChild(clipboardDom);\n const deleteNodes: ChildNode[] = [];\n clipboardDom.childNodes.forEach((child) => {\n if (child.nodeType !== 1 && !child.textContent?.trim()) {\n deleteNodes.push(child);\n }\n });\n deleteNodes.forEach((node) => node.remove());\n findTextNode(clipboardDom);\n clipboardDom.remove();\n return elementList;\n}\n\nexport function getTextFromElementList(elementList: IElement[]) {\n function buildText(payload: IElement[]): string {\n let text = \"\";\n for (let e = 0; e < payload.length; e++) {\n const element = payload[e];\n if (element.type === ElementType.TABLE) {\n text += `\\n`;\n const trList = element.trList!;\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t];\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d];\n const tdText = buildText(zipElementList(td.value!));\n const isFirst = d === 0;\n const isLast = tr.tdList.length - 1 === d;\n text += `${!isFirst ? ` ` : ``}${tdText}${isLast ? `\\n` : ``}`;\n }\n }\n } else if (element.type === ElementType.TAB) {\n text += `\\t`;\n } else if (element.type === ElementType.HYPERLINK) {\n text += element.valueList!.map((v) => v.value).join(\"\");\n } else if (element.type === ElementType.TITLE) {\n text += `${buildText(zipElementList(element.valueList!))}`;\n } else if (element.type === ElementType.LIST) {\n const zipList = zipElementList(element.valueList!);\n const listElementListMap = splitListElement(zipList);\n let ulListStyleText = \"\";\n if (element.listType === ListType.UL) {\n ulListStyleText =\n ulStyleMapping[<UlStyle>(<unknown>element.listStyle)];\n }\n listElementListMap.forEach((listElementList, listIndex) => {\n const isLast = listElementListMap.size - 1 === listIndex;\n text += `\\n${ulListStyleText || `${listIndex + 1}.`}${buildText(\n listElementList,\n )}${isLast ? `\\n` : ``}`;\n });\n } else if (element.type === ElementType.CHECKBOX) {\n text += element.checkbox?.value ? `☑` : `□`;\n } else if (element.type === ElementType.RADIO) {\n text += element.radio?.value ? `☉` : `○`;\n } else if (\n !element.type ||\n element.type === ElementType.LATEX ||\n TEXTLIKE_ELEMENT_TYPE.includes(element.type)\n ) {\n let textLike = \"\";\n if (element.type === ElementType.CONTROL) {\n const controlValue = element.control!.value?.[0]?.value || \"\";\n textLike = controlValue\n ? `${element.control?.preText || \"\"}${controlValue}${\n element.control?.postText || \"\"\n }`\n : \"\";\n } else if (element.type === ElementType.DATE) {\n textLike = element.valueList?.map((v) => v.value).join(\"\") || \"\";\n } else {\n textLike = element.value;\n }\n text += textLike.replace(new RegExp(`${ZERO}`, \"g\"), \"\\n\");\n }\n }\n return text;\n }\n return buildText(zipElementList(elementList));\n}\n\nexport function getSlimCloneElementList(elementList: IElement[]) {\n return deepCloneOmitKeys<IElement[], IRowElement>(elementList, [\n \"metrics\",\n \"style\",\n ]);\n}\n\nexport function getIsBlockElement(element?: IElement) {\n return (\n !!element?.type &&\n (BLOCK_ELEMENT_TYPE.includes(element.type) ||\n element.imgDisplay === ImageDisplay.INLINE)\n );\n}\n\nexport function replaceHTMLElementTag(\n oldDom: HTMLElement,\n tagName: keyof HTMLElementTagNameMap,\n): HTMLElement {\n const newDom = document.createElement(tagName);\n for (let i = 0; i < oldDom.attributes.length; i++) {\n const attr = oldDom.attributes[i];\n newDom.setAttribute(attr.name, attr.value);\n }\n newDom.innerHTML = oldDom.innerHTML;\n return newDom;\n}\n\nexport function pickSurroundElementList(elementList: IElement[]) {\n const surroundElementList = [];\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e];\n if (element.imgDisplay === ImageDisplay.SURROUND) {\n surroundElementList.push(element);\n }\n }\n return surroundElementList;\n}\n\nexport function deleteSurroundElementList(\n elementList: IElement[],\n pageNo: number,\n) {\n for (let s = elementList.length - 1; s >= 0; s--) {\n const surroundElement = elementList[s];\n if (surroundElement.imgFloatPosition?.pageNo === pageNo) {\n elementList.splice(s, 1);\n }\n }\n}\n\nexport function getNonHideElementIndex(\n elementList: IElement[],\n index: number,\n position: LocationPosition = LocationPosition.BEFORE,\n) {\n if (\n !elementList[index]?.hide &&\n !elementList[index]?.control?.hide &&\n !elementList[index]?.area?.hide\n ) {\n return index;\n }\n let i = index;\n if (position === LocationPosition.BEFORE) {\n i = index - 1;\n while (i > 0) {\n if (\n !elementList[i]?.hide &&\n !elementList[i]?.control?.hide &&\n !elementList[i]?.area?.hide\n ) {\n return i;\n }\n i--;\n }\n } else {\n i = index + 1;\n while (i < elementList.length) {\n if (\n !elementList[i]?.hide &&\n !elementList[i]?.control?.hide &&\n !elementList[i]?.area?.hide\n ) {\n return i;\n }\n i++;\n }\n }\n return i;\n}\n","import { EDITOR_CLIPBOARD } from '../dataset/constant/Editor'\nimport { DeepRequired } from '../interface/Common'\nimport { IEditorOption } from '../interface/Editor'\nimport { IElement } from '../interface/Element'\nimport { createDomFromElementList, zipElementList } from './element'\n\nexport interface IClipboardData {\n text: string\n elementList: IElement[]\n}\n\nexport function setClipboardData(data: IClipboardData) {\n localStorage.setItem(\n EDITOR_CLIPBOARD,\n JSON.stringify({\n text: data.text,\n elementList: data.elementList\n })\n )\n}\n\nexport function getClipboardData(): IClipboardData | null {\n const clipboardText = localStorage.getItem(EDITOR_CLIPBOARD)\n return clipboardText ? JSON.parse(clipboardText) : null\n}\n\nexport function removeClipboardData() {\n localStorage.removeItem(EDITOR_CLIPBOARD)\n}\n\nexport async function writeClipboardItem(\n text: string,\n html: string,\n elementList: IElement[]\n) {\n if (!text && !html && !elementList.length) return\n const plainText = new Blob([text], { type: 'text/plain' })\n const htmlText = new Blob([html], { type: 'text/html' })\n if (window.ClipboardItem) {\n // @ts-ignore\n const item = new ClipboardItem({\n [plainText.type]: plainText,\n [htmlText.type]: htmlText\n })\n await window.navigator.clipboard.write([item])\n } else {\n const fakeElement = document.createElement('div')\n fakeElement.setAttribute('contenteditable', 'true')\n fakeElement.innerHTML = html\n document.body.append(fakeElement)\n // add new range\n const selection = window.getSelection()\n const range = document.createRange()\n const br = document.createElement('span')\n br.innerText = '\\n'\n fakeElement.append(br)\n range.selectNodeContents(fakeElement)\n selection?.removeAllRanges()\n selection?.addRange(range)\n document.execCommand('copy')\n fakeElement.remove()\n }\n setClipboardData({ text, elementList })\n}\n\nexport async function writeElementList(\n elementList: IElement[],\n options: DeepRequired<IEditorOption>\n) {\n const clipboardDom = createDomFromElementList(elementList, options)\n document.body.append(clipboardDom)\n const text = clipboardDom.innerText\n clipboardDom.remove()\n const html = clipboardDom.innerHTML\n if (!text && !html && !elementList.length) return\n await writeClipboardItem(text, html, zipElementList(elementList))\n}\n\nexport function getIsClipboardContainFile(clipboardData: DataTransfer) {\n let isFile = false\n for (let i = 0; i < clipboardData.items.length; i++) {\n const item = clipboardData.items[i]\n if (item.kind === 'file') {\n isFile = true\n break\n }\n }\n return isFile\n}\n","import { ZERO } from '../../../dataset/constant/Common'\nimport { VIRTUAL_ELEMENT_TYPE } from '../../../dataset/constant/Element'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IElement } from '../../../interface/Element'\nimport { IPasteOption } from '../../../interface/Event'\nimport {\n getClipboardData,\n getIsClipboardContainFile,\n removeClipboardData\n} from '../../../utils/clipboard'\nimport {\n formatElementContext,\n getElementListByHTML\n} from '../../../utils/element'\nimport { CanvasEvent } from '../CanvasEvent'\nimport { IOverrideResult } from '../../override/Override'\nimport { normalizeLineBreak } from '../../../utils'\n\nexport function pasteElement(host: CanvasEvent, elementList: IElement[]) {\n const draw = host.getDraw()\n if (\n draw.isReadonly() ||\n draw.isDisabled() ||\n draw.getControl().getIsDisabledPasteControl()\n ) {\n return\n }\n const rangeManager = draw.getRange()\n const { startIndex } = rangeManager.getRange()\n const originalElementList = draw.getElementList()\n if (~startIndex && !rangeManager.getIsSelectAll()) {\n const anchorElement = originalElementList[startIndex]\n if (anchorElement?.titleId || anchorElement?.listId) {\n let start = 0\n while (start < elementList.length) {\n const pasteElement = elementList[start]\n if (anchorElement.titleId && /^\\n/.test(pasteElement.value)) {\n break\n }\n if (VIRTUAL_ELEMENT_TYPE.includes(pasteElement.type!)) {\n elementList.splice(start, 1)\n if (pasteElement.valueList) {\n for (let v = 0; v < pasteElement.valueList.length; v++) {\n const element = pasteElement.valueList[v]\n if (element.value === ZERO || element.value === '\\n') {\n continue\n }\n elementList.splice(start, 0, element)\n start++\n }\n }\n start--\n }\n start++\n }\n }\n formatElementContext(originalElementList, elementList, startIndex, {\n isBreakWhenWrap: true,\n editorOptions: draw.getOptions()\n })\n }\n draw.insertElementList(elementList)\n}\n\nexport function pasteHTML(host: CanvasEvent, htmlText: string) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) return\n const elementList = getElementListByHTML(htmlText, {\n innerWidth: draw.getOriginalInnerWidth()\n })\n pasteElement(host, elementList)\n}\n\nexport function pasteImage(host: CanvasEvent, file: File | Blob) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) return\n const rangeManager = draw.getRange()\n const { startIndex } = rangeManager.getRange()\n const elementList = draw.getElementList()\n const fileReader = new FileReader()\n fileReader.readAsDataURL(file)\n fileReader.onload = () => {\n const image = new Image()\n const value = fileReader.result as string\n image.src = value\n image.onload = () => {\n const imageElement: IElement = {\n value,\n type: ElementType.IMAGE,\n width: image.width,\n height: image.height\n }\n if (~startIndex) {\n formatElementContext(elementList, [imageElement], startIndex, {\n editorOptions: draw.getOptions()\n })\n }\n draw.insertElementList([imageElement])\n }\n }\n}\n\nexport function pasteByEvent(host: CanvasEvent, evt: ClipboardEvent) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) return\n const clipboardData = evt.clipboardData\n if (!clipboardData) return\n const { paste } = draw.getOverride()\n if (paste) {\n const overrideResult = paste(evt)\n if ((<IOverrideResult>overrideResult)?.preventDefault !== false) return\n }\n if (!getIsClipboardContainFile(clipboardData)) {\n const clipboardText = clipboardData.getData('text')\n const editorClipboardData = getClipboardData()\n if (\n editorClipboardData &&\n normalizeLineBreak(clipboardText) ===\n normalizeLineBreak(editorClipboardData.text)\n ) {\n pasteElement(host, editorClipboardData.elementList)\n return\n }\n }\n removeClipboardData()\n let isHTML = false\n for (let i = 0; i < clipboardData.items.length; i++) {\n const item = clipboardData.items[i]\n if (item.type === 'text/html') {\n isHTML = true\n break\n }\n }\n for (let i = 0; i < clipboardData.items.length; i++) {\n const item = clipboardData.items[i]\n if (item.kind === 'string') {\n if (item.type === 'text/plain' && !isHTML) {\n item.getAsString(plainText => {\n host.input(plainText)\n })\n break\n }\n if (item.type === 'text/html' && isHTML) {\n item.getAsString(htmlText => {\n pasteHTML(host, htmlText)\n })\n break\n }\n } else if (item.kind === 'file') {\n if (item.type.includes('image')) {\n const file = item.getAsFile()\n if (file) {\n pasteImage(host, file)\n }\n }\n }\n }\n}\n\nexport async function pasteByApi(host: CanvasEvent, options?: IPasteOption) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) return\n const { paste } = draw.getOverride()\n if (paste) {\n const overrideResult = paste()\n if ((<IOverrideResult>overrideResult)?.preventDefault !== false) return\n }\n const clipboardText = await navigator.clipboard.readText()\n const editorClipboardData = getClipboardData()\n if (\n editorClipboardData &&\n normalizeLineBreak(clipboardText) ===\n normalizeLineBreak(editorClipboardData.text)\n ) {\n pasteElement(host, editorClipboardData.elementList)\n return\n }\n removeClipboardData()\n if (options?.isPlainText) {\n if (clipboardText) {\n host.input(clipboardText)\n }\n } else {\n const clipboardData = await navigator.clipboard.read()\n let isHTML = false\n for (const item of clipboardData) {\n if (item.types.includes('text/html')) {\n isHTML = true\n break\n }\n }\n for (const item of clipboardData) {\n if (item.types.includes('text/plain') && !isHTML) {\n const textBlob = await item.getType('text/plain')\n const text = await textBlob.text()\n if (text) {\n host.input(text)\n }\n } else if (item.types.includes('text/html') && isHTML) {\n const htmlTextBlob = await item.getType('text/html')\n const htmlText = await htmlTextBlob.text()\n if (htmlText) {\n pasteHTML(host, htmlText)\n }\n } else if (item.types.some(type => type.startsWith('image/'))) {\n const type = item.types.find(type => type.startsWith('image/'))!\n const imageBlob = await item.getType(type)\n pasteImage(host, imageBlob)\n }\n }\n }\n}\n","import { EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { EventBusMap } from '../../interface/EventBus'\nimport { Draw } from '../draw/Draw'\nimport { CanvasEvent } from '../event/CanvasEvent'\nimport { EventBus } from '../event/eventbus/EventBus'\nimport { pasteByEvent } from '../event/handlers/paste'\n\nexport class CursorAgent {\n private draw: Draw\n private container: HTMLDivElement\n private agentCursorDom: HTMLTextAreaElement\n private canvasEvent: CanvasEvent\n private eventBus: EventBus<EventBusMap>\n\n constructor(draw: Draw, canvasEvent: CanvasEvent) {\n this.draw = draw\n this.container = draw.getContainer()\n this.canvasEvent = canvasEvent\n this.eventBus = draw.getEventBus()\n const agentCursorDom = document.createElement('textarea')\n agentCursorDom.autocomplete = 'off'\n agentCursorDom.classList.add(`${EDITOR_PREFIX}-inputarea`)\n agentCursorDom.innerText = ''\n this.container.append(agentCursorDom)\n this.agentCursorDom = agentCursorDom\n agentCursorDom.onkeydown = (evt: KeyboardEvent) => this._keyDown(evt)\n agentCursorDom.oninput = this._input.bind(this)\n agentCursorDom.onpaste = (evt: ClipboardEvent) => this._paste(evt)\n agentCursorDom.addEventListener(\n 'compositionstart',\n this._compositionstart.bind(this)\n )\n agentCursorDom.addEventListener(\n 'compositionend',\n this._compositionend.bind(this)\n )\n }\n\n public getAgentCursorDom(): HTMLTextAreaElement {\n return this.agentCursorDom\n }\n\n private _keyDown(evt: KeyboardEvent) {\n this.canvasEvent.keydown(evt)\n }\n\n private _input(evt: Event) {\n const data = (<InputEvent>evt).data\n if (data) {\n this.canvasEvent.input(data)\n }\n if (this.eventBus.isSubscribe('input')) {\n this.eventBus.emit('input', evt)\n }\n }\n\n private _paste(evt: ClipboardEvent) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const clipboardData = evt.clipboardData\n if (!clipboardData) return\n pasteByEvent(this.canvasEvent, evt)\n evt.preventDefault()\n }\n\n private _compositionstart() {\n this.canvasEvent.compositionstart()\n }\n\n private _compositionend(evt: CompositionEvent) {\n this.canvasEvent.compositionend(evt)\n }\n}\n","import { isApple } from './ua'\n\nexport function isMod(evt: KeyboardEvent | MouseEvent) {\n return isApple ? evt.metaKey : evt.ctrlKey\n}\n","export enum KeyMap {\n Delete = 'Delete',\n Backspace = 'Backspace',\n Enter = 'Enter',\n Left = 'ArrowLeft',\n Right = 'ArrowRight',\n Up = 'ArrowUp',\n Down = 'ArrowDown',\n ESC = 'Escape',\n TAB = 'Tab',\n META = 'Meta',\n LEFT_BRACKET = '[',\n RIGHT_BRACKET = ']',\n COMMA = ',',\n PERIOD = '.',\n LEFT_ANGLE_BRACKET = '<',\n RIGHT_ANGLE_BRACKET = '>',\n EQUAL = '=',\n MINUS = '-',\n PLUS = '+',\n A = 'a',\n B = 'b',\n C = 'c',\n D = 'd',\n E = 'e',\n F = 'f',\n G = 'g',\n H = 'h',\n I = 'i',\n J = 'j',\n K = 'k',\n L = 'l',\n M = 'm',\n N = 'n',\n O = 'o',\n P = 'p',\n Q = 'q',\n R = 'r',\n S = 's',\n T = 't',\n U = 'u',\n V = 'v',\n W = 'w',\n X = 'x',\n Y = 'y',\n Z = 'z',\n A_UPPERCASE = 'A',\n B_UPPERCASE = 'B',\n C_UPPERCASE = 'C',\n D_UPPERCASE = 'D',\n E_UPPERCASE = 'E',\n F_UPPERCASE = 'F',\n G_UPPERCASE = 'G',\n H_UPPERCASE = 'H',\n I_UPPERCASE = 'I',\n J_UPPERCASE = 'J',\n K_UPPERCASE = 'K',\n L_UPPERCASE = 'L',\n M_UPPERCASE = 'M',\n N_UPPERCASE = 'N',\n O_UPPERCASE = 'O',\n P_UPPERCASE = 'P',\n Q_UPPERCASE = 'Q',\n R_UPPERCASE = 'R',\n S_UPPERCASE = 'S',\n T_UPPERCASE = 'T',\n U_UPPERCASE = 'U',\n V_UPPERCASE = 'V',\n W_UPPERCASE = 'W',\n X_UPPERCASE = 'X',\n Y_UPPERCASE = 'Y',\n Z_UPPERCASE = 'Z',\n ZERO = '0',\n ONE = '1',\n TWO = '2',\n THREE = '3',\n FOUR = '4',\n FIVE = '5',\n SIX = '6',\n SEVEN = '7',\n EIGHT = '8',\n NINE = '9'\n}\n","import { ControlComponent } from '../../../../dataset/enum/Control'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport {\n IControlContext,\n IControlInstance,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { IElement } from '../../../../interface/Element'\nimport { Control } from '../Control'\n\nexport class CheckboxControl implements IControlInstance {\n protected element: IElement\n protected control: Control\n\n constructor(element: IElement, control: Control) {\n this.element = element\n this.control = control\n }\n\n public setElement(element: IElement) {\n this.element = element\n }\n\n public getElement(): IElement {\n return this.element\n }\n\n public getCode(): string | null {\n return this.element.control?.code || null\n }\n\n public getValue(): IElement[] {\n const elementList = this.control.getElementList()\n const { startIndex } = this.control.getRange()\n const startElement = elementList[startIndex]\n const data: IElement[] = []\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n if (preElement.controlComponent === ControlComponent.VALUE) {\n data.unshift(preElement)\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n if (nextElement.controlComponent === ControlComponent.VALUE) {\n data.push(nextElement)\n }\n nextIndex++\n }\n return data\n }\n\n public setValue(): number {\n return -1\n }\n\n public setSelect(\n codes: string[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ) {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return\n }\n const { control } = this.element\n const elementList = context.elementList || this.control.getElementList()\n const { startIndex } = context.range || this.control.getRange()\n const startElement = elementList[startIndex]\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n if (preElement.controlComponent === ControlComponent.CHECKBOX) {\n const checkbox = preElement.checkbox!\n checkbox.value = codes.includes(checkbox.code!)\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n if (nextElement.controlComponent === ControlComponent.CHECKBOX) {\n const checkbox = nextElement.checkbox!\n checkbox.value = codes.includes(checkbox.code!)\n }\n nextIndex++\n }\n control!.code = codes.join(',')\n this.control.repaintControl({\n curIndex: startIndex,\n isSetCursor: false\n })\n this.control.emitControlContentChange({\n context\n })\n }\n\n public keydown(evt: KeyboardEvent): number | null {\n if (this.control.getIsDisabledControl()) {\n return null\n }\n const range = this.control.getRange()\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = range\n if (evt.key === KeyMap.Backspace || evt.key === KeyMap.Delete) {\n return this.control.removeControl(startIndex)\n }\n return endIndex\n }\n\n public cut(): number {\n return -1\n }\n}\n","import { ControlComponent } from '../../../../dataset/enum/Control'\nimport {\n IControlContext,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { CheckboxControl } from '../checkbox/CheckboxControl'\n\nexport class RadioControl extends CheckboxControl {\n public setSelect(\n codes: string[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ) {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return\n }\n const { control } = this.element\n const elementList = context.elementList || this.control.getElementList()\n const { startIndex } = context.range || this.control.getRange()\n const startElement = elementList[startIndex]\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n if (preElement.controlComponent === ControlComponent.RADIO) {\n const radio = preElement.radio!\n radio.value = codes.includes(radio.code!)\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n if (nextElement.controlComponent === ControlComponent.RADIO) {\n const radio = nextElement.radio!\n radio.value = codes.includes(radio.code!)\n }\n nextIndex++\n }\n control!.code = codes.join(',')\n this.control.repaintControl({\n curIndex: startIndex,\n isSetCursor: false\n })\n this.control.emitControlContentChange({\n context\n })\n }\n}\n","import { ImageDisplay } from '../../../dataset/enum/Common'\nimport { EditorMode } from '../../../dataset/enum/Editor'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { MouseEventButton } from '../../../dataset/enum/Event'\nimport { ControlComponent } from '../../../dataset/enum/Control'\nimport { ControlType } from '../../../dataset/enum/Control'\nimport { IPreviewerDrawOption } from '../../../interface/Previewer'\nimport { deepClone } from '../../../utils'\nimport { isMod } from '../../../utils/hotkey'\nimport { CheckboxControl } from '../../draw/control/checkbox/CheckboxControl'\nimport { RadioControl } from '../../draw/control/radio/RadioControl'\nimport { CanvasEvent } from '../CanvasEvent'\nimport { IElement } from '../../../interface/Element'\nimport { Draw } from '../../draw/Draw'\n\nexport function setRangeCache(host: CanvasEvent) {\n const draw = host.getDraw()\n const position = draw.getPosition()\n const rangeManager = draw.getRange()\n host.isAllowDrag = true\n host.cacheRange = deepClone(rangeManager.getRange())\n host.cacheElementList = draw.getElementList()\n host.cachePositionList = position.getPositionList()\n host.cachePositionContext = position.getPositionContext()\n}\n\nexport function hitCheckbox(element: IElement, draw: Draw) {\n const { checkbox, control } = element\n if (!control) {\n draw.getCheckboxParticle().setSelect(element)\n } else {\n const codes = control?.code ? control.code.split(',') : []\n if (checkbox?.value) {\n const codeIndex = codes.findIndex(c => c === checkbox.code)\n codes.splice(codeIndex, 1)\n } else {\n if (checkbox?.code) {\n codes.push(checkbox.code)\n }\n }\n const activeControl = draw.getControl().getActiveControl()\n if (activeControl instanceof CheckboxControl) {\n activeControl.setSelect(codes)\n }\n }\n}\n\nexport function hitRadio(element: IElement, draw: Draw) {\n const { radio, control } = element\n if (!control) {\n draw.getRadioParticle().setSelect(element)\n } else {\n const codes = radio?.code ? [radio.code] : []\n const activeControl = draw.getControl().getActiveControl()\n if (activeControl instanceof RadioControl) {\n activeControl.setSelect(codes)\n }\n }\n}\n\nexport function mousedown(evt: MouseEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n let isReadonly = draw.isReadonly()\n const rangeManager = draw.getRange()\n const position = draw.getPosition()\n const range = rangeManager.getRange()\n if (\n evt.button === MouseEventButton.RIGHT &&\n (range.isCrossRowCol || !rangeManager.getIsCollapsed())\n ) {\n return\n }\n if (!host.isAllowDrag) {\n if (!isReadonly && range.startIndex !== range.endIndex) {\n const isPointInRange = rangeManager.getIsPointInRange(\n evt.offsetX,\n evt.offsetY\n )\n if (isPointInRange) {\n setRangeCache(host)\n return\n }\n }\n }\n const target = evt.target as HTMLDivElement\n const pageIndex = target.dataset.index\n if (pageIndex) {\n draw.setPageNo(Number(pageIndex))\n }\n host.isAllowSelection = true\n const oldPositionContext = deepClone(position.getPositionContext())\n const positionResult = position.adjustPositionContext({\n x: evt.offsetX,\n y: evt.offsetY\n })\n if (!positionResult) return\n const {\n index,\n isDirectHit,\n isCheckbox,\n isRadio,\n isImage,\n isLabel,\n isTable,\n tdValueIndex,\n hitLineStartIndex\n } = positionResult\n host.mouseDownStartPosition = {\n ...positionResult,\n index: isTable ? tdValueIndex! : index,\n x: evt.offsetX,\n y: evt.offsetY\n }\n const elementList = draw.getElementList()\n const positionList = position.getPositionList()\n const curIndex = isTable ? tdValueIndex! : index\n const curElement = elementList[curIndex]\n const isDirectHitImage = !!(isDirectHit && isImage)\n const isDirectHitCheckbox = !!(isDirectHit && isCheckbox)\n const isDirectHitRadio = !!(isDirectHit && isRadio)\n const isDirectHitLabel = !!(isDirectHit && isLabel)\n if (~index) {\n let startIndex = curIndex\n let endIndex = curIndex\n if (evt.shiftKey) {\n const { startIndex: oldStartIndex } = rangeManager.getRange()\n if (~oldStartIndex) {\n const newPositionContext = position.getPositionContext()\n if (newPositionContext.tdId === oldPositionContext.tdId) {\n if (curIndex > oldStartIndex) {\n startIndex = oldStartIndex\n } else {\n endIndex = oldStartIndex\n }\n }\n }\n }\n rangeManager.setRange(startIndex, endIndex)\n position.setCursorPosition(positionList[curIndex])\n isReadonly = draw.isReadonly()\n if (isDirectHitCheckbox && !isReadonly) {\n hitCheckbox(curElement, draw)\n } else if (isDirectHitRadio && !isReadonly) {\n hitRadio(curElement, draw)\n } else if (\n curElement.controlComponent === ControlComponent.VALUE &&\n (curElement.control?.type === ControlType.CHECKBOX ||\n curElement.control?.type === ControlType.RADIO)\n ) {\n let preIndex = curIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.controlComponent === ControlComponent.CHECKBOX) {\n hitCheckbox(preElement, draw)\n break\n } else if (preElement.controlComponent === ControlComponent.RADIO) {\n hitRadio(preElement, draw)\n break\n }\n preIndex--\n }\n } else {\n draw.render({\n curIndex,\n isCompute: false,\n isSubmitHistory: false,\n isSetCursor:\n !isDirectHitImage && !isDirectHitCheckbox && !isDirectHitRadio\n })\n }\n if (hitLineStartIndex) {\n host.getDraw().getCursor().drawCursor({\n hitLineStartIndex\n })\n }\n }\n const eventBus = draw.getEventBus()\n if (isDirectHitLabel && eventBus.isSubscribe('labelMousedown')) {\n eventBus.emit('labelMousedown', {\n evt,\n element: curElement,\n position: positionList[curIndex],\n scale: draw.getOptions().scale\n })\n }\n const previewer = draw.getPreviewer()\n previewer.clearResizer()\n if (isDirectHitImage) {\n const previewerDrawOption: IPreviewerDrawOption = {\n dragDisable:\n isReadonly ||\n (!curElement.controlId && draw.getMode() === EditorMode.FORM)\n }\n if (curElement.type === ElementType.LATEX) {\n previewerDrawOption.mime = 'svg'\n previewerDrawOption.srcKey = 'laTexSVG'\n }\n previewer.drawResizer(\n curElement,\n positionList[curIndex],\n previewerDrawOption\n )\n draw.getCursor().drawCursor({\n isShow: false\n })\n setRangeCache(host)\n if (\n curElement.imgDisplay === ImageDisplay.SURROUND ||\n curElement.imgDisplay === ImageDisplay.FLOAT_TOP ||\n curElement.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n draw.getImageParticle().createFloatImage(curElement)\n }\n if (eventBus.isSubscribe('imageMousedown')) {\n eventBus.emit('imageMousedown', {\n evt,\n element: curElement\n })\n }\n }\n const tableTool = draw.getTableTool()\n tableTool.dispose()\n if (isTable && !isReadonly && draw.getMode() !== EditorMode.FORM) {\n tableTool.render()\n }\n const hyperlinkParticle = draw.getHyperlinkParticle()\n hyperlinkParticle.clearHyperlinkPopup()\n if (curElement.type === ElementType.HYPERLINK) {\n if (isMod(evt)) {\n hyperlinkParticle.openHyperlink(curElement)\n } else {\n hyperlinkParticle.drawHyperlinkPopup(curElement, positionList[curIndex])\n }\n }\n const dateParticle = draw.getDateParticle()\n dateParticle.clearDatePicker()\n if (curElement.type === ElementType.DATE && !isReadonly) {\n dateParticle.renderDatePicker(curElement, positionList[curIndex])\n }\n}\n","import {\n CONTROL_CONTEXT_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR\n} from '../../../dataset/constant/Element'\nimport { ImageDisplay } from '../../../dataset/enum/Common'\nimport { ControlComponent, ControlType } from '../../../dataset/enum/Control'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IElement } from '../../../interface/Element'\nimport { deepClone, getUUID, omitObject } from '../../../utils'\nimport { formatElementContext, formatElementList } from '../../../utils/element'\nimport { CanvasEvent } from '../CanvasEvent'\n\ntype IDragElement = IElement & { dragId: string }\n\nfunction createDragId(element: IElement): string {\n const dragId = getUUID()\n Reflect.set(element, 'dragId', dragId)\n return dragId\n}\n\nfunction getElementIndexByDragId(dragId: string, elementList: IElement[]) {\n return (<IDragElement[]>elementList).findIndex(el => el.dragId === dragId)\n}\n\nfunction moveImgPosition(\n element: IElement,\n evt: MouseEvent,\n host: CanvasEvent\n) {\n const draw = host.getDraw()\n if (\n element.imgDisplay === ImageDisplay.SURROUND ||\n element.imgDisplay === ImageDisplay.FLOAT_TOP ||\n element.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n const moveX = evt.offsetX - host.mouseDownStartPosition!.x!\n const moveY = evt.offsetY - host.mouseDownStartPosition!.y!\n const imgFloatPosition = element.imgFloatPosition!\n element.imgFloatPosition = {\n x: imgFloatPosition.x + moveX,\n y: imgFloatPosition.y + moveY,\n pageNo: draw.getPageNo()\n }\n }\n draw.getImageParticle().destroyFloatImage()\n}\n\nexport function mouseup(evt: MouseEvent, host: CanvasEvent) {\n if (host.isAllowDrop) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) {\n host.mousedown(evt)\n return\n }\n const position = draw.getPosition()\n const positionList = position.getPositionList()\n const positionContext = position.getPositionContext()\n const rangeManager = draw.getRange()\n const cacheRange = host.cacheRange!\n const cacheElementList = host.cacheElementList!\n const cachePositionList = host.cachePositionList!\n const cachePositionContext = host.cachePositionContext\n const range = rangeManager.getRange()\n const isCacheRangeCollapsed = cacheRange.startIndex === cacheRange.endIndex\n const cacheStartIndex = isCacheRangeCollapsed\n ? cacheRange.startIndex - 1\n : cacheRange.startIndex\n const cacheEndIndex = cacheRange.endIndex\n if (\n range.startIndex >= cacheStartIndex &&\n range.endIndex <= cacheEndIndex &&\n host.cachePositionContext?.tdId === positionContext.tdId\n ) {\n draw.clearSideEffect()\n let isSubmitHistory = false\n let isCompute = false\n if (isCacheRangeCollapsed) {\n const dragElement = cacheElementList[cacheEndIndex]\n if (\n dragElement.type === ElementType.IMAGE ||\n dragElement.type === ElementType.LATEX\n ) {\n moveImgPosition(dragElement, evt, host)\n if (\n dragElement.imgDisplay === ImageDisplay.SURROUND ||\n dragElement.imgDisplay === ImageDisplay.FLOAT_TOP ||\n dragElement.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n draw.getPreviewer().drawResizer(dragElement)\n isSubmitHistory = true\n } else {\n const cachePosition = cachePositionList[cacheEndIndex]\n draw.getPreviewer().drawResizer(dragElement, cachePosition)\n }\n isCompute = dragElement.imgDisplay === ImageDisplay.SURROUND\n }\n }\n rangeManager.replaceRange({\n ...cacheRange\n })\n draw.render({\n isCompute,\n isSubmitHistory,\n isSetCursor: false\n })\n return\n }\n const dragElementList = cacheElementList.slice(\n cacheStartIndex + 1,\n cacheEndIndex + 1\n )\n const isContainControl = dragElementList.find(element => element.controlId)\n if (isContainControl) {\n const cacheStartElement = cacheElementList[cacheStartIndex + 1]\n const cacheEndElement = cacheElementList[cacheEndIndex]\n const isAllowDragControl =\n ((!cacheStartElement.controlId ||\n cacheStartElement.controlComponent === ControlComponent.PREFIX) &&\n (!cacheEndElement.controlId ||\n cacheEndElement.controlComponent === ControlComponent.POSTFIX)) ||\n (cacheStartElement.controlId === cacheEndElement.controlId &&\n cacheStartElement.controlComponent === ControlComponent.PREFIX &&\n cacheEndElement.controlComponent === ControlComponent.POSTFIX) ||\n (cacheStartElement.control?.type === ControlType.TEXT &&\n cacheStartElement.controlComponent === ControlComponent.VALUE &&\n cacheEndElement.control?.type === ControlType.TEXT &&\n cacheEndElement.controlComponent === ControlComponent.VALUE)\n if (!isAllowDragControl) {\n draw.render({\n curIndex: range.startIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n return\n }\n }\n const control = draw.getControl()\n const elementList = draw.getElementList()\n const isOmitControlAttr =\n !isContainControl ||\n !!elementList[range.startIndex].controlId ||\n !control.getIsElementListContainFullControl(dragElementList)\n const editorOptions = draw.getOptions()\n const replaceElementList = dragElementList.map(el => {\n if (!el.type || el.type === ElementType.TEXT) {\n const newElement: IElement = {\n value: el.value\n }\n const copyAttr = EDITOR_ELEMENT_STYLE_ATTR\n if (!isOmitControlAttr) {\n copyAttr.push(...CONTROL_CONTEXT_ATTR)\n }\n copyAttr.forEach(attr => {\n const value = el[attr] as never\n if (value !== undefined) {\n newElement[attr] = value\n }\n })\n return newElement\n } else {\n let newElement = deepClone(el)\n if (isOmitControlAttr) {\n newElement = omitObject(newElement, CONTROL_CONTEXT_ATTR)\n }\n formatElementList([newElement], {\n isHandleFirstElement: false,\n editorOptions\n })\n return newElement\n }\n })\n formatElementContext(elementList, replaceElementList, range.startIndex, {\n editorOptions: draw.getOptions()\n })\n const cacheStartElement = cacheElementList[cacheStartIndex]\n const cacheStartPosition = cachePositionList[cacheStartIndex]\n const cacheRangeStartId = createDragId(cacheElementList[cacheStartIndex])\n const cacheRangeEndId = createDragId(cacheElementList[cacheEndIndex])\n const replaceLength = replaceElementList.length\n let rangeStart = range.startIndex\n let rangeEnd = rangeStart + replaceLength\n const activeControl = control.getActiveControl()\n if (\n activeControl &&\n cacheElementList[rangeStart].controlComponent !== ControlComponent.POSTFIX\n ) {\n rangeEnd = activeControl.setValue(replaceElementList)\n rangeStart = rangeEnd - replaceLength\n } else {\n draw.spliceElementList(elementList, rangeStart + 1, 0, replaceElementList)\n }\n if (!~rangeEnd) {\n draw.render({\n isSetCursor: false\n })\n return\n }\n const rangeStartId = createDragId(elementList[rangeStart])\n const rangeEndId = createDragId(elementList[rangeEnd])\n const cacheRangeStartIndex = getElementIndexByDragId(\n cacheRangeStartId,\n cacheElementList\n )\n const cacheRangeEndIndex = getElementIndexByDragId(\n cacheRangeEndId,\n cacheElementList\n )\n const cacheEndElement = cacheElementList[cacheRangeEndIndex]\n if (\n cacheEndElement.controlId &&\n cacheEndElement.controlComponent !== ControlComponent.POSTFIX\n ) {\n rangeManager.replaceRange({\n ...cacheRange,\n startIndex: cacheRangeStartIndex,\n endIndex: cacheRangeEndIndex\n })\n control.getActiveControl()?.cut()\n } else {\n let isTdElementDeletable = true\n if (cachePositionContext?.isTable) {\n const { tableId, trIndex, tdIndex } = cachePositionContext\n const originElementList = draw.getOriginalElementList()\n isTdElementDeletable = !originElementList.some(\n el =>\n el.id === tableId &&\n el?.trList?.[trIndex!]?.tdList?.[tdIndex!]?.deletable === false\n )\n }\n if (isTdElementDeletable) {\n draw.spliceElementList(\n cacheElementList,\n cacheRangeStartIndex + 1,\n cacheRangeEndIndex - cacheRangeStartIndex\n )\n }\n }\n const startElement = elementList[range.startIndex]\n const startPosition = positionList[range.startIndex]\n let positionContextIndex = positionContext.index\n if (positionContextIndex) {\n if (startElement.tableId && !cacheStartElement.tableId) {\n if (cacheStartPosition.index < positionContextIndex) {\n positionContextIndex -= replaceLength\n }\n } else if (!startElement.tableId && cacheStartElement.tableId) {\n if (startPosition.index < positionContextIndex) {\n positionContextIndex += replaceLength\n }\n }\n position.setPositionContext({\n ...positionContext,\n index: positionContextIndex\n })\n }\n const rangeStartIndex = getElementIndexByDragId(rangeStartId, elementList)\n const rangeEndIndex = getElementIndexByDragId(rangeEndId, elementList)\n rangeManager.setRange(\n isCacheRangeCollapsed ? rangeEndIndex : rangeStartIndex,\n rangeEndIndex,\n range.tableId,\n range.startTdIndex,\n range.endTdIndex,\n range.startTrIndex,\n range.endTrIndex\n )\n draw.clearSideEffect()\n let imgElement: IElement | null = null\n if (isCacheRangeCollapsed) {\n const elementList = draw.getElementList()\n const dragElement = elementList[rangeEndIndex]\n if (\n dragElement.type === ElementType.IMAGE ||\n dragElement.type === ElementType.LATEX\n ) {\n moveImgPosition(dragElement, evt, host)\n imgElement = dragElement\n }\n }\n draw.render({\n isSetCursor: false\n })\n if (activeControl) {\n control.emitControlContentChange()\n } else if (cacheStartElement.controlId) {\n control.emitControlContentChange({\n context: {\n range: cacheRange,\n elementList: cacheElementList\n },\n controlElement: cacheStartElement\n })\n }\n if (imgElement) {\n if (\n imgElement.imgDisplay === ImageDisplay.SURROUND ||\n imgElement.imgDisplay === ImageDisplay.FLOAT_TOP ||\n imgElement.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n draw.getPreviewer().drawResizer(imgElement)\n } else {\n const dragPositionList = position.getPositionList()\n const dragPosition = dragPositionList[rangeEndIndex]\n draw.getPreviewer().drawResizer(imgElement, dragPosition)\n }\n }\n } else if (host.isAllowDrag) {\n if (host.cacheRange?.startIndex !== host.cacheRange?.endIndex) {\n host.mousedown(evt)\n }\n }\n}\n","import { CanvasEvent } from '../CanvasEvent'\n\nexport function mouseleave(evt: MouseEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n if (!draw.getOptions().pageOuterSelectionDisable) return\n const pageContainer = draw.getPageContainer()\n const { x, y, width, height } = pageContainer.getBoundingClientRect()\n if (evt.x >= x && evt.x <= x + width && evt.y >= y && evt.y <= y + height) {\n return\n }\n host.setIsAllowSelection(false)\n}\n","import { ImageDisplay } from '../../../dataset/enum/Common'\nimport { ControlComponent } from '../../../dataset/enum/Control'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { CanvasEvent } from '../CanvasEvent'\n\nexport function mousemove(evt: MouseEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n if (host.isAllowDrag) {\n const x = evt.offsetX\n const y = evt.offsetY\n const { startIndex, endIndex } = host.cacheRange!\n const positionList = host.cachePositionList!\n for (let p = startIndex + 1; p <= endIndex; p++) {\n const {\n coordinate: { leftTop, rightBottom }\n } = positionList[p]\n if (\n x >= leftTop[0] &&\n x <= rightBottom[0] &&\n y >= leftTop[1] &&\n y <= rightBottom[1]\n ) {\n return\n }\n }\n const cacheStartIndex = host.cacheRange?.startIndex\n if (cacheStartIndex) {\n const dragElement = host.cacheElementList![cacheStartIndex]\n if (\n dragElement?.type === ElementType.IMAGE &&\n (dragElement.imgDisplay === ImageDisplay.SURROUND ||\n dragElement.imgDisplay === ImageDisplay.FLOAT_TOP ||\n dragElement.imgDisplay === ImageDisplay.FLOAT_BOTTOM)\n ) {\n draw.getPreviewer().clearResizer()\n draw.getImageParticle().dragFloatImage(evt.movementX, evt.movementY)\n }\n }\n host.dragover(evt)\n host.isAllowDrop = true\n return\n }\n if (!host.isAllowSelection || !host.mouseDownStartPosition) return\n const target = evt.target as HTMLDivElement\n const pageIndex = target.dataset.index\n if (pageIndex) {\n draw.setPageNo(Number(pageIndex))\n }\n const position = draw.getPosition()\n const positionResult = position.getPositionByXY({\n x: evt.offsetX,\n y: evt.offsetY\n })\n if (!~positionResult.index) return\n const {\n index,\n isTable,\n tdValueIndex,\n tdIndex,\n trIndex,\n tableId,\n trId,\n tdId\n } = positionResult\n const {\n index: startIndex,\n isTable: startIsTable,\n tdIndex: startTdIndex,\n trIndex: startTrIndex,\n tableId: startTableId\n } = host.mouseDownStartPosition\n const endIndex = isTable ? tdValueIndex! : index\n const rangeManager = draw.getRange()\n if (\n isTable &&\n startIsTable &&\n (tdIndex !== startTdIndex || trIndex !== startTrIndex)\n ) {\n rangeManager.setRange(\n endIndex,\n endIndex,\n tableId,\n startTdIndex,\n tdIndex,\n startTrIndex,\n trIndex\n )\n position.setPositionContext({\n isTable,\n index,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId\n })\n } else {\n let end = ~endIndex ? endIndex : 0\n if ((startIsTable || isTable) && startTableId !== tableId) return\n let start = startIndex\n if (start > end) {\n // prettier-ignore\n [start, end] = [end, start]\n }\n if (start === end) return\n const elementList = draw.getElementList()\n const startElement = elementList[start + 1]\n const endElement = elementList[end]\n if (\n startElement?.controlComponent === ControlComponent.PLACEHOLDER &&\n endElement?.controlComponent === ControlComponent.PLACEHOLDER &&\n startElement.controlId === endElement.controlId\n ) {\n return\n }\n rangeManager.setRange(start, end)\n }\n draw.render({\n isSubmitHistory: false,\n isSetCursor: false,\n isCompute: false\n })\n}\n","import { ZERO } from '../../../../dataset/constant/Common'\nimport { CanvasEvent } from '../../CanvasEvent'\nimport { isMod } from '../../../../utils/hotkey'\n\nfunction backspaceHideElement(host: CanvasEvent) {\n const draw = host.getDraw()\n const rangeManager = draw.getRange()\n const range = rangeManager.getRange()\n const elementList = draw.getElementList()\n const element = elementList[range.startIndex]\n if (!element.hide && !element.control?.hide && !element.area?.hide) return\n let index = range.startIndex\n while (index > 0) {\n const element = elementList[index]\n let newIndex: number | null = null\n if (element.controlId) {\n newIndex = draw.getControl().removeControl(index)\n if (newIndex !== null) {\n index = newIndex\n }\n } else {\n draw.spliceElementList(elementList, index, 1)\n newIndex = index - 1\n index--\n }\n const newElement = elementList[newIndex!]\n if (\n !newElement ||\n (!newElement.hide && !newElement.control?.hide && !newElement.area?.hide)\n ) {\n if (newIndex) {\n range.startIndex = newIndex\n range.endIndex = newIndex\n rangeManager.replaceRange(range)\n const position = draw.getPosition()\n const positionList = position.getPositionList()\n position.setCursorPosition(positionList[newIndex])\n }\n break\n }\n }\n}\n\nexport function backspace(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n if (draw.isReadonly()) return\n const rangeManager = draw.getRange()\n if (!rangeManager.getIsCanInput()) return\n if (rangeManager.getIsCollapsed()) {\n backspaceHideElement(host)\n }\n const control = draw.getControl()\n const { startIndex, endIndex, isCrossRowCol } = rangeManager.getRange()\n let curIndex: number | null\n if (isCrossRowCol) {\n const rowCol = draw.getTableParticle().getRangeRowCol()\n if (!rowCol) return\n let isDeleted = false\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n for (let c = 0; c < row.length; c++) {\n const col = row[c]\n if (col.value.length > 1) {\n draw.spliceElementList(col.value, 1, col.value.length - 1)\n isDeleted = true\n }\n }\n }\n curIndex = isDeleted ? 0 : null\n } else if (\n control.getActiveControl() &&\n control.getIsRangeCanCaptureEvent()\n ) {\n curIndex = control.keydown(evt)\n if (curIndex) {\n control.emitControlContentChange()\n }\n } else {\n const cursorPosition = draw.getPosition().getCursorPosition()\n if (!cursorPosition) return\n const { index } = cursorPosition\n const isCollapsed = rangeManager.getIsCollapsed()\n const elementList = draw.getElementList()\n if (isCollapsed && index === 0) {\n const firstElement = elementList[index]\n if (firstElement.value === ZERO) {\n if (firstElement.listId) {\n draw.getListParticle().unsetList()\n }\n evt.preventDefault()\n return\n }\n }\n const startElement = elementList[startIndex]\n if (isCollapsed && startElement.rowFlex && startElement.value === ZERO) {\n const rowFlexElementList = rangeManager.getRangeRowElementList()\n if (rowFlexElementList) {\n const preElement = elementList[startIndex - 1]\n rowFlexElementList.forEach(element => {\n element.rowFlex = preElement?.rowFlex\n })\n }\n }\n if (!isCollapsed) {\n draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex)\n curIndex = startIndex\n } else if (evt.altKey) {\n // Option+Backspace: hapus kata sebelum cursor\n const LETTER_REG = draw.getLetterReg()\n let i = index\n let deleteCount = 0\n // Phase 1: skip non-word chars (spasi, tanda baca) tapi berhenti di ZERO\n while (i > 0 && elementList[i].value !== ZERO && !LETTER_REG.test(elementList[i].value)) {\n deleteCount++\n i--\n }\n // Phase 2: hapus karakter kata\n while (i > 0 && LETTER_REG.test(elementList[i].value)) {\n deleteCount++\n i--\n }\n if (deleteCount > 0) {\n draw.spliceElementList(elementList, index - deleteCount + 1, deleteCount)\n }\n curIndex = index - deleteCount\n evt.preventDefault()\n } else if (isMod(evt)) {\n // Cmd+Backspace: hapus dari cursor ke awal baris\n let i = index\n while (i > 0 && elementList[i].value !== ZERO) {\n i--\n }\n // i sekarang di ZERO (awal baris) atau index 0\n const lineStart = elementList[i].value === ZERO ? i + 1 : i\n const deleteCount = index - lineStart + 1\n if (deleteCount > 0) {\n draw.spliceElementList(elementList, lineStart, deleteCount)\n curIndex = lineStart - 1\n } else {\n curIndex = index\n }\n evt.preventDefault()\n } else {\n draw.spliceElementList(elementList, index, 1)\n curIndex = index - 1\n }\n }\n draw.getGlobalEvent().setCanvasEventAbility()\n if (curIndex === null) {\n rangeManager.setRange(startIndex, startIndex)\n draw.render({\n curIndex: startIndex,\n isSubmitHistory: false\n })\n } else {\n rangeManager.setRange(curIndex, curIndex)\n draw.render({\n curIndex\n })\n }\n}\n","import { ZERO } from '../../../../dataset/constant/Common'\nimport { CanvasEvent } from '../../CanvasEvent'\nimport { isMod } from '../../../../utils/hotkey'\n\nfunction deleteHideElement(host: CanvasEvent) {\n const draw = host.getDraw()\n const rangeManager = draw.getRange()\n const range = rangeManager.getRange()\n const elementList = draw.getElementList()\n const nextElement = elementList[range.startIndex + 1]\n if (\n !nextElement.hide &&\n !nextElement.control?.hide &&\n !nextElement.area?.hide\n ) {\n return\n }\n const index = range.startIndex + 1\n while (index < elementList.length) {\n const element = elementList[index]\n let newIndex: number | null = null\n if (element.controlId) {\n newIndex = draw.getControl().removeControl(index)\n } else {\n draw.spliceElementList(elementList, index, 1)\n newIndex = index\n }\n const newElement = elementList[newIndex!]\n if (\n !newElement ||\n (!newElement.hide && !newElement.control?.hide && !newElement.area?.hide)\n ) {\n break\n }\n }\n}\n\nexport function del(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n if (draw.isReadonly()) return\n const rangeManager = draw.getRange()\n if (!rangeManager.getIsCanInput()) return\n const { startIndex, endIndex, isCrossRowCol } = rangeManager.getRange()\n const elementList = draw.getElementList()\n const control = draw.getControl()\n if (rangeManager.getIsCollapsed()) {\n deleteHideElement(host)\n }\n let curIndex: number | null\n if (isCrossRowCol) {\n const rowCol = draw.getTableParticle().getRangeRowCol()\n if (!rowCol) return\n let isDeleted = false\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n for (let c = 0; c < row.length; c++) {\n const col = row[c]\n if (col.value.length > 1) {\n draw.spliceElementList(col.value, 1, col.value.length - 1)\n isDeleted = true\n }\n }\n }\n curIndex = isDeleted ? 0 : null\n } else if (control.getActiveControl() && control.getIsRangeWithinControl()) {\n curIndex = control.keydown(evt)\n if (curIndex) {\n control.emitControlContentChange()\n }\n } else if (elementList[endIndex + 1]?.controlId) {\n curIndex = control.removeControl(endIndex + 1)\n } else {\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const { index } = cursorPosition\n const positionContext = position.getPositionContext()\n if (positionContext.isDirectHit && positionContext.isImage) {\n draw.spliceElementList(elementList, index, 1)\n curIndex = index - 1\n } else {\n const isCollapsed = rangeManager.getIsCollapsed()\n if (!isCollapsed) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n curIndex = startIndex\n } else if (evt.altKey) {\n // Option+Delete: hapus kata setelah cursor\n const LETTER_REG = draw.getLetterReg()\n let i = index + 1\n let deleteCount = 0\n // Phase 1: skip non-word chars, berhenti di ZERO (batas baris)\n while (i < elementList.length && elementList[i].value !== ZERO && !LETTER_REG.test(elementList[i].value)) {\n deleteCount++\n i++\n }\n // Phase 2: hapus karakter kata\n while (i < elementList.length && LETTER_REG.test(elementList[i].value)) {\n deleteCount++\n i++\n }\n if (deleteCount > 0) {\n draw.spliceElementList(elementList, index + 1, deleteCount)\n }\n curIndex = index\n evt.preventDefault()\n } else if (isMod(evt)) {\n // Cmd+Delete: hapus dari cursor ke akhir baris\n let i = index + 1\n while (i < elementList.length && elementList[i].value !== ZERO) {\n i++\n }\n const deleteCount = i - (index + 1)\n if (deleteCount > 0) {\n draw.spliceElementList(elementList, index + 1, deleteCount)\n }\n curIndex = index\n evt.preventDefault()\n } else {\n if (!elementList[index + 1]) return\n draw.spliceElementList(elementList, index + 1, 1)\n curIndex = index\n }\n }\n }\n draw.getGlobalEvent().setCanvasEventAbility()\n if (curIndex === null) {\n rangeManager.setRange(startIndex, startIndex)\n draw.render({\n curIndex: startIndex,\n isSubmitHistory: false\n })\n } else {\n rangeManager.setRange(curIndex, curIndex)\n draw.render({\n curIndex\n })\n }\n}\n","import { ZERO } from '../../../../dataset/constant/Common'\nimport {\n AREA_CONTEXT_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR,\n EDITOR_ROW_ATTR\n} from '../../../../dataset/constant/Element'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { IElement } from '../../../../interface/Element'\nimport { omitObject } from '../../../../utils'\nimport { formatElementContext } from '../../../../utils/element'\nimport { CanvasEvent } from '../../CanvasEvent'\n\nexport function enter(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n if (draw.isReadonly()) return\n const rangeManager = draw.getRange()\n if (!rangeManager.getIsCanInput()) return\n const { startIndex, endIndex } = rangeManager.getRange()\n const isCollapsed = rangeManager.getIsCollapsed()\n const elementList = draw.getElementList()\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n if (\n isCollapsed &&\n endElement.listId &&\n endElement.value === ZERO &&\n elementList[endIndex + 1]?.listId !== endElement.listId\n ) {\n draw.getListParticle().unsetList()\n return\n }\n let enterText: IElement = {\n value: ZERO\n }\n if (evt.shiftKey && startElement.listId) {\n enterText.listWrap = true\n }\n formatElementContext(elementList, [enterText], startIndex, {\n isBreakWhenWrap: true,\n editorOptions: draw.getOptions()\n })\n if (\n evt.shiftKey &&\n endElement.areaId &&\n endElement.areaId !== elementList[endIndex + 1]?.areaId\n ) {\n enterText = omitObject(enterText, AREA_CONTEXT_ATTR)\n }\n if (\n !(\n elementList[startIndex + 1]?.titleId &&\n (!startElement.titleId ||\n startElement.titleId !== elementList[startIndex + 1]?.titleId)\n ) &&\n !(\n endElement.titleId &&\n endElement.titleId !== elementList[endIndex + 1]?.titleId\n )\n ) {\n const copyElement = rangeManager.getRangeAnchorStyle(elementList, endIndex)\n if (copyElement) {\n const copyAttr = [...EDITOR_ROW_ATTR]\n if (copyElement.controlComponent !== ControlComponent.POSTFIX) {\n copyAttr.push(...EDITOR_ELEMENT_STYLE_ATTR)\n }\n copyAttr.forEach(attr => {\n const value = copyElement[attr] as never\n if (value !== undefined) {\n enterText[attr] = value\n }\n })\n }\n }\n const control = draw.getControl()\n const activeControl = control.getActiveControl()\n let curIndex: number\n if (activeControl && control.getIsRangeWithinControl()) {\n curIndex = control.setValue([enterText])\n control.emitControlContentChange()\n } else {\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const { index } = cursorPosition\n if (isCollapsed) {\n draw.spliceElementList(elementList, index + 1, 0, [enterText])\n } else {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex,\n [enterText]\n )\n }\n curIndex = index + 1\n }\n if (~curIndex) {\n rangeManager.setRange(curIndex, curIndex)\n draw.render({ curIndex })\n }\n evt.preventDefault()\n}\n","import { EditorMode } from '../../../..'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { MoveDirection } from '../../../../dataset/enum/Observer'\nimport { getNonHideElementIndex } from '../../../../utils/element'\nimport { isMod } from '../../../../utils/hotkey'\nimport { CanvasEvent } from '../../CanvasEvent'\n\nexport function left(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const isReadonly = draw.isReadonly()\n if (isReadonly) return\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const positionContext = position.getPositionContext()\n const { index } = cursorPosition\n if (index <= 0 && !positionContext.isTable) return\n const rangeManager = draw.getRange()\n const { startIndex, endIndex } = rangeManager.getRange()\n const isCollapsed = rangeManager.getIsCollapsed()\n const elementList = draw.getElementList()\n const control = draw.getControl()\n if (\n draw.getMode() === EditorMode.FORM &&\n control.getActiveControl() &&\n (elementList[index]?.controlComponent === ControlComponent.PREFIX ||\n elementList[index]?.controlComponent === ControlComponent.PRE_TEXT)\n ) {\n control.initNextControl({\n direction: MoveDirection.UP\n })\n return\n }\n let moveCount = 1\n if (isMod(evt)) {\n const LETTER_REG = draw.getLetterReg()\n const moveStartIndex =\n evt.shiftKey && !isCollapsed && startIndex === cursorPosition?.index\n ? endIndex\n : startIndex\n if (LETTER_REG.test(elementList[moveStartIndex]?.value)) {\n let i = moveStartIndex - 1\n while (i > 0) {\n const element = elementList[i]\n if (!LETTER_REG.test(element.value)) {\n break\n }\n moveCount++\n i--\n }\n }\n }\n const curIndex = startIndex - moveCount\n let anchorStartIndex = curIndex\n let anchorEndIndex = curIndex\n if (evt.shiftKey && cursorPosition) {\n if (startIndex !== endIndex) {\n if (startIndex === cursorPosition.index) {\n anchorStartIndex = startIndex\n anchorEndIndex = endIndex - moveCount\n } else {\n anchorStartIndex = curIndex\n anchorEndIndex = endIndex\n }\n } else {\n anchorEndIndex = endIndex\n }\n }\n if (!evt.shiftKey) {\n const element = elementList[startIndex]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n const lastTrIndex = trList.length - 1\n const lastTr = trList[lastTrIndex]\n const lastTdIndex = lastTr.tdList.length - 1\n const lastTd = lastTr.tdList[lastTdIndex]\n position.setPositionContext({\n isTable: true,\n index: startIndex,\n trIndex: lastTrIndex,\n tdIndex: lastTdIndex,\n tdId: lastTd.id,\n trId: lastTr.id,\n tableId: element.id\n })\n anchorStartIndex = lastTd.value.length - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().render()\n } else if (element.tableId) {\n if (startIndex === 0) {\n const originalElementList = draw.getOriginalElementList()\n const trList = originalElementList[positionContext.index!].trList!\n outer: for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n if (tr.id !== element.trId) continue\n const tdList = tr.tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n if (td.id !== element.tdId) continue\n if (r === 0 && d === 0) {\n position.setPositionContext({\n isTable: false\n })\n anchorStartIndex = positionContext.index! - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().dispose()\n } else {\n let preTrIndex = r\n let preTdIndex = d - 1\n if (preTdIndex < 0) {\n preTrIndex = r - 1\n preTdIndex = trList[preTrIndex].tdList.length - 1\n }\n const preTr = trList[preTrIndex]\n const preTd = preTr.tdList[preTdIndex]\n position.setPositionContext({\n isTable: true,\n index: positionContext.index,\n trIndex: preTrIndex,\n tdIndex: preTdIndex,\n tdId: preTd.id,\n trId: preTr.id,\n tableId: element.tableId\n })\n anchorStartIndex = preTd.value.length - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().render()\n }\n break outer\n }\n }\n }\n }\n }\n if (!~anchorStartIndex || !~anchorEndIndex) return\n const newElementList = draw.getElementList()\n anchorStartIndex = getNonHideElementIndex(newElementList, anchorStartIndex)\n anchorEndIndex = getNonHideElementIndex(newElementList, anchorEndIndex)\n rangeManager.setRange(anchorStartIndex, anchorEndIndex)\n const isAnchorCollapsed = anchorStartIndex === anchorEndIndex\n draw.render({\n curIndex: isAnchorCollapsed ? anchorStartIndex : undefined,\n isSetCursor: isAnchorCollapsed,\n isSubmitHistory: false,\n isCompute: false\n })\n evt.preventDefault()\n}\n","import { LocationPosition } from '../../../../dataset/enum/Common'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { EditorMode } from '../../../../dataset/enum/Editor'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { MoveDirection } from '../../../../dataset/enum/Observer'\nimport { getNonHideElementIndex } from '../../../../utils/element'\nimport { isMod } from '../../../../utils/hotkey'\nimport { CanvasEvent } from '../../CanvasEvent'\n\nexport function right(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const isReadonly = draw.isReadonly()\n if (isReadonly) return\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const { index } = cursorPosition\n const positionList = position.getPositionList()\n const positionContext = position.getPositionContext()\n if (index > positionList.length - 1 && !positionContext.isTable) return\n const rangeManager = draw.getRange()\n const { startIndex, endIndex } = rangeManager.getRange()\n const isCollapsed = rangeManager.getIsCollapsed()\n let elementList = draw.getElementList()\n const control = draw.getControl()\n if (\n draw.getMode() === EditorMode.FORM &&\n control.getActiveControl() &&\n (elementList[index + 1]?.controlComponent === ControlComponent.POSTFIX ||\n elementList[index + 1]?.controlComponent === ControlComponent.POST_TEXT)\n ) {\n control.initNextControl({\n direction: MoveDirection.DOWN\n })\n return\n }\n let moveCount = 1\n if (isMod(evt)) {\n const LETTER_REG = draw.getLetterReg()\n const moveStartIndex =\n evt.shiftKey && !isCollapsed && startIndex === cursorPosition?.index\n ? endIndex\n : startIndex\n if (LETTER_REG.test(elementList[moveStartIndex + 1]?.value)) {\n let i = moveStartIndex + 2\n while (i < elementList.length) {\n const element = elementList[i]\n if (!LETTER_REG.test(element.value)) {\n break\n }\n moveCount++\n i++\n }\n }\n }\n const curIndex = endIndex + moveCount\n let anchorStartIndex = curIndex\n let anchorEndIndex = curIndex\n if (evt.shiftKey && cursorPosition) {\n if (startIndex !== endIndex) {\n if (startIndex === cursorPosition.index) {\n anchorStartIndex = startIndex\n anchorEndIndex = curIndex\n } else {\n anchorStartIndex = startIndex + moveCount\n anchorEndIndex = endIndex\n }\n } else {\n anchorStartIndex = startIndex\n }\n }\n if (!evt.shiftKey) {\n const element = elementList[endIndex]\n const nextElement = elementList[endIndex + 1]\n if (nextElement?.type === ElementType.TABLE) {\n const trList = nextElement.trList!\n const nextTr = trList[0]\n const nextTd = nextTr.tdList[0]\n position.setPositionContext({\n isTable: true,\n index: endIndex + 1,\n trIndex: 0,\n tdIndex: 0,\n tdId: nextTd.id,\n trId: nextTr.id,\n tableId: nextElement.id\n })\n anchorStartIndex = 0\n anchorEndIndex = 0\n draw.getTableTool().render()\n } else if (element.tableId) {\n if (!nextElement) {\n const originalElementList = draw.getOriginalElementList()\n const trList = originalElementList[positionContext.index!].trList!\n outer: for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n if (tr.id !== element.trId) continue\n const tdList = tr.tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n if (td.id !== element.tdId) continue\n if (r === trList.length - 1 && d === tdList.length - 1) {\n position.setPositionContext({\n isTable: false\n })\n anchorStartIndex = positionContext.index!\n anchorEndIndex = anchorStartIndex\n elementList = draw.getElementList()\n draw.getTableTool().dispose()\n } else {\n let nextTrIndex = r\n let nextTdIndex = d + 1\n if (nextTdIndex > tdList.length - 1) {\n nextTrIndex = r + 1\n nextTdIndex = 0\n }\n const preTr = trList[nextTrIndex]\n const preTd = preTr.tdList[nextTdIndex]\n position.setPositionContext({\n isTable: true,\n index: positionContext.index,\n trIndex: nextTrIndex,\n tdIndex: nextTdIndex,\n tdId: preTd.id,\n trId: preTr.id,\n tableId: element.tableId\n })\n anchorStartIndex = 0\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().render()\n }\n break outer\n }\n }\n }\n }\n }\n const maxElementListIndex = elementList.length - 1\n if (\n anchorStartIndex > maxElementListIndex ||\n anchorEndIndex > maxElementListIndex\n ) {\n return\n }\n const newElementList = draw.getElementList()\n anchorStartIndex = getNonHideElementIndex(\n newElementList,\n anchorStartIndex,\n LocationPosition.AFTER\n )\n anchorEndIndex = getNonHideElementIndex(\n newElementList,\n anchorEndIndex,\n LocationPosition.AFTER\n )\n rangeManager.setRange(anchorStartIndex, anchorEndIndex)\n const isAnchorCollapsed = anchorStartIndex === anchorEndIndex\n draw.render({\n curIndex: isAnchorCollapsed ? anchorStartIndex : undefined,\n isSetCursor: isAnchorCollapsed,\n isSubmitHistory: false,\n isCompute: false\n })\n evt.preventDefault()\n}\n","import { EDITOR_ELEMENT_STYLE_ATTR } from '../../../../dataset/constant/Element'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { MoveDirection } from '../../../../dataset/enum/Observer'\nimport { IElement } from '../../../../interface/Element'\nimport { pickObject } from '../../../../utils'\nimport { formatElementContext } from '../../../../utils/element'\nimport { CanvasEvent } from '../../CanvasEvent'\n\nexport function tab(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const isReadonly = draw.isReadonly()\n if (isReadonly) return\n evt.preventDefault()\n const control = draw.getControl()\n const activeControl = control.getActiveControl()\n if (activeControl && control.getIsRangeWithinControl()) {\n control.initNextControl({\n direction: evt.shiftKey ? MoveDirection.UP : MoveDirection.DOWN\n })\n } else {\n const rangeManager = draw.getRange()\n const elementList = draw.getElementList()\n const { startIndex, endIndex } = rangeManager.getRange()\n // Check if cursor is within a list — handle indent/outdent\n const curElement = elementList[endIndex]\n if (curElement?.listId) {\n if (evt.shiftKey) {\n draw.getListParticle().outdent()\n } else {\n draw.getListParticle().indent()\n }\n return\n }\n const anchorStyle = rangeManager.getRangeAnchorStyle(elementList, endIndex)\n const copyStyle = anchorStyle\n ? pickObject(anchorStyle, EDITOR_ELEMENT_STYLE_ATTR)\n : null\n const tabElement: IElement = {\n ...copyStyle,\n type: ElementType.TAB,\n value: ''\n }\n formatElementContext(elementList, [tabElement], startIndex, {\n editorOptions: draw.getOptions()\n })\n draw.insertElementList([tabElement])\n }\n}\n","import { ElementType } from '../../../../dataset/enum/Element'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport { MoveDirection } from '../../../../dataset/enum/Observer'\nimport { IElementPosition } from '../../../../interface/Element'\nimport { CanvasEvent } from '../../CanvasEvent'\n\ninterface IGetNextPositionIndexPayload {\n positionList: IElementPosition[]\n index: number\n rowNo: number\n isUp: boolean\n cursorX: number\n}\nfunction getNextPositionIndex(payload: IGetNextPositionIndexPayload) {\n const { positionList, index, isUp, rowNo, cursorX } = payload\n let nextIndex = -1\n const probablePosition: IElementPosition[] = []\n if (isUp) {\n let p = index - 1\n while (p >= 0) {\n const position = positionList[p]\n p--\n if (position.rowNo === rowNo) continue\n if (probablePosition[0] && probablePosition[0].rowNo !== position.rowNo) {\n break\n }\n probablePosition.unshift(position)\n }\n } else {\n let p = index + 1\n while (p < positionList.length) {\n const position = positionList[p]\n p++\n if (position.rowNo === rowNo) continue\n if (probablePosition[0] && probablePosition[0].rowNo !== position.rowNo) {\n break\n }\n probablePosition.push(position)\n }\n }\n for (let p = 0; p < probablePosition.length; p++) {\n const nextPosition = probablePosition[p]\n const {\n coordinate: {\n leftTop: [nextLeftX],\n rightTop: [nextRightX]\n }\n } = nextPosition\n if (p === probablePosition.length - 1) {\n nextIndex = nextPosition.index\n }\n if (cursorX < nextLeftX || cursorX > nextRightX) continue\n nextIndex = nextPosition.index\n break\n }\n return nextIndex\n}\n\nexport function updown(evt: KeyboardEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const isReadonly = draw.isReadonly()\n if (isReadonly) return\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const rangeManager = draw.getRange()\n const { startIndex, endIndex } = rangeManager.getRange()\n let positionList = position.getPositionList()\n const isUp = evt.key === KeyMap.Up\n let anchorStartIndex = -1\n let anchorEndIndex = -1\n const positionContext = position.getPositionContext()\n if (\n !evt.shiftKey &&\n positionContext.isTable &&\n ((isUp && cursorPosition.rowIndex === 0) ||\n (!isUp && cursorPosition.rowIndex === draw.getRowCount() - 1))\n ) {\n const { index, trIndex, tdIndex, tableId } = positionContext\n if (isUp) {\n if (trIndex === 0) {\n position.setPositionContext({\n isTable: false\n })\n anchorStartIndex = index! - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().dispose()\n } else {\n let preTrIndex = -1\n let preTdIndex = -1\n const originalElementList = draw.getOriginalElementList()\n const trList = originalElementList[index!].trList!\n const curTdColIndex = trList[trIndex!].tdList[tdIndex!].colIndex!\n outer: for (let r = trIndex! - 1; r >= 0; r--) {\n const tr = trList[r]\n const tdList = tr.tdList!\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n if (\n td.colIndex === curTdColIndex ||\n (td.colIndex! + td.colspan - 1 >= curTdColIndex &&\n td.colIndex! <= curTdColIndex)\n ) {\n preTrIndex = r\n preTdIndex = d\n break outer\n }\n }\n }\n if (!~preTrIndex || !~preTdIndex) return\n const preTr = trList[preTrIndex]\n const preTd = preTr.tdList[preTdIndex]\n position.setPositionContext({\n isTable: true,\n index,\n trIndex: preTrIndex,\n tdIndex: preTdIndex,\n tdId: preTd.id,\n trId: preTr.id,\n tableId\n })\n anchorStartIndex = preTd.value.length - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().render()\n }\n } else {\n const originalElementList = draw.getOriginalElementList()\n const trList = originalElementList[index!].trList!\n if (trIndex === trList.length - 1) {\n position.setPositionContext({\n isTable: false\n })\n anchorStartIndex = index!\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().dispose()\n } else {\n let nexTrIndex = -1\n let nextTdIndex = -1\n const curTdColIndex = trList[trIndex!].tdList[tdIndex!].colIndex!\n outer: for (let r = trIndex! + 1; r < trList.length; r++) {\n const tr = trList[r]\n const tdList = tr.tdList!\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n if (\n td.colIndex === curTdColIndex ||\n (td.colIndex! + td.colspan - 1 >= curTdColIndex &&\n td.colIndex! <= curTdColIndex)\n ) {\n nexTrIndex = r\n nextTdIndex = d\n break outer\n }\n }\n }\n if (!~nexTrIndex || !~nextTdIndex) return\n const nextTr = trList[nexTrIndex]\n const nextTd = nextTr.tdList[nextTdIndex]\n position.setPositionContext({\n isTable: true,\n index,\n trIndex: nexTrIndex,\n tdIndex: nextTdIndex,\n tdId: nextTd.id,\n trId: nextTr.id,\n tableId\n })\n anchorStartIndex = nextTd.value.length - 1\n anchorEndIndex = anchorStartIndex\n draw.getTableTool().render()\n }\n }\n } else {\n let anchorPosition: IElementPosition = cursorPosition\n if (evt.shiftKey) {\n if (startIndex === cursorPosition.index) {\n anchorPosition = positionList[endIndex]\n } else {\n anchorPosition = positionList[startIndex]\n }\n }\n const {\n index,\n rowNo,\n rowIndex,\n coordinate: {\n rightTop: [curRightX]\n }\n } = anchorPosition\n if (\n (isUp && rowIndex === 0) ||\n (!isUp && rowIndex === draw.getRowCount() - 1)\n ) {\n return\n }\n const nextIndex = getNextPositionIndex({\n positionList,\n index,\n rowNo,\n isUp,\n cursorX: curRightX\n })\n if (nextIndex < 0) return\n anchorStartIndex = nextIndex\n anchorEndIndex = nextIndex\n if (evt.shiftKey) {\n if (startIndex !== endIndex) {\n if (startIndex === cursorPosition.index) {\n anchorStartIndex = startIndex\n } else {\n anchorEndIndex = endIndex\n }\n } else {\n if (isUp) {\n anchorEndIndex = endIndex\n } else {\n anchorStartIndex = startIndex\n }\n }\n }\n const elementList = draw.getElementList()\n const nextElement = elementList[nextIndex]\n if (nextElement.type === ElementType.TABLE) {\n const { scale } = draw.getOptions()\n const margins = draw.getMargins()\n const trList = nextElement.trList!\n let trIndex = -1\n let tdIndex = -1\n let tdPositionIndex = -1\n if (isUp) {\n outer: for (let r = trList.length - 1; r >= 0; r--) {\n const tr = trList[r]\n const tdList = tr.tdList!\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n const tdX = td.x! * scale + margins[3]\n const tdWidth = td.width! * scale\n if (curRightX >= tdX && curRightX <= tdX + tdWidth) {\n const tdPositionList = td.positionList!\n const lastPosition = tdPositionList[tdPositionList.length - 1]\n const nextPositionIndex =\n getNextPositionIndex({\n positionList: tdPositionList,\n index: lastPosition.index + 1,\n rowNo: lastPosition.rowNo - 1,\n isUp,\n cursorX: curRightX\n }) || lastPosition.index\n trIndex = r\n tdIndex = d\n tdPositionIndex = nextPositionIndex\n break outer\n }\n }\n }\n } else {\n outer: for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n const tdList = tr.tdList!\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n const tdX = td.x! * scale + margins[3]\n const tdWidth = td.width! * scale\n if (curRightX >= tdX && curRightX <= tdX + tdWidth) {\n const tdPositionList = td.positionList!\n const nextPositionIndex =\n getNextPositionIndex({\n positionList: tdPositionList,\n index: -1,\n rowNo: -1,\n isUp,\n cursorX: curRightX\n }) || 0\n trIndex = r\n tdIndex = d\n tdPositionIndex = nextPositionIndex\n break outer\n }\n }\n }\n }\n if (~trIndex && ~tdIndex && ~tdPositionIndex) {\n const nextTr = trList[trIndex]\n const nextTd = nextTr.tdList[tdIndex]\n position.setPositionContext({\n isTable: true,\n index: nextIndex,\n trIndex: trIndex,\n tdIndex: tdIndex,\n tdId: nextTd.id,\n trId: nextTr.id,\n tableId: nextElement.id\n })\n anchorStartIndex = tdPositionIndex\n anchorEndIndex = anchorStartIndex\n positionList = position.getPositionList()\n draw.getTableTool().render()\n }\n }\n }\n if (!~anchorStartIndex || !~anchorEndIndex) return\n if (anchorStartIndex > anchorEndIndex) {\n // prettier-ignore\n [anchorStartIndex, anchorEndIndex] = [anchorEndIndex, anchorStartIndex]\n }\n rangeManager.setRange(anchorStartIndex, anchorEndIndex)\n const isCollapsed = anchorStartIndex === anchorEndIndex\n draw.render({\n curIndex: isCollapsed ? anchorStartIndex : undefined,\n isSetCursor: isCollapsed,\n isSubmitHistory: false,\n isCompute: false\n })\n if (!isCollapsed) {\n draw.getCursor().moveCursorToVisible({\n cursorPosition: positionList[isUp ? anchorStartIndex : anchorEndIndex],\n direction: isUp ? MoveDirection.UP : MoveDirection.DOWN\n })\n }\n}\n","import { EditorMode, EditorZone } from '../../../../dataset/enum/Editor'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport { isMod } from '../../../../utils/hotkey'\nimport { CanvasEvent } from '../../CanvasEvent'\nimport { backspace } from './backspace'\nimport { del } from './delete'\nimport { enter } from './enter'\nimport { left } from './left'\nimport { right } from './right'\nimport { tab } from './tab'\nimport { updown } from './updown'\n\nexport function keydown(evt: KeyboardEvent, host: CanvasEvent) {\n if (host.isComposing) return\n const draw = host.getDraw()\n if (evt.key === KeyMap.Backspace) {\n backspace(evt, host)\n } else if (evt.key === KeyMap.Delete) {\n del(evt, host)\n } else if (evt.key === KeyMap.Enter) {\n enter(evt, host)\n } else if (evt.key === KeyMap.Left) {\n left(evt, host)\n } else if (evt.key === KeyMap.Right) {\n right(evt, host)\n } else if (evt.key === KeyMap.Up || evt.key === KeyMap.Down) {\n updown(evt, host)\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.Z) {\n if (draw.isReadonly() && draw.getMode() !== EditorMode.FORM) return\n draw.getHistoryManager().undo()\n evt.preventDefault()\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.Y) {\n if (draw.isReadonly() && draw.getMode() !== EditorMode.FORM) return\n draw.getHistoryManager().redo()\n evt.preventDefault()\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.C) {\n host.copy()\n evt.preventDefault()\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.X) {\n host.cut()\n evt.preventDefault()\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.A) {\n host.selectAll()\n evt.preventDefault()\n } else if (isMod(evt) && evt.key.toLocaleLowerCase() === KeyMap.S) {\n if (draw.isReadonly()) return\n const listener = draw.getListener()\n if (listener.saved) {\n listener.saved(draw.getValue())\n }\n const eventBus = draw.getEventBus()\n if (eventBus.isSubscribe('saved')) {\n eventBus.emit('saved', draw.getValue())\n }\n evt.preventDefault()\n } else if (evt.key === KeyMap.ESC) {\n host.clearPainterStyle()\n const zoneManager = draw.getZone()\n if (!zoneManager.isMainActive()) {\n zoneManager.setZone(EditorZone.MAIN)\n }\n evt.preventDefault()\n } else if (evt.key === KeyMap.TAB) {\n tab(evt, host)\n }\n}\n","import { ZERO } from '../../../dataset/constant/Common'\nimport {\n EDITOR_ELEMENT_COPY_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR\n} from '../../../dataset/constant/Element'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IElement } from '../../../interface/Element'\nimport { IRangeElementStyle } from '../../../interface/Range'\nimport { splitText } from '../../../utils'\nimport { formatElementContext } from '../../../utils/element'\nimport { CanvasEvent } from '../CanvasEvent'\n\nexport function input(data: string, host: CanvasEvent) {\n const draw = host.getDraw()\n if (draw.isReadonly() || draw.isDisabled()) return\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!data || !cursorPosition) return\n const isComposing = host.isComposing\n if (isComposing && host.compositionInfo?.value === data) return\n const rangeManager = draw.getRange()\n if (!rangeManager.getIsCanInput()) return\n const defaultStyle =\n rangeManager.getDefaultStyle() || host.compositionInfo?.defaultStyle || null\n removeComposingInput(host)\n if (!isComposing) {\n const cursor = draw.getCursor()\n cursor.clearAgentDomValue()\n }\n const { TEXT, HYPERLINK, SUBSCRIPT, SUPERSCRIPT, DATE, TAB } = ElementType\n const text = data.replaceAll(`\\n`, ZERO)\n const { startIndex, endIndex } = rangeManager.getRange()\n const elementList = draw.getElementList()\n const copyElement = rangeManager.getRangeAnchorStyle(elementList, endIndex)\n if (!copyElement) return\n const isDesignMode = draw.isDesignMode()\n const inputData: IElement[] = splitText(text).map(value => {\n const newElement: IElement = {\n value\n }\n if (\n isDesignMode ||\n (!copyElement.title?.disabled && !copyElement.control?.disabled)\n ) {\n const nextElement = elementList[endIndex + 1]\n if (\n !copyElement.type ||\n copyElement.type === TEXT ||\n (copyElement.type === HYPERLINK && nextElement?.type === HYPERLINK) ||\n (copyElement.type === DATE && nextElement?.type === DATE) ||\n (copyElement.type === SUBSCRIPT && nextElement?.type === SUBSCRIPT) ||\n (copyElement.type === SUPERSCRIPT && nextElement?.type === SUPERSCRIPT)\n ) {\n EDITOR_ELEMENT_COPY_ATTR.forEach(attr => {\n if (attr === 'groupIds' && !nextElement?.groupIds) return\n const value = copyElement[attr] as never\n if (value !== undefined) {\n newElement[attr] = value\n }\n })\n }\n if (defaultStyle || copyElement.type === TAB) {\n EDITOR_ELEMENT_STYLE_ATTR.forEach(attr => {\n const value =\n defaultStyle?.[attr as keyof IRangeElementStyle] ||\n copyElement[attr]\n if (value !== undefined) {\n newElement[attr] = value as never\n }\n })\n }\n if (isComposing) {\n newElement.underline = true\n }\n }\n return newElement\n })\n const control = draw.getControl()\n let curIndex: number\n if (control.getActiveControl() && control.getIsRangeWithinControl()) {\n curIndex = control.setValue(inputData)\n if (!isComposing) {\n control.emitControlContentChange()\n }\n } else {\n const start = startIndex + 1\n if (startIndex !== endIndex) {\n draw.spliceElementList(elementList, start, endIndex - startIndex)\n }\n formatElementContext(elementList, inputData, startIndex, {\n editorOptions: draw.getOptions()\n })\n draw.spliceElementList(elementList, start, 0, inputData)\n curIndex = startIndex + inputData.length\n }\n if (~curIndex) {\n rangeManager.setRange(curIndex, curIndex)\n draw.render({\n curIndex,\n isSubmitHistory: !isComposing\n })\n }\n if (isComposing && ~curIndex) {\n host.compositionInfo = {\n elementList,\n value: text,\n startIndex: curIndex - inputData.length,\n endIndex: curIndex,\n defaultStyle\n }\n }\n}\n\nexport function removeComposingInput(host: CanvasEvent) {\n if (!host.compositionInfo) return\n const { elementList, startIndex, endIndex } = host.compositionInfo\n elementList.splice(startIndex + 1, endIndex - startIndex)\n const rangeManager = host.getDraw().getRange()\n rangeManager.setRange(startIndex, startIndex)\n host.compositionInfo = null\n}\n","import { writeElementList } from '../../../utils/clipboard'\nimport { CanvasEvent } from '../CanvasEvent'\n\nexport async function cut(host: CanvasEvent) {\n const draw = host.getDraw()\n const rangeManager = draw.getRange()\n const { startIndex, endIndex } = rangeManager.getRange()\n if (!~startIndex && !~startIndex) return\n if (draw.isReadonly() || !rangeManager.getIsCanInput()) return\n\n const elementList = draw.getElementList()\n let start = startIndex\n let end = endIndex\n if (startIndex === endIndex) {\n const position = draw.getPosition()\n const positionList = position.getPositionList()\n const startPosition = positionList[startIndex]\n const curRowNo = startPosition.rowNo\n const curPageNo = startPosition.pageNo\n const cutElementIndexList: number[] = []\n for (let p = 0; p < positionList.length; p++) {\n const position = positionList[p]\n if (position.pageNo > curPageNo) break\n if (position.pageNo === curPageNo && position.rowNo === curRowNo) {\n cutElementIndexList.push(p)\n }\n }\n const firstElementIndex = cutElementIndexList[0] - 1\n start = firstElementIndex < 0 ? 0 : firstElementIndex\n end = cutElementIndexList[cutElementIndexList.length - 1]\n }\n const options = draw.getOptions()\n await writeElementList(elementList.slice(start + 1, end + 1), options)\n const control = draw.getControl()\n let curIndex: number\n if (control.getActiveControl() && control.getIsRangeWithinControl()) {\n curIndex = control.cut()\n control.emitControlContentChange()\n } else {\n draw.spliceElementList(elementList, start + 1, end - start)\n curIndex = start\n }\n rangeManager.setRange(curIndex, curIndex)\n draw.render({ curIndex })\n}\n","import { ElementType } from '../../../dataset/enum/Element'\nimport { IElement } from '../../../interface/Element'\nimport { ICopyOption } from '../../../interface/Event'\nimport { ITr } from '../../../interface/table/Tr'\nimport { writeElementList } from '../../../utils/clipboard'\nimport { getTextFromElementList, zipElementList } from '../../../utils/element'\nimport { IOverrideResult } from '../../override/Override'\nimport { CanvasEvent } from '../CanvasEvent'\n\nexport async function copy(host: CanvasEvent, options?: ICopyOption) {\n const draw = host.getDraw()\n const { copy } = draw.getOverride()\n if (copy) {\n const overrideResult = copy()\n if ((<IOverrideResult>overrideResult)?.preventDefault !== false) return\n }\n const rangeManager = draw.getRange()\n let copyElementList: IElement[] | null = null\n const range = rangeManager.getRange()\n if (range.isCrossRowCol) {\n const tableElement = rangeManager.getRangeTableElement()\n if (!tableElement) return\n const rowCol = draw.getTableParticle().getRangeRowCol()\n if (!rowCol) return\n const copyTableElement: IElement = {\n type: ElementType.TABLE,\n value: '',\n colgroup: [],\n trList: []\n }\n const firstRow = rowCol[0]\n const colStartIndex = firstRow[0].colIndex!\n const lastCol = firstRow[firstRow.length - 1]\n const colEndIndex = lastCol.colIndex! + lastCol.colspan - 1\n for (let c = colStartIndex; c <= colEndIndex; c++) {\n copyTableElement.colgroup!.push(tableElement.colgroup![c])\n }\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n const tr = tableElement.trList![row[0].rowIndex!]\n const coptTr: ITr = {\n tdList: [],\n height: tr.height,\n minHeight: tr.minHeight\n }\n for (let c = 0; c < row.length; c++) {\n coptTr.tdList.push(row[c])\n }\n copyTableElement.trList!.push(coptTr)\n }\n copyElementList = zipElementList([copyTableElement])\n } else {\n copyElementList = rangeManager.getIsCollapsed()\n ? rangeManager.getRangeRowElementList()\n : rangeManager.getSelectionElementList()\n }\n if (options?.isPlainText && copyElementList?.length) {\n copyElementList = [\n {\n value: getTextFromElementList(copyElementList)\n }\n ]\n }\n if (!copyElementList?.length) return\n await writeElementList(copyElementList, draw.getOptions())\n}\n","import { IOverrideResult } from '../../override/Override'\nimport { CanvasEvent } from '../CanvasEvent'\nimport { pasteImage } from './paste'\n\nexport function drop(evt: DragEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const { drop } = draw.getOverride()\n if (drop) {\n const overrideResult = drop(evt)\n if ((<IOverrideResult>overrideResult)?.preventDefault !== false) return\n }\n evt.preventDefault()\n const data = evt.dataTransfer?.getData('text')\n if (data) {\n host.input(data)\n } else {\n const files = evt.dataTransfer?.files\n if (!files) return\n for (let i = 0; i < files.length; i++) {\n const file = files[i]\n if (file.type.startsWith('image')) {\n pasteImage(host, file)\n }\n }\n }\n}\n","import { ZERO } from '../../../dataset/constant/Common'\nimport { TEXTLIKE_ELEMENT_TYPE } from '../../../dataset/constant/Element'\nimport { NUMBER_LIKE_REG } from '../../../dataset/constant/Regular'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IRange } from '../../../interface/Range'\nimport { CanvasEvent } from '../CanvasEvent'\n\nexport function getWordRangeBySegmenter(host: CanvasEvent): IRange | null {\n if (!Intl.Segmenter) return null\n const draw = host.getDraw()\n const cursorPosition = draw.getPosition().getCursorPosition()\n if (!cursorPosition) return null\n const rangeManager = draw.getRange()\n const paragraphInfo = rangeManager.getRangeParagraphInfo()\n if (!paragraphInfo) return null\n const paragraphText =\n paragraphInfo?.elementList\n ?.map(e =>\n !e.type ||\n (e.type !== ElementType.CONTROL &&\n TEXTLIKE_ELEMENT_TYPE.includes(e.type))\n ? e.value\n : ZERO\n )\n .join('') || ''\n if (!paragraphText) return null\n const cursorStartIndex =\n cursorPosition.isFirstLetter || draw.getCursor().getHitLineStartIndex()\n ? cursorPosition.index + 1\n : cursorPosition.index\n const offset = paragraphInfo.startIndex\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'word' })\n const segments = segmenter.segment(paragraphText)\n let startIndex = -1\n let endIndex = -1\n for (const { segment, index, isWordLike } of segments) {\n const realSegmentStartIndex = index + offset\n if (\n isWordLike &&\n cursorStartIndex >= realSegmentStartIndex &&\n cursorStartIndex < realSegmentStartIndex + segment.length\n ) {\n startIndex = realSegmentStartIndex - 1\n endIndex = startIndex + segment.length\n break\n }\n }\n return ~startIndex && ~endIndex ? { startIndex, endIndex } : null\n}\n\nexport function getWordRangeByCursor(host: CanvasEvent): IRange | null {\n const draw = host.getDraw()\n const cursorPosition = draw.getPosition().getCursorPosition()\n if (!cursorPosition) return null\n const { value, index } = cursorPosition\n const LETTER_REG = draw.getLetterReg()\n let upCount = 0\n let downCount = 0\n const isNumber = NUMBER_LIKE_REG.test(value)\n if (isNumber || LETTER_REG.test(value)) {\n const elementList = draw.getElementList()\n let upStartIndex = index - 1\n while (upStartIndex > 0) {\n const value = elementList[upStartIndex].value\n if (\n (isNumber && NUMBER_LIKE_REG.test(value)) ||\n (!isNumber && LETTER_REG.test(value))\n ) {\n upCount++\n upStartIndex--\n } else {\n break\n }\n }\n let downStartIndex = index + 1\n while (downStartIndex < elementList.length) {\n const value = elementList[downStartIndex].value\n if (\n (isNumber && NUMBER_LIKE_REG.test(value)) ||\n (!isNumber && LETTER_REG.test(value))\n ) {\n downCount++\n downStartIndex++\n } else {\n break\n }\n }\n }\n const startIndex = index - upCount - 1\n if (startIndex < 0) return null\n return {\n startIndex,\n endIndex: index + downCount\n }\n}\n\nfunction dblclick(host: CanvasEvent, evt: MouseEvent) {\n const draw = host.getDraw()\n const position = draw.getPosition()\n const positionContext = position.getPositionByXY({\n x: evt.offsetX,\n y: evt.offsetY\n })\n if (positionContext.isImage && positionContext.isDirectHit) {\n const elementList = draw.getElementList()\n const eventBus = draw.getEventBus()\n const curElement = elementList[positionContext.index]\n if (eventBus.isSubscribe('imageDblclick')) {\n eventBus.emit('imageDblclick', {\n evt,\n element: curElement\n })\n }\n if (curElement.imgPreviewDisabled) return\n draw.getPreviewer().render()\n return\n }\n if (draw.getIsPagingMode()) {\n if (!~positionContext.index && positionContext.zone) {\n draw.getZone().setZone(positionContext.zone)\n draw.clearSideEffect()\n position.setPositionContext({\n isTable: false\n })\n return\n }\n }\n if (\n (positionContext.isCheckbox || positionContext.isRadio) &&\n positionContext.isDirectHit\n ) {\n return\n }\n const rangeManager = draw.getRange()\n const segmenterRange =\n getWordRangeBySegmenter(host) || getWordRangeByCursor(host)\n if (!segmenterRange) return\n rangeManager.setRange(segmenterRange.startIndex, segmenterRange.endIndex)\n draw.render({\n isSubmitHistory: false,\n isSetCursor: false,\n isCompute: false\n })\n rangeManager.setRangeStyle()\n}\n\nfunction threeClick(host: CanvasEvent) {\n const draw = host.getDraw()\n const control = draw.getControl()\n if (control.getActiveControl() && control.selectValue()) return\n const position = draw.getPosition()\n const cursorPosition = position.getCursorPosition()\n if (!cursorPosition) return\n const { index } = cursorPosition\n const elementList = draw.getElementList()\n let upCount = 0\n let downCount = 0\n let upStartIndex = index - 1\n while (upStartIndex > 0) {\n const element = elementList[upStartIndex]\n const preElement = elementList[upStartIndex - 1]\n if (\n (element.value === ZERO && !element.listWrap) ||\n element.listId !== preElement?.listId ||\n element.titleId !== preElement?.titleId\n ) {\n break\n }\n upCount++\n upStartIndex--\n }\n let downStartIndex = index + 1\n while (downStartIndex < elementList.length) {\n const element = elementList[downStartIndex]\n const nextElement = elementList[downStartIndex + 1]\n if (\n (element.value === ZERO && !element.listWrap) ||\n element.listId !== nextElement?.listId ||\n element.titleId !== nextElement?.titleId\n ) {\n break\n }\n downCount++\n downStartIndex++\n }\n const rangeManager = draw.getRange()\n let newStartIndex = index - upCount - 1\n if (elementList[newStartIndex]?.value !== ZERO) {\n newStartIndex -= 1\n }\n if (newStartIndex < 0) return\n let newEndIndex = index + downCount + 1\n if (\n elementList[newEndIndex]?.value === ZERO ||\n newEndIndex > elementList.length - 1\n ) {\n newEndIndex -= 1\n }\n rangeManager.setRange(newStartIndex, newEndIndex)\n draw.render({\n isSubmitHistory: false,\n isSetCursor: false,\n isCompute: false\n })\n}\n\nexport default {\n dblclick,\n threeClick\n}\n","import { isFirefox } from '../../../utils/ua'\nimport { CanvasEvent } from '../CanvasEvent'\nimport { input, removeComposingInput } from './input'\n\nfunction compositionstart(host: CanvasEvent) {\n host.isComposing = true\n}\n\nfunction compositionend(host: CanvasEvent, evt: CompositionEvent) {\n host.isComposing = false\n const draw = host.getDraw()\n if (!evt.data) {\n removeComposingInput(host)\n const rangeManager = draw.getRange()\n const { endIndex: curIndex } = rangeManager.getRange()\n draw.render({\n curIndex,\n isSubmitHistory: false\n })\n } else {\n if (isFirefox) {\n setTimeout(() => {\n if (host.compositionInfo) {\n input(evt.data, host)\n }\n }, 1)\n } else {\n if (host.compositionInfo) {\n input(evt.data, host)\n }\n }\n }\n const cursor = draw.getCursor()\n cursor.clearAgentDomValue()\n}\n\nexport default {\n compositionstart,\n compositionend\n}\n","import { ImageDisplay } from '../../../dataset/enum/Common'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { findParent } from '../../../utils'\nimport { CanvasEvent } from '../CanvasEvent'\n\nfunction dragover(evt: DragEvent | MouseEvent, host: CanvasEvent) {\n const draw = host.getDraw()\n const isReadonly = draw.isReadonly()\n if (isReadonly) return\n evt.preventDefault()\n const pageContainer = draw.getPageContainer()\n const editorRegion = findParent(\n evt.target as Element,\n (node: Element) => node === pageContainer,\n true\n )\n if (!editorRegion) return\n const target = evt.target as HTMLDivElement\n const pageIndex = target.dataset.index\n if (pageIndex) {\n draw.setPageNo(Number(pageIndex))\n }\n const position = draw.getPosition()\n const positionContext = position.adjustPositionContext({\n x: evt.offsetX,\n y: evt.offsetY\n })\n if (!positionContext) return\n const { isTable, tdValueIndex, index } = positionContext\n const positionList = position.getPositionList()\n const curIndex = isTable ? tdValueIndex! : index\n if (~index) {\n const rangeManager = draw.getRange()\n rangeManager.setRange(curIndex, curIndex)\n position.setCursorPosition(positionList[curIndex])\n }\n const cursor = draw.getCursor()\n const {\n cursor: { dragColor, dragWidth, dragFloatImageDisabled }\n } = draw.getOptions()\n if (dragFloatImageDisabled) {\n const dragElement = host.cacheElementList?.[host.cacheRange!.startIndex]\n if (\n dragElement?.type === ElementType.IMAGE &&\n (dragElement.imgDisplay === ImageDisplay.FLOAT_TOP ||\n dragElement.imgDisplay === ImageDisplay.FLOAT_BOTTOM ||\n dragElement.imgDisplay === ImageDisplay.SURROUND)\n ) {\n return\n }\n }\n cursor.drawCursor({\n width: dragWidth,\n color: dragColor,\n isBlink: false,\n isFocus: false\n })\n}\n\nexport default {\n dragover\n}\n","import { ElementStyleKey } from '../../dataset/enum/ElementStyle'\nimport { IElement, IElementPosition } from '../../interface/Element'\nimport { ICurrentPosition, IPositionContext } from '../../interface/Position'\nimport { Draw } from '../draw/Draw'\nimport { Position } from '../position/Position'\nimport { RangeManager } from '../range/RangeManager'\nimport { threeClick } from '../../utils'\nimport { IRange, IRangeElementStyle } from '../../interface/Range'\nimport { mousedown } from './handlers/mousedown'\nimport { mouseup } from './handlers/mouseup'\nimport { mouseleave } from './handlers/mouseleave'\nimport { mousemove } from './handlers/mousemove'\nimport { keydown } from './handlers/keydown'\nimport { input } from './handlers/input'\nimport { cut } from './handlers/cut'\nimport { copy } from './handlers/copy'\nimport { drop } from './handlers/drop'\nimport click, { getWordRangeBySegmenter } from './handlers/click'\nimport composition from './handlers/composition'\nimport drag from './handlers/drag'\nimport { isIOS } from '../../utils/ua'\nimport { ICopyOption } from '../../interface/Event'\n\nexport interface ICompositionInfo {\n elementList: IElement[]\n startIndex: number\n endIndex: number\n value: string\n defaultStyle: IRangeElementStyle | null\n}\n\nexport class CanvasEvent {\n public isAllowSelection: boolean\n public isComposing: boolean\n public compositionInfo: ICompositionInfo | null\n\n public isAllowDrag: boolean\n public isAllowDrop: boolean\n public cacheRange: IRange | null\n public cacheElementList: IElement[] | null\n public cachePositionList: IElementPosition[] | null\n public cachePositionContext: IPositionContext | null\n public mouseDownStartPosition: ICurrentPosition | null\n\n private draw: Draw\n private pageContainer: HTMLDivElement\n private pageList: HTMLCanvasElement[]\n private range: RangeManager\n private position: Position\n\n constructor(draw: Draw) {\n this.draw = draw\n this.pageContainer = draw.getPageContainer()\n this.pageList = draw.getPageList()\n this.range = this.draw.getRange()\n this.position = this.draw.getPosition()\n\n this.isAllowSelection = false\n this.isComposing = false\n this.compositionInfo = null\n this.isAllowDrag = false\n this.isAllowDrop = false\n this.cacheRange = null\n this.cacheElementList = null\n this.cachePositionList = null\n this.cachePositionContext = null\n this.mouseDownStartPosition = null\n }\n\n public getDraw(): Draw {\n return this.draw\n }\n\n public register() {\n this.pageContainer.addEventListener('click', this.click.bind(this))\n this.pageContainer.addEventListener('mousedown', this.mousedown.bind(this))\n this.pageContainer.addEventListener('mouseup', this.mouseup.bind(this))\n this.pageContainer.addEventListener(\n 'mouseleave',\n this.mouseleave.bind(this)\n )\n this.pageContainer.addEventListener('mousemove', this.mousemove.bind(this))\n this.pageContainer.addEventListener('dblclick', this.dblclick.bind(this))\n this.pageContainer.addEventListener('dragover', this.dragover.bind(this))\n this.pageContainer.addEventListener('drop', this.drop.bind(this))\n threeClick(this.pageContainer, this.threeClick.bind(this))\n }\n\n public setIsAllowSelection(payload: boolean) {\n this.isAllowSelection = payload\n if (!payload) {\n this.applyPainterStyle()\n }\n }\n\n public setIsAllowDrag(payload: boolean) {\n this.isAllowDrag = payload\n this.isAllowDrop = payload\n }\n\n public clearPainterStyle() {\n this.pageList.forEach(p => {\n p.style.cursor = 'text'\n })\n this.draw.setPainterStyle(null)\n }\n\n public applyPainterStyle() {\n const painterStyle = this.draw.getPainterStyle()\n if (!painterStyle) return\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n let selection = this.range.getSelection()\n if (!selection) {\n const range = getWordRangeBySegmenter(this)\n if (range) {\n const elementList = this.draw.getElementList()\n selection = elementList.slice(range.startIndex + 1, range.endIndex + 1)\n }\n }\n if (!selection) return\n const painterStyleKeys = Object.keys(painterStyle)\n selection.forEach(s => {\n painterStyleKeys.forEach(pKey => {\n const key = pKey as keyof typeof ElementStyleKey\n Reflect.set(s, key, painterStyle[key])\n })\n })\n this.draw.render({ isSetCursor: false })\n const painterOptions = this.draw.getPainterOptions()\n if (!painterOptions || !painterOptions.isDblclick) {\n this.clearPainterStyle()\n }\n }\n\n public selectAll() {\n if (this.position.getPositionContext().isTable) {\n this.draw.getTableOperate().tableSelectAll()\n } else {\n const positionList = this.position.getPositionList()\n this.range.setRange(0, positionList.length - 1)\n this.draw.render({\n isSubmitHistory: false,\n isSetCursor: false,\n isCompute: false\n })\n }\n }\n\n public mousemove(evt: MouseEvent) {\n mousemove(evt, this)\n }\n\n public mousedown(evt: MouseEvent) {\n mousedown(evt, this)\n }\n\n public click() {\n if (isIOS && !this.draw.isReadonly()) {\n this.draw.getCursor().getAgentDom().focus()\n }\n }\n\n public mouseup(evt: MouseEvent) {\n mouseup(evt, this)\n }\n\n public mouseleave(evt: MouseEvent) {\n mouseleave(evt, this)\n }\n\n public keydown(evt: KeyboardEvent) {\n keydown(evt, this)\n }\n\n public dblclick(evt: MouseEvent) {\n click.dblclick(this, evt)\n }\n\n public threeClick() {\n click.threeClick(this)\n }\n\n public input(data: string) {\n input(data, this)\n }\n\n public async cut() {\n await cut(this)\n }\n\n public async copy(options?: ICopyOption) {\n await copy(this, options)\n }\n\n public compositionstart() {\n composition.compositionstart(this)\n }\n\n public compositionend(evt: CompositionEvent) {\n composition.compositionend(this, evt)\n }\n\n public drop(evt: DragEvent) {\n drop(evt, this)\n }\n\n public dragover(evt: DragEvent | MouseEvent) {\n drag.dragover(evt, this)\n }\n}\n","export const INTERNAL_SHORTCUT_KEY = {\n PAGE_SCALE: 'pageScale'\n}\n","import { EDITOR_COMPONENT } from '../../dataset/constant/Editor'\nimport { IEditorOption } from '../../interface/Editor'\nimport { findParent } from '../../utils'\nimport { Cursor } from '../cursor/Cursor'\nimport { Control } from '../draw/control/Control'\nimport { Draw } from '../draw/Draw'\nimport { HyperlinkParticle } from '../draw/particle/HyperlinkParticle'\nimport { DateParticle } from '../draw/particle/date/DateParticle'\nimport { Previewer } from '../draw/particle/previewer/Previewer'\nimport { TableTool } from '../draw/particle/table/TableTool'\nimport { RangeManager } from '../range/RangeManager'\nimport { CanvasEvent } from './CanvasEvent'\nimport { ImageParticle } from '../draw/particle/ImageParticle'\nimport { INTERNAL_SHORTCUT_KEY } from '../../dataset/constant/Shortcut'\n\nexport class GlobalEvent {\n private draw: Draw\n private options: Required<IEditorOption>\n private cursor: Cursor | null\n private canvasEvent: CanvasEvent\n private range: RangeManager\n private previewer: Previewer\n private tableTool: TableTool\n private hyperlinkParticle: HyperlinkParticle\n private control: Control\n private dateParticle: DateParticle\n private imageParticle: ImageParticle\n private dprMediaQueryList: MediaQueryList\n\n constructor(draw: Draw, canvasEvent: CanvasEvent) {\n this.draw = draw\n this.options = draw.getOptions()\n this.canvasEvent = canvasEvent\n this.cursor = null\n this.range = draw.getRange()\n this.previewer = draw.getPreviewer()\n this.tableTool = draw.getTableTool()\n this.hyperlinkParticle = draw.getHyperlinkParticle()\n this.dateParticle = draw.getDateParticle()\n this.imageParticle = draw.getImageParticle()\n this.control = draw.getControl()\n this.dprMediaQueryList = window.matchMedia(\n `(resolution: ${window.devicePixelRatio}dppx)`\n )\n }\n\n public register() {\n this.cursor = this.draw.getCursor()\n this.addEvent()\n }\n\n private addEvent() {\n window.addEventListener('blur', this.clearSideEffect)\n document.addEventListener('mousedown', this.clearSideEffect)\n document.addEventListener('mouseup', this.setCanvasEventAbility)\n document.addEventListener('wheel', this.setPageScale, { passive: false })\n document.addEventListener('visibilitychange', this._handleVisibilityChange)\n this.dprMediaQueryList.addEventListener('change', this._handleDprChange)\n }\n\n public removeEvent() {\n window.removeEventListener('blur', this.clearSideEffect)\n document.removeEventListener('mousedown', this.clearSideEffect)\n document.removeEventListener('mouseup', this.setCanvasEventAbility)\n document.removeEventListener('wheel', this.setPageScale)\n document.removeEventListener(\n 'visibilitychange',\n this._handleVisibilityChange\n )\n this.dprMediaQueryList.removeEventListener('change', this._handleDprChange)\n }\n\n public clearSideEffect = (evt: Event) => {\n if (!this.cursor) return\n const target = <Element>(evt?.composedPath()[0] || evt.target)\n const pageList = this.draw.getPageList()\n const innerEditorDom = findParent(\n target,\n (node: HTMLCanvasElement) => pageList.includes(node),\n true\n )\n if (innerEditorDom) return\n const outerEditorDom = findParent(\n target,\n (node: Node & Element) =>\n !!node && node.nodeType === 1 && !!node.getAttribute(EDITOR_COMPONENT),\n true\n )\n if (outerEditorDom) {\n this.watchCursorActive()\n return\n }\n this.cursor.recoveryCursor()\n this.range.recoveryRangeStyle()\n this.previewer.clearResizer()\n this.tableTool.dispose()\n this.hyperlinkParticle.clearHyperlinkPopup()\n this.control.destroyControl()\n this.dateParticle.clearDatePicker()\n this.imageParticle.destroyFloatImage()\n }\n\n public setCanvasEventAbility = () => {\n this.canvasEvent.setIsAllowDrag(false)\n this.canvasEvent.setIsAllowSelection(false)\n }\n\n public watchCursorActive() {\n if (!this.range.getIsCollapsed()) return\n setTimeout(() => {\n if (!this.cursor?.getAgentIsActive()) {\n this.cursor?.drawCursor({\n isFocus: false,\n isBlink: false\n })\n }\n })\n }\n\n public setPageScale = (evt: WheelEvent) => {\n if (\n this.options.shortcutDisableKeys.includes(\n INTERNAL_SHORTCUT_KEY.PAGE_SCALE\n )\n ) {\n return\n }\n if (!evt.ctrlKey) return\n evt.preventDefault()\n const { scale } = this.options\n if (evt.deltaY < 0) {\n const nextScale = scale * 10 + 1\n if (nextScale <= 30) {\n this.draw.setPageScale(nextScale / 10)\n }\n } else {\n const nextScale = scale * 10 - 1\n if (nextScale >= 5) {\n this.draw.setPageScale(nextScale / 10)\n }\n }\n }\n\n private _handleVisibilityChange = () => {\n if (document.visibilityState === 'visible') {\n const range = this.range.getRange()\n const isSetCursor =\n !!~range.startIndex &&\n !!~range.endIndex &&\n range.startIndex === range.endIndex\n this.range.replaceRange(range)\n this.draw.render({\n isSetCursor,\n isCompute: false,\n isSubmitHistory: false,\n curIndex: range.startIndex\n })\n }\n }\n\n private _handleDprChange = () => {\n this.draw.setPageDevicePixel()\n }\n}\n","import { Draw } from '../draw/Draw'\n\nexport class HistoryManager {\n private undoStack: Array<Function> = []\n private redoStack: Array<Function> = []\n private maxRecordCount: number\n\n constructor(draw: Draw) {\n this.maxRecordCount = draw.getOptions().historyMaxRecordCount + 1\n }\n\n public undo() {\n if (this.undoStack.length > 1) {\n const pop = this.undoStack.pop()!\n this.redoStack.push(pop)\n if (this.undoStack.length) {\n this.undoStack[this.undoStack.length - 1]()\n }\n }\n }\n\n public redo() {\n if (this.redoStack.length) {\n const pop = this.redoStack.pop()!\n this.undoStack.push(pop)\n pop()\n }\n }\n\n public execute(fn: Function) {\n this.undoStack.push(fn)\n if (this.redoStack.length) {\n this.redoStack = []\n }\n while (this.undoStack.length > this.maxRecordCount) {\n this.undoStack.shift()\n }\n }\n\n public isCanUndo(): boolean {\n return this.undoStack.length > 1\n }\n\n public isCanRedo(): boolean {\n return !!this.redoStack.length\n }\n\n public isStackEmpty(): boolean {\n return !this.undoStack.length && !this.redoStack.length\n }\n\n public recovery() {\n this.undoStack = []\n this.redoStack = []\n }\n\n public popUndo() {\n return this.undoStack.pop()\n }\n}\n","import { ElementType, ListStyle, RowFlex, VerticalAlign } from '../..'\nimport { ZERO } from '../../dataset/constant/Common'\nimport { ControlComponent } from '../../dataset/enum/Control'\nimport {\n IComputePageRowPositionPayload,\n IComputePageRowPositionResult,\n IComputeRowPositionPayload,\n IFloatPosition,\n IGetFloatPositionByXYPayload,\n ISetSurroundPositionPayload\n} from '../../interface/Position'\nimport { IEditorOption } from '../../interface/Editor'\nimport { IElement, IElementPosition } from '../../interface/Element'\nimport {\n ICurrentPosition,\n IGetPositionByXYPayload,\n IPositionContext\n} from '../../interface/Position'\nimport { Draw } from '../draw/Draw'\nimport { EditorMode, EditorZone } from '../../dataset/enum/Editor'\nimport { deepClone, isRectIntersect } from '../../utils'\nimport { ImageDisplay } from '../../dataset/enum/Common'\nimport { DeepRequired } from '../../interface/Common'\nimport { EventBus } from '../event/eventbus/EventBus'\nimport { EventBusMap } from '../../interface/EventBus'\nimport { getIsBlockElement } from '../../utils/element'\n\nexport class Position {\n private cursorPosition: IElementPosition | null\n private positionContext: IPositionContext\n private positionList: IElementPosition[]\n private floatPositionList: IFloatPosition[]\n\n private draw: Draw\n private eventBus: EventBus<EventBusMap>\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.positionList = []\n this.floatPositionList = []\n this.cursorPosition = null\n this.positionContext = {\n isTable: false,\n isControl: false\n }\n\n this.draw = draw\n this.eventBus = draw.getEventBus()\n this.options = draw.getOptions()\n }\n\n public getFloatPositionList(): IFloatPosition[] {\n return this.floatPositionList\n }\n\n public getTablePositionList(\n sourceElementList: IElement[]\n ): IElementPosition[] {\n const { index, trIndex, tdIndex } = this.positionContext\n return (\n sourceElementList[index!].trList![trIndex!].tdList[tdIndex!]\n .positionList || []\n )\n }\n\n public getPositionList(): IElementPosition[] {\n return this.positionContext.isTable\n ? this.getTablePositionList(this.draw.getOriginalElementList())\n : this.getOriginalPositionList()\n }\n\n public getMainPositionList(): IElementPosition[] {\n return this.positionContext.isTable\n ? this.getTablePositionList(this.draw.getOriginalMainElementList())\n : this.positionList\n }\n\n public getOriginalPositionList(): IElementPosition[] {\n const zoneManager = this.draw.getZone()\n if (zoneManager.isHeaderActive()) {\n const header = this.draw.getHeader()\n return header.getPositionList()\n }\n if (zoneManager.isFooterActive()) {\n const footer = this.draw.getFooter()\n return footer.getPositionList()\n }\n return this.positionList\n }\n\n public getOriginalMainPositionList(): IElementPosition[] {\n return this.positionList\n }\n\n public getSelectionPositionList(): IElementPosition[] | null {\n const { startIndex, endIndex } = this.draw.getRange().getRange()\n if (startIndex === endIndex) return null\n const positionList = this.getPositionList()\n return positionList.slice(startIndex + 1, endIndex + 1)\n }\n\n public setPositionList(payload: IElementPosition[]) {\n this.positionList = payload\n }\n\n public setFloatPositionList(payload: IFloatPosition[]) {\n this.floatPositionList = payload\n }\n\n public computePageRowPosition(\n payload: IComputePageRowPositionPayload\n ): IComputePageRowPositionResult {\n const {\n positionList,\n rowList,\n pageNo,\n startX,\n startY,\n startRowIndex,\n startIndex,\n innerWidth,\n rowNoOffset,\n columnNo: payloadColumnNo,\n zone\n } = payload\n const {\n scale,\n table: { tdPadding }\n } = this.options\n let x = startX\n let y = startY\n let index = startIndex\n for (let i = 0; i < rowList.length; i++) {\n const curRow = rowList[i]\n if (!curRow.isSurround) {\n const curRowWidth = curRow.width + (curRow.offsetX || 0)\n if (curRow.rowFlex === RowFlex.CENTER) {\n x += (innerWidth - curRowWidth) / 2\n } else if (curRow.rowFlex === RowFlex.RIGHT) {\n x += innerWidth - curRowWidth\n }\n }\n x += curRow.offsetX || 0\n y += curRow.offsetY || 0\n const tablePreX = x\n const tablePreY = y\n for (let j = 0; j < curRow.elementList.length; j++) {\n const element = curRow.elementList[j]\n const metrics = element.metrics\n const offsetY =\n !element.hide &&\n ((element.imgDisplay !== ImageDisplay.INLINE &&\n element.type === ElementType.IMAGE) ||\n element.type === ElementType.LATEX)\n ? curRow.ascent - metrics.height\n : curRow.ascent\n if (element.left) {\n x += element.left\n }\n if (element.translateX) {\n x += element.translateX * scale\n }\n const positionItem: IElementPosition = {\n pageNo,\n index,\n value: element.value,\n rowIndex: startRowIndex + i,\n rowNo: (rowNoOffset ?? 0) + i,\n columnNo: payloadColumnNo ?? 0,\n metrics,\n left: element.left || 0,\n ascent: offsetY,\n lineHeight: curRow.height,\n isFirstLetter: j === 0,\n isLastLetter: j === curRow.elementList.length - 1,\n coordinate: {\n leftTop: [x, y],\n leftBottom: [x, y + curRow.height],\n rightTop: [x + metrics.width, y],\n rightBottom: [x + metrics.width, y + curRow.height]\n }\n }\n if (\n element.imgDisplay === ImageDisplay.SURROUND ||\n element.imgDisplay === ImageDisplay.FLOAT_TOP ||\n element.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n const prePosition = positionList[positionList.length - 1]\n if (prePosition) {\n positionItem.metrics = prePosition.metrics\n positionItem.coordinate = prePosition.coordinate\n }\n if (!element.imgFloatPosition) {\n element.imgFloatPosition = {\n x,\n y,\n pageNo\n }\n }\n this.floatPositionList.push({\n pageNo,\n element,\n position: positionItem,\n isTable: payload.isTable,\n index: payload.index,\n tdIndex: payload.tdIndex,\n trIndex: payload.trIndex,\n tdValueIndex: index,\n zone\n })\n }\n positionList.push(positionItem)\n index++\n x += metrics.width\n if (element.type === ElementType.TABLE && !element.hide) {\n const tdPaddingWidth = tdPadding[1] + tdPadding[3]\n const tdPaddingHeight = tdPadding[0] + tdPadding[2]\n for (let t = 0; t < element.trList!.length; t++) {\n const tr = element.trList![t]\n for (let d = 0; d < tr.tdList!.length; d++) {\n const td = tr.tdList[d]\n td.positionList = []\n const rowList = td.rowList!\n const drawRowResult = this.computePageRowPosition({\n positionList: td.positionList,\n rowList,\n pageNo,\n startRowIndex: 0,\n startIndex: 0,\n startX:\n (td.x! + tdPadding[3]) * scale +\n tablePreX +\n (element.translateX || 0) * scale,\n startY: (td.y! + tdPadding[0]) * scale + tablePreY,\n innerWidth: (td.width! - tdPaddingWidth) * scale,\n isTable: true,\n index: index - 1,\n tdIndex: d,\n trIndex: t,\n zone\n })\n if (\n td.verticalAlign === VerticalAlign.MIDDLE ||\n td.verticalAlign === VerticalAlign.BOTTOM\n ) {\n const rowsHeight = rowList.reduce(\n (pre, cur) => pre + cur.height,\n 0\n )\n const blankHeight =\n (td.height! - tdPaddingHeight) * scale - rowsHeight\n const offsetHeight =\n td.verticalAlign === VerticalAlign.MIDDLE\n ? blankHeight / 2\n : blankHeight\n if (Math.floor(offsetHeight) > 0) {\n td.positionList.forEach(tdPosition => {\n const {\n coordinate: { leftTop, leftBottom, rightBottom, rightTop }\n } = tdPosition\n leftTop[1] += offsetHeight\n leftBottom[1] += offsetHeight\n rightBottom[1] += offsetHeight\n rightTop[1] += offsetHeight\n })\n }\n }\n x = drawRowResult.x\n y = drawRowResult.y\n }\n }\n x = tablePreX\n y = tablePreY\n }\n }\n x = startX\n y += curRow.height\n }\n return { x, y, index }\n }\n\n public computePositionList() {\n this.positionList = []\n const columnWidth = this.draw.getColumnWidth()\n const columnCount = this.draw.getColumnCount()\n const pageRowList = this.draw.getPageRowList()\n const margins = this.draw.getMargins()\n const baseStartX = margins[3]\n const header = this.draw.getHeader()\n const extraHeight = header.getExtraHeight()\n const startY = margins[0] + extraHeight\n let startRowIndex = 0\n if (columnCount <= 1) {\n for (let i = 0; i < pageRowList.length; i++) {\n const rowList = pageRowList[i]\n if (!rowList?.length) continue\n const startIndex = rowList[0].startIndex\n this.computePageRowPosition({\n positionList: this.positionList,\n rowList,\n pageNo: i,\n startRowIndex,\n startIndex,\n startX: baseStartX,\n startY,\n innerWidth: columnWidth\n })\n startRowIndex += rowList.length\n }\n } else {\n const { column: { gap }, scale } = this.options\n for (let i = 0; i < pageRowList.length; i++) {\n const rowList = pageRowList[i]\n if (!rowList?.length) continue\n const columnGroups: Map<number, typeof rowList> = new Map()\n for (const row of rowList) {\n const colNo = row.columnNo ?? 0\n if (!columnGroups.has(colNo)) {\n columnGroups.set(colNo, [])\n }\n columnGroups.get(colNo)!.push(row)\n }\n const sortedColNos = Array.from(columnGroups.keys()).sort(\n (a, b) => a - b\n )\n let pageRowNoOffset = 0\n for (const colNo of sortedColNos) {\n const colRows = columnGroups.get(colNo)!\n const colStartX =\n baseStartX + colNo * (columnWidth + gap * scale)\n const startIndex = colRows[0].startIndex\n this.computePageRowPosition({\n positionList: this.positionList,\n rowList: colRows,\n pageNo: i,\n startRowIndex,\n startIndex,\n startX: colStartX,\n startY,\n innerWidth: columnWidth,\n rowNoOffset: pageRowNoOffset,\n columnNo: colNo\n })\n startRowIndex += colRows.length\n pageRowNoOffset += colRows.length\n }\n }\n }\n }\n\n public computeRowPosition(\n payload: IComputeRowPositionPayload\n ): IElementPosition[] {\n const { row, innerWidth } = payload\n const positionList: IElementPosition[] = []\n this.computePageRowPosition({\n positionList,\n innerWidth,\n rowList: [deepClone(row)],\n pageNo: 0,\n startX: 0,\n startY: 0,\n startIndex: 0,\n startRowIndex: 0\n })\n return positionList\n }\n\n public setCursorPosition(position: IElementPosition | null) {\n this.cursorPosition = position\n }\n\n public getCursorPosition(): IElementPosition | null {\n return this.cursorPosition\n }\n\n public getPositionContext(): IPositionContext {\n return this.positionContext\n }\n\n public setPositionContext(payload: IPositionContext) {\n this.eventBus.emit('positionContextChange', {\n value: payload,\n oldValue: this.positionContext\n })\n this.positionContext = payload\n }\n\n public getPositionByXY(payload: IGetPositionByXYPayload): ICurrentPosition {\n const { x, y, isTable } = payload\n let { elementList, positionList } = payload\n if (!elementList) {\n elementList = this.draw.getOriginalElementList()\n }\n if (!positionList) {\n positionList = this.getOriginalPositionList()\n }\n const zoneManager = this.draw.getZone()\n const curPageNo = payload.pageNo ?? this.draw.getPageNo()\n const isMainActive = zoneManager.isMainActive()\n const positionNo = isMainActive ? curPageNo : 0\n if (!isTable) {\n const floatTopPosition = this.getFloatPositionByXY({\n ...payload,\n imgDisplays: [ImageDisplay.FLOAT_TOP, ImageDisplay.SURROUND]\n })\n if (floatTopPosition) return floatTopPosition\n }\n for (let j = 0; j < positionList.length; j++) {\n const {\n index,\n pageNo,\n left,\n isFirstLetter,\n coordinate: { leftTop, rightTop, leftBottom }\n } = positionList[j]\n if (positionNo !== pageNo) continue\n if (pageNo > positionNo) break\n if (\n leftTop[0] - left <= x &&\n rightTop[0] >= x &&\n leftTop[1] <= y &&\n leftBottom[1] >= y\n ) {\n let curPositionIndex = j\n const element = elementList[j]\n if (element.type === ElementType.TABLE) {\n for (let t = 0; t < element.trList!.length; t++) {\n const tr = element.trList![t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tablePosition = this.getPositionByXY({\n x,\n y,\n td,\n pageNo: curPageNo,\n tablePosition: positionList[j],\n isTable: true,\n elementList: td.value,\n positionList: td.positionList\n })\n if (~tablePosition.index) {\n const { index: tdValueIndex, hitLineStartIndex } = tablePosition\n const tdValueElement = td.value[tdValueIndex]\n return {\n index,\n isCheckbox:\n tablePosition.isCheckbox ||\n tdValueElement.type === ElementType.CHECKBOX ||\n tdValueElement.controlComponent ===\n ControlComponent.CHECKBOX,\n isRadio:\n tdValueElement.type === ElementType.RADIO ||\n tdValueElement.controlComponent === ControlComponent.RADIO,\n isControl: !!tdValueElement.controlId,\n isImage: tablePosition.isImage,\n isDirectHit: tablePosition.isDirectHit,\n isTable: true,\n tdIndex: d,\n trIndex: t,\n tdValueIndex,\n tdId: td.id,\n trId: tr.id,\n tableId: element.id,\n hitLineStartIndex\n }\n }\n }\n }\n }\n if (\n element.type === ElementType.IMAGE ||\n element.type === ElementType.LATEX\n ) {\n return {\n index: curPositionIndex,\n isDirectHit: true,\n isImage: true\n }\n }\n if (\n element.type === ElementType.CHECKBOX ||\n element.controlComponent === ControlComponent.CHECKBOX\n ) {\n return {\n index: curPositionIndex,\n isDirectHit: true,\n isCheckbox: true\n }\n }\n if (element.type === ElementType.LABEL) {\n return {\n index: curPositionIndex,\n isDirectHit: true,\n isLabel: true\n }\n }\n if (\n element.type === ElementType.TAB &&\n element.listStyle === ListStyle.CHECKBOX\n ) {\n let index = curPositionIndex - 1\n while (index > 0) {\n const element = elementList[index]\n if (\n element.value === ZERO &&\n element.listStyle === ListStyle.CHECKBOX\n ) {\n break\n }\n index--\n }\n return {\n index,\n isDirectHit: true,\n isCheckbox: true\n }\n }\n if (\n element.type === ElementType.RADIO ||\n element.controlComponent === ControlComponent.RADIO\n ) {\n return {\n index: curPositionIndex,\n isDirectHit: true,\n isRadio: true\n }\n }\n let hitLineStartIndex: number | undefined\n if (elementList[index].value !== ZERO) {\n const valueWidth = rightTop[0] - leftTop[0]\n if (x < leftTop[0] + valueWidth / 2) {\n curPositionIndex = j - 1\n if (isFirstLetter) {\n hitLineStartIndex = j\n }\n }\n }\n return {\n isDirectHit: true,\n hitLineStartIndex,\n index: curPositionIndex,\n isControl: !!element.controlId\n }\n }\n }\n if (!isTable) {\n const floatBottomPosition = this.getFloatPositionByXY({\n ...payload,\n imgDisplays: [ImageDisplay.FLOAT_BOTTOM]\n })\n if (floatBottomPosition) return floatBottomPosition\n }\n let isLastArea = false\n let curPositionIndex = -1\n let hitLineStartIndex: number | undefined\n if (isTable) {\n const { scale } = this.options\n const { td, tablePosition } = payload\n if (td && tablePosition) {\n const { leftTop } = tablePosition.coordinate\n const tdX = td.x! * scale + leftTop[0]\n const tdY = td.y! * scale + leftTop[1]\n const tdWidth = td.width! * scale\n const tdHeight = td.height! * scale\n if (!(tdX < x && x < tdX + tdWidth && tdY < y && y < tdY + tdHeight)) {\n return {\n index: curPositionIndex\n }\n }\n }\n }\n const lastLetterList = positionList.filter(\n p => p.isLastLetter && p.pageNo === positionNo\n )\n const columnCount = this.draw.getColumnCount()\n const columnWidth = this.draw.getColumnWidth()\n // Determine which column the click x belongs to\n let clickColNo = 0\n if (columnCount > 1) {\n const margins = this.draw.getMargins()\n const {\n column: { gap },\n scale\n } = this.options\n const colStep = columnWidth + gap * scale\n const relX = x - margins[3]\n clickColNo = Math.max(\n 0,\n Math.min(\n Math.floor((relX + gap * scale / 2) / colStep),\n columnCount - 1\n )\n )\n }\n for (let j = 0; j < lastLetterList.length; j++) {\n const {\n index,\n rowNo,\n columnNo: lastLetterColNo,\n coordinate: { leftTop, leftBottom }\n } = lastLetterList[j]\n if (y > leftTop[1] && y <= leftBottom[1]) {\n // When multi-column, skip rows from a different column\n if (columnCount > 1 && lastLetterColNo !== clickColNo) {\n continue\n }\n const headIndex = positionList.findIndex(\n p => p.pageNo === positionNo && p.rowNo === rowNo\n )\n const headElement = elementList[headIndex]\n const headPosition = positionList[headIndex]\n const headStartX =\n headElement.listStyle === ListStyle.CHECKBOX\n ? this.draw.getMargins()[3]\n : headPosition.coordinate.leftTop[0]\n if (x < headStartX) {\n if (~headIndex) {\n if (headPosition.value === ZERO) {\n curPositionIndex = headIndex\n } else {\n curPositionIndex = headIndex - 1\n hitLineStartIndex = headIndex\n }\n } else {\n curPositionIndex = index\n }\n } else {\n if (headElement.listStyle === ListStyle.CHECKBOX && x < leftTop[0]) {\n return {\n index: headIndex,\n isDirectHit: true,\n isCheckbox: true\n }\n }\n curPositionIndex = index\n }\n isLastArea = true\n break\n }\n }\n if (!isLastArea) {\n if (this.draw.getIsPagingMode()) {\n const header = this.draw.getHeader()\n const headerBottomY = header.getEffectiveBottomY()\n const footer = this.draw.getFooter()\n const footerTopY = footer.getEffectiveTopY()\n if (isMainActive) {\n if (y < headerBottomY) {\n return {\n index: -1,\n zone: EditorZone.HEADER\n }\n }\n if (y > footerTopY) {\n return {\n index: -1,\n zone: EditorZone.FOOTER\n }\n }\n } else {\n if (y <= footerTopY && y >= headerBottomY) {\n return {\n index: -1,\n zone: EditorZone.MAIN\n }\n }\n }\n }\n const margins = this.draw.getMargins()\n if (y <= margins[0]) {\n // Find the first row in the clicked column\n const firstRowNo = columnCount > 1\n ? lastLetterList.find(ll => ll.columnNo === clickColNo)?.rowNo\n : 0\n const targetFirstRowNo = firstRowNo ?? 0\n for (let p = 0; p < positionList.length; p++) {\n const position = positionList[p]\n if (\n position.pageNo !== positionNo ||\n position.rowNo !== targetFirstRowNo\n ) {\n continue\n }\n const { leftTop, rightTop } = position.coordinate\n if (\n (clickColNo === 0 && x <= margins[3]) ||\n (x >= leftTop[0] && x <= rightTop[0]) ||\n positionList[p + 1]?.rowNo !== targetFirstRowNo\n ) {\n return {\n index: position.index\n }\n }\n }\n } else {\n // Find the last row in the clicked column\n let targetLastLetter = lastLetterList[lastLetterList.length - 1]\n if (columnCount > 1) {\n for (let k = lastLetterList.length - 1; k >= 0; k--) {\n if (lastLetterList[k].columnNo === clickColNo) {\n targetLastLetter = lastLetterList[k]\n break\n }\n }\n }\n if (targetLastLetter) {\n const lastRowNo = targetLastLetter.rowNo\n for (let p = 0; p < positionList.length; p++) {\n const position = positionList[p]\n if (\n position.pageNo !== positionNo ||\n position.rowNo !== lastRowNo\n ) {\n continue\n }\n const { leftTop, rightTop } = position.coordinate\n if (\n (clickColNo === 0 && x <= margins[3]) ||\n (x >= leftTop[0] && x <= rightTop[0]) ||\n positionList[p + 1]?.rowNo !== lastRowNo\n ) {\n return {\n index: position.index\n }\n }\n }\n }\n }\n return {\n index:\n lastLetterList[lastLetterList.length - 1]?.index ||\n positionList.length - 1\n }\n }\n return {\n hitLineStartIndex,\n index: curPositionIndex,\n isControl: !!elementList[curPositionIndex]?.controlId\n }\n }\n\n public getFloatPositionByXY(\n payload: IGetFloatPositionByXYPayload\n ): ICurrentPosition | void {\n const { x, y } = payload\n const currentPageNo = payload.pageNo ?? this.draw.getPageNo()\n const currentZone = this.draw.getZone().getZone()\n const { scale } = this.options\n for (let f = 0; f < this.floatPositionList.length; f++) {\n const {\n position,\n element,\n isTable,\n index,\n trIndex,\n tdIndex,\n tdValueIndex,\n zone: floatElementZone,\n pageNo\n } = this.floatPositionList[f]\n if (\n currentPageNo === pageNo &&\n element.type === ElementType.IMAGE &&\n element.imgDisplay &&\n payload.imgDisplays.includes(element.imgDisplay) &&\n (!floatElementZone || floatElementZone === currentZone)\n ) {\n const imgFloatPosition = element.imgFloatPosition!\n const imgFloatPositionX = imgFloatPosition.x * scale\n const imgFloatPositionY = imgFloatPosition.y * scale\n const elementWidth = element.width! * scale\n const elementHeight = element.height! * scale\n if (\n x >= imgFloatPositionX &&\n x <= imgFloatPositionX + elementWidth &&\n y >= imgFloatPositionY &&\n y <= imgFloatPositionY + elementHeight\n ) {\n if (isTable) {\n return {\n index: index!,\n isDirectHit: true,\n isImage: true,\n isTable,\n trIndex,\n tdIndex,\n tdValueIndex,\n tdId: element.tdId,\n trId: element.trId,\n tableId: element.tableId\n }\n }\n return {\n index: position.index,\n isDirectHit: true,\n isImage: true\n }\n }\n }\n }\n }\n\n public adjustPositionContext(\n payload: IGetPositionByXYPayload\n ): ICurrentPosition | null {\n const positionResult = this.getPositionByXY(payload)\n if (!~positionResult.index) return null\n if (\n positionResult.isControl &&\n this.draw.getMode() !== EditorMode.READONLY\n ) {\n const { index, isTable, trIndex, tdIndex, tdValueIndex } = positionResult\n const control = this.draw.getControl()\n const { newIndex } = control.moveCursor({\n index,\n isTable,\n trIndex,\n tdIndex,\n tdValueIndex\n })\n if (isTable) {\n positionResult.tdValueIndex = newIndex\n } else {\n positionResult.index = newIndex\n }\n }\n const {\n index,\n isCheckbox,\n isRadio,\n isControl,\n isImage,\n isLabel,\n isDirectHit,\n isTable,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId\n } = positionResult\n this.setPositionContext({\n isTable: isTable || false,\n isCheckbox: isCheckbox || false,\n isRadio: isRadio || false,\n isControl: isControl || false,\n isImage: isImage || false,\n isLabel: isLabel || false,\n isDirectHit: isDirectHit || false,\n index,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId\n })\n return positionResult\n }\n\n public setSurroundPosition(payload: ISetSurroundPositionPayload) {\n const { scale } = this.options\n const {\n pageNo,\n row,\n rowElement,\n rowElementRect,\n surroundElementList,\n availableWidth\n } = payload\n let x = rowElementRect.x\n let rowIncreaseWidth = 0\n if (\n surroundElementList.length &&\n !getIsBlockElement(rowElement) &&\n !rowElement.control?.minWidth\n ) {\n for (let s = 0; s < surroundElementList.length; s++) {\n const surroundElement = surroundElementList[s]\n const floatPosition = surroundElement.imgFloatPosition!\n if (floatPosition.pageNo !== pageNo) continue\n const surroundRect = {\n ...floatPosition,\n x: floatPosition.x * scale,\n y: floatPosition.y * scale,\n width: surroundElement.width! * scale,\n height: surroundElement.height! * scale\n }\n if (isRectIntersect(rowElementRect, surroundRect)) {\n row.isSurround = true\n const translateX =\n surroundRect.width + surroundRect.x - rowElementRect.x\n rowElement.left = translateX\n row.width += translateX\n rowIncreaseWidth += translateX\n x = surroundRect.x + surroundRect.width\n if (row.width + rowElement.metrics.width > availableWidth) {\n rowElement.left = 0\n row.width -= rowIncreaseWidth\n break\n }\n }\n }\n }\n return { x, rowIncreaseWidth }\n }\n}\n","import { ElementType } from '../..'\nimport { ZERO } from '../../dataset/constant/Common'\nimport { TEXTLIKE_ELEMENT_TYPE } from '../../dataset/constant/Element'\nimport { ControlComponent } from '../../dataset/enum/Control'\nimport { EditorContext } from '../../dataset/enum/Editor'\nimport { IControlContext } from '../../interface/Control'\nimport { IEditorOption } from '../../interface/Editor'\nimport { IElement } from '../../interface/Element'\nimport { EventBusMap } from '../../interface/EventBus'\nimport { IRangeStyle } from '../../interface/Listener'\nimport {\n IRange,\n IRangeElementStyle,\n IRangeParagraphInfo,\n RangeRowArray,\n RangeRowMap\n} from '../../interface/Range'\nimport { getAnchorElement } from '../../utils/element'\nimport { Draw } from '../draw/Draw'\nimport { EventBus } from '../event/eventbus/EventBus'\nimport { HistoryManager } from '../history/HistoryManager'\nimport { Listener } from '../listener/Listener'\nimport { Position } from '../position/Position'\n\nexport class RangeManager {\n private draw: Draw\n private options: Required<IEditorOption>\n private range: IRange\n private listener: Listener\n private eventBus: EventBus<EventBusMap>\n private position: Position\n private historyManager: HistoryManager\n private defaultStyle: IRangeElementStyle | null\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.listener = draw.getListener()\n this.eventBus = draw.getEventBus()\n this.position = draw.getPosition()\n this.historyManager = draw.getHistoryManager()\n this.range = {\n startIndex: -1,\n endIndex: -1\n }\n this.defaultStyle = null\n }\n\n public getRange(): IRange {\n return this.range\n }\n\n public clearRange() {\n this.setRange(-1, -1)\n }\n\n public setDefaultStyle(style: IRangeElementStyle | null) {\n if (!style) {\n this.defaultStyle = null\n } else {\n this.defaultStyle = {\n ...this.defaultStyle,\n ...style\n }\n }\n }\n\n public getDefaultStyle(): IRangeElementStyle | null {\n return this.defaultStyle\n }\n\n public getRangeAnchorStyle(\n elementList: IElement[],\n anchorIndex: number\n ): IElement | null {\n const anchorElement = getAnchorElement(elementList, anchorIndex)\n if (!anchorElement) return null\n return {\n ...anchorElement,\n ...this.defaultStyle\n }\n }\n\n public getIsRangeChange(\n startIndex: number,\n endIndex: number,\n tableId?: string,\n startTdIndex?: number,\n endTdIndex?: number,\n startTrIndex?: number,\n endTrIndex?: number\n ): boolean {\n return (\n this.range.startIndex !== startIndex ||\n this.range.endIndex !== endIndex ||\n this.range.tableId !== tableId ||\n this.range.startTdIndex !== startTdIndex ||\n this.range.endTdIndex !== endTdIndex ||\n this.range.startTrIndex !== startTrIndex ||\n this.range.endTrIndex !== endTrIndex\n )\n }\n\n public getIsCollapsed(): boolean {\n const { startIndex, endIndex } = this.range\n return startIndex === endIndex\n }\n\n public getIsSelection(): boolean {\n const { startIndex, endIndex } = this.range\n if (!~startIndex && !~endIndex) return false\n return startIndex !== endIndex\n }\n\n public getSelection(): IElement[] | null {\n const { startIndex, endIndex } = this.range\n if (startIndex === endIndex) return null\n const elementList = this.draw.getElementList()\n return elementList.slice(\n elementList[startIndex]?.value === ZERO ? startIndex : startIndex + 1,\n endIndex + 1\n )\n }\n\n public getSelectionElementList(): IElement[] | null {\n if (this.range.isCrossRowCol) {\n const rowCol = this.draw.getTableParticle().getRangeRowCol()\n if (!rowCol) return null\n const elementList: IElement[] = []\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n for (let c = 0; c < row.length; c++) {\n const col = row[c]\n elementList.push(...col.value)\n }\n }\n return elementList\n }\n return this.getSelection()\n }\n\n public getTextLikeSelection(): IElement[] | null {\n const selection = this.getSelection()\n if (!selection) return null\n return selection.filter(\n s => !s.type || TEXTLIKE_ELEMENT_TYPE.includes(s.type)\n )\n }\n\n public getTextLikeSelectionElementList(): IElement[] | null {\n const selection = this.getSelectionElementList()\n if (!selection) return null\n return selection.filter(\n s => !s.type || TEXTLIKE_ELEMENT_TYPE.includes(s.type) || s.type === ElementType.LABEL\n )\n }\n\n public getRangeRow(): RangeRowMap | null {\n const { startIndex, endIndex } = this.range\n if (!~startIndex && !~endIndex) return null\n const positionList = this.position.getPositionList()\n const rangeRow: RangeRowMap = new Map()\n for (let p = startIndex; p < endIndex + 1; p++) {\n const { pageNo, rowNo } = positionList[p]\n const rowSet = rangeRow.get(pageNo)\n if (!rowSet) {\n rangeRow.set(pageNo, new Set([rowNo]))\n } else {\n if (!rowSet.has(rowNo)) {\n rowSet.add(rowNo)\n }\n }\n }\n return rangeRow\n }\n\n public getRangeRowElementList(): IElement[] | null {\n const { startIndex, endIndex, isCrossRowCol } = this.range\n if (!~startIndex && !~endIndex) return null\n if (isCrossRowCol) {\n return this.getSelectionElementList()\n }\n const rangeRow = this.getRangeRow()\n if (!rangeRow) return null\n const positionList = this.position.getPositionList()\n const elementList = this.draw.getElementList()\n const rowElementList: IElement[] = []\n for (let p = 0; p < positionList.length; p++) {\n const position = positionList[p]\n const rowSet = rangeRow.get(position.pageNo)\n if (!rowSet) continue\n if (rowSet.has(position.rowNo)) {\n rowElementList.push(elementList[p])\n }\n }\n return rowElementList\n }\n\n public getRangeParagraph(): RangeRowArray | null {\n const { startIndex, endIndex } = this.range\n if (!~startIndex && !~endIndex) return null\n const positionList = this.position.getPositionList()\n const elementList = this.draw.getElementList()\n const rangeRow: RangeRowArray = new Map()\n let start = startIndex\n while (start >= 0) {\n const { pageNo, rowNo } = positionList[start]\n let rowArray = rangeRow.get(pageNo)\n if (!rowArray) {\n rowArray = []\n rangeRow.set(pageNo, rowArray)\n }\n if (!rowArray.includes(rowNo)) {\n rowArray.unshift(rowNo)\n }\n const element = elementList[start]\n const preElement = elementList[start - 1]\n if (\n (element.value === ZERO && !element.listWrap) ||\n element.listId !== preElement?.listId ||\n element.titleId !== preElement?.titleId\n ) {\n break\n }\n start--\n }\n const isCollapsed = startIndex === endIndex\n if (!isCollapsed) {\n let middle = startIndex + 1\n while (middle < endIndex) {\n const { pageNo, rowNo } = positionList[middle]\n let rowArray = rangeRow.get(pageNo)\n if (!rowArray) {\n rowArray = []\n rangeRow.set(pageNo, rowArray)\n }\n if (!rowArray.includes(rowNo)) {\n rowArray.push(rowNo)\n }\n middle++\n }\n }\n let end = endIndex\n if (isCollapsed && elementList[startIndex].value === ZERO) {\n end += 1\n }\n while (end < positionList.length) {\n const element = elementList[end]\n const nextElement = elementList[end + 1]\n if (\n (element.value === ZERO && !element.listWrap) ||\n element.listId !== nextElement?.listId ||\n element.titleId !== nextElement?.titleId\n ) {\n break\n }\n const { pageNo, rowNo } = positionList[end]\n let rowArray = rangeRow.get(pageNo)\n if (!rowArray) {\n rowArray = []\n rangeRow.set(pageNo, rowArray)\n }\n if (!rowArray.includes(rowNo)) {\n rowArray.push(rowNo)\n }\n end++\n }\n return rangeRow\n }\n\n public getRangeParagraphInfo(): IRangeParagraphInfo | null {\n const { startIndex, endIndex } = this.range\n if (!~startIndex && !~endIndex) return null\n let startPositionIndex = -1\n const rangeElementList: IElement[] = []\n const rangeRow = this.getRangeParagraph()\n if (!rangeRow) return null\n const elementList = this.draw.getElementList()\n const positionList = this.position.getPositionList()\n for (let p = 0; p < positionList.length; p++) {\n const position = positionList[p]\n const rowArray = rangeRow.get(position.pageNo)\n if (!rowArray) continue\n if (rowArray.includes(position.rowNo)) {\n if (!~startPositionIndex) {\n startPositionIndex = position.index\n }\n rangeElementList.push(elementList[p])\n }\n }\n if (!rangeElementList.length) return null\n return {\n elementList: rangeElementList,\n startIndex: startPositionIndex\n }\n }\n\n public getRangeParagraphElementList(): IElement[] | null {\n return this.getRangeParagraphInfo()?.elementList || null\n }\n\n public getRangeTableElement(): IElement | null {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return null\n const originalElementList = this.draw.getOriginalElementList()\n return originalElementList[positionContext.index!]\n }\n\n public getIsSelectAll() {\n const elementList = this.draw.getElementList()\n const { startIndex, endIndex } = this.range\n return (\n startIndex === 0 &&\n elementList.length - 1 === endIndex &&\n !this.position.getPositionContext().isTable\n )\n }\n\n public getIsPointInRange(x: number, y: number): boolean {\n const { startIndex, endIndex } = this.range\n const positionList = this.position.getPositionList()\n for (let p = startIndex + 1; p <= endIndex; p++) {\n const position = positionList[p]\n if (!position) break\n const {\n coordinate: { leftTop, rightBottom }\n } = positionList[p]\n if (\n x >= leftTop[0] &&\n x <= rightBottom[0] &&\n y >= leftTop[1] &&\n y <= rightBottom[1]\n ) {\n return true\n }\n }\n return false\n }\n\n public getKeywordRangeList(payload: string): IRange[] {\n const searchMatchList = this.draw\n .getSearch()\n .getMatchList(payload, this.draw.getOriginalElementList())\n const searchRangeMap: Map<string, IRange> = new Map()\n for (const searchMatch of searchMatchList) {\n const searchRange = searchRangeMap.get(searchMatch.groupId)\n if (searchRange) {\n searchRange.endIndex += 1\n } else {\n const { type, groupId, tableId, index, tdIndex, trIndex } = searchMatch\n const range: IRange = {\n startIndex: index,\n endIndex: index\n }\n if (type === EditorContext.TABLE) {\n range.tableId = tableId\n range.startTdIndex = tdIndex\n range.endTdIndex = tdIndex\n range.startTrIndex = trIndex\n range.endTrIndex = trIndex\n }\n searchRangeMap.set(groupId, range)\n }\n }\n const rangeList: IRange[] = []\n searchRangeMap.forEach(searchRange => {\n rangeList.push(searchRange)\n })\n return rangeList\n }\n\n public getIsCanInput(): boolean {\n const { startIndex, endIndex } = this.getRange()\n if (!~startIndex && !~endIndex) return false\n const elementList = this.draw.getElementList()\n const startElement = elementList[startIndex]\n if (startIndex === endIndex) {\n return (\n (startElement.controlComponent !== ControlComponent.PRE_TEXT ||\n elementList[startIndex + 1]?.controlComponent !==\n ControlComponent.PRE_TEXT) &&\n startElement.controlComponent !== ControlComponent.POST_TEXT\n )\n }\n const endElement = elementList[endIndex]\n return (\n (!startElement.controlId && !endElement.controlId) ||\n ((!startElement.controlId ||\n startElement.controlComponent === ControlComponent.POSTFIX) &&\n (!endElement.controlId ||\n endElement.controlComponent === ControlComponent.POSTFIX)) ||\n (!!startElement.controlId &&\n endElement.controlId === startElement.controlId &&\n endElement.controlComponent !== ControlComponent.PRE_TEXT &&\n endElement.controlComponent !== ControlComponent.POST_TEXT &&\n endElement.controlComponent !== ControlComponent.POSTFIX)\n )\n }\n\n public setRange(\n startIndex: number,\n endIndex: number,\n tableId?: string,\n startTdIndex?: number,\n endTdIndex?: number,\n startTrIndex?: number,\n endTrIndex?: number\n ) {\n const isChange = this.getIsRangeChange(\n startIndex,\n endIndex,\n tableId,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n )\n if (isChange) {\n this.range.startIndex = startIndex\n this.range.endIndex = endIndex\n this.range.tableId = tableId\n this.range.startTdIndex = startTdIndex\n this.range.endTdIndex = endTdIndex\n this.range.startTrIndex = startTrIndex\n this.range.endTrIndex = endTrIndex\n this.range.isCrossRowCol = !!(\n startTdIndex ||\n endTdIndex ||\n startTrIndex ||\n endTrIndex\n )\n this.setDefaultStyle(null)\n }\n this.range.zone = this.draw.getZone().getZone()\n const control = this.draw.getControl()\n if (~startIndex && ~endIndex) {\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n if (element?.controlId) {\n control.initControl()\n return\n }\n }\n control.destroyControl()\n }\n\n public replaceRange(range: IRange) {\n this.setRange(\n range.startIndex,\n range.endIndex,\n range.tableId,\n range.startTdIndex,\n range.endTdIndex,\n range.startTrIndex,\n range.endTrIndex\n )\n }\n\n public shrinkRange() {\n const { startIndex, endIndex } = this.range\n if (startIndex === endIndex || (!~startIndex && !~endIndex)) return\n this.replaceRange({\n ...this.range,\n startIndex: endIndex\n })\n }\n\n public setRangeStyle() {\n const rangeStyleChangeListener = this.listener.rangeStyleChange\n const isSubscribeRangeStyleChange =\n this.eventBus.isSubscribe('rangeStyleChange')\n if (!rangeStyleChangeListener && !isSubscribeRangeStyleChange) return\n const { startIndex, endIndex, isCrossRowCol } = this.range\n if (!~startIndex && !~endIndex) return\n let curElement: IElement | null\n if (isCrossRowCol) {\n const originalElementList = this.draw.getOriginalElementList()\n const positionContext = this.position.getPositionContext()\n curElement = originalElementList[positionContext.index!]\n } else {\n const index = ~endIndex ? endIndex : 0\n const elementList = this.draw.getElementList()\n curElement = this.getRangeAnchorStyle(elementList, index)\n }\n if (!curElement) return\n const curElementList = this.getSelection() || [curElement]\n const type = curElement.type || ElementType.TEXT\n const font = curElement.font || this.options.defaultFont\n const size = curElement.size || this.options.defaultSize\n const bold = !~curElementList.findIndex(el => !el.bold)\n const italic = !~curElementList.findIndex(el => !el.italic)\n const underline = !~curElementList.findIndex(\n el => !el.underline && !el.control?.underline\n )\n const strikeout = !~curElementList.findIndex(el => !el.strikeout)\n const color = curElement.color || null\n const highlight = curElement.highlight || null\n const rowFlex = curElement.rowFlex || null\n const rowMargin = curElement.rowMargin ?? this.options.defaultRowMargin\n const dashArray = curElement.dashArray || []\n const level = curElement.level || null\n const listType = curElement.listType || null\n const listStyle = curElement.listStyle || null\n const textDecoration = underline ? curElement.textDecoration || null : null\n const painter = !!this.draw.getPainterStyle()\n const undo = this.historyManager.isCanUndo()\n const redo = this.historyManager.isCanRedo()\n const groupIds = curElement.groupIds || null\n const extension = curElement.extension ?? null\n const rangeStyle: IRangeStyle = {\n type,\n undo,\n redo,\n painter,\n font,\n size,\n bold,\n italic,\n underline,\n strikeout,\n color,\n highlight,\n rowFlex,\n rowMargin,\n dashArray,\n level,\n listType,\n listStyle,\n groupIds,\n textDecoration,\n extension\n }\n if (rangeStyleChangeListener) {\n rangeStyleChangeListener(rangeStyle)\n }\n if (isSubscribeRangeStyleChange) {\n this.eventBus.emit('rangeStyleChange', rangeStyle)\n }\n }\n\n public recoveryRangeStyle() {\n const rangeStyleChangeListener = this.listener.rangeStyleChange\n const isSubscribeRangeStyleChange =\n this.eventBus.isSubscribe('rangeStyleChange')\n if (!rangeStyleChangeListener && !isSubscribeRangeStyleChange) return\n const font = this.options.defaultFont\n const size = this.options.defaultSize\n const rowMargin = this.options.defaultRowMargin\n const painter = !!this.draw.getPainterStyle()\n const undo = this.historyManager.isCanUndo()\n const redo = this.historyManager.isCanRedo()\n const rangeStyle: IRangeStyle = {\n type: null,\n undo,\n redo,\n painter,\n font,\n size,\n bold: false,\n italic: false,\n underline: false,\n strikeout: false,\n color: null,\n highlight: null,\n rowFlex: null,\n rowMargin,\n dashArray: [],\n level: null,\n listType: null,\n listStyle: null,\n groupIds: null,\n textDecoration: null,\n extension: null\n }\n if (rangeStyleChangeListener) {\n rangeStyleChangeListener(rangeStyle)\n }\n if (isSubscribeRangeStyleChange) {\n this.eventBus.emit('rangeStyleChange', rangeStyle)\n }\n }\n\n public shrinkBoundary(context: IControlContext = {}) {\n const elementList = context.elementList || this.draw.getElementList()\n const range = context.range || this.getRange()\n const { startIndex, endIndex } = range\n if (!~startIndex && !~endIndex) return\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n if (startIndex === endIndex) {\n if (startElement.controlComponent === ControlComponent.PLACEHOLDER) {\n let index = startIndex - 1\n while (index > 0) {\n const preElement = elementList[index]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n range.startIndex = index\n range.endIndex = index\n break\n }\n index--\n }\n }\n } else {\n if (\n startElement.controlComponent === ControlComponent.PLACEHOLDER ||\n endElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n let index = endIndex - 1\n while (index > 0) {\n const preElement = elementList[index]\n if (\n preElement.controlId !== endElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n range.startIndex = index\n range.endIndex = index\n return\n }\n index--\n }\n }\n if (startElement.controlComponent === ControlComponent.PREFIX) {\n let index = startIndex + 1\n while (index < elementList.length) {\n const nextElement = elementList[index]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.VALUE\n ) {\n range.startIndex = index - 1\n break\n } else if (\n nextElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n range.startIndex = index - 1\n range.endIndex = index - 1\n return\n }\n index++\n }\n }\n if (endElement.controlComponent !== ControlComponent.VALUE) {\n let index = startIndex - 1\n while (index > 0) {\n const preElement = elementList[index]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.VALUE\n ) {\n range.startIndex = index\n break\n } else if (\n preElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n range.startIndex = index\n range.endIndex = index\n return\n }\n index--\n }\n }\n }\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n ctx.save()\n ctx.globalAlpha = this.options.rangeAlpha\n ctx.fillStyle = this.options.rangeColor\n ctx.fillRect(x, y, width, height)\n ctx.restore()\n }\n\n public toString(): string {\n const selection = this.getTextLikeSelection()\n if (!selection) return ''\n return selection\n .map(s => s.value)\n .join('')\n .replace(new RegExp(ZERO, 'g'), '')\n }\n}\n","import {\n BackgroundRepeat,\n BackgroundSize\n} from '../../../dataset/enum/Background'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class Background {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private imageCache: Map<string, HTMLImageElement>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.imageCache = new Map()\n }\n\n private _renderBackgroundColor(\n ctx: CanvasRenderingContext2D,\n color: string,\n width: number,\n height: number\n ) {\n ctx.save()\n ctx.fillStyle = color\n ctx.fillRect(0, 0, width, height)\n ctx.restore()\n }\n\n private _drawImage(\n ctx: CanvasRenderingContext2D,\n imageElement: HTMLImageElement,\n width: number,\n height: number\n ) {\n const { background, scale } = this.options\n // contain\n if (background.size === BackgroundSize.CONTAIN) {\n const imageWidth = imageElement.width * scale\n const imageHeight = imageElement.height * scale\n if (\n !background.repeat ||\n background.repeat === BackgroundRepeat.NO_REPEAT\n ) {\n ctx.drawImage(imageElement, 0, 0, imageWidth, imageHeight)\n } else {\n let startX = 0\n let startY = 0\n const repeatXCount =\n background.repeat === BackgroundRepeat.REPEAT ||\n background.repeat === BackgroundRepeat.REPEAT_X\n ? Math.ceil((width * scale) / imageWidth)\n : 1\n const repeatYCount =\n background.repeat === BackgroundRepeat.REPEAT ||\n background.repeat === BackgroundRepeat.REPEAT_Y\n ? Math.ceil((height * scale) / imageHeight)\n : 1\n for (let x = 0; x < repeatXCount; x++) {\n for (let y = 0; y < repeatYCount; y++) {\n ctx.drawImage(imageElement, startX, startY, imageWidth, imageHeight)\n startY += imageHeight\n }\n startY = 0\n startX += imageWidth\n }\n }\n } else {\n // cover\n ctx.drawImage(imageElement, 0, 0, width * scale, height * scale)\n }\n }\n\n private _renderBackgroundImage(\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number\n ) {\n const { background } = this.options\n const imageElementCache = this.imageCache.get(background.image)\n if (imageElementCache) {\n this._drawImage(ctx, imageElementCache, width, height)\n } else {\n const img = new Image()\n img.setAttribute('crossOrigin', 'Anonymous')\n img.src = background.image\n img.onload = () => {\n this.imageCache.set(background.image, img)\n this._drawImage(ctx, img, width, height)\n this.draw.render({\n isCompute: false,\n isSubmitHistory: false\n })\n }\n }\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n const {\n background: { image, color, applyPageNumbers }\n } = this.options\n if (\n image &&\n (!applyPageNumbers?.length || applyPageNumbers.includes(pageNo))\n ) {\n const { width, height } = this.options\n this._renderBackgroundImage(ctx, width, height)\n } else {\n const width = this.draw.getCanvasWidth(pageNo)\n const height = this.draw.getCanvasHeight(pageNo)\n this._renderBackgroundColor(ctx, color, width, height)\n }\n }\n}\n","import { TextDecorationStyle } from '../../../dataset/enum/Text'\nimport { IElementFillRect } from '../../../interface/Element'\n\nexport abstract class AbstractRichText {\n protected fillRect: IElementFillRect\n protected fillColor?: string\n protected fillDecorationStyle?: TextDecorationStyle\n\n constructor() {\n this.fillRect = this.clearFillInfo()\n }\n\n public clearFillInfo() {\n this.fillColor = undefined\n this.fillDecorationStyle = undefined\n this.fillRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }\n return this.fillRect\n }\n\n public recordFillInfo(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height?: number,\n color?: string,\n decorationStyle?: TextDecorationStyle\n ) {\n const isFirstRecord = !this.fillRect.width\n if (\n !isFirstRecord &&\n (this.fillColor !== color || this.fillDecorationStyle !== decorationStyle)\n ) {\n this.render(ctx)\n this.clearFillInfo()\n this.recordFillInfo(ctx, x, y, width, height, color, decorationStyle)\n return\n }\n if (isFirstRecord) {\n this.fillRect.x = x\n this.fillRect.y = y\n }\n if (height && this.fillRect.height < height) {\n this.fillRect.height = height\n }\n this.fillRect.width += width\n this.fillColor = color\n this.fillDecorationStyle = decorationStyle\n }\n\n public abstract render(ctx: CanvasRenderingContext2D): void\n}\n","import { AbstractRichText } from './AbstractRichText'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class Highlight extends AbstractRichText {\n private options: Required<IEditorOption>\n\n constructor(draw: Draw) {\n super()\n this.options = draw.getOptions()\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n if (!this.fillRect.width) return\n const { highlightAlpha } = this.options\n const { x, y, width, height } = this.fillRect\n ctx.save()\n ctx.globalAlpha = highlightAlpha\n ctx.fillStyle = this.fillColor!\n ctx.fillRect(x, y, width, height)\n ctx.restore()\n this.clearFillInfo()\n }\n}\n","import { PageMode } from '../../../dataset/enum/Editor'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class Margin {\n private draw: Draw\n private options: Required<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n const { marginIndicatorColor, pageMode } = this.options\n const width = this.draw.getWidth()\n const height =\n pageMode === PageMode.CONTINUITY\n ? this.draw.getCanvasHeight(pageNo) / this.draw.getPagePixelRatio()\n : this.draw.getHeight()\n const margins = this.draw.getMargins()\n const marginIndicatorSize = this.draw.getMarginIndicatorSize()\n ctx.save()\n ctx.translate(0.5, 0.5)\n ctx.strokeStyle = marginIndicatorColor\n ctx.beginPath()\n const leftTopPoint: [number, number] = [margins[3], margins[0]]\n const rightTopPoint: [number, number] = [width - margins[1], margins[0]]\n const leftBottomPoint: [number, number] = [margins[3], height - margins[2]]\n const rightBottomPoint: [number, number] = [\n width - margins[1],\n height - margins[2]\n ]\n ctx.moveTo(leftTopPoint[0] - marginIndicatorSize, leftTopPoint[1])\n ctx.lineTo(...leftTopPoint)\n ctx.lineTo(leftTopPoint[0], leftTopPoint[1] - marginIndicatorSize)\n ctx.moveTo(rightTopPoint[0] + marginIndicatorSize, rightTopPoint[1])\n ctx.lineTo(...rightTopPoint)\n ctx.lineTo(rightTopPoint[0], rightTopPoint[1] - marginIndicatorSize)\n ctx.moveTo(leftBottomPoint[0] - marginIndicatorSize, leftBottomPoint[1])\n ctx.lineTo(...leftBottomPoint)\n ctx.lineTo(leftBottomPoint[0], leftBottomPoint[1] + marginIndicatorSize)\n ctx.moveTo(rightBottomPoint[0] + marginIndicatorSize, rightBottomPoint[1])\n ctx.lineTo(...rightBottomPoint)\n ctx.lineTo(rightBottomPoint[0], rightBottomPoint[1] + marginIndicatorSize)\n ctx.stroke()\n ctx.restore()\n }\n}\n","import { ZERO } from '../../../dataset/constant/Common'\nimport { TEXTLIKE_ELEMENT_TYPE } from '../../../dataset/constant/Element'\nimport { ControlComponent } from '../../../dataset/enum/Control'\nimport { EditorContext } from '../../../dataset/enum/Editor'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../interface/Element'\nimport {\n IReplaceOption,\n ISearchOption,\n ISearchResult,\n ISearchResultRestArgs\n} from '../../../interface/Search'\nimport { getUUID, indexOf, isNumber } from '../../../utils'\nimport { Position } from '../../position/Position'\nimport { RangeManager } from '../../range/RangeManager'\nimport { Draw } from '../Draw'\n\nexport interface INavigateInfo {\n index: number\n count: number\n}\n\nexport class Search {\n private draw: Draw\n private options: Required<IEditorOption>\n private position: Position\n private range: RangeManager\n private searchKeyword: string | null\n private searchNavigateIndex: number | null\n private searchOptions: ISearchOption | null\n private searchMatchList: ISearchResult[]\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.position = draw.getPosition()\n this.range = draw.getRange()\n this.searchNavigateIndex = null\n this.searchOptions = null\n this.searchKeyword = null\n this.searchMatchList = []\n }\n\n public getSearchKeyword(): string | null {\n return this.searchKeyword\n }\n\n public setSearchKeyword(payload: string | null, options?: ISearchOption) {\n this.searchKeyword = payload\n this.searchNavigateIndex = null\n this.searchOptions = options || null\n }\n\n public searchNavigatePre(): number | null {\n if (!this.searchMatchList.length || !this.searchKeyword) return null\n if (this.searchNavigateIndex === null) {\n this.searchNavigateIndex = 0\n } else {\n let index = this.searchNavigateIndex - 1\n let isExistPre = false\n const searchNavigateId =\n this.searchMatchList[this.searchNavigateIndex].groupId\n while (index >= 0) {\n const match = this.searchMatchList[index]\n if (searchNavigateId !== match.groupId) {\n isExistPre = true\n this.searchNavigateIndex = index - (this.searchKeyword.length - 1)\n break\n }\n index--\n }\n if (!isExistPre) {\n const lastSearchMatch =\n this.searchMatchList[this.searchMatchList.length - 1]\n if (lastSearchMatch.groupId === searchNavigateId) return null\n this.searchNavigateIndex =\n this.searchMatchList.length - 1 - (this.searchKeyword.length - 1)\n }\n }\n return this.searchNavigateIndex\n }\n\n public searchNavigateNext(): number | null {\n if (!this.searchMatchList.length || !this.searchKeyword) return null\n if (this.searchNavigateIndex === null) {\n this.searchNavigateIndex = 0\n } else {\n let index = this.searchNavigateIndex + 1\n let isExistNext = false\n const searchNavigateId =\n this.searchMatchList[this.searchNavigateIndex].groupId\n while (index < this.searchMatchList.length) {\n const match = this.searchMatchList[index]\n if (searchNavigateId !== match.groupId) {\n isExistNext = true\n this.searchNavigateIndex = index\n break\n }\n index++\n }\n if (!isExistNext) {\n const firstSearchMatch = this.searchMatchList[0]\n if (firstSearchMatch.groupId === searchNavigateId) return null\n this.searchNavigateIndex = 0\n }\n }\n return this.searchNavigateIndex\n }\n\n public searchNavigateScrollIntoView(position: IElementPosition) {\n const {\n coordinate: { leftTop, leftBottom, rightTop },\n pageNo\n } = position\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const preY = pageNo * (height + pageGap)\n const anchor = document.createElement('div')\n anchor.style.position = 'absolute'\n const ANCHOR_OVERFLOW_SIZE = 50\n anchor.style.width = `${rightTop[0] - leftTop[0] + ANCHOR_OVERFLOW_SIZE}px`\n anchor.style.height = `${\n leftBottom[1] - leftTop[1] + ANCHOR_OVERFLOW_SIZE\n }px`\n anchor.style.left = `${leftTop[0]}px`\n anchor.style.top = `${leftTop[1] + preY}px`\n this.draw.getContainer().append(anchor)\n anchor.scrollIntoView(false)\n anchor.remove()\n }\n\n public getSearchNavigateIndexList() {\n if (this.searchNavigateIndex === null || !this.searchKeyword) return []\n return new Array(this.searchKeyword.length)\n .fill(this.searchNavigateIndex)\n .map((navigate, index) => navigate + index)\n }\n\n public getSearchMatchList(): ISearchResult[] {\n return this.searchMatchList\n }\n\n public getSearchNavigateInfo(): null | INavigateInfo {\n if (!this.searchKeyword || !this.searchMatchList.length) return null\n const index =\n this.searchNavigateIndex !== null\n ? this.searchNavigateIndex / this.searchKeyword.length + 1\n : 0\n let count = 0\n let groupId = null\n for (let s = 0; s < this.searchMatchList.length; s++) {\n const match = this.searchMatchList[s]\n if (groupId === match.groupId) continue\n groupId = match.groupId\n count += 1\n }\n return {\n index,\n count\n }\n }\n\n public getMatchList(\n payload: string,\n originalElementList: IElement[]\n ): ISearchResult[] {\n const { isRegEnable = false, isIgnoreCase = true } =\n this.searchOptions || {}\n const keyword = isIgnoreCase ? payload.toLocaleLowerCase() : payload\n const searchMatchList: ISearchResult[] = []\n const elementListGroup: {\n type: EditorContext\n elementList: IElement[]\n index: number\n }[] = []\n const originalElementListLength = originalElementList.length\n const tableIndexList = []\n for (let e = 0; e < originalElementListLength; e++) {\n const element = originalElementList[e]\n if (element.type === ElementType.TABLE) {\n tableIndexList.push(e)\n }\n }\n let i = 0\n let elementIndex = 0\n while (elementIndex < originalElementListLength - 1) {\n const endIndex = tableIndexList.length\n ? tableIndexList[i]\n : originalElementListLength\n const pageElement = originalElementList.slice(elementIndex, endIndex)\n if (pageElement.length) {\n elementListGroup.push({\n index: elementIndex,\n type: EditorContext.PAGE,\n elementList: pageElement\n })\n }\n const tableElement = originalElementList[endIndex]\n if (tableElement) {\n elementListGroup.push({\n index: endIndex,\n type: EditorContext.TABLE,\n elementList: [tableElement]\n })\n }\n elementIndex = endIndex + 1\n i++\n }\n function searchClosure(\n payload: string | null,\n type: EditorContext,\n elementList: IElement[],\n restArgs?: ISearchResultRestArgs\n ) {\n if (!payload) return\n let text = elementList\n .map(e =>\n !e.type ||\n (TEXTLIKE_ELEMENT_TYPE.includes(e.type) &&\n e.controlComponent !== ControlComponent.CHECKBOX &&\n e.controlComponent !== ControlComponent.RADIO &&\n !e.hide &&\n !e.control?.hide &&\n !e.area?.hide)\n ? e.value\n : ZERO\n )\n .filter(Boolean)\n .join('')\n if (isIgnoreCase) {\n text = text.toLocaleLowerCase()\n }\n const matchList: { index: number; length: number }[] = []\n const searchStr = isRegEnable ? new RegExp(payload) : payload\n let { index, length } = indexOf(text, searchStr)\n while (index !== -1 && length !== 0) {\n matchList.push({\n index,\n length\n })\n const matchResult = indexOf(text, searchStr, index + length)\n index = matchResult.index\n length = matchResult.length\n }\n for (let m = 0; m < matchList.length; m++) {\n const { index: startIndex, length: matchLength } = matchList[m]\n const groupId = getUUID()\n for (let i = 0; i < matchLength; i++) {\n const index = startIndex + i + (restArgs?.startIndex || 0)\n searchMatchList.push({\n type,\n index,\n groupId,\n ...restArgs\n })\n }\n }\n }\n for (let e = 0; e < elementListGroup.length; e++) {\n const group = elementListGroup[e]\n if (group.type === EditorContext.TABLE) {\n const tableElement = group.elementList[0]\n for (let t = 0; t < tableElement.trList!.length; t++) {\n const tr = tableElement.trList![t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const restArgs: ISearchResultRestArgs = {\n tableId: tableElement.id,\n tableIndex: group.index,\n trIndex: t,\n tdIndex: d,\n tdId: td.id\n }\n searchClosure(keyword, group.type, td.value, restArgs)\n }\n }\n } else {\n searchClosure(keyword, group.type, group.elementList, {\n startIndex: group.index\n })\n }\n }\n return searchMatchList\n }\n\n public compute(payload: string) {\n const isPickSelectionElementList =\n this.searchOptions?.isLimitSelection && !this.range.getIsCollapsed()\n const searchElementList = isPickSelectionElementList\n ? this.range.getSelectionElementList()\n : this.draw.getOriginalElementList()\n if (!searchElementList?.length) return\n this.searchMatchList = this.getMatchList(payload, searchElementList)\n if (!isPickSelectionElementList || !this.searchMatchList.length) return\n const { startIndex } = this.range.getRange()\n const offset = startIndex + 1\n for (const searchMatch of this.searchMatchList) {\n if (searchMatch.type === EditorContext.TABLE) {\n searchMatch.tableIndex! += offset\n } else {\n searchMatch.index += offset\n }\n }\n }\n\n public render(ctx: CanvasRenderingContext2D, pageIndex: number) {\n if (\n !this.searchMatchList ||\n !this.searchMatchList.length ||\n !this.searchKeyword\n ) {\n return\n }\n const { searchMatchAlpha, searchMatchColor, searchNavigateMatchColor } =\n this.options\n const positionList = this.position.getOriginalPositionList()\n const elementList = this.draw.getOriginalElementList()\n ctx.save()\n ctx.globalAlpha = searchMatchAlpha\n for (let s = 0; s < this.searchMatchList.length; s++) {\n const searchMatch = this.searchMatchList[s]\n let position: IElementPosition | null = null\n if (searchMatch.type === EditorContext.TABLE) {\n const { tableIndex, trIndex, tdIndex, index } = searchMatch\n position =\n elementList[tableIndex!]?.trList![trIndex!].tdList[tdIndex!]\n ?.positionList![index]\n } else {\n position = positionList[searchMatch.index]\n }\n if (!position) continue\n const {\n coordinate: { leftTop, leftBottom, rightTop },\n pageNo\n } = position\n if (pageNo !== pageIndex) continue\n const searchMatchIndexList = this.getSearchNavigateIndexList()\n if (searchMatchIndexList.includes(s)) {\n ctx.fillStyle = searchNavigateMatchColor\n const preSearchMatch = this.searchMatchList[s - 1]\n if (!preSearchMatch || preSearchMatch.groupId !== searchMatch.groupId) {\n this.searchNavigateScrollIntoView(position)\n }\n } else {\n ctx.fillStyle = searchMatchColor\n }\n const x = leftTop[0]\n const y = leftTop[1]\n const width = rightTop[0] - leftTop[0]\n const height = leftBottom[1] - leftTop[1]\n ctx.fillRect(x, y, width, height)\n }\n ctx.restore()\n }\n\n public replace(payload: string, option?: IReplaceOption) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n if (payload === undefined || payload === null) return\n let matchList = this.getSearchMatchList()\n const replaceIndex = option?.index\n if (isNumber(replaceIndex)) {\n const matchGroup: ISearchResult[][] = []\n matchList.forEach(match => {\n const last = matchGroup[matchGroup.length - 1]\n if (!last || last[0].groupId !== match.groupId) {\n matchGroup.push([match])\n } else {\n last.push(match)\n }\n })\n matchList = matchGroup[replaceIndex]\n }\n if (!matchList?.length) return\n const isDesignMode = this.draw.isDesignMode()\n let pageDiffCount = 0\n let tableDiffCount = 0\n let curGroupId = ''\n let curTdId = ''\n let firstMatchIndex = -1\n const elementList = this.draw.getOriginalElementList()\n for (let m = 0; m < matchList.length; m++) {\n const match = matchList[m]\n if (match.type === EditorContext.TABLE) {\n const { tableIndex, trIndex, tdIndex, index, tdId } = match\n if (curTdId && tdId !== curTdId) {\n tableDiffCount = 0\n }\n curTdId = tdId!\n const curTableIndex = tableIndex! + pageDiffCount\n const tableElementList =\n elementList[curTableIndex].trList![trIndex!].tdList[tdIndex!].value\n const curIndex = index + tableDiffCount\n const tableElement = tableElementList[curIndex]\n if (\n !isDesignMode &&\n (tableElement?.control?.deletable === false ||\n tableElement?.title?.deletable === false)\n ) {\n continue\n }\n if (payload === '') {\n this.draw.spliceElementList(tableElementList, curIndex, 1)\n tableDiffCount--\n if (!~firstMatchIndex) {\n firstMatchIndex = m\n }\n continue\n }\n if (curGroupId === match.groupId) {\n this.draw.spliceElementList(tableElementList, curIndex, 1)\n tableDiffCount--\n continue\n }\n if (!~firstMatchIndex) {\n firstMatchIndex = m\n }\n for (let p = 0; p < payload.length; p++) {\n const value = payload[p]\n if (p === 0) {\n tableElement.value = value\n } else {\n this.draw.spliceElementList(tableElementList, curIndex + p, 0, [\n {\n ...tableElement,\n value\n }\n ])\n tableDiffCount++\n }\n }\n } else {\n const curIndex = match.index + pageDiffCount\n const element = elementList[curIndex]\n if (\n (!isDesignMode &&\n (element?.control?.deletable === false ||\n element?.title?.deletable === false)) ||\n (element.type === ElementType.CONTROL &&\n element.controlComponent !== ControlComponent.VALUE)\n ) {\n continue\n }\n if (payload === '') {\n this.draw.spliceElementList(elementList, curIndex, 1)\n pageDiffCount--\n if (!~firstMatchIndex) {\n firstMatchIndex = m\n }\n continue\n }\n if (!~firstMatchIndex) {\n firstMatchIndex = m\n }\n if (curGroupId === match.groupId) {\n this.draw.spliceElementList(elementList, curIndex, 1)\n pageDiffCount--\n continue\n }\n for (let p = 0; p < payload.length; p++) {\n const value = payload[p]\n if (p === 0) {\n element.value = value\n } else {\n this.draw.spliceElementList(elementList, curIndex + p, 0, [\n {\n ...element,\n value\n }\n ])\n pageDiffCount++\n }\n }\n }\n curGroupId = match.groupId\n }\n if (!~firstMatchIndex) return\n const firstMatch = matchList[firstMatchIndex]\n const firstIndex = firstMatch.index + (payload.length - 1)\n if (firstMatch.type === EditorContext.TABLE) {\n const { tableIndex, trIndex, tdIndex, index } = firstMatch\n const element =\n elementList[tableIndex!].trList![trIndex!].tdList[tdIndex!].value[index]\n this.position.setPositionContext({\n isTable: true,\n index: tableIndex,\n trIndex,\n tdIndex,\n tdId: element.tdId,\n trId: element.trId,\n tableId: element.tableId\n })\n } else {\n this.position.setPositionContext({\n isTable: false\n })\n }\n this.draw.getRange().setRange(firstIndex, firstIndex)\n this.draw.render({\n curIndex: firstIndex\n })\n }\n}\n","import { AbstractRichText } from './AbstractRichText'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class Strikeout extends AbstractRichText {\n private options: Required<IEditorOption>\n\n constructor(draw: Draw) {\n super()\n this.options = draw.getOptions()\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n if (!this.fillRect.width) return\n const { scale, strikeoutColor } = this.options\n const { x, y, width } = this.fillRect\n ctx.save()\n ctx.lineWidth = scale\n ctx.strokeStyle = this.fillColor || strikeoutColor\n const adjustY = y + 0.5\n ctx.beginPath()\n ctx.moveTo(x, adjustY)\n ctx.lineTo(x + width, adjustY)\n ctx.stroke()\n ctx.restore()\n this.clearFillInfo()\n }\n}\n","export enum TextDecorationStyle {\n SOLID = 'solid',\n DOUBLE = 'double',\n DASHED = 'dashed',\n DOTTED = 'dotted',\n WAVY = 'wavy'\n}\n\nexport enum DashType {\n SOLID = 'solid',\n DASHED = 'dashed',\n DOTTED = 'dotted'\n}\n","import { AbstractRichText } from './AbstractRichText'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\nimport { DashType, TextDecorationStyle } from '../../../dataset/enum/Text'\n\nexport class Underline extends AbstractRichText {\n private options: Required<IEditorOption>\n\n constructor(draw: Draw) {\n super()\n this.options = draw.getOptions()\n }\n\n private _drawLine(\n ctx: CanvasRenderingContext2D,\n startX: number,\n startY: number,\n width: number,\n dashType?: DashType\n ) {\n const endX = startX + width\n ctx.beginPath()\n switch (dashType) {\n case DashType.DASHED:\n ctx.setLineDash([3, 1])\n break\n case DashType.DOTTED:\n ctx.setLineDash([1, 1])\n break\n }\n ctx.moveTo(startX, startY)\n ctx.lineTo(endX, startY)\n ctx.stroke()\n }\n\n private _drawDouble(\n ctx: CanvasRenderingContext2D,\n startX: number,\n startY: number,\n width: number\n ) {\n const SPACING = 3\n const endX = startX + width\n const endY = startY + SPACING * this.options.scale\n ctx.beginPath()\n ctx.moveTo(startX, startY)\n ctx.lineTo(endX, startY)\n ctx.stroke()\n ctx.beginPath()\n ctx.moveTo(startX, endY)\n ctx.lineTo(endX, endY)\n ctx.stroke()\n }\n\n private _drawWave(\n ctx: CanvasRenderingContext2D,\n startX: number,\n startY: number,\n width: number\n ) {\n const { scale } = this.options\n const AMPLITUDE = 1.2 * scale\n const FREQUENCY = 1 / scale\n const adjustY = startY + 2 * AMPLITUDE\n ctx.beginPath()\n for (let x = 0; x < width; x++) {\n const y = AMPLITUDE * Math.sin(FREQUENCY * x)\n ctx.lineTo(startX + x, adjustY + y)\n }\n ctx.stroke()\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n if (!this.fillRect.width) return\n const { underlineColor, scale } = this.options\n const { x, y, width } = this.fillRect\n ctx.save()\n ctx.strokeStyle = this.fillColor || underlineColor\n ctx.lineWidth = scale\n const adjustY = Math.floor(y + 2 * ctx.lineWidth) + 0.5\n switch (this.fillDecorationStyle) {\n case TextDecorationStyle.WAVY:\n this._drawWave(ctx, x, adjustY, width)\n break\n case TextDecorationStyle.DOUBLE:\n this._drawDouble(ctx, x, adjustY, width)\n break\n case TextDecorationStyle.DASHED:\n this._drawLine(ctx, x, adjustY, width, DashType.DASHED)\n break\n case TextDecorationStyle.DOTTED:\n this._drawLine(ctx, x, adjustY, width, DashType.DOTTED)\n break\n default:\n this._drawLine(ctx, x, adjustY, width)\n break\n }\n ctx.restore()\n this.clearFillInfo()\n }\n}\n","import { ElementType, IEditorOption, IElement, RenderMode } from '../../..'\nimport {\n PUNCTUATION_LIST,\n METRICS_BASIS_TEXT\n} from '../../../dataset/constant/Common'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IRowElement } from '../../../interface/Row'\nimport { ITextMetrics } from '../../../interface/Text'\nimport { Draw } from '../Draw'\n\nexport interface IMeasureWordResult {\n width: number\n endElement: IElement | null\n}\n\nexport class TextParticle {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n private ctx: CanvasRenderingContext2D\n private curX: number\n private curY: number\n private text: string\n private curStyle: string\n private curColor?: string\n public cacheMeasureText: Map<string, TextMetrics>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.ctx = draw.getCtx()\n this.curX = -1\n this.curY = -1\n this.text = ''\n this.curStyle = ''\n this.cacheMeasureText = new Map()\n }\n\n public measureBasisWord(\n ctx: CanvasRenderingContext2D,\n font: string\n ): ITextMetrics {\n ctx.save()\n ctx.font = font\n const textMetrics = this.measureText(ctx, {\n value: METRICS_BASIS_TEXT\n })\n ctx.restore()\n return textMetrics\n }\n\n public measureWord(\n ctx: CanvasRenderingContext2D,\n elementList: IElement[],\n curIndex: number\n ): IMeasureWordResult {\n const LETTER_REG = this.draw.getLetterReg()\n let width = 0\n let endElement: IElement | null = null\n let i = curIndex\n while (i < elementList.length) {\n const element = elementList[i]\n if (\n (element.type && element.type !== ElementType.TEXT) ||\n !LETTER_REG.test(element.value)\n ) {\n endElement = element\n break\n }\n width += this.measureText(ctx, element).width\n i++\n }\n return {\n width,\n endElement\n }\n }\n\n public measurePunctuationWidth(\n ctx: CanvasRenderingContext2D,\n element: IElement\n ): number {\n if (!element || !PUNCTUATION_LIST.includes(element.value)) return 0\n ctx.font = this.draw.getElementFont(element)\n return this.measureText(ctx, element).width\n }\n\n public measureText(\n ctx: CanvasRenderingContext2D,\n element: IElement\n ): ITextMetrics {\n if (element.width) {\n const textMetrics = ctx.measureText(element.value)\n return {\n width: element.width,\n actualBoundingBoxAscent: textMetrics.actualBoundingBoxAscent,\n actualBoundingBoxDescent: textMetrics.actualBoundingBoxDescent,\n actualBoundingBoxLeft: textMetrics.actualBoundingBoxLeft,\n actualBoundingBoxRight: textMetrics.actualBoundingBoxRight,\n fontBoundingBoxAscent: textMetrics.fontBoundingBoxAscent,\n fontBoundingBoxDescent: textMetrics.fontBoundingBoxDescent\n }\n }\n const id = `${element.value}${ctx.font}`\n const cacheTextMetrics = this.cacheMeasureText.get(id)\n if (cacheTextMetrics) {\n return cacheTextMetrics\n }\n const textMetrics = ctx.measureText(element.value)\n this.cacheMeasureText.set(id, textMetrics)\n return textMetrics\n }\n\n public getBasisWordBoundingBoxAscent(\n ctx: CanvasRenderingContext2D,\n font: string\n ): number {\n return this.measureBasisWord(ctx, font).actualBoundingBoxAscent\n }\n\n public complete() {\n this._render()\n this.text = ''\n }\n\n public record(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n this.ctx = ctx\n if (this.options.renderMode === RenderMode.COMPATIBILITY) {\n this._setCurXY(x, y)\n this.text = element.value\n this.curStyle = element.style\n this.curColor = element.color\n this.complete()\n return\n }\n if (!this.text) {\n this._setCurXY(x, y)\n }\n if (\n (this.curStyle && element.style !== this.curStyle) ||\n element.color !== this.curColor\n ) {\n this.complete()\n this._setCurXY(x, y)\n }\n this.text += element.value\n this.curStyle = element.style\n this.curColor = element.color\n }\n\n private _setCurXY(x: number, y: number) {\n this.curX = x\n this.curY = y\n }\n\n private _render() {\n if (!this.text || !~this.curX || !~this.curX) return\n this.ctx.save()\n this.ctx.font = this.curStyle\n this.ctx.fillStyle = this.curColor || this.options.defaultColor\n this.ctx.fillText(this.text, this.curX, this.curY)\n this.ctx.restore()\n }\n}\n","import { FORMAT_PLACEHOLDER } from '../../../dataset/constant/PageNumber'\nimport { NumberType } from '../../../dataset/enum/Common'\nimport { RowFlex } from '../../../dataset/enum/Row'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class PageNumber {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n static formatNumberPlaceholder(\n text: string,\n pageNo: number,\n replaceReg: RegExp,\n _numberType: NumberType\n ) {\n const pageNoText = `${pageNo}`\n return text.replace(replaceReg, pageNoText)\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n const {\n scale,\n pageNumber: {\n size,\n font,\n color,\n rowFlex,\n numberType,\n format,\n startPageNo,\n fromPageNo\n }\n } = this.options\n if (pageNo < fromPageNo) return\n let text = format\n const pageNoReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_NO)\n if (pageNoReg.test(text)) {\n text = PageNumber.formatNumberPlaceholder(\n text,\n pageNo + startPageNo - fromPageNo,\n pageNoReg,\n numberType\n )\n }\n const pageCountReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_COUNT)\n if (pageCountReg.test(text)) {\n text = PageNumber.formatNumberPlaceholder(\n text,\n this.draw.getPageCount() - fromPageNo,\n pageCountReg,\n numberType\n )\n }\n const width = this.draw.getWidth()\n const height = this.draw.getHeight()\n const pageNumberBottom = this.draw.getPageNumberBottom()\n const y = height - pageNumberBottom\n ctx.save()\n ctx.fillStyle = color\n ctx.font = `${size * scale}px ${font}`\n let x = 0\n const margins = this.draw.getMargins()\n const { width: textWidth } = ctx.measureText(text)\n if (rowFlex === RowFlex.CENTER) {\n x = (width - textWidth) / 2\n } else if (rowFlex === RowFlex.RIGHT) {\n x = width - textWidth - margins[1]\n } else {\n x = margins[3]\n }\n ctx.fillText(text, x, y)\n ctx.restore()\n }\n}\n","import { IEditorOption } from '../../interface/Editor'\nimport { debounce } from '../../utils'\nimport { Draw } from '../draw/Draw'\n\nexport interface IElementVisibleInfo {\n intersectionHeight: number\n}\n\nexport interface IPageVisibleInfo {\n intersectionPageNo: number\n visiblePageNoList: number[]\n}\n\nexport class ScrollObserver {\n private draw: Draw\n private options: Required<IEditorOption>\n private scrollContainer: Element | Document\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.scrollContainer = this.getScrollContainer()\n setTimeout(() => {\n if (!window.scrollY) {\n this._observer()\n }\n })\n this._addEvent()\n }\n\n public getScrollContainer(): Element | Document {\n return this.options.scrollContainerSelector\n ? document.querySelector(this.options.scrollContainerSelector) || document\n : document\n }\n\n private _addEvent() {\n this.scrollContainer.addEventListener('scroll', this._observer)\n }\n\n public removeEvent() {\n this.scrollContainer.removeEventListener('scroll', this._observer)\n }\n\n public getElementVisibleInfo(element: Element): IElementVisibleInfo {\n const rect = element.getBoundingClientRect()\n let topBound: number\n let bottomBound: number\n if (this.scrollContainer === document) {\n topBound = 0\n bottomBound = Math.max(document.documentElement.clientHeight, window.innerHeight)\n } else {\n const containerRect = (<Element>this.scrollContainer).getBoundingClientRect()\n topBound = containerRect.top\n bottomBound = containerRect.bottom\n }\n const visibleHeight = Math.min(rect.bottom, bottomBound) - Math.max(rect.top, topBound)\n return {\n intersectionHeight: visibleHeight > 0 ? visibleHeight : 0\n }\n }\n\n public getPageVisibleInfo(): IPageVisibleInfo {\n const pageList = this.draw.getPageList()\n const visiblePageNoList: number[] = []\n let intersectionPageNo = 0\n let intersectionMaxHeight = 0\n for (let i = 0; i < pageList.length; i++) {\n const curPage = pageList[i]\n const { intersectionHeight } = this.getElementVisibleInfo(curPage)\n if (intersectionMaxHeight && !intersectionHeight) break\n if (intersectionHeight) {\n visiblePageNoList.push(i)\n }\n if (intersectionHeight > intersectionMaxHeight) {\n intersectionMaxHeight = intersectionHeight\n intersectionPageNo = i\n }\n }\n return {\n intersectionPageNo,\n visiblePageNoList\n }\n }\n\n private _observer = debounce(() => {\n const { intersectionPageNo, visiblePageNoList } = this.getPageVisibleInfo()\n this.draw.setIntersectionPageNo(intersectionPageNo)\n this.draw.setVisiblePageNoList(visiblePageNoList)\n }, 150)\n}\n","import { MoveDirection } from '../../dataset/enum/Observer'\nimport { Draw } from '../draw/Draw'\nimport { RangeManager } from '../range/RangeManager'\n\nexport class SelectionObserver {\n private readonly step: number = 5\n private readonly thresholdPoints: [\n top: number,\n down: number,\n left: number,\n right: number\n ] = [70, 40, 10, 20]\n\n private selectionContainer: Element | Document\n private rangeManager: RangeManager\n private requestAnimationFrameId: number | null\n private isMousedown: boolean\n private isMoving: boolean\n private clientWidth: number\n private clientHeight: number\n private containerRect: DOMRect | null\n\n constructor(draw: Draw) {\n this.rangeManager = draw.getRange()\n const { scrollContainerSelector } = draw.getOptions()\n this.selectionContainer = scrollContainerSelector\n ? document.querySelector(scrollContainerSelector) || document\n : document\n this.requestAnimationFrameId = null\n this.isMousedown = false\n this.isMoving = false\n this.clientWidth = 0\n this.clientHeight = 0\n this.containerRect = null\n this._addEvent()\n }\n\n private _addEvent() {\n const container = <Document>this.selectionContainer\n container.addEventListener('mousedown', this._mousedown)\n container.addEventListener('mousemove', this._mousemove)\n container.addEventListener('mouseup', this._mouseup)\n document.addEventListener('mouseleave', this._mouseup)\n }\n\n public removeEvent() {\n const container = <Document>this.selectionContainer\n container.removeEventListener('mousedown', this._mousedown)\n container.removeEventListener('mousemove', this._mousemove)\n container.removeEventListener('mouseup', this._mouseup)\n document.removeEventListener('mouseleave', this._mouseup)\n }\n\n private _mousedown = () => {\n this.isMousedown = true\n this.clientWidth =\n this.selectionContainer instanceof Document\n ? document.documentElement.clientWidth\n : this.selectionContainer.clientWidth\n this.clientHeight =\n this.selectionContainer instanceof Document\n ? document.documentElement.clientHeight\n : this.selectionContainer.clientHeight\n if (!(this.selectionContainer instanceof Document)) {\n const rect = this.selectionContainer.getBoundingClientRect()\n this.containerRect = rect\n }\n }\n\n private _mouseup = () => {\n this.isMousedown = false\n this._stopMove()\n }\n\n private _mousemove = (evt: MouseEvent) => {\n if (!this.isMousedown || this.rangeManager.getIsCollapsed()) return\n let { x, y } = evt\n if (this.containerRect) {\n x = x - this.containerRect.x\n y = y - this.containerRect.y\n }\n if (y < this.thresholdPoints[0]) {\n this._startMove(MoveDirection.UP)\n } else if (this.clientHeight - y <= this.thresholdPoints[1]) {\n this._startMove(MoveDirection.DOWN)\n } else if (x < this.thresholdPoints[2]) {\n this._startMove(MoveDirection.LEFT)\n } else if (this.clientWidth - x < this.thresholdPoints[3]) {\n this._startMove(MoveDirection.RIGHT)\n } else {\n this._stopMove()\n }\n }\n\n private _move(direction: MoveDirection) {\n const container =\n this.selectionContainer instanceof Document\n ? window\n : this.selectionContainer\n const x =\n this.selectionContainer instanceof Document\n ? window.scrollX\n : (<Element>container).scrollLeft\n const y =\n this.selectionContainer instanceof Document\n ? window.scrollY\n : (<Element>container).scrollTop\n if (direction === MoveDirection.DOWN) {\n container.scrollTo(x, y + this.step)\n } else if (direction === MoveDirection.UP) {\n container.scrollTo(x, y - this.step)\n } else if (direction === MoveDirection.LEFT) {\n container.scrollTo(x - this.step, y)\n } else {\n container.scrollTo(x + this.step, y)\n }\n this.requestAnimationFrameId = window.requestAnimationFrame(\n this._move.bind(this, direction)\n )\n }\n\n private _startMove(direction: MoveDirection) {\n if (this.isMoving) return\n this.isMoving = true\n this._move(direction)\n }\n\n private _stopMove() {\n if (this.requestAnimationFrameId) {\n window.cancelAnimationFrame(this.requestAnimationFrameId)\n this.requestAnimationFrameId = null\n this.isMoving = false\n }\n }\n}\n","import { ElementType, IElement, TableBorder } from '../../../..'\nimport { TdBorder, TdSlash } from '../../../../dataset/enum/table/Table'\nimport { DeepRequired } from '../../../../interface/Common'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { ITd } from '../../../../interface/table/Td'\nimport { ITr } from '../../../../interface/table/Tr'\nimport { deepClone } from '../../../../utils'\nimport { RangeManager } from '../../../range/RangeManager'\nimport { Draw } from '../../Draw'\n\ninterface IDrawTableBorderOption {\n ctx: CanvasRenderingContext2D\n startX: number\n startY: number\n width: number\n height: number\n borderExternalWidth?: number\n isDrawFullBorder?: boolean\n}\n\nexport class TableParticle {\n private draw: Draw\n private range: RangeManager\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.range = draw.getRange()\n this.options = draw.getOptions()\n }\n\n public getTrListGroupByCol(payload: ITr[]): ITr[] {\n const trList = deepClone(payload)\n for (let t = 0; t < payload.length; t++) {\n const tr = trList[t]\n for (let d = tr.tdList.length - 1; d >= 0; d--) {\n const td = tr.tdList[d]\n const { rowspan, rowIndex, colIndex } = td\n const curRowIndex = rowIndex! + rowspan - 1\n if (curRowIndex !== d) {\n const changeTd = tr.tdList.splice(d, 1)[0]\n trList[curRowIndex]?.tdList.splice(colIndex!, 0, changeTd)\n }\n }\n }\n return trList\n }\n\n public getRangeRowCol(): ITd[][] | null {\n const { isTable, index, trIndex, tdIndex } = this.draw\n .getPosition()\n .getPositionContext()\n if (!isTable) return null\n const {\n isCrossRowCol,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n } = this.range.getRange()\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n if (!isCrossRowCol) {\n return [[curTrList[trIndex!].tdList[tdIndex!]]]\n }\n let startTd = curTrList[startTrIndex!].tdList[startTdIndex!]\n let endTd = curTrList[endTrIndex!].tdList[endTdIndex!]\n if (startTd.x! > endTd.x! || startTd.y! > endTd.y!) {\n // prettier-ignore\n [startTd, endTd] = [endTd, startTd]\n }\n const startColIndex = startTd.colIndex!\n const endColIndex = endTd.colIndex! + (endTd.colspan - 1)\n const startRowIndex = startTd.rowIndex!\n const endRowIndex = endTd.rowIndex! + (endTd.rowspan - 1)\n const rowCol: ITd[][] = []\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n const tdList: ITd[] = []\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdColIndex = td.colIndex!\n const tdRowIndex = td.rowIndex!\n if (\n tdColIndex >= startColIndex &&\n tdColIndex <= endColIndex &&\n tdRowIndex >= startRowIndex &&\n tdRowIndex <= endRowIndex\n ) {\n tdList.push(td)\n }\n }\n if (tdList.length) {\n rowCol.push(tdList)\n }\n }\n return rowCol.length ? rowCol : null\n }\n\n private _drawOuterBorder(payload: IDrawTableBorderOption) {\n const {\n ctx,\n startX,\n startY,\n width,\n height,\n isDrawFullBorder,\n borderExternalWidth\n } = payload\n const { scale } = this.options\n const lineWidth = ctx.lineWidth\n if (borderExternalWidth) {\n ctx.lineWidth = borderExternalWidth * scale\n }\n ctx.beginPath()\n const x = Math.round(startX)\n const y = Math.round(startY)\n ctx.translate(0.5, 0.5)\n if (isDrawFullBorder) {\n ctx.rect(x, y, width, height)\n } else {\n ctx.moveTo(x, y + height)\n ctx.lineTo(x, y)\n ctx.lineTo(x + width, y)\n }\n ctx.stroke()\n if (borderExternalWidth) {\n ctx.lineWidth = lineWidth\n }\n ctx.translate(-0.5, -0.5)\n }\n\n private _drawSlash(\n ctx: CanvasRenderingContext2D,\n td: ITd,\n startX: number,\n startY: number\n ) {\n const { scale } = this.options\n ctx.save()\n const width = td.width! * scale\n const height = td.height! * scale\n const x = Math.round(td.x! * scale + startX)\n const y = Math.round(td.y! * scale + startY)\n if (td.slashTypes?.includes(TdSlash.FORWARD)) {\n ctx.moveTo(x + width, y)\n ctx.lineTo(x, y + height)\n }\n if (td.slashTypes?.includes(TdSlash.BACK)) {\n ctx.moveTo(x, y)\n ctx.lineTo(x + width, y + height)\n }\n ctx.stroke()\n ctx.restore()\n }\n\n private _drawBorder(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n startX: number,\n startY: number\n ) {\n const {\n colgroup,\n trList,\n borderType,\n borderColor,\n borderWidth = 1,\n borderExternalWidth\n } = element\n if (!colgroup || !trList) return\n const {\n scale,\n table: { defaultBorderColor }\n } = this.options\n const tableWidth = element.width! * scale\n const tableHeight = element.height! * scale\n const isEmptyBorderType = borderType === TableBorder.EMPTY\n const isExternalBorderType = borderType === TableBorder.EXTERNAL\n const isInternalBorderType = borderType === TableBorder.INTERNAL\n ctx.save()\n if (borderType === TableBorder.DASH) {\n ctx.setLineDash([3, 3])\n }\n ctx.lineWidth = borderWidth * scale\n ctx.strokeStyle = borderColor || defaultBorderColor\n if (!isEmptyBorderType && !isInternalBorderType) {\n this._drawOuterBorder({\n ctx,\n startX,\n startY,\n width: tableWidth,\n height: tableHeight,\n borderExternalWidth,\n isDrawFullBorder: isExternalBorderType\n })\n }\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n if (td.slashTypes?.length) {\n this._drawSlash(ctx, td, startX, startY)\n }\n if (\n !td.borderTypes?.length &&\n (isEmptyBorderType || isExternalBorderType)\n ) {\n continue\n }\n const width = td.width! * scale\n const height = td.height! * scale\n const x = Math.round(td.x! * scale + startX + width)\n const y = Math.round(td.y! * scale + startY)\n ctx.translate(0.5, 0.5)\n ctx.beginPath()\n if (td.borderTypes?.includes(TdBorder.TOP)) {\n ctx.moveTo(x - width, y)\n ctx.lineTo(x, y)\n ctx.stroke()\n }\n if (td.borderTypes?.includes(TdBorder.RIGHT)) {\n ctx.moveTo(x, y)\n ctx.lineTo(x, y + height)\n ctx.stroke()\n }\n if (td.borderTypes?.includes(TdBorder.BOTTOM)) {\n ctx.moveTo(x, y + height)\n ctx.lineTo(x - width, y + height)\n ctx.stroke()\n }\n if (td.borderTypes?.includes(TdBorder.LEFT)) {\n ctx.moveTo(x - width, y)\n ctx.lineTo(x - width, y + height)\n ctx.stroke()\n }\n if (!isEmptyBorderType && !isExternalBorderType) {\n if (\n !isInternalBorderType ||\n td.colIndex! + td.colspan < colgroup.length\n ) {\n ctx.moveTo(x, y)\n ctx.lineTo(x, y + height)\n if (\n borderExternalWidth &&\n borderExternalWidth !== borderWidth &&\n td.colIndex! + td.colspan === colgroup.length\n ) {\n const lineWidth = ctx.lineWidth\n ctx.lineWidth = borderExternalWidth * scale\n ctx.stroke()\n ctx.beginPath()\n ctx.lineWidth = lineWidth\n }\n }\n if (\n !isInternalBorderType ||\n td.rowIndex! + td.rowspan < trList.length\n ) {\n const isSetExternalBottomBorder =\n borderExternalWidth &&\n borderExternalWidth !== borderWidth &&\n td.rowIndex! + td.rowspan === trList.length\n if (isSetExternalBottomBorder) {\n ctx.stroke()\n ctx.beginPath()\n }\n ctx.moveTo(x, y + height)\n ctx.lineTo(x - width, y + height)\n if (isSetExternalBottomBorder) {\n const lineWidth = ctx.lineWidth\n ctx.lineWidth = borderExternalWidth * scale\n ctx.stroke()\n ctx.beginPath()\n ctx.lineWidth = lineWidth\n }\n }\n ctx.stroke()\n }\n ctx.translate(-0.5, -0.5)\n }\n }\n ctx.restore()\n }\n\n private _drawBackgroundColor(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n startX: number,\n startY: number\n ) {\n const { trList } = element\n if (!trList) return\n const { scale } = this.options\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n if (!td.backgroundColor) continue\n ctx.save()\n const width = td.width! * scale\n const height = td.height! * scale\n const x = Math.round(td.x! * scale + startX)\n const y = Math.round(td.y! * scale + startY)\n ctx.fillStyle = td.backgroundColor\n ctx.fillRect(x, y, width, height)\n ctx.restore()\n }\n }\n }\n\n public getTableWidth(element: IElement): number {\n return element.colgroup!.reduce((pre, cur) => pre + cur.width, 0)\n }\n\n public getTableHeight(element: IElement): number {\n const trList = element.trList\n if (!trList?.length) return 0\n return this.getTdListByColIndex(trList, 0).reduce(\n (pre, cur) => pre + cur.height!,\n 0\n )\n }\n\n public getRowCountByColIndex(trList: ITr[], colIndex: number): number {\n return this.getTdListByColIndex(trList, colIndex).reduce(\n (pre, cur) => pre + cur.rowspan,\n 0\n )\n }\n\n public getTdListByColIndex(trList: ITr[], colIndex: number): ITd[] {\n const data: ITd[] = []\n for (let r = 0; r < trList.length; r++) {\n const tdList = trList[r].tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n const min = td.colIndex!\n const max = min + td.colspan - 1\n if (colIndex >= min && colIndex <= max) {\n data.push(td)\n }\n }\n }\n return data\n }\n\n public getTdListByRowIndex(trList: ITr[], rowIndex: number) {\n const data: ITd[] = []\n for (let r = 0; r < trList.length; r++) {\n const tdList = trList[r].tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n const min = td.rowIndex!\n const max = min + td.rowspan - 1\n if (rowIndex >= min && rowIndex <= max) {\n data.push(td)\n }\n }\n }\n return data\n }\n\n public computeRowColInfo(element: IElement) {\n const { colgroup, trList } = element\n if (!colgroup || !trList) return\n let preX = 0\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n const isLastTr = trList.length - 1 === t\n let rowMinHeight = 0\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n let colIndex = 0\n if (trList.length > 1 && t !== 0) {\n const preTd = tr.tdList[d - 1]\n const start = preTd ? preTd.colIndex! + preTd.colspan : d\n for (let c = start; c < colgroup.length; c++) {\n const rowCount = this.getRowCountByColIndex(trList.slice(0, t), c)\n if (rowCount === t) {\n colIndex = c\n let preColWidth = 0\n for (let preC = 0; preC < c; preC++) {\n preColWidth += colgroup[preC].width\n }\n preX = preColWidth\n break\n }\n }\n } else {\n const preTd = tr.tdList[d - 1]\n if (preTd) {\n colIndex = preTd.colIndex! + preTd.colspan\n }\n }\n let width = 0\n for (let col = 0; col < td.colspan; col++) {\n width += colgroup[col + colIndex].width\n }\n let height = 0\n for (let row = 0; row < td.rowspan; row++) {\n const curTr = trList[row + t] || trList[t]\n height += curTr.height\n }\n if (rowMinHeight === 0 || rowMinHeight > height) {\n rowMinHeight = height\n }\n const isLastRowTd = tr.tdList.length - 1 === d\n let isLastColTd = isLastTr\n if (!isLastColTd) {\n if (td.rowspan > 1) {\n const nextTrLength = trList.length - 1 - t\n isLastColTd = td.rowspan - 1 === nextTrLength\n }\n }\n const isLastTd = isLastTr && isLastRowTd\n td.isLastRowTd = isLastRowTd\n td.isLastColTd = isLastColTd\n td.isLastTd = isLastTd\n td.x = preX\n let preY = 0\n for (let preR = 0; preR < t; preR++) {\n const preTdList = trList[preR].tdList\n for (let preD = 0; preD < preTdList.length; preD++) {\n const td = preTdList[preD]\n if (\n colIndex >= td.colIndex! &&\n colIndex < td.colIndex! + td.colspan\n ) {\n preY += td.height!\n break\n }\n }\n }\n td.y = preY\n td.width = width\n td.height = height\n td.rowIndex = t\n td.colIndex = colIndex\n td.trIndex = t\n td.tdIndex = d\n preX += width\n if (isLastRowTd && !isLastTd) {\n preX = 0\n }\n }\n }\n }\n\n public drawRange(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n startX: number,\n startY: number\n ) {\n const { scale, rangeAlpha, rangeColor } = this.options\n const { type, trList } = element\n if (!trList || type !== ElementType.TABLE) return\n const {\n isCrossRowCol,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n } = this.range.getRange()\n if (!isCrossRowCol) return\n let startTd = trList[startTrIndex!].tdList[startTdIndex!]\n let endTd = trList[endTrIndex!].tdList[endTdIndex!]\n if (startTd.x! > endTd.x! || startTd.y! > endTd.y!) {\n // prettier-ignore\n [startTd, endTd] = [endTd, startTd]\n }\n const startColIndex = startTd.colIndex!\n const endColIndex = endTd.colIndex! + (endTd.colspan - 1)\n const startRowIndex = startTd.rowIndex!\n const endRowIndex = endTd.rowIndex! + (endTd.rowspan - 1)\n ctx.save()\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdColIndex = td.colIndex!\n const tdRowIndex = td.rowIndex!\n if (\n tdColIndex >= startColIndex &&\n tdColIndex <= endColIndex &&\n tdRowIndex >= startRowIndex &&\n tdRowIndex <= endRowIndex\n ) {\n const x = td.x! * scale\n const y = td.y! * scale\n const width = td.width! * scale\n const height = td.height! * scale\n ctx.globalAlpha = rangeAlpha\n ctx.fillStyle = rangeColor\n ctx.fillRect(x + startX, y + startY, width, height)\n }\n }\n }\n ctx.restore()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IElement,\n startX: number,\n startY: number\n ) {\n this._drawBackgroundColor(ctx, element, startX, startY)\n this._drawBorder(ctx, element, startX, startY)\n }\n}\n","import { IElement } from '../../../..'\nimport { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'\nimport { TableOrder } from '../../../../dataset/enum/table/TableTool'\nimport { DeepRequired } from '../../../../interface/Common'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { Position } from '../../../position/Position'\nimport { RangeManager } from '../../../range/RangeManager'\nimport { Draw } from '../../Draw'\n\ninterface IAnchorMouseDown {\n evt: MouseEvent\n order: TableOrder\n index: number\n element: IElement\n isLeftStartBorder?: boolean\n}\n\nexport class TableTool {\n private readonly MIN_TD_WIDTH = 20\n private readonly ROW_COL_OFFSET = 18\n private readonly ROW_COL_QUICK_WIDTH = 16\n private readonly ROW_COL_QUICK_OFFSET = 5\n private readonly ROW_COL_QUICK_POSITION =\n this.ROW_COL_OFFSET + (this.ROW_COL_OFFSET - this.ROW_COL_QUICK_WIDTH) / 2\n private readonly BORDER_VALUE = 4\n private readonly TABLE_SELECT_OFFSET = 20\n\n private draw: Draw\n private canvas: HTMLCanvasElement\n private options: DeepRequired<IEditorOption>\n private position: Position\n private range: RangeManager\n private container: HTMLDivElement\n private toolRowContainer: HTMLDivElement | null\n private toolRowAddBtn: HTMLDivElement | null\n private toolColAddBtn: HTMLDivElement | null\n private toolTableSelectBtn: HTMLDivElement | null\n private toolColContainer: HTMLDivElement | null\n private toolBorderContainer: HTMLDivElement | null\n private anchorLine: HTMLDivElement | null\n private mousedownX: number\n private mousedownY: number\n\n constructor(draw: Draw) {\n this.draw = draw\n this.canvas = draw.getPage()\n this.options = draw.getOptions()\n this.position = draw.getPosition()\n this.range = draw.getRange()\n this.container = draw.getContainer()\n this.toolRowContainer = null\n this.toolRowAddBtn = null\n this.toolColAddBtn = null\n this.toolTableSelectBtn = null\n this.toolColContainer = null\n this.toolBorderContainer = null\n this.anchorLine = null\n this.mousedownX = 0\n this.mousedownY = 0\n }\n\n public dispose() {\n this.toolRowContainer?.remove()\n this.toolRowAddBtn?.remove()\n this.toolColAddBtn?.remove()\n this.toolTableSelectBtn?.remove()\n this.toolColContainer?.remove()\n this.toolBorderContainer?.remove()\n this.toolRowContainer = null\n this.toolRowAddBtn = null\n this.toolColAddBtn = null\n this.toolTableSelectBtn = null\n this.toolColContainer = null\n this.toolBorderContainer = null\n }\n\n public render() {\n const { isTable, index, trIndex, tdIndex } =\n this.position.getPositionContext()\n if (!isTable) return\n this.dispose()\n const elementList = this.draw.getOriginalElementList()\n const positionList = this.position.getOriginalPositionList()\n const element = elementList[index!]\n if (element.tableToolDisabled && !this.draw.isDesignMode()) return\n const {\n scale,\n table: { overflow }\n } = this.options\n const position = positionList[index!]\n const { colgroup, trList } = element\n const {\n coordinate: { leftTop }\n } = position\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const prePageHeight = this.draw.getPageNo() * (height + pageGap)\n const tableX = leftTop[0]\n const tableY = leftTop[1] + prePageHeight\n const td = element.trList![trIndex!].tdList[tdIndex!]\n const rowIndex = td.rowIndex\n const colIndex = td.colIndex\n const tableHeight = element.height! * scale\n const tableWidth = element.width! * scale\n const tableSelectBtn = document.createElement('div')\n tableSelectBtn.classList.add(`${EDITOR_PREFIX}-table-tool__select`)\n tableSelectBtn.style.height = `${tableHeight * scale}`\n tableSelectBtn.style.left = `${tableX}px`\n tableSelectBtn.style.top = `${tableY}px`\n tableSelectBtn.style.transform = `translate(-${\n this.TABLE_SELECT_OFFSET * scale\n }px, ${-this.TABLE_SELECT_OFFSET * scale}px)`\n tableSelectBtn.onclick = () => {\n this.draw.getTableOperate().tableSelectAll()\n }\n this.container.append(tableSelectBtn)\n this.toolTableSelectBtn = tableSelectBtn\n const rowHeightList = trList!.map(tr => tr.height)\n const rowContainer = document.createElement('div')\n rowContainer.classList.add(`${EDITOR_PREFIX}-table-tool__row`)\n rowContainer.style.transform = `translateX(-${\n this.ROW_COL_OFFSET * scale\n }px)`\n for (let r = 0; r < rowHeightList.length; r++) {\n const rowHeight = rowHeightList[r] * scale\n const rowItem = document.createElement('div')\n rowItem.classList.add(`${EDITOR_PREFIX}-table-tool__row__item`)\n if (r === rowIndex) {\n rowItem.classList.add('active')\n }\n rowItem.onclick = () => {\n const tdList = this.draw\n .getTableParticle()\n .getTdListByRowIndex(trList!, r)\n const firstTd = tdList[0]\n const lastTd = tdList[tdList.length - 1]\n this.position.setPositionContext({\n index,\n isTable: true,\n trIndex: firstTd.trIndex,\n tdIndex: firstTd.tdIndex,\n tableId: element.id\n })\n this.range.setRange(\n 0,\n 0,\n element.id,\n firstTd.tdIndex,\n lastTd.tdIndex,\n firstTd.trIndex,\n lastTd.trIndex\n )\n this.draw.render({\n curIndex: 0,\n isCompute: false,\n isSubmitHistory: false\n })\n this._setAnchorActive(rowContainer, r)\n }\n const rowItemAnchor = document.createElement('div')\n rowItemAnchor.classList.add(`${EDITOR_PREFIX}-table-tool__anchor`)\n rowItemAnchor.onmousedown = evt => {\n this._mousedown({\n evt,\n element,\n index: r,\n order: TableOrder.ROW\n })\n }\n rowItem.append(rowItemAnchor)\n rowItem.style.height = `${rowHeight}px`\n rowContainer.append(rowItem)\n }\n rowContainer.style.left = `${tableX}px`\n rowContainer.style.top = `${tableY}px`\n this.container.append(rowContainer)\n this.toolRowContainer = rowContainer\n const rowAddBtn = document.createElement('div')\n rowAddBtn.classList.add(`${EDITOR_PREFIX}-table-tool__quick__add`)\n rowAddBtn.style.height = `${tableHeight * scale}`\n rowAddBtn.style.left = `${tableX}px`\n rowAddBtn.style.top = `${tableY + tableHeight}px`\n rowAddBtn.style.transform = `translate(-${\n this.ROW_COL_QUICK_POSITION * scale\n }px, ${this.ROW_COL_QUICK_OFFSET * scale}px)`\n rowAddBtn.onclick = () => {\n this.position.setPositionContext({\n index,\n isTable: true,\n trIndex: trList!.length - 1,\n tdIndex: 0,\n tableId: element.id\n })\n this.draw.getTableOperate().insertTableBottomRow()\n }\n this.container.append(rowAddBtn)\n this.toolRowAddBtn = rowAddBtn\n const colWidthList = colgroup!.map(col => col.width)\n const colContainer = document.createElement('div')\n colContainer.classList.add(`${EDITOR_PREFIX}-table-tool__col`)\n colContainer.style.transform = `translateY(-${\n this.ROW_COL_OFFSET * scale\n }px)`\n for (let c = 0; c < colWidthList.length; c++) {\n const colWidth = colWidthList[c] * scale\n const colItem = document.createElement('div')\n colItem.classList.add(`${EDITOR_PREFIX}-table-tool__col__item`)\n if (c === colIndex) {\n colItem.classList.add('active')\n }\n colItem.onclick = () => {\n const tdList = this.draw\n .getTableParticle()\n .getTdListByColIndex(trList!, c)\n const firstTd = tdList[0]\n const lastTd = tdList[tdList.length - 1]\n this.position.setPositionContext({\n index,\n isTable: true,\n trIndex: firstTd.trIndex,\n tdIndex: firstTd.tdIndex,\n tableId: element.id\n })\n this.range.setRange(\n 0,\n 0,\n element.id,\n firstTd.tdIndex,\n lastTd.tdIndex,\n firstTd.trIndex,\n lastTd.trIndex\n )\n this.draw.render({\n curIndex: 0,\n isCompute: false,\n isSubmitHistory: false\n })\n this._setAnchorActive(colContainer, c)\n }\n const colItemAnchor = document.createElement('div')\n colItemAnchor.classList.add(`${EDITOR_PREFIX}-table-tool__anchor`)\n colItemAnchor.onmousedown = evt => {\n this._mousedown({\n evt,\n element,\n index: c,\n order: TableOrder.COL\n })\n }\n colItem.append(colItemAnchor)\n colItem.style.width = `${colWidth}px`\n colContainer.append(colItem)\n }\n colContainer.style.left = `${tableX}px`\n colContainer.style.top = `${tableY}px`\n this.container.append(colContainer)\n this.toolColContainer = colContainer\n const colAddBtn = document.createElement('div')\n colAddBtn.classList.add(`${EDITOR_PREFIX}-table-tool__quick__add`)\n colAddBtn.style.height = `${tableHeight * scale}`\n colAddBtn.style.left = `${tableX + tableWidth}px`\n colAddBtn.style.top = `${tableY}px`\n colAddBtn.style.transform = `translate(${\n this.ROW_COL_QUICK_OFFSET * scale\n }px, -${this.ROW_COL_QUICK_POSITION * scale}px)`\n colAddBtn.onclick = () => {\n this.position.setPositionContext({\n index,\n isTable: true,\n trIndex: 0,\n tdIndex: trList![0].tdList.length - 1 || 0,\n tableId: element.id\n })\n this.draw.getTableOperate().insertTableRightCol()\n }\n this.container.append(colAddBtn)\n this.toolColAddBtn = colAddBtn\n const borderContainer = document.createElement('div')\n borderContainer.classList.add(`${EDITOR_PREFIX}-table-tool__border`)\n borderContainer.style.height = `${tableHeight}px`\n borderContainer.style.width = `${tableWidth}px`\n borderContainer.style.left = `${tableX}px`\n borderContainer.style.top = `${tableY}px`\n for (let r = 0; r < trList!.length; r++) {\n const tr = trList![r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const rowBorder = document.createElement('div')\n rowBorder.classList.add(`${EDITOR_PREFIX}-table-tool__border__row`)\n rowBorder.style.width = `${td.width! * scale}px`\n rowBorder.style.height = `${this.BORDER_VALUE}px`\n rowBorder.style.top = `${\n (td.y! + td.height!) * scale - this.BORDER_VALUE / 2\n }px`\n rowBorder.style.left = `${td.x! * scale}px`\n rowBorder.onmousedown = evt => {\n this._mousedown({\n evt,\n element,\n index: td.rowIndex! + td.rowspan - 1,\n order: TableOrder.ROW\n })\n }\n borderContainer.appendChild(rowBorder)\n const colBorder = document.createElement('div')\n colBorder.classList.add(`${EDITOR_PREFIX}-table-tool__border__col`)\n colBorder.style.width = `${this.BORDER_VALUE}px`\n colBorder.style.height = `${td.height! * scale}px`\n colBorder.style.top = `${td.y! * scale}px`\n colBorder.style.left = `${\n (td.x! + td.width!) * scale - this.BORDER_VALUE / 2\n }px`\n colBorder.onmousedown = evt => {\n this._mousedown({\n evt,\n element,\n index: td.colIndex! + td.colspan - 1,\n order: TableOrder.COL\n })\n }\n borderContainer.appendChild(colBorder)\n if (overflow && td.colIndex === 0) {\n const colBorder = document.createElement('div')\n colBorder.classList.add(`${EDITOR_PREFIX}-table-tool__border__col`)\n colBorder.style.width = `${this.BORDER_VALUE}px`\n colBorder.style.height = `${td.height! * scale}px`\n colBorder.style.top = `${td.y! * scale}px`\n colBorder.style.left = `${td.x! * scale - this.BORDER_VALUE / 2}px`\n colBorder.onmousedown = evt => {\n this._mousedown({\n evt,\n element,\n index: 0,\n isLeftStartBorder: true,\n order: TableOrder.COL\n })\n }\n borderContainer.appendChild(colBorder)\n }\n }\n }\n this.container.append(borderContainer)\n this.toolBorderContainer = borderContainer\n }\n\n private _setAnchorActive(container: HTMLDivElement, index: number) {\n const children = container.children\n for (let c = 0; c < children.length; c++) {\n const child = children[c]\n if (c === index) {\n child.classList.add('active')\n } else {\n child.classList.remove('active')\n }\n }\n }\n\n private _mousedown(payload: IAnchorMouseDown) {\n const { evt, index, order, element, isLeftStartBorder } = payload\n this.canvas = this.draw.getPage()\n const {\n scale,\n table: { overflow }\n } = this.options\n const width = this.draw.getWidth()\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const prePageHeight = this.draw.getPageNo() * (height + pageGap)\n this.mousedownX = evt.x\n this.mousedownY = evt.y\n const target = evt.target as HTMLDivElement\n const canvasRect = this.canvas.getBoundingClientRect()\n const cursor = window.getComputedStyle(target).cursor\n document.body.style.cursor = cursor\n this.canvas.style.cursor = cursor\n let startX = 0\n let startY = 0\n const anchorLine = document.createElement('div')\n anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line`)\n if (order === TableOrder.ROW) {\n anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line__row`)\n anchorLine.style.width = `${width}px`\n startX = 0\n startY = prePageHeight + this.mousedownY - canvasRect.top\n } else {\n anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line__col`)\n anchorLine.style.height = `${height}px`\n startX = this.mousedownX - canvasRect.left\n startY = prePageHeight\n }\n anchorLine.style.left = `${startX}px`\n anchorLine.style.top = `${startY}px`\n this.container.append(anchorLine)\n this.anchorLine = anchorLine\n let dx = 0\n let dy = 0\n const mousemoveFn = (evt: MouseEvent) => {\n const movePosition = this._mousemove(evt, order, startX, startY)\n if (movePosition) {\n dx = movePosition.dx\n dy = movePosition.dy\n }\n }\n document.addEventListener('mousemove', mousemoveFn)\n document.addEventListener(\n 'mouseup',\n () => {\n let isChangeSize = false\n if (order === TableOrder.ROW) {\n const trList = element.trList!\n const tr = trList[index] || trList[index - 1]\n const { defaultTrMinHeight } = this.options.table\n if (dy < 0 && tr.height + dy < defaultTrMinHeight) {\n dy = defaultTrMinHeight - tr.height\n }\n if (dy) {\n tr.height += dy\n tr.minHeight = tr.height\n isChangeSize = true\n }\n } else {\n const { colgroup } = element\n if (colgroup && dx) {\n if (overflow && isLeftStartBorder) {\n if (colgroup[index].width - dx / scale <= this.MIN_TD_WIDTH) {\n dx = (colgroup[index].width - this.MIN_TD_WIDTH) * scale\n }\n colgroup[index].width -= dx / scale\n element.width! -= dx / scale\n element.translateX = (element.translateX || 0) + dx / scale\n isChangeSize = true\n } else {\n const innerWidth = this.draw.getInnerWidth()\n const curColWidth = colgroup[index].width\n if (dx < 0 && curColWidth + dx < this.MIN_TD_WIDTH) {\n dx = this.MIN_TD_WIDTH - curColWidth\n }\n const nextColWidth = colgroup[index + 1]?.width\n if (\n dx > 0 &&\n nextColWidth &&\n nextColWidth - dx < this.MIN_TD_WIDTH\n ) {\n dx = nextColWidth - this.MIN_TD_WIDTH\n }\n const moveColWidth = curColWidth + dx\n if (!overflow && index === colgroup.length - 1) {\n let moveTableWidth = 0\n for (let c = 0; c < colgroup.length; c++) {\n const group = colgroup[c]\n if (c === index + 1) {\n moveTableWidth -= dx\n }\n if (c === index) {\n moveTableWidth += moveColWidth\n }\n if (c !== index) {\n moveTableWidth += group.width\n }\n }\n if (moveTableWidth > innerWidth) {\n const tableWidth = element.width!\n dx = innerWidth - tableWidth\n }\n }\n if (dx) {\n if (colgroup.length - 1 !== index) {\n colgroup[index + 1].width -= dx / scale\n }\n colgroup[index].width += dx / scale\n isChangeSize = true\n }\n }\n }\n }\n if (isChangeSize) {\n this.draw.render({ isSetCursor: false })\n }\n anchorLine.remove()\n document.removeEventListener('mousemove', mousemoveFn)\n document.body.style.cursor = ''\n this.canvas.style.cursor = 'text'\n },\n {\n once: true\n }\n )\n evt.preventDefault()\n }\n\n private _mousemove(\n evt: MouseEvent,\n tableOrder: TableOrder,\n startX: number,\n startY: number\n ): { dx: number; dy: number } | null {\n if (!this.anchorLine) return null\n const dx = evt.x - this.mousedownX\n const dy = evt.y - this.mousedownY\n if (tableOrder === TableOrder.ROW) {\n this.anchorLine.style.top = `${startY + dy}px`\n } else {\n this.anchorLine.style.left = `${startX + dx}px`\n }\n evt.preventDefault()\n return { dx, dy }\n }\n}\n","import { IElement } from '../../..'\nimport { EDITOR_PREFIX } from '../../../dataset/constant/Editor'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElementPosition } from '../../../interface/Element'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class HyperlinkParticle {\n private draw: Draw\n private options: Required<IEditorOption>\n private container: HTMLDivElement\n private hyperlinkPopupContainer: HTMLDivElement\n private hyperlinkDom: HTMLAnchorElement\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.container = draw.getContainer()\n const { hyperlinkPopupContainer, hyperlinkDom } =\n this._createHyperlinkPopupDom()\n this.hyperlinkDom = hyperlinkDom\n this.hyperlinkPopupContainer = hyperlinkPopupContainer\n }\n\n private _createHyperlinkPopupDom() {\n const hyperlinkPopupContainer = document.createElement('div')\n hyperlinkPopupContainer.classList.add(`${EDITOR_PREFIX}-hyperlink-popup`)\n const hyperlinkDom = document.createElement('a')\n hyperlinkDom.target = '_blank'\n hyperlinkDom.rel = 'noopener'\n hyperlinkPopupContainer.append(hyperlinkDom)\n this.container.append(hyperlinkPopupContainer)\n return { hyperlinkPopupContainer, hyperlinkDom }\n }\n\n public drawHyperlinkPopup(element: IElement, position: IElementPosition) {\n const {\n coordinate: {\n leftTop: [left, top]\n },\n lineHeight\n } = position\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const preY = this.draw.getPageNo() * (height + pageGap)\n this.hyperlinkPopupContainer.style.display = 'block'\n this.hyperlinkPopupContainer.style.left = `${left}px`\n this.hyperlinkPopupContainer.style.top = `${top + preY + lineHeight}px`\n const url = element.url || '#'\n this.hyperlinkDom.href = url\n this.hyperlinkDom.title = url\n this.hyperlinkDom.innerText = url\n }\n\n public clearHyperlinkPopup() {\n this.hyperlinkPopupContainer.style.display = 'none'\n }\n\n public openHyperlink(element: IElement) {\n const newTab = window.open(element.url, '_blank')\n if (newTab) {\n newTab.opener = null\n }\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n ctx.save()\n ctx.font = element.style\n if (!element.color) {\n element.color = this.options.defaultHyperlinkColor\n }\n ctx.fillStyle = element.color\n if (element.underline === undefined) {\n element.underline = true\n }\n ctx.fillText(element.value, x, y)\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class LabelParticle {\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.options = draw.getOptions()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const {\n scale,\n label: {\n defaultBackgroundColor,\n defaultColor,\n defaultBorderRadius,\n defaultPadding\n }\n } = this.options\n\n const backgroundColor =\n element.label?.backgroundColor || defaultBackgroundColor\n const color = element.label?.color || defaultColor\n const borderRadius = element.label?.borderRadius || defaultBorderRadius\n const padding = element.label?.padding || defaultPadding\n\n ctx.save()\n ctx.font = element.style\n const { width, boundingBoxAscent, boundingBoxDescent } = element.metrics\n\n const borderColor = element.label?.borderColor\n const rectHeight = boundingBoxAscent + boundingBoxDescent\n\n ctx.fillStyle = backgroundColor\n this._drawRoundedRect(\n ctx,\n x,\n y - boundingBoxAscent,\n width,\n rectHeight,\n borderRadius * scale\n )\n ctx.fill()\n\n if (borderColor) {\n ctx.strokeStyle = borderColor\n ctx.lineWidth = 1 * scale\n ctx.stroke()\n }\n\n ctx.fillStyle = color\n const textX = x + padding[3] * scale\n const ICON_CHAR = '\\u2297'\n const ICON_PREFIX = ICON_CHAR + ' '\n if (element.value.startsWith(ICON_PREFIX)) {\n const baseStyle = element.style\n // Icon: bold + 2px lebih besar dari font badge\n const boldBase = /\\bbold\\b/.test(baseStyle)\n ? baseStyle\n : baseStyle.replace(/^(italic\\s+)?/, '$1bold ')\n const iconStyle = boldBase.replace(\n /(\\d+(?:\\.\\d+)?)px/,\n (_, n) => `${parseFloat(n) + 2 * scale}px`\n )\n\n // Ukur icon metrics untuk centering\n ctx.font = iconStyle\n const iconMetrics = ctx.measureText(ICON_CHAR)\n const iconWidth = iconMetrics.width\n\n // Pusat vertikal badge rect (relatif dari baseline y)\n const badgeCenterY = y + (boundingBoxDescent - boundingBoxAscent) / 2\n // Posisi baseline icon agar visual center-nya sejajar pusat badge\n const iconBaselineY =\n badgeCenterY +\n (iconMetrics.actualBoundingBoxAscent - iconMetrics.actualBoundingBoxDescent) / 2\n\n ctx.fillText(ICON_CHAR, textX, iconBaselineY)\n\n // Teks nama: font normal di baseline teks\n ctx.font = baseStyle\n const gapWidth = ctx.measureText(' ').width\n ctx.fillText(\n element.value.slice(ICON_PREFIX.length),\n textX + iconWidth + gapWidth,\n y\n )\n } else {\n ctx.fillText(element.value, textX, y)\n }\n ctx.restore()\n }\n\n private _drawRoundedRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number\n ) {\n // Clamp radius seperti CSS border-radius: tidak boleh melebihi setengah sisi terkecil\n const r = Math.min(radius, width / 2, height / 2)\n ctx.beginPath()\n ctx.moveTo(x + r, y)\n ctx.lineTo(x + width - r, y)\n ctx.quadraticCurveTo(x + width, y, x + width, y + r)\n ctx.lineTo(x + width, y + height - r)\n ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height)\n ctx.lineTo(x + r, y + height)\n ctx.quadraticCurveTo(x, y + height, x, y + height - r)\n ctx.lineTo(x, y + r)\n ctx.quadraticCurveTo(x, y, x + r, y)\n ctx.closePath()\n }\n}\n","import { maxHeightRadioMapping } from '../../../dataset/constant/Common'\nimport { EditorZone } from '../../../dataset/enum/Editor'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../interface/Element'\nimport { IRow } from '../../../interface/Row'\nimport { pickSurroundElementList } from '../../../utils/element'\nimport { Position } from '../../position/Position'\nimport { Zone } from '../../zone/Zone'\nimport { Draw } from '../Draw'\n\nexport class Header {\n private draw: Draw\n private position: Position\n private zone: Zone\n private options: DeepRequired<IEditorOption>\n\n private elementList: IElement[]\n private rowList: IRow[]\n private positionList: IElementPosition[]\n\n constructor(draw: Draw, data?: IElement[]) {\n this.draw = draw\n this.position = draw.getPosition()\n this.zone = draw.getZone()\n this.options = draw.getOptions()\n\n this.elementList = data || []\n this.rowList = []\n this.positionList = []\n }\n\n public getRowList(): IRow[] {\n return this.rowList\n }\n\n public setElementList(elementList: IElement[]) {\n this.elementList = elementList\n }\n\n public getElementList(): IElement[] {\n return this.elementList\n }\n\n public getPositionList(): IElementPosition[] {\n return this.positionList\n }\n\n public compute() {\n this.recovery()\n this._computeRowList()\n this._computePositionList()\n }\n\n public recovery() {\n this.rowList = []\n this.positionList = []\n }\n\n private _computeRowList() {\n const innerWidth = this.draw.getInnerWidth()\n const margins = this.draw.getMargins()\n const surroundElementList = pickSurroundElementList(this.elementList)\n this.rowList = this.draw.computeRowList({\n startX: margins[3],\n startY: this.getHeaderTop(),\n innerWidth,\n elementList: this.elementList,\n surroundElementList\n })\n }\n\n private _computePositionList() {\n const headerTop = this.getHeaderTop()\n const innerWidth = this.draw.getInnerWidth()\n const margins = this.draw.getMargins()\n const startX = margins[3]\n const startY = headerTop\n this.position.computePageRowPosition({\n positionList: this.positionList,\n rowList: this.rowList,\n pageNo: 0,\n startRowIndex: 0,\n startIndex: 0,\n startX,\n startY,\n innerWidth,\n zone: EditorZone.HEADER\n })\n }\n\n public getHeaderTop(): number {\n const {\n header: { top, disabled },\n scale\n } = this.options\n if (disabled) return 0\n return Math.floor(top * scale)\n }\n\n public getMaxHeight(): number {\n const {\n header: { maxHeightRadio }\n } = this.options\n const height = this.draw.getHeight()\n return Math.floor(height * maxHeightRadioMapping[maxHeightRadio])\n }\n\n public getHeight(): number {\n if (this.options.header.disabled) return 0\n const maxHeight = this.getMaxHeight()\n const rowHeight = this.getRowHeight()\n return rowHeight > maxHeight ? maxHeight : rowHeight\n }\n\n public getRowHeight(): number {\n return this.rowList.reduce((pre, cur) => pre + cur.height, 0)\n }\n\n // Header area extends at least to the top margin line\n public getEffectiveBottomY(): number {\n const margins = this.draw.getMargins()\n const contentBottomY = this.getHeaderTop() + this.getHeight()\n return Math.max(contentBottomY, margins[0])\n }\n\n public getExtraHeight(): number {\n const margins = this.draw.getMargins()\n const headerHeight = this.getHeight()\n const headerTop = this.getHeaderTop()\n const extraHeight = headerTop + headerHeight - margins[0]\n return extraHeight <= 0 ? 0 : extraHeight\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n ctx.save()\n ctx.globalAlpha = this.zone.isHeaderActive()\n ? 1\n : this.options.header.inactiveAlpha\n const innerWidth = this.draw.getInnerWidth()\n const maxHeight = this.getMaxHeight()\n const rowList: IRow[] = []\n let curRowHeight = 0\n for (let r = 0; r < this.rowList.length; r++) {\n const row = this.rowList[r]\n if (curRowHeight + row.height > maxHeight) {\n break\n }\n rowList.push(row)\n curRowHeight += row.height\n }\n this.draw.drawRow(ctx, {\n elementList: this.elementList,\n positionList: this.positionList,\n rowList,\n pageNo,\n startIndex: 0,\n innerWidth,\n zone: EditorZone.HEADER\n })\n ctx.restore()\n }\n}\n","import { IRowElement } from '../../../interface/Row'\n\nexport class SuperscriptParticle {\n public getOffsetY(element: IRowElement): number {\n return -element.metrics.height / 2\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n ctx.save()\n ctx.font = element.style\n if (element.color) {\n ctx.fillStyle = element.color\n }\n ctx.fillText(element.value, x, y + this.getOffsetY(element))\n ctx.restore()\n }\n}\n","import { IRowElement } from '../../../interface/Row'\n\nexport class SubscriptParticle {\n public getOffsetY(element: IRowElement): number {\n return element.metrics.height / 2\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n ctx.save()\n ctx.font = element.style\n if (element.color) {\n ctx.fillStyle = element.color\n }\n ctx.fillText(element.value, x, y + this.getOffsetY(element))\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class SeparatorParticle {\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.options = draw.getOptions()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n ctx.save()\n const {\n scale,\n separator: { lineWidth, strokeStyle }\n } = this.options\n ctx.lineWidth = (element.lineWidth || lineWidth) * scale\n ctx.strokeStyle = element.color || strokeStyle\n if (element.dashArray?.length) {\n ctx.setLineDash(element.dashArray)\n }\n const offsetY = Math.round(y)\n ctx.translate(0, ctx.lineWidth / 2)\n ctx.beginPath()\n ctx.moveTo(x, offsetY)\n ctx.lineTo(x + element.width! * scale, offsetY)\n ctx.stroke()\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { I18n } from '../../i18n/I18n'\nimport { Draw } from '../Draw'\n\nexport class PageBreakParticle {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private i18n: I18n\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.i18n = draw.getI18n()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const {\n pageBreak: { font, fontSize, lineDash }\n } = this.options\n const displayName = this.i18n.t('pageBreak.displayName')\n const { scale, defaultRowMargin } = this.options\n const size = fontSize * scale\n const elementWidth = element.width! * scale\n const offsetY =\n this.draw.getDefaultBasicRowMarginHeight() * defaultRowMargin\n ctx.save()\n ctx.font = `${size}px ${font}`\n const textMeasure = ctx.measureText(displayName)\n const halfX = (elementWidth - textMeasure.width) / 2\n ctx.setLineDash(lineDash)\n ctx.translate(0, 0.5 + offsetY)\n ctx.beginPath()\n ctx.moveTo(x, y)\n ctx.lineTo(x + halfX, y)\n ctx.moveTo(x + halfX + textMeasure.width, y)\n ctx.lineTo(x + elementWidth, y)\n ctx.stroke()\n ctx.fillText(\n displayName,\n x + halfX,\n y + textMeasure.actualBoundingBoxAscent - size / 2\n )\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class ColumnBreakParticle {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const {\n pageBreak: { lineDash }\n } = this.options\n const { scale, defaultRowMargin } = this.options\n const elementWidth = element.width! * scale\n const offsetY =\n this.draw.getDefaultBasicRowMarginHeight() * defaultRowMargin\n ctx.save()\n ctx.strokeStyle = '#DCDCDC'\n ctx.setLineDash(lineDash)\n ctx.translate(0, 0.5 + offsetY)\n ctx.beginPath()\n ctx.moveTo(x, y)\n ctx.lineTo(x + elementWidth, y)\n ctx.stroke()\n ctx.restore()\n }\n}\n","import { IEditorOption } from '../../..'\nimport { FORMAT_PLACEHOLDER } from '../../../dataset/constant/PageNumber'\nimport { WatermarkType } from '../../../dataset/enum/Watermark'\nimport { DeepRequired } from '../../../interface/Common'\nimport { Draw } from '../Draw'\nimport { PageNumber } from './PageNumber'\n\nexport class Watermark {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private imageCache: Map<string, HTMLImageElement>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = <DeepRequired<IEditorOption>>draw.getOptions()\n this.imageCache = new Map()\n }\n\n public renderText(ctx: CanvasRenderingContext2D, pageNo: number) {\n const {\n watermark: { data, opacity, font, size, color, repeat, gap, numberType, rotation },\n scale\n } = this.options\n const width = this.draw.getWidth()\n const height = this.draw.getHeight()\n ctx.save()\n ctx.globalAlpha = opacity\n ctx.font = `${size * scale}px ${font}`\n let text = data\n const pageNoReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_NO)\n if (pageNoReg.test(text)) {\n text = PageNumber.formatNumberPlaceholder(\n text,\n pageNo + 1,\n pageNoReg,\n numberType\n )\n }\n const pageCountReg = new RegExp(FORMAT_PLACEHOLDER.PAGE_COUNT)\n if (pageCountReg.test(text)) {\n text = PageNumber.formatNumberPlaceholder(\n text,\n this.draw.getPageCount(),\n pageCountReg,\n numberType\n )\n }\n const measureText = ctx.measureText(text)\n if (repeat) {\n const dpr = this.draw.getPagePixelRatio()\n const temporaryCanvas = document.createElement('canvas')\n const temporaryCtx = temporaryCanvas.getContext('2d')!\n const textWidth = measureText.width\n const textHeight =\n measureText.actualBoundingBoxAscent +\n measureText.actualBoundingBoxDescent\n const diagonalLength = Math.sqrt(\n Math.pow(textWidth, 2) + Math.pow(textHeight, 2)\n )\n const patternWidth = diagonalLength + 2 * gap[0] * scale\n const patternHeight = diagonalLength + 2 * gap[1] * scale\n temporaryCanvas.width = patternWidth\n temporaryCanvas.height = patternHeight\n temporaryCanvas.style.width = `${patternWidth * dpr}px`\n temporaryCanvas.style.height = `${patternHeight * dpr}px`\n temporaryCtx.translate(patternWidth / 2, patternHeight / 2)\n temporaryCtx.rotate((rotation * Math.PI) / 180)\n temporaryCtx.translate(-patternWidth / 2, -patternHeight / 2)\n temporaryCtx.font = `${size * scale}px ${font}`\n temporaryCtx.fillStyle = color\n temporaryCtx.fillText(\n text,\n (patternWidth - textWidth) / 2,\n (patternHeight - textHeight) / 2 + measureText.actualBoundingBoxAscent\n )\n const pattern = ctx.createPattern(temporaryCanvas, 'repeat')\n if (pattern) {\n ctx.fillStyle = pattern\n ctx.fillRect(0, 0, width, height)\n }\n } else {\n const x = width / 2\n const y = height / 2\n ctx.fillStyle = color\n ctx.translate(x, y)\n ctx.rotate((rotation * Math.PI) / 180)\n ctx.fillText(\n text,\n -measureText.width / 2,\n measureText.actualBoundingBoxAscent - (size * scale) / 2\n )\n }\n ctx.restore()\n }\n\n public renderImage(ctx: CanvasRenderingContext2D) {\n const {\n watermark: { width, height, data, opacity, repeat, gap, rotation },\n scale\n } = this.options\n if (!this.imageCache.has(data)) {\n const img = new Image()\n img.setAttribute('crossOrigin', 'Anonymous')\n img.src = data\n img.onload = () => {\n this.imageCache.set(data, img)\n this.draw.render({\n isCompute: false,\n isSubmitHistory: false\n })\n }\n return\n }\n const docWidth = this.draw.getWidth()\n const docHeight = this.draw.getHeight()\n const imageWidth = width * scale\n const imageHeight = height * scale\n ctx.save()\n ctx.globalAlpha = opacity\n if (repeat) {\n const dpr = this.draw.getPagePixelRatio()\n const temporaryCanvas = document.createElement('canvas')\n const temporaryCtx = temporaryCanvas.getContext('2d')!\n const diagonalLength = Math.sqrt(\n Math.pow(imageWidth, 2) + Math.pow(imageHeight, 2)\n )\n const patternWidth = diagonalLength + 2 * gap[0] * scale\n const patternHeight = diagonalLength + 2 * gap[1] * scale\n temporaryCanvas.width = patternWidth\n temporaryCanvas.height = patternHeight\n temporaryCanvas.style.width = `${patternWidth * dpr}px`\n temporaryCanvas.style.height = `${patternHeight * dpr}px`\n temporaryCtx.translate(patternWidth / 2, patternHeight / 2)\n temporaryCtx.rotate((rotation * Math.PI) / 180)\n temporaryCtx.translate(-patternWidth / 2, -patternHeight / 2)\n temporaryCtx.drawImage(\n this.imageCache.get(data)!,\n (patternWidth - imageWidth) / 2,\n (patternHeight - imageHeight) / 2,\n imageWidth,\n imageHeight\n )\n const pattern = ctx.createPattern(temporaryCanvas, 'repeat')\n if (pattern) {\n ctx.fillStyle = pattern\n ctx.fillRect(0, 0, docWidth, docHeight)\n }\n } else {\n const x = docWidth / 2\n const y = docHeight / 2\n ctx.translate(x, y)\n ctx.rotate((rotation * Math.PI) / 180)\n ctx.drawImage(\n this.imageCache.get(data)!,\n -imageWidth / 2,\n -imageHeight / 2,\n imageWidth,\n imageHeight\n )\n }\n ctx.restore()\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n if (this.options.watermark.type === WatermarkType.IMAGE) {\n this.renderImage(ctx)\n } else {\n this.renderText(ctx, pageNo)\n }\n }\n}\n","import { ZERO } from '../../../../dataset/constant/Common'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { DeepRequired } from '../../../../interface/Common'\nimport {\n IControlHighlight,\n IControlHighlightRule\n} from '../../../../interface/Control'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../../interface/Element'\nimport {\n ISearchResult,\n ISearchResultRestArgs\n} from '../../../../interface/Search'\nimport { Draw } from '../../Draw'\nimport { Control } from '../Control'\n\ntype IHighlightMatchResult = (ISearchResult & IControlHighlightRule)[]\n\nexport class ControlSearch {\n private draw: Draw\n private control: Control\n private options: DeepRequired<IEditorOption>\n private highlightList: IControlHighlight[]\n private highlightMatchResult: IHighlightMatchResult\n\n constructor(control: Control) {\n this.draw = control.getDraw()\n this.control = control\n this.options = this.draw.getOptions()\n\n this.highlightList = []\n this.highlightMatchResult = []\n }\n\n public getControlHighlight(elementList: IElement[], index: number) {\n const {\n control: {\n activeBackgroundColor,\n disabledBackgroundColor,\n existValueBackgroundColor,\n noValueBackgroundColor\n }\n } = this.options\n const element = elementList[index]\n const isPrintMode = this.draw.isPrintMode()\n const activeControlElement = this.control.getActiveControl()?.getElement()\n let isActiveControlHighlight = false\n let isDisabledControlHighlight = false\n let isExitsValueControlHighlight = false\n let isNoValueControlHighlight = false\n if (!element.highlight) {\n isActiveControlHighlight =\n !isPrintMode &&\n !!activeBackgroundColor &&\n !!activeControlElement &&\n element.controlId === activeControlElement.controlId &&\n !this.control.getIsRangeInPostfix()\n }\n if (!isActiveControlHighlight) {\n isDisabledControlHighlight =\n !isPrintMode && !!disabledBackgroundColor && !!element.control?.disabled\n }\n if (!isDisabledControlHighlight) {\n isExitsValueControlHighlight =\n !isPrintMode &&\n !!existValueBackgroundColor &&\n !!element.controlId &&\n this.control.getIsExistValueByElementListIndex(elementList, index)\n }\n if (!isExitsValueControlHighlight) {\n isNoValueControlHighlight =\n !isPrintMode &&\n !!noValueBackgroundColor &&\n !!element.controlId &&\n !this.control.getIsExistValueByElementListIndex(elementList, index)\n }\n return (\n (isActiveControlHighlight ? activeBackgroundColor : '') ||\n (isDisabledControlHighlight ? disabledBackgroundColor : '') ||\n (isExitsValueControlHighlight ? existValueBackgroundColor : '') ||\n (isNoValueControlHighlight ? noValueBackgroundColor : '')\n )\n }\n\n public getHighlightMatchResult(): IHighlightMatchResult {\n return this.highlightMatchResult\n }\n\n public getHighlightList(): IControlHighlight[] {\n return this.highlightList\n }\n\n public setHighlightList(payload: IControlHighlight[]) {\n this.highlightList = payload\n }\n\n public computeHighlightList() {\n const search = this.draw.getSearch()\n const computeHighlight = (\n elementList: IElement[],\n restArgs?: ISearchResultRestArgs\n ) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const restArgs: ISearchResultRestArgs = {\n tableId: element.id,\n tableIndex: i - 1,\n trIndex: r,\n tdIndex: d,\n tdId: td.id\n }\n computeHighlight(td.value, restArgs)\n }\n }\n }\n const currentControl = element?.control\n if (!currentControl) continue\n const highlightIndex = this.highlightList.findIndex(\n highlight =>\n highlight.id === element.controlId ||\n (currentControl.conceptId &&\n currentControl.conceptId === highlight.conceptId)\n )\n if (!~highlightIndex) continue\n const startIndex = i\n let newEndIndex = i\n while (newEndIndex < elementList.length) {\n const nextElement = elementList[newEndIndex]\n if (nextElement.controlId !== element.controlId) break\n newEndIndex++\n }\n i = newEndIndex\n const controlElementList = elementList\n .slice(startIndex, newEndIndex)\n .map(element =>\n element.controlComponent === ControlComponent.VALUE\n ? element\n : { value: ZERO }\n )\n const highlight = this.highlightList[highlightIndex]\n const { ruleList } = highlight\n for (let r = 0; r < ruleList.length; r++) {\n const rule = ruleList[r]\n const searchResult = search.getMatchList(\n rule.keyword,\n controlElementList\n )\n this.highlightMatchResult.push(\n ...searchResult.map(result => ({\n ...result,\n ...rule,\n ...restArgs,\n index: result.index + startIndex\n }))\n )\n }\n }\n }\n this.highlightMatchResult = []\n computeHighlight(this.draw.getOriginalMainElementList())\n }\n\n public renderHighlightList(ctx: CanvasRenderingContext2D, pageIndex: number) {\n if (!this.highlightMatchResult?.length) return\n const { searchMatchAlpha, searchMatchColor } = this.options\n const positionList = this.draw.getPosition().getOriginalPositionList()\n const elementList = this.draw.getOriginalElementList()\n ctx.save()\n for (let s = 0; s < this.highlightMatchResult.length; s++) {\n const searchMatch = this.highlightMatchResult[s]\n let position: IElementPosition | null = null\n if (searchMatch.tableId) {\n const { tableIndex, trIndex, tdIndex, index } = searchMatch\n position =\n elementList[tableIndex!]?.trList![trIndex!].tdList[tdIndex!]\n ?.positionList![index]\n } else {\n position = positionList[searchMatch.index]\n }\n if (!position) continue\n const {\n coordinate: { leftTop, leftBottom, rightTop },\n pageNo\n } = position\n if (pageNo !== pageIndex) continue\n ctx.fillStyle = searchMatch.backgroundColor || searchMatchColor\n ctx.globalAlpha = searchMatch.alpha || searchMatchAlpha\n const x = leftTop[0]\n const y = leftTop[1]\n const width = rightTop[0] - leftTop[0]\n const height = leftBottom[1] - leftTop[1]\n ctx.fillRect(x, y, width, height)\n }\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../../interface/Common'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElementFillRect } from '../../../../interface/Element'\nimport { Draw } from '../../Draw'\n\nexport class ControlBorder {\n protected borderRect: IElementFillRect\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.borderRect = this.clearBorderInfo()\n this.options = draw.getOptions()\n }\n\n public clearBorderInfo() {\n this.borderRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }\n return this.borderRect\n }\n\n public recordBorderInfo(x: number, y: number, width: number, height: number) {\n const isFirstRecord = !this.borderRect.width\n if (isFirstRecord) {\n this.borderRect.x = x\n this.borderRect.y = y\n this.borderRect.height = height\n }\n this.borderRect.width += width\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n if (!this.borderRect.width) return\n const {\n scale,\n control: { borderWidth, borderColor }\n } = this.options\n const { x, y, width, height } = this.borderRect\n ctx.save()\n ctx.translate(0, 1 * scale)\n ctx.lineWidth = borderWidth * scale\n ctx.strokeStyle = borderColor\n ctx.beginPath()\n ctx.rect(x, y, width, height)\n ctx.stroke()\n ctx.restore()\n this.clearBorderInfo()\n }\n}\n","import {\n EDITOR_COMPONENT,\n EDITOR_PREFIX\n} from '../../../../dataset/constant/Editor'\nimport {\n CONTROL_STYLE_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR,\n TEXTLIKE_ELEMENT_TYPE\n} from '../../../../dataset/constant/Element'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { EditorComponent } from '../../../../dataset/enum/Editor'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport { DeepRequired } from '../../../../interface/Common'\nimport {\n IControlContext,\n IControlInstance,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement } from '../../../../interface/Element'\nimport {\n isArrayEqual,\n isNonValue,\n omitObject,\n pickObject,\n scrollIntoView,\n splitText\n} from '../../../../utils'\nimport { formatElementContext } from '../../../../utils/element'\nimport { Draw } from '../../Draw'\nimport { Control } from '../Control'\n\nexport class SelectControl implements IControlInstance {\n private draw: Draw\n private element: IElement\n private control: Control\n private isPopup: boolean\n private selectDom: HTMLDivElement | null\n private options: DeepRequired<IEditorOption>\n private VALUE_DELIMITER = ','\n private DEFAULT_MULTI_SELECT_DELIMITER = ','\n\n constructor(element: IElement, control: Control) {\n const draw = control.getDraw()\n this.draw = draw\n this.options = draw.getOptions()\n this.element = element\n this.control = control\n this.isPopup = false\n this.selectDom = null\n }\n\n public setElement(element: IElement) {\n this.element = element\n }\n\n public getElement(): IElement {\n return this.element\n }\n\n public getIsPopup(): boolean {\n return this.isPopup\n }\n\n public getCodes(): string[] {\n return this.element?.control?.code\n ? this.element.control.code.split(',')\n : []\n }\n\n public getText(codes: string[]): string | null {\n if (!this.element?.control) return null\n const control = this.element.control\n if (!control.valueSets?.length) return null\n const multiSelectDelimiter =\n control?.multiSelectDelimiter || this.DEFAULT_MULTI_SELECT_DELIMITER\n const valueSets = control.valueSets\n const valueList: string[] = []\n codes.forEach(code => {\n const valueSet = valueSets.find(v => v.code === code)\n if (valueSet && !isNonValue(valueSet.value)) {\n valueList.push(valueSet.value)\n }\n })\n return valueList.join(multiSelectDelimiter) || null\n }\n\n public getValue(context: IControlContext = {}): IElement[] {\n const elementList = context.elementList || this.control.getElementList()\n const { startIndex } = context.range || this.control.getRange()\n const startElement = elementList[startIndex]\n const data: IElement[] = []\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n if (preElement.controlComponent === ControlComponent.VALUE) {\n data.unshift(preElement)\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n if (nextElement.controlComponent === ControlComponent.VALUE) {\n data.push(nextElement)\n }\n nextIndex++\n }\n return data\n }\n\n public setValue(\n data: IElement[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n if (\n !this.element.control?.selectExclusiveOptions?.inputAble ||\n (!options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context))\n ) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n this.control.shrinkBoundary(context)\n const { startIndex, endIndex } = range\n const draw = this.control.getDraw()\n if (startIndex !== endIndex) {\n draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex)\n } else {\n this.control.removePlaceholder(startIndex, context)\n }\n const startElement = elementList[startIndex]\n const anchorElement =\n (startElement.type &&\n !TEXTLIKE_ELEMENT_TYPE.includes(startElement.type)) ||\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT\n ? pickObject(startElement, [\n 'control',\n 'controlId',\n ...CONTROL_STYLE_ATTR\n ])\n : omitObject(startElement, ['type'])\n const start = range.startIndex + 1\n for (let i = 0; i < data.length; i++) {\n const newElement: IElement = {\n ...anchorElement,\n ...data[i],\n controlComponent: ControlComponent.VALUE\n }\n formatElementContext(elementList, [newElement], startIndex, {\n editorOptions: this.options\n })\n draw.spliceElementList(elementList, start + i, 0, [newElement])\n }\n return start + data.length - 1\n }\n\n public keydown(evt: KeyboardEvent): number | null {\n if (this.control.getIsDisabledControl()) {\n return null\n }\n const elementList = this.control.getElementList()\n const range = this.control.getRange()\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = range\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n // backspace\n const inputAble = this.element.control?.selectExclusiveOptions?.inputAble\n if (evt.key === KeyMap.Backspace) {\n if (startIndex !== endIndex) {\n if (inputAble) {\n this.draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n return this.clearSelect()\n } else {\n if (\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT ||\n endElement.controlComponent === ControlComponent.POSTFIX ||\n endElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n if (inputAble) {\n this.draw.spliceElementList(elementList, startIndex, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex - 1)\n }\n return startIndex - 1\n }\n return this.clearSelect()\n }\n }\n } else if (evt.key === KeyMap.Delete) {\n if (startIndex !== endIndex) {\n if (inputAble) {\n this.draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n return this.clearSelect()\n } else {\n const endNextElement = elementList[endIndex + 1]\n if (\n ((startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT) &&\n endNextElement.controlComponent === ControlComponent.PLACEHOLDER) ||\n endNextElement.controlComponent === ControlComponent.POSTFIX ||\n endNextElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n if (inputAble) {\n this.draw.spliceElementList(elementList, startIndex + 1, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n return this.clearSelect()\n }\n }\n }\n return endIndex\n }\n\n public cut(): number {\n if (this.control.getIsDisabledControl()) {\n return -1\n }\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = this.control.getRange()\n if (startIndex === endIndex) {\n return startIndex\n }\n return this.clearSelect()\n }\n\n public clearSelect(\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n const { isIgnoreDisabledRule = false, isAddPlaceholder = true } = options\n if (!isIgnoreDisabledRule && this.control.getIsDisabledControl(context)) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const { startIndex } = context.range || this.control.getRange()\n const startElement = elementList[startIndex]\n let leftIndex = -1\n let rightIndex = -1\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n leftIndex = preIndex\n break\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n rightIndex = nextIndex - 1\n break\n }\n nextIndex++\n }\n if (!~leftIndex || !~rightIndex) return -1\n const draw = this.control.getDraw()\n draw.spliceElementList(\n elementList,\n leftIndex + 1,\n rightIndex - leftIndex,\n [],\n {\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n }\n )\n if (isAddPlaceholder) {\n this.control.addPlaceholder(preIndex, context)\n }\n this.control.setControlProperties(\n {\n code: null\n },\n {\n elementList,\n range: { startIndex: preIndex, endIndex: preIndex }\n }\n )\n return preIndex\n }\n\n public setSelect(\n code: string,\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ) {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n const control = this.element.control!\n const newCodes = code?.split(this.VALUE_DELIMITER) || []\n const oldCode = control.code\n const oldCodes = control.code?.split(this.VALUE_DELIMITER) || []\n const isMultiSelect = control.isMultiSelect\n if (\n (!isMultiSelect && code === oldCode) ||\n (isMultiSelect && isArrayEqual(oldCodes, newCodes))\n ) {\n this.control.repaintControl({\n curIndex: range.startIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n this.destroy()\n return\n }\n const valueSets = control.valueSets\n if (!Array.isArray(valueSets) || !valueSets.length) return\n const text = this.getText(newCodes)\n if (!text) {\n if (oldCode) {\n const prefixIndex = this.clearSelect(context, {\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n })\n if (~prefixIndex) {\n this.control.repaintControl({\n curIndex: prefixIndex\n })\n this.control.emitControlContentChange({\n controlValue: []\n })\n }\n }\n return\n }\n const valueElement = this.getValue(context)[0]\n const styleElement = valueElement\n ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR)\n : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR)\n const prefixIndex = this.clearSelect(context, {\n isAddPlaceholder: false,\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n })\n if (!~prefixIndex) return\n if (!oldCode) {\n this.control.removePlaceholder(prefixIndex, context)\n }\n const propertyElement = omitObject(\n elementList[prefixIndex],\n EDITOR_ELEMENT_STYLE_ATTR\n )\n const start = prefixIndex + 1\n const data = splitText(text)\n const draw = this.control.getDraw()\n for (let i = 0; i < data.length; i++) {\n const newElement: IElement = {\n ...styleElement,\n ...propertyElement,\n type: ElementType.TEXT,\n value: data[i],\n controlComponent: ControlComponent.VALUE\n }\n formatElementContext(elementList, [newElement], prefixIndex, {\n editorOptions: this.options\n })\n draw.spliceElementList(elementList, start + i, 0, [newElement])\n }\n this.control.setControlProperties(\n {\n code\n },\n {\n elementList,\n range: { startIndex: prefixIndex, endIndex: prefixIndex }\n }\n )\n if (!context.range) {\n const newIndex = start + data.length - 1\n this.control.repaintControl({\n curIndex: newIndex\n })\n this.control.emitControlContentChange({\n context\n })\n if (!isMultiSelect) {\n this.destroy()\n }\n }\n }\n\n private _createSelectPopupDom() {\n const control = this.element.control!\n const valueSets = control.valueSets\n if (!Array.isArray(valueSets) || !valueSets.length) return\n const position = this.control.getPosition()\n if (!position) return\n const selectPopupContainer = document.createElement('div')\n selectPopupContainer.classList.add(`${EDITOR_PREFIX}-select-control-popup`)\n selectPopupContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP)\n const ul = document.createElement('ul')\n let activeSelectDom: HTMLLIElement | null = null\n for (let v = 0; v < valueSets.length; v++) {\n const valueSet = valueSets[v]\n const li = document.createElement('li')\n let codes = this.getCodes()\n if (codes.includes(valueSet.code)) {\n li.classList.add('active')\n activeSelectDom = li\n }\n li.onclick = () => {\n const codeIndex = codes.findIndex(code => code === valueSet.code)\n if (control.isMultiSelect) {\n if (~codeIndex) {\n codes.splice(codeIndex, 1)\n } else {\n codes.push(valueSet.code)\n }\n } else {\n if (~codeIndex) {\n codes = []\n } else {\n codes = [valueSet.code]\n }\n }\n this.setSelect(codes.join(this.VALUE_DELIMITER))\n }\n li.append(document.createTextNode(valueSet.value))\n ul.append(li)\n }\n selectPopupContainer.append(ul)\n const {\n coordinate: {\n leftTop: [left, top]\n },\n lineHeight\n } = position\n const preY = this.control.getPreY()\n selectPopupContainer.style.left = `${left}px`\n selectPopupContainer.style.top = `${top + preY + lineHeight}px`\n const container = this.control.getContainer()\n container.append(selectPopupContainer)\n this.selectDom = selectPopupContainer\n if (activeSelectDom) {\n scrollIntoView(selectPopupContainer, activeSelectDom)\n }\n }\n\n public awake() {\n if (\n this.isPopup ||\n this.control.getIsDisabledControl() ||\n !this.control.getIsRangeWithinControl()\n ) {\n return\n }\n const { startIndex } = this.control.getRange()\n const elementList = this.control.getElementList()\n if (elementList[startIndex + 1]?.controlId !== this.element.controlId) {\n return\n }\n this._createSelectPopupDom()\n this.isPopup = true\n }\n\n public destroy() {\n if (!this.isPopup) return\n this.selectDom?.remove()\n this.isPopup = false\n }\n}\n","import {\n CONTROL_STYLE_ATTR,\n TEXTLIKE_ELEMENT_TYPE\n} from '../../../../dataset/constant/Element'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport { DeepRequired } from '../../../../interface/Common'\nimport {\n IControlContext,\n IControlInstance,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement } from '../../../../interface/Element'\nimport { omitObject, pickObject } from '../../../../utils'\nimport { formatElementContext } from '../../../../utils/element'\nimport { Control } from '../Control'\n\nexport class TextControl implements IControlInstance {\n protected element: IElement\n protected control: Control\n protected options: DeepRequired<IEditorOption>\n\n constructor(element: IElement, control: Control) {\n const draw = control.getDraw()\n this.options = draw.getOptions()\n this.element = element\n this.control = control\n }\n\n public setElement(element: IElement) {\n this.element = element\n }\n\n public getElement(): IElement {\n return this.element\n }\n\n public getValue(context: IControlContext = {}): IElement[] {\n const elementList = context.elementList || this.control.getElementList()\n const { startIndex } = context.range || this.control.getRange()\n const startElement = elementList[startIndex]\n const data: IElement[] = []\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n if (preElement.controlComponent === ControlComponent.VALUE) {\n data.unshift(preElement)\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n if (nextElement.controlComponent === ControlComponent.VALUE) {\n data.push(nextElement)\n }\n nextIndex++\n }\n return data\n }\n\n public setValue(\n data: IElement[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n this.control.shrinkBoundary(context)\n const { startIndex, endIndex } = range\n const draw = this.control.getDraw()\n if (startIndex !== endIndex) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex,\n [],\n {\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n }\n )\n } else {\n this.control.removePlaceholder(startIndex, context)\n }\n const startElement = elementList[startIndex]\n const anchorElement =\n (startElement.type &&\n !TEXTLIKE_ELEMENT_TYPE.includes(startElement.type)) ||\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT\n ? pickObject(startElement, [\n 'control',\n 'controlId',\n ...CONTROL_STYLE_ATTR\n ])\n : omitObject(startElement, ['type'])\n const start = range.startIndex + 1\n for (let i = 0; i < data.length; i++) {\n const newElement: IElement = {\n ...anchorElement,\n ...data[i],\n controlComponent: ControlComponent.VALUE\n }\n formatElementContext(elementList, [newElement], startIndex, {\n editorOptions: this.options\n })\n draw.spliceElementList(elementList, start + i, 0, [newElement])\n }\n return start + data.length - 1\n }\n\n public clearValue(\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const range =\n context.range || this.control.getValueRange() || this.control.getRange()\n const { startIndex, endIndex } = range\n this.control\n .getDraw()\n .spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex,\n [],\n {\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n }\n )\n const value = this.getValue({\n range,\n elementList\n })\n if (!value.length) {\n this.control.addPlaceholder(startIndex, context)\n }\n return startIndex\n }\n\n public keydown(evt: KeyboardEvent): number | null {\n if (this.control.getIsDisabledControl()) {\n return null\n }\n const elementList = this.control.getElementList()\n const range = this.control.getRange()\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = range\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n const draw = this.control.getDraw()\n // backspace\n if (evt.key === KeyMap.Backspace) {\n if (startIndex !== endIndex) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n } else {\n if (\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT ||\n endElement.controlComponent === ControlComponent.POSTFIX ||\n endElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n draw.spliceElementList(elementList, startIndex, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex - 1)\n }\n return startIndex - 1\n }\n }\n } else if (evt.key === KeyMap.Delete) {\n if (startIndex !== endIndex) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n } else {\n const endNextElement = elementList[endIndex + 1]\n if (\n ((startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT) &&\n endNextElement.controlComponent === ControlComponent.PLACEHOLDER) ||\n endNextElement.controlComponent === ControlComponent.POSTFIX ||\n endNextElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n draw.spliceElementList(elementList, startIndex + 1, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n }\n }\n return endIndex\n }\n\n public cut(): number {\n if (this.control.getIsDisabledControl()) {\n return -1\n }\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = this.control.getRange()\n if (startIndex === endIndex) {\n return startIndex\n }\n const draw = this.control.getDraw()\n const elementList = this.control.getElementList()\n draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n}\n","import {\n EDITOR_COMPONENT,\n EDITOR_PREFIX\n} from '../../../../dataset/constant/Editor'\nimport { EditorComponent } from '../../../../dataset/enum/Editor'\nimport { IElementPosition } from '../../../../interface/Element'\nimport { scrollIntoView } from '../../../../utils'\nimport { Draw } from '../../Draw'\n\nexport interface IDatePickerLang {\n now: string\n confirm: string\n return: string\n timeSelect: string\n weeks: {\n sun: string\n mon: string\n tue: string\n wed: string\n thu: string\n fri: string\n sat: string\n }\n year: string\n month: string\n hour: string\n minute: string\n second: string\n}\n\nexport interface IDatePickerOption {\n onSubmit?: (date: string) => void\n}\n\ninterface IDatePickerDom {\n container: HTMLDivElement\n dateWrap: HTMLDivElement\n datePickerWeek: HTMLDivElement\n timeWrap: HTMLUListElement\n title: {\n preYear: HTMLSpanElement\n preMonth: HTMLSpanElement\n now: HTMLSpanElement\n nextMonth: HTMLSpanElement\n nextYear: HTMLSpanElement\n }\n day: HTMLDivElement\n time: {\n hour: HTMLOListElement\n minute: HTMLOListElement\n second: HTMLOListElement\n }\n menu: {\n time: HTMLButtonElement\n now: HTMLButtonElement\n submit: HTMLButtonElement\n }\n}\n\ninterface IRenderOption {\n value: string\n position: IElementPosition\n dateFormat?: string\n}\n\nexport class DatePicker {\n private draw: Draw\n private options: IDatePickerOption\n private now: Date\n private dom: IDatePickerDom\n private renderOptions: IRenderOption | null\n private isDatePicker: boolean\n private pickDate: Date | null\n private lang: IDatePickerLang\n\n constructor(draw: Draw, options: IDatePickerOption = {}) {\n this.draw = draw\n this.options = options\n this.lang = this._getLang()\n this.now = new Date()\n this.dom = this._createDom()\n this.renderOptions = null\n this.isDatePicker = true\n this.pickDate = null\n this._bindEvent()\n }\n\n private _createDom(): IDatePickerDom {\n const datePickerContainer = document.createElement('div')\n datePickerContainer.classList.add(`${EDITOR_PREFIX}-date-container`)\n datePickerContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP)\n const dateWrap = document.createElement('div')\n dateWrap.classList.add(`${EDITOR_PREFIX}-date-wrap`)\n const datePickerTitle = document.createElement('div')\n datePickerTitle.classList.add(`${EDITOR_PREFIX}-date-title`)\n const preYearTitle = document.createElement('span')\n preYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-year`)\n preYearTitle.innerText = `<<`\n const preMonthTitle = document.createElement('span')\n preMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-month`)\n preMonthTitle.innerText = `<`\n const nowTitle = document.createElement('span')\n nowTitle.classList.add(`${EDITOR_PREFIX}-date-title__now`)\n const nextMonthTitle = document.createElement('span')\n nextMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-month`)\n nextMonthTitle.innerText = `>`\n const nextYearTitle = document.createElement('span')\n nextYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-year`)\n nextYearTitle.innerText = `>>`\n datePickerTitle.append(preYearTitle)\n datePickerTitle.append(preMonthTitle)\n datePickerTitle.append(nowTitle)\n datePickerTitle.append(nextMonthTitle)\n datePickerTitle.append(nextYearTitle)\n const datePickerWeek = document.createElement('div')\n datePickerWeek.classList.add(`${EDITOR_PREFIX}-date-week`)\n const {\n weeks: { sun, mon, tue, wed, thu, fri, sat }\n } = this.lang\n const weekList = [sun, mon, tue, wed, thu, fri, sat]\n weekList.forEach(week => {\n const weekDom = document.createElement('span')\n weekDom.innerText = `${week}`\n datePickerWeek.append(weekDom)\n })\n const datePickerDay = document.createElement('div')\n datePickerDay.classList.add(`${EDITOR_PREFIX}-date-day`)\n dateWrap.append(datePickerTitle)\n dateWrap.append(datePickerWeek)\n dateWrap.append(datePickerDay)\n const timeWrap = document.createElement('ul')\n timeWrap.classList.add(`${EDITOR_PREFIX}-time-wrap`)\n let hourTime: HTMLOListElement\n let minuteTime: HTMLOListElement\n let secondTime: HTMLOListElement\n const timeList = [this.lang.hour, this.lang.minute, this.lang.second]\n timeList.forEach((t, i) => {\n const li = document.createElement('li')\n const timeText = document.createElement('span')\n timeText.innerText = t\n li.append(timeText)\n const ol = document.createElement('ol')\n const isHour = i === 0\n const isMinute = i === 1\n const endIndex = isHour ? 24 : 60\n for (let i = 0; i < endIndex; i++) {\n const time = document.createElement('li')\n time.innerText = `${String(i).padStart(2, '0')}`\n time.setAttribute('data-id', `${i}`)\n ol.append(time)\n }\n if (isHour) {\n hourTime = ol\n } else if (isMinute) {\n minuteTime = ol\n } else {\n secondTime = ol\n }\n li.append(ol)\n timeWrap.append(li)\n })\n const datePickerMenu = document.createElement('div')\n datePickerMenu.classList.add(`${EDITOR_PREFIX}-date-menu`)\n const timeMenu = document.createElement('button')\n timeMenu.classList.add(`${EDITOR_PREFIX}-date-menu__time`)\n timeMenu.innerText = this.lang.timeSelect\n const nowMenu = document.createElement('button')\n nowMenu.classList.add(`${EDITOR_PREFIX}-date-menu__now`)\n nowMenu.innerText = this.lang.now\n const submitMenu = document.createElement('button')\n submitMenu.classList.add(`${EDITOR_PREFIX}-date-menu__submit`)\n submitMenu.innerText = this.lang.confirm\n datePickerMenu.append(timeMenu)\n datePickerMenu.append(nowMenu)\n datePickerMenu.append(submitMenu)\n datePickerContainer.append(dateWrap)\n datePickerContainer.append(timeWrap)\n datePickerContainer.append(datePickerMenu)\n this.draw.getContainer().append(datePickerContainer)\n return {\n container: datePickerContainer,\n dateWrap,\n datePickerWeek,\n timeWrap,\n title: {\n preYear: preYearTitle,\n preMonth: preMonthTitle,\n now: nowTitle,\n nextMonth: nextMonthTitle,\n nextYear: nextYearTitle\n },\n day: datePickerDay,\n time: {\n hour: hourTime!,\n minute: minuteTime!,\n second: secondTime!\n },\n menu: {\n time: timeMenu,\n now: nowMenu,\n submit: submitMenu\n }\n }\n }\n\n private _bindEvent() {\n this.dom.title.preYear.onclick = () => {\n this._preYear()\n }\n this.dom.title.preMonth.onclick = () => {\n this._preMonth()\n }\n this.dom.title.nextMonth.onclick = () => {\n this._nextMonth()\n }\n this.dom.title.nextYear.onclick = () => {\n this._nextYear()\n }\n this.dom.menu.time.onclick = () => {\n this.isDatePicker = !this.isDatePicker\n this._toggleDateTimePicker()\n }\n this.dom.menu.now.onclick = () => {\n this._now()\n this._submit()\n }\n this.dom.menu.submit.onclick = () => {\n this.dispose()\n this._submit()\n }\n this.dom.time.hour.onclick = evt => {\n if (!this.pickDate) return\n const li = <HTMLLIElement>evt.target\n const id = li.dataset.id\n if (!id) return\n this.pickDate.setHours(Number(id))\n this._setTimePick(false)\n }\n this.dom.time.minute.onclick = evt => {\n if (!this.pickDate) return\n const li = <HTMLLIElement>evt.target\n const id = li.dataset.id\n if (!id) return\n this.pickDate.setMinutes(Number(id))\n this._setTimePick(false)\n }\n this.dom.time.second.onclick = evt => {\n if (!this.pickDate) return\n const li = <HTMLLIElement>evt.target\n const id = li.dataset.id\n if (!id) return\n this.pickDate.setSeconds(Number(id))\n this._setTimePick(false)\n }\n }\n\n private _setPosition() {\n if (!this.renderOptions) return\n const {\n position: {\n coordinate: {\n leftTop: [left, top]\n },\n lineHeight,\n pageNo\n }\n } = this.renderOptions\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const currentPageNo = pageNo ?? this.draw.getPageNo()\n const preY = currentPageNo * (height + pageGap)\n this.dom.container.style.left = `${left}px`\n this.dom.container.style.top = `${top + preY + lineHeight}px`\n }\n\n public isInvalidDate(value: Date): boolean {\n return value.toDateString() === 'Invalid Date'\n }\n\n private _setValue() {\n const value = this.renderOptions?.value\n if (value) {\n const setDate = new Date(value)\n this.now = this.isInvalidDate(setDate) ? new Date() : setDate\n } else {\n this.now = new Date()\n }\n this.pickDate = new Date(this.now)\n }\n\n private _getLang() {\n const i18n = this.draw.getI18n()\n const t = i18n.t.bind(i18n)\n return {\n now: t('datePicker.now'),\n confirm: t('datePicker.confirm'),\n return: t('datePicker.return'),\n timeSelect: t('datePicker.timeSelect'),\n weeks: {\n sun: t('datePicker.weeks.sun'),\n mon: t('datePicker.weeks.mon'),\n tue: t('datePicker.weeks.tue'),\n wed: t('datePicker.weeks.wed'),\n thu: t('datePicker.weeks.thu'),\n fri: t('datePicker.weeks.fri'),\n sat: t('datePicker.weeks.sat')\n },\n year: t('datePicker.year'),\n month: t('datePicker.month'),\n hour: t('datePicker.hour'),\n minute: t('datePicker.minute'),\n second: t('datePicker.second')\n }\n }\n\n private _setLangChange() {\n this.dom.menu.time.innerText = this.lang.timeSelect\n this.dom.menu.now.innerText = this.lang.now\n this.dom.menu.submit.innerText = this.lang.confirm\n const {\n weeks: { sun, mon, tue, wed, thu, fri, sat }\n } = this.lang\n const weekList = [sun, mon, tue, wed, thu, fri, sat]\n this.dom.datePickerWeek.childNodes.forEach((child, i) => {\n const childElement = <HTMLSpanElement>child\n childElement.innerText = weekList[i]\n })\n const hourTitle = <HTMLSpanElement>this.dom.time.hour.previousElementSibling\n hourTitle.innerText = this.lang.hour\n const minuteTitle = <HTMLSpanElement>(\n this.dom.time.minute.previousElementSibling\n )\n minuteTitle.innerText = this.lang.minute\n const secondTitle = <HTMLSpanElement>(\n this.dom.time.second.previousElementSibling\n )\n secondTitle.innerText = this.lang.second\n }\n\n private _update() {\n const localDate = new Date()\n const localYear = localDate.getFullYear()\n const localMonth = localDate.getMonth() + 1\n const localDay = localDate.getDate()\n let pickYear: number | null = null\n let pickMonth: number | null = null\n let pickDay: number | null = null\n if (this.pickDate) {\n pickYear = this.pickDate.getFullYear()\n pickMonth = this.pickDate.getMonth() + 1\n pickDay = this.pickDate.getDate()\n }\n const year = this.now.getFullYear()\n const month = this.now.getMonth() + 1\n this.dom.title.now.innerText = `${year}${this.lang.year} ${String(\n month\n ).padStart(2, '0')}${this.lang.month}`\n const curDate = new Date(year, month, 0)\n const curDay = curDate.getDate()\n let curWeek = new Date(year, month - 1, 1).getDay()\n if (curWeek === 0) {\n curWeek = 7\n }\n const preDay = new Date(year, month - 1, 0).getDate()\n this.dom.day.innerHTML = ''\n const preStartDay = preDay - curWeek + 1\n for (let i = preStartDay; i <= preDay; i++) {\n const dayDom = document.createElement('div')\n dayDom.classList.add('disable')\n dayDom.innerText = `${i}`\n dayDom.onclick = () => {\n const newMonth = month - 2\n this.now = new Date(year, newMonth, i)\n this._setDatePick(year, newMonth, i)\n }\n this.dom.day.append(dayDom)\n }\n for (let i = 1; i <= curDay; i++) {\n const dayDom = document.createElement('div')\n if (localYear === year && localMonth === month && localDay === i) {\n dayDom.classList.add('active')\n }\n if (\n this.pickDate &&\n pickYear === year &&\n pickMonth === month &&\n pickDay === i\n ) {\n dayDom.classList.add('select')\n }\n dayDom.innerText = `${i}`\n dayDom.onclick = evt => {\n const newMonth = month - 1\n this.now = new Date(year, newMonth, i)\n this._setDatePick(year, newMonth, i)\n evt.stopPropagation()\n }\n this.dom.day.append(dayDom)\n }\n const nextEndDay = 6 * 7 - curWeek - curDay\n for (let i = 1; i <= nextEndDay; i++) {\n const dayDom = document.createElement('div')\n dayDom.classList.add('disable')\n dayDom.innerText = `${i}`\n dayDom.onclick = () => {\n this.now = new Date(year, month, i)\n this._setDatePick(year, month, i)\n }\n this.dom.day.append(dayDom)\n }\n }\n\n private _toggleDateTimePicker() {\n if (this.isDatePicker) {\n this.dom.dateWrap.classList.add('active')\n this.dom.timeWrap.classList.remove('active')\n this.dom.menu.time.innerText = this.lang.timeSelect\n } else {\n this.dom.dateWrap.classList.remove('active')\n this.dom.timeWrap.classList.add('active')\n this.dom.menu.time.innerText = this.lang.return\n this._setTimePick()\n }\n }\n\n private _setDatePick(year: number, month: number, day: number) {\n this.now = new Date(year, month, day)\n this.pickDate?.setFullYear(year)\n this.pickDate?.setMonth(month)\n this.pickDate?.setDate(day)\n this._update()\n }\n\n private _setTimePick(isIntoView = true) {\n const hour = this.pickDate?.getHours() || 0\n const minute = this.pickDate?.getMinutes() || 0\n const second = this.pickDate?.getSeconds() || 0\n const {\n hour: hourDom,\n minute: minuteDom,\n second: secondDom\n } = this.dom.time\n const timeDomList = [hourDom, minuteDom, secondDom]\n timeDomList.forEach(timeDom => {\n timeDom\n .querySelectorAll('li')\n .forEach(li => li.classList.remove('active'))\n })\n const pickList: [HTMLOListElement, number][] = [\n [hourDom, hour],\n [minuteDom, minute],\n [secondDom, second]\n ]\n pickList.forEach(([dom, time]) => {\n const pickDom = dom.querySelector<HTMLLIElement>(`[data-id='${time}']`)!\n pickDom.classList.add('active')\n if (isIntoView) {\n scrollIntoView(dom, pickDom)\n }\n })\n }\n\n private _preMonth() {\n this.now.setMonth(this.now.getMonth() - 1)\n this._update()\n }\n\n private _nextMonth() {\n this.now.setMonth(this.now.getMonth() + 1)\n this._update()\n }\n\n private _preYear() {\n this.now.setFullYear(this.now.getFullYear() - 1)\n this._update()\n }\n\n private _nextYear() {\n this.now.setFullYear(this.now.getFullYear() + 1)\n this._update()\n }\n\n private _now() {\n this.pickDate = new Date()\n this.dispose()\n }\n\n private _toggleVisible(isVisible: boolean) {\n if (isVisible) {\n this.dom.container.classList.add('active')\n } else {\n this.dom.container.classList.remove('active')\n }\n }\n\n private _submit() {\n if (this.options.onSubmit && this.pickDate) {\n const format = this.renderOptions?.dateFormat\n const pickDateString = this.formatDate(this.pickDate, format)\n this.options.onSubmit(pickDateString)\n }\n }\n\n public formatDate(date: Date, format = 'YYYY-MM-DD HH:mm:ss'): string {\n let dateString = format\n const year = date.getFullYear().toString()\n const month = (date.getMonth() + 1).toString()\n const day = date.getDate().toString()\n const hours24 = date.getHours()\n const hours12 = hours24 % 12 === 0 ? 12 : hours24 % 12\n const minute = date.getMinutes().toString()\n const second = date.getSeconds().toString()\n const millisecond = date.getMilliseconds().toString()\n const dateOption = {\n 'y+': year,\n 'Y+': year,\n 'M+': month,\n 'd+': day,\n 'D+': day,\n 'h+': hours12.toString(),\n 'H+': hours24.toString(),\n 'm+': minute,\n 's+': second,\n 'S+': millisecond\n }\n for (const k in dateOption) {\n const reg = new RegExp('(' + k + ')').exec(format)\n const key = <keyof typeof dateOption>k\n if (reg) {\n dateString = dateString.replace(\n reg[1],\n reg[1].length === 1\n ? dateOption[key]\n : dateOption[key].padStart(reg[1].length, '0')\n )\n }\n }\n return dateString\n }\n\n public render(option: IRenderOption) {\n this.renderOptions = option\n this.lang = this._getLang()\n this._setLangChange()\n this._setValue()\n this._update()\n this._setPosition()\n this.isDatePicker = true\n this._toggleDateTimePicker()\n this._toggleVisible(true)\n }\n\n public dispose() {\n this._toggleVisible(false)\n }\n\n public destroy() {\n this.dom.container.remove()\n }\n}\n","import {\n CONTROL_STYLE_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR,\n TEXTLIKE_ELEMENT_TYPE\n} from '../../../../dataset/constant/Element'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { KeyMap } from '../../../../dataset/enum/KeyMap'\nimport { DeepRequired } from '../../../../interface/Common'\nimport {\n IControlContext,\n IControlInstance,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement } from '../../../../interface/Element'\nimport { omitObject, pickObject } from '../../../../utils'\nimport { formatElementContext } from '../../../../utils/element'\nimport { Draw } from '../../Draw'\nimport { DatePicker } from '../../particle/date/DatePicker'\nimport { Control } from '../Control'\n\nexport class DateControl implements IControlInstance {\n private draw: Draw\n private element: IElement\n private control: Control\n private isPopup: boolean\n private datePicker: DatePicker | null\n private options: DeepRequired<IEditorOption>\n\n constructor(element: IElement, control: Control) {\n const draw = control.getDraw()\n this.draw = draw\n this.options = draw.getOptions()\n this.element = element\n this.control = control\n this.isPopup = false\n this.datePicker = null\n }\n\n public setElement(element: IElement) {\n this.element = element\n }\n\n public getElement(): IElement {\n return this.element\n }\n\n public getIsPopup(): boolean {\n return this.isPopup\n }\n\n public getValue(context: IControlContext = {}): IElement[] {\n const elementList = context.elementList || this.control.getElementList()\n const range = this.control.getValueRange(context)\n if (!range) return []\n const data: IElement[] = []\n const { startIndex, endIndex } = range\n for (let i = startIndex; i <= endIndex; i++) {\n const element = elementList[i]\n if (element.controlComponent === ControlComponent.VALUE) {\n data.push(element)\n }\n }\n return data\n }\n\n public setValue(\n data: IElement[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n this.control.shrinkBoundary(context)\n const { startIndex, endIndex } = range\n const draw = this.control.getDraw()\n if (startIndex !== endIndex) {\n draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex)\n } else {\n this.control.removePlaceholder(startIndex, context)\n }\n const startElement = elementList[startIndex]\n const anchorElement =\n (startElement.type &&\n !TEXTLIKE_ELEMENT_TYPE.includes(startElement.type)) ||\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT\n ? pickObject(startElement, [\n 'control',\n 'controlId',\n ...CONTROL_STYLE_ATTR\n ])\n : omitObject(startElement, ['type'])\n const start = range.startIndex + 1\n for (let i = 0; i < data.length; i++) {\n const newElement: IElement = {\n ...anchorElement,\n ...data[i],\n controlComponent: ControlComponent.VALUE\n }\n formatElementContext(elementList, [newElement], startIndex, {\n editorOptions: this.options\n })\n draw.spliceElementList(elementList, start + i, 0, [newElement])\n }\n return start + data.length - 1\n }\n\n public clearSelect(\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n const { isIgnoreDisabledRule = false, isAddPlaceholder = true } = options\n if (!isIgnoreDisabledRule && this.control.getIsDisabledControl(context)) {\n return -1\n }\n const range = this.control.getValueRange(context)\n if (!range) return -1\n const { startIndex, endIndex } = range\n if (!~startIndex || !~endIndex) return -1\n const elementList = context.elementList || this.control.getElementList()\n const draw = this.control.getDraw()\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex,\n [],\n {\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n }\n )\n if (isAddPlaceholder) {\n this.control.addPlaceholder(startIndex, context)\n }\n return startIndex\n }\n\n public setSelect(\n date: string,\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ) {\n if (\n !options.isIgnoreDisabledRule &&\n this.control.getIsDisabledControl(context)\n ) {\n return\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n const valueElement = this.getValue(context)[0]\n const styleElement = valueElement\n ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR)\n : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR)\n const prefixIndex = this.clearSelect(context, {\n isAddPlaceholder: false,\n isIgnoreDeletedRule: options.isIgnoreDeletedRule\n })\n if (!~prefixIndex) return\n const propertyElement = omitObject(\n elementList[prefixIndex],\n EDITOR_ELEMENT_STYLE_ATTR\n )\n const start = prefixIndex + 1\n const draw = this.control.getDraw()\n for (let i = 0; i < date.length; i++) {\n const newElement: IElement = {\n ...styleElement,\n ...propertyElement,\n type: ElementType.TEXT,\n value: date[i],\n controlComponent: ControlComponent.VALUE\n }\n formatElementContext(elementList, [newElement], prefixIndex, {\n editorOptions: this.options\n })\n draw.spliceElementList(elementList, start + i, 0, [newElement])\n }\n if (!context.range) {\n const newIndex = start + date.length - 1\n this.control.repaintControl({\n curIndex: newIndex\n })\n this.control.emitControlContentChange({\n context\n })\n this.destroy()\n }\n }\n\n public keydown(evt: KeyboardEvent): number | null {\n if (this.control.getIsDisabledControl()) {\n return null\n }\n const elementList = this.control.getElementList()\n const range = this.control.getRange()\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = range\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n const draw = this.control.getDraw()\n // backspace\n if (evt.key === KeyMap.Backspace) {\n if (startIndex !== endIndex) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n } else {\n if (\n startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT ||\n endElement.controlComponent === ControlComponent.POSTFIX ||\n endElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n draw.spliceElementList(elementList, startIndex, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex - 1)\n }\n return startIndex - 1\n }\n }\n } else if (evt.key === KeyMap.Delete) {\n if (startIndex !== endIndex) {\n draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n } else {\n const endNextElement = elementList[endIndex + 1]\n if (\n ((startElement.controlComponent === ControlComponent.PREFIX ||\n startElement.controlComponent === ControlComponent.PRE_TEXT) &&\n endNextElement.controlComponent === ControlComponent.PLACEHOLDER) ||\n endNextElement.controlComponent === ControlComponent.POSTFIX ||\n endNextElement.controlComponent === ControlComponent.POST_TEXT ||\n startElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n return this.control.removeControl(startIndex)\n } else {\n draw.spliceElementList(elementList, startIndex + 1, 1)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n }\n }\n return endIndex\n }\n\n public cut(): number {\n if (this.control.getIsDisabledControl()) {\n return -1\n }\n this.control.shrinkBoundary()\n const { startIndex, endIndex } = this.control.getRange()\n if (startIndex === endIndex) {\n return startIndex\n }\n const draw = this.control.getDraw()\n const elementList = this.control.getElementList()\n draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex)\n const value = this.getValue()\n if (!value.length) {\n this.control.addPlaceholder(startIndex)\n }\n return startIndex\n }\n\n public awake() {\n if (\n this.isPopup ||\n this.control.getIsDisabledControl() ||\n !this.control.getIsRangeWithinControl()\n ) {\n return\n }\n const position = this.control.getPosition()\n if (!position) return\n const elementList = this.draw.getElementList()\n const { startIndex } = this.control.getRange()\n if (elementList[startIndex + 1]?.controlId !== this.element.controlId) {\n return\n }\n this.datePicker = new DatePicker(this.draw, {\n onSubmit: this._setDate.bind(this)\n })\n const value =\n this.getValue()\n .map(el => el.value)\n .join('') || ''\n const dateFormat = this.element.control?.dateFormat\n this.datePicker.render({\n value,\n position,\n dateFormat\n })\n this.isPopup = true\n }\n\n public destroy() {\n if (!this.isPopup) return\n this.datePicker?.destroy()\n this.isPopup = false\n }\n\n private _setDate(date: string) {\n if (!date) {\n this.clearSelect()\n } else {\n this.setSelect(date)\n }\n this.destroy()\n }\n}\n","import {\n EDITOR_COMPONENT,\n EDITOR_PREFIX\n} from '../../../../dataset/constant/Editor'\nimport { EditorComponent } from '../../../../dataset/enum/Editor'\nimport { CalculatorButtonType } from '../../../../dataset/enum/Control'\nimport { Control } from '../Control'\n\ninterface CalculatorOptions {\n control: Control\n onCalculate: (result: number) => void\n}\n\nexport class Calculator {\n private control: Control\n private calculatorDom: HTMLDivElement | null\n private onCalculate: (result: number) => void\n private currentExpression: string\n\n constructor(options: CalculatorOptions) {\n this.control = options.control\n this.onCalculate = options.onCalculate\n this.calculatorDom = null\n this.currentExpression = ''\n }\n\n public createPopup() {\n const position = this.control.getPosition()\n if (!position) return\n\n const calculatorPopupContainer = document.createElement('div')\n calculatorPopupContainer.classList.add(`${EDITOR_PREFIX}-calculator`)\n calculatorPopupContainer.setAttribute(\n EDITOR_COMPONENT,\n EditorComponent.POPUP\n )\n\n const display = document.createElement('div')\n display.classList.add(`${EDITOR_PREFIX}-calculator-display`)\n display.textContent = '0'\n\n const buttonContainer = document.createElement('div')\n buttonContainer.classList.add(`${EDITOR_PREFIX}-calculator-buttons`)\n\n const buttons = [\n [\n { text: 'C', type: CalculatorButtonType.UTILITY },\n { text: '←', type: CalculatorButtonType.UTILITY },\n { text: '%', type: CalculatorButtonType.OPERATOR },\n { text: '/', type: CalculatorButtonType.OPERATOR }\n ],\n [\n { text: '7', type: CalculatorButtonType.NUMBER },\n { text: '8', type: CalculatorButtonType.NUMBER },\n { text: '9', type: CalculatorButtonType.NUMBER },\n { text: '*', type: CalculatorButtonType.OPERATOR }\n ],\n [\n { text: '4', type: CalculatorButtonType.NUMBER },\n { text: '5', type: CalculatorButtonType.NUMBER },\n { text: '6', type: CalculatorButtonType.NUMBER },\n { text: '-', type: CalculatorButtonType.OPERATOR }\n ],\n [\n { text: '1', type: CalculatorButtonType.NUMBER },\n { text: '2', type: CalculatorButtonType.NUMBER },\n { text: '3', type: CalculatorButtonType.NUMBER },\n { text: '+', type: CalculatorButtonType.OPERATOR }\n ],\n [\n { text: '0', type: CalculatorButtonType.NUMBER },\n { text: '.', type: CalculatorButtonType.NUMBER },\n { text: '=', type: CalculatorButtonType.EQUAL, span: 2 }\n ]\n ]\n\n buttons.forEach(row => {\n row.forEach(buttonInfo => {\n const button = document.createElement('button')\n button.classList.add(`${EDITOR_PREFIX}-calculator-button`)\n\n if (buttonInfo.type === CalculatorButtonType.OPERATOR) {\n button.classList.add('operator')\n } else if (buttonInfo.type === CalculatorButtonType.EQUAL) {\n button.classList.add('equal')\n } else if (buttonInfo.type === CalculatorButtonType.UTILITY) {\n button.classList.add('utility')\n }\n\n button.textContent = buttonInfo.text\n\n button.onclick = () => {\n const buttonText = buttonInfo.text\n if (buttonText === 'C') {\n this.currentExpression = ''\n display.textContent = '0'\n } else if (buttonText === '←') {\n this.currentExpression = this.currentExpression.slice(0, -1)\n display.textContent = this.currentExpression || '0'\n } else if (buttonText === '=') {\n const result = this.calculate(this.currentExpression)\n if (Number.isFinite(result)) {\n display.textContent = result.toString()\n this.currentExpression = result.toString()\n\n this.onCalculate(result)\n } else {\n display.textContent = 'Error'\n this.currentExpression = ''\n }\n } else {\n this.currentExpression += buttonText\n display.textContent = this.currentExpression\n }\n }\n\n if (buttonInfo.span) {\n button.style.gridColumn = `span ${buttonInfo.span}`\n }\n\n buttonContainer.appendChild(button)\n })\n })\n\n calculatorPopupContainer.appendChild(display)\n calculatorPopupContainer.appendChild(buttonContainer)\n\n const {\n coordinate: {\n leftTop: [left, top]\n },\n lineHeight\n } = position\n const preY = this.control.getPreY()\n calculatorPopupContainer.style.left = `${left}px`\n calculatorPopupContainer.style.top = `${top + preY + lineHeight}px`\n\n const container = this.control.getContainer()\n container.appendChild(calculatorPopupContainer)\n\n this.calculatorDom = calculatorPopupContainer\n }\n\n public destroy() {\n if (this.calculatorDom) {\n this.calculatorDom.remove()\n this.calculatorDom = null\n }\n }\n\n private calculate(expression: string): number {\n const result = Function('return ' + expression)()\n\n if (!Number.isFinite(result)) {\n return result\n }\n\n if (Number.isInteger(result)) {\n return result\n }\n\n return parseFloat(result.toFixed(10))\n }\n}\n","import { NON_NUMBER_STR_REG } from '../../../../dataset/constant/Regular'\nimport { ControlComponent } from '../../../../dataset/enum/Control'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport {\n IControlContext,\n IControlRuleOption\n} from '../../../../interface/Control'\nimport { IElement } from '../../../../interface/Element'\nimport { deepClone, omitObject, pickObject } from '../../../../utils'\nimport { getElementListText, isTextElement } from '../../../../utils/element'\nimport { TextControl } from '../text/TextControl'\nimport { Calculator } from './Calculator'\nimport {\n CONTROL_STYLE_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR\n} from '../../../../dataset/constant/Element'\n\nexport class NumberControl extends TextControl {\n private isPopup: boolean\n private calculator: Calculator | null\n\n constructor(element: IElement, control: any) {\n super(element, control)\n this.isPopup = false\n this.calculator = null\n }\n\n public getIsPopup(): boolean {\n return this.isPopup\n }\n\n public setValue(\n data: IElement[],\n context: IControlContext = {},\n options: IControlRuleOption = {}\n ): number {\n if (\n data.some(el => !isTextElement(el) || NON_NUMBER_STR_REG.test(el.value))\n ) {\n return -1\n }\n const elementList = context.elementList || this.control.getElementList()\n const range = context.range || this.control.getRange()\n this.control.shrinkBoundary(context)\n const controlElementList = deepClone(data)\n const { startIndex, endIndex } = range\n const startElement = elementList[startIndex]\n if (\n this.control.getIsExistValueByElementListIndex(elementList, startIndex)\n ) {\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n controlElementList.unshift(preElement)\n preIndex--\n }\n let nextIndex = endIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n controlElementList.push(nextElement)\n nextIndex++\n }\n }\n const text = getElementListText(controlElementList)\n if (Number.isNaN(Number(text)) || !Number.isFinite(Number(text))) {\n return -1\n }\n return super.setValue(data, context, options)\n }\n\n private _setCalculatedValue(value: number) {\n const prefixIndex = super.clearValue(\n {},\n {\n isAddPlaceholder: false,\n isIgnoreDeletedRule: true\n }\n )\n if (!~prefixIndex) return\n\n const elementList = this.control.getElementList()\n const range = this.control.getRange()\n const valueElement = this.getValue()[0]\n const styleElement = valueElement\n ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR)\n : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR)\n\n const propertyElement = omitObject(\n elementList[prefixIndex],\n EDITOR_ELEMENT_STYLE_ATTR\n )\n\n const valueStr = value.toString()\n const data: IElement[] = []\n\n for (let i = 0; i < valueStr.length; i++) {\n const newElement: IElement = {\n ...styleElement,\n ...propertyElement,\n type: ElementType.TEXT,\n value: valueStr[i],\n controlComponent: ControlComponent.VALUE\n }\n data.push(newElement)\n }\n\n this.setValue(data)\n\n this.control.repaintControl({\n curIndex: prefixIndex + data.length\n })\n\n this.control.emitControlContentChange()\n\n this.destroy()\n }\n\n public awake() {\n const isCalculatorEnabled =\n this.element.control?.numberExclusiveOptions?.calculatorDisabled === false\n if (\n this.isPopup ||\n !isCalculatorEnabled ||\n this.control.getIsDisabledControl() ||\n !this.control.getIsRangeWithinControl()\n ) {\n return\n }\n const { startIndex } = this.control.getRange()\n const elementList = this.control.getElementList()\n if (elementList[startIndex + 1]?.controlId !== this.element.controlId) {\n return\n }\n\n this.calculator = new Calculator({\n control: this.control,\n onCalculate: result => {\n this._setCalculatedValue(result)\n }\n })\n\n this.calculator.createPopup()\n this.isPopup = true\n }\n\n public destroy() {\n if (!this.isPopup) return\n this.calculator?.destroy()\n this.calculator = null\n this.isPopup = false\n }\n}\n","import {\n ControlComponent,\n ControlState,\n ControlType\n} from '../../../dataset/enum/Control'\nimport { EditorMode, EditorZone } from '../../../dataset/enum/Editor'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { DeepRequired } from '../../../interface/Common'\nimport {\n IControl,\n IControlChangeOption,\n IControlChangeResult,\n IControlContentChangeResult,\n IControlContext,\n IControlHighlight,\n IControlInitOption,\n IControlInstance,\n IControlOption,\n IControlRuleOption,\n IDestroyControlOption,\n IGetControlValueOption,\n IGetControlValueResult,\n IInitNextControlOption,\n INextControlContext,\n IRepaintControlOption,\n ISetControlExtensionOption,\n ISetControlProperties,\n ISetControlRowFlexOption,\n ISetControlValueOption\n} from '../../../interface/Control'\nimport { IEditorData, IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../interface/Element'\nimport { EventBusMap } from '../../../interface/EventBus'\nimport { IRange } from '../../../interface/Range'\nimport {\n deepClone,\n isArray,\n isString,\n omitObject,\n pickObject,\n splitText\n} from '../../../utils'\nimport {\n formatElementContext,\n formatElementList,\n getNonHideElementIndex,\n pickElementAttr,\n zipElementList\n} from '../../../utils/element'\nimport { EventBus } from '../../event/eventbus/EventBus'\nimport { Listener } from '../../listener/Listener'\nimport { RangeManager } from '../../range/RangeManager'\nimport { Draw } from '../Draw'\nimport { CheckboxControl } from './checkbox/CheckboxControl'\nimport { RadioControl } from './radio/RadioControl'\nimport { ControlSearch } from './interactive/ControlSearch'\nimport { ControlBorder } from './richtext/Border'\nimport { SelectControl } from './select/SelectControl'\nimport { TextControl } from './text/TextControl'\nimport { DateControl } from './date/DateControl'\nimport { NumberControl } from './number/NumberControl'\nimport { MoveDirection } from '../../../dataset/enum/Observer'\nimport {\n CONTROL_CONTEXT_ATTR,\n CONTROL_STYLE_ATTR,\n LIST_CONTEXT_ATTR,\n TITLE_CONTEXT_ATTR\n} from '../../../dataset/constant/Element'\nimport { IRowElement } from '../../../interface/Row'\nimport { RowFlex } from '../../../dataset/enum/Row'\nimport { ZERO } from '../../../dataset/constant/Common'\n\ninterface IMoveCursorResult {\n newIndex: number\n newElement: IElement\n}\nexport class Control {\n private controlBorder: ControlBorder\n private draw: Draw\n private range: RangeManager\n private listener: Listener\n private eventBus: EventBus<EventBusMap>\n private controlSearch: ControlSearch\n private options: DeepRequired<IEditorOption>\n private controlOptions: IControlOption\n private activeControl: IControlInstance | null\n private activeControlValue: IElement[]\n private preElement: IElement | null\n\n constructor(draw: Draw) {\n this.controlBorder = new ControlBorder(draw)\n\n this.draw = draw\n this.range = draw.getRange()\n this.listener = draw.getListener()\n this.eventBus = draw.getEventBus()\n this.controlSearch = new ControlSearch(this)\n\n this.options = draw.getOptions()\n this.controlOptions = this.options.control\n this.activeControl = null\n this.activeControlValue = []\n this.preElement = null\n }\n\n public setHighlightList(payload: IControlHighlight[]) {\n this.controlSearch.setHighlightList(payload)\n }\n\n public computeHighlightList() {\n const highlightList = this.controlSearch.getHighlightList()\n if (highlightList.length) {\n this.controlSearch.computeHighlightList()\n }\n }\n\n public renderHighlightList(ctx: CanvasRenderingContext2D, pageNo: number) {\n const highlightMatchResult = this.controlSearch.getHighlightMatchResult()\n if (highlightMatchResult.length) {\n this.controlSearch.renderHighlightList(ctx, pageNo)\n }\n }\n\n public getDraw(): Draw {\n return this.draw\n }\n\n public filterAssistElement(elementList: IElement[]): IElement[] {\n return elementList.filter((element, index) => {\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n td.value = this.filterAssistElement(td.value)\n }\n }\n }\n if (!element.controlId) return true\n if (element.control?.minWidth) {\n if (\n element.controlComponent === ControlComponent.PREFIX ||\n element.controlComponent === ControlComponent.POSTFIX\n ) {\n element.value = ''\n return true\n }\n } else {\n if (\n element.control?.preText &&\n element.controlComponent === ControlComponent.PRE_TEXT\n ) {\n let isExistValue = false\n let start = index + 1\n while (start < elementList.length) {\n const nextElement = elementList[start]\n if (element.controlId !== nextElement.controlId) break\n if (nextElement.controlComponent === ControlComponent.VALUE) {\n isExistValue = true\n break\n }\n start++\n }\n return isExistValue\n }\n if (\n element.control?.postText &&\n element.controlComponent === ControlComponent.POST_TEXT\n ) {\n let isExistValue = false\n let start = index - 1\n while (start < elementList.length) {\n const preElement = elementList[start]\n if (element.controlId !== preElement.controlId) break\n if (preElement.controlComponent === ControlComponent.VALUE) {\n isExistValue = true\n break\n }\n start--\n }\n return isExistValue\n }\n }\n return (\n element.controlComponent !== ControlComponent.PREFIX &&\n element.controlComponent !== ControlComponent.POSTFIX &&\n element.controlComponent !== ControlComponent.PLACEHOLDER\n )\n })\n }\n\n public getIsRangeCanCaptureEvent(): boolean {\n if (!this.activeControl) return false\n const { startIndex, endIndex } = this.getRange()\n if (!~startIndex && !~endIndex) return false\n const elementList = this.getElementList()\n const startElement = elementList[startIndex]\n if (\n startIndex === endIndex &&\n startElement.controlComponent === ControlComponent.POSTFIX\n ) {\n return true\n }\n const endElement = elementList[endIndex]\n if (\n startElement.controlId &&\n startElement.controlId === endElement.controlId &&\n endElement.controlComponent !== ControlComponent.POSTFIX\n ) {\n return true\n }\n return false\n }\n\n public getIsRangeInPostfix(): boolean {\n if (!this.activeControl) return false\n const { startIndex, endIndex } = this.getRange()\n if (startIndex !== endIndex) return false\n const elementList = this.getElementList()\n const element = elementList[startIndex]\n return element.controlComponent === ControlComponent.POSTFIX\n }\n\n public getIsRangeWithinControl(): boolean {\n const { startIndex, endIndex } = this.getRange()\n if (!~startIndex && !~endIndex) return false\n const elementList = this.getElementList()\n const startElement = elementList[startIndex]\n const endElement = elementList[endIndex]\n if (\n startElement?.controlId &&\n startElement.controlId === endElement.controlId &&\n endElement.controlComponent !== ControlComponent.POSTFIX\n ) {\n return true\n }\n return false\n }\n\n public getIsElementListContainFullControl(elementList: IElement[]): boolean {\n if (!elementList.some(element => element.controlId)) return false\n let prefixCount = 0\n let postfixCount = 0\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.controlComponent === ControlComponent.PREFIX) {\n prefixCount++\n } else if (element.controlComponent === ControlComponent.POSTFIX) {\n postfixCount++\n }\n }\n if (!prefixCount || !postfixCount) return false\n return prefixCount === postfixCount\n }\n\n public getIsDisabledControl(context: IControlContext = {}): boolean {\n if (this.draw.isDesignMode() || !this.activeControl) return false\n const { startIndex, endIndex } = context.range || this.range.getRange()\n if (startIndex === endIndex && ~startIndex && ~endIndex) {\n const elementList = context.elementList || this.getElementList()\n const startElement = elementList[startIndex]\n if (startElement.controlComponent === ControlComponent.POSTFIX) {\n return false\n }\n }\n return !!this.activeControl.getElement()?.control?.disabled\n }\n\n public getIsDisabledPasteControl(context: IControlContext = {}): boolean {\n if (this.draw.isDesignMode() || !this.activeControl) return false\n const { startIndex, endIndex } = context.range || this.range.getRange()\n if (startIndex === endIndex && ~startIndex && ~endIndex) {\n const elementList = context.elementList || this.getElementList()\n const startElement = elementList[startIndex]\n if (startElement.controlComponent === ControlComponent.POSTFIX) {\n return false\n }\n }\n return !!this.activeControl.getElement()?.control?.pasteDisabled\n }\n\n public getIsExistValueByElementListIndex(\n elementList: IElement[],\n index: number\n ): boolean {\n const element = elementList[index]\n if (!element.controlId) return false\n if (\n element.control?.type === ControlType.CHECKBOX ||\n element.control?.type === ControlType.RADIO\n ) {\n return !!element.control?.code\n }\n if (element.controlComponent === ControlComponent.VALUE) {\n return true\n }\n if (element.controlComponent === ControlComponent.PLACEHOLDER) {\n return false\n }\n if (\n element.controlComponent === ControlComponent.PREFIX ||\n element.controlComponent === ControlComponent.PRE_TEXT\n ) {\n let i = index + 1\n while (i < elementList.length) {\n const nextElement = elementList[i]\n if (nextElement.controlId !== element.controlId) {\n return false\n }\n if (nextElement.controlComponent === ControlComponent.VALUE) {\n return true\n }\n if (nextElement.controlComponent === ControlComponent.PLACEHOLDER) {\n return false\n }\n i++\n }\n }\n if (\n element.controlComponent === ControlComponent.POSTFIX ||\n element.controlComponent === ControlComponent.POST_TEXT\n ) {\n let i = index - 1\n while (i >= 0) {\n const preElement = elementList[i]\n if (preElement.controlId !== element.controlId) {\n return false\n }\n if (preElement.controlComponent === ControlComponent.VALUE) {\n return true\n }\n if (preElement.controlComponent === ControlComponent.PLACEHOLDER) {\n return false\n }\n i--\n }\n }\n return false\n }\n\n public getControlHighlight(elementList: IElement[], index: number) {\n return this.controlSearch.getControlHighlight(elementList, index)\n }\n\n public getContainer(): HTMLDivElement {\n return this.draw.getContainer()\n }\n\n public getElementList(): IElement[] {\n return this.draw.getElementList()\n }\n\n public getPosition(): IElementPosition | null {\n const positionList = this.draw.getPosition().getPositionList()\n const { endIndex } = this.range.getRange()\n return positionList[endIndex] || null\n }\n\n public getPreY(): number {\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const pageNo = this.getPosition()?.pageNo ?? this.draw.getPageNo()\n return pageNo * (height + pageGap)\n }\n\n public getRange(): IRange {\n return this.range.getRange()\n }\n\n public getValueRange(context: IControlContext = {}): IRange | null {\n const elementList = context.elementList || this.getElementList()\n const { startIndex } = context.range || this.getRange()\n const startElement = elementList[startIndex]\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (\n preElement.controlId !== startElement.controlId ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlId !== startElement.controlId ||\n nextElement.controlComponent === ControlComponent.POSTFIX ||\n nextElement.controlComponent === ControlComponent.POST_TEXT\n ) {\n break\n }\n nextIndex++\n }\n if (preIndex === nextIndex) return null\n return {\n startIndex: preIndex,\n endIndex: nextIndex - 1\n }\n }\n\n public shrinkBoundary(context: IControlContext = {}) {\n this.range.shrinkBoundary(context)\n }\n\n public getActiveControl(): IControlInstance | null {\n return this.activeControl\n }\n\n public getControlElementList(context: IControlContext = {}): IElement[] {\n const elementList = context.elementList || this.getElementList()\n const { startIndex } = context.range || this.getRange()\n const startElement = elementList[startIndex]\n if (!startElement?.controlId) return []\n const data: IElement[] = []\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.controlId !== startElement.controlId) break\n data.unshift(preElement)\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.controlId !== startElement.controlId) break\n data.push(nextElement)\n nextIndex++\n }\n return data\n }\n\n public updateActiveControlValue() {\n if (this.activeControl) {\n this.activeControlValue = this.getControlElementList()\n }\n }\n\n public emitControlChange(state: ControlState) {\n if (!this.activeControl) return\n const isSubscribeControlChange = this.eventBus.isSubscribe('controlChange')\n if (!this.listener.controlChange && !isSubscribeControlChange) return\n let control: IControl\n const value = this.activeControlValue\n const activeElement = this.activeControl.getElement()\n if (value?.length) {\n control = zipElementList(value)[0].control!\n } else {\n control = pickElementAttr(deepClone(activeElement)).control!\n control.value = []\n }\n const payload: IControlChangeResult = {\n state,\n control,\n controlId: activeElement.controlId!\n }\n this.listener.controlChange?.(payload)\n if (isSubscribeControlChange) {\n this.eventBus.emit('controlChange', payload)\n }\n }\n\n public initControl() {\n const elementList = this.getElementList()\n const range = this.getRange()\n const element = elementList[range.startIndex]\n if (this.activeControl) {\n if (\n this.activeControl instanceof SelectControl ||\n this.activeControl instanceof DateControl ||\n this.activeControl instanceof NumberControl\n ) {\n if (element.controlComponent === ControlComponent.POSTFIX) {\n this.activeControl.destroy()\n } else {\n this.activeControl.awake()\n }\n }\n if (this.preElement?.controlId === element.controlId) {\n if (element.controlComponent === ControlComponent.POSTFIX) {\n this.emitControlChange(ControlState.INACTIVE)\n } else if (\n this.preElement?.controlComponent === ControlComponent.POSTFIX\n ) {\n this.emitControlChange(ControlState.ACTIVE)\n }\n }\n const controlElement = this.activeControl.getElement()\n if (element.controlId === controlElement.controlId) {\n this.updateActiveControlValue()\n this.preElement = element\n return\n }\n }\n this.destroyControl()\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const control = element.control!\n if (control.type === ControlType.TEXT) {\n this.activeControl = new TextControl(element, this)\n } else if (control.type === ControlType.SELECT) {\n const selectControl = new SelectControl(element, this)\n this.activeControl = selectControl\n selectControl.awake()\n } else if (control.type === ControlType.CHECKBOX) {\n this.activeControl = new CheckboxControl(element, this)\n } else if (control.type === ControlType.RADIO) {\n this.activeControl = new RadioControl(element, this)\n } else if (control.type === ControlType.DATE) {\n const dateControl = new DateControl(element, this)\n this.activeControl = dateControl\n dateControl.awake()\n } else if (control.type === ControlType.NUMBER) {\n const numberControl = new NumberControl(element, this)\n this.activeControl = numberControl\n numberControl.awake()\n }\n this.updateActiveControlValue()\n this.preElement = element\n if (element.controlComponent !== ControlComponent.POSTFIX) {\n this.emitControlChange(ControlState.ACTIVE)\n }\n }\n\n public destroyControl(options: IDestroyControlOption = {}) {\n if (!this.activeControl) return\n const { isEmitEvent = true } = options\n if (\n this.activeControl instanceof SelectControl ||\n this.activeControl instanceof DateControl ||\n this.activeControl instanceof NumberControl\n ) {\n this.activeControl.destroy()\n }\n if (\n isEmitEvent &&\n this.preElement?.controlComponent !== ControlComponent.POSTFIX\n ) {\n this.emitControlChange(ControlState.INACTIVE)\n }\n this.preElement = null\n this.activeControl = null\n this.activeControlValue = []\n }\n\n public repaintControl(options: IRepaintControlOption = {}) {\n const {\n curIndex,\n isCompute = true,\n isSubmitHistory = true,\n isSetCursor = true\n } = options\n if (curIndex === undefined) {\n this.range.clearRange()\n this.draw.render({\n isCompute,\n isSubmitHistory,\n isSetCursor: false\n })\n } else {\n this.range.setRange(curIndex, curIndex)\n this.draw.render({\n curIndex,\n isCompute,\n isSetCursor,\n isSubmitHistory\n })\n }\n }\n\n public emitControlContentChange(options?: IControlChangeOption) {\n const isSubscribeControlContentChange = this.eventBus.isSubscribe(\n 'controlContentChange'\n )\n if (\n !isSubscribeControlContentChange &&\n !this.listener.controlContentChange\n ) {\n return\n }\n const controlElement =\n options?.controlElement || this.activeControl?.getElement()\n if (!controlElement) return\n const elementList = options?.context?.elementList || this.getElementList()\n const { startIndex } = options?.context?.range || this.getRange()\n if (!elementList[startIndex]?.controlId) return\n const controlValue =\n options?.controlValue || this.getControlElementList(options?.context)\n let control: IControl\n if (controlValue?.length) {\n control = zipElementList(controlValue)[0].control!\n } else {\n control = controlElement.control!\n control.value = []\n }\n if (!control) return\n const payload: IControlContentChangeResult = {\n control,\n controlId: controlElement.controlId!\n }\n this.listener.controlContentChange?.(payload)\n if (isSubscribeControlContentChange) {\n this.eventBus.emit('controlContentChange', payload)\n }\n }\n\n public reAwakeControl() {\n if (!this.activeControl) return\n const elementList = this.getElementList()\n const range = this.getRange()\n const element = elementList[range.startIndex]\n this.activeControl.setElement(element)\n if (\n (this.activeControl instanceof DateControl ||\n this.activeControl instanceof SelectControl ||\n this.activeControl instanceof NumberControl) &&\n this.activeControl.getIsPopup()\n ) {\n this.activeControl.destroy()\n this.activeControl.awake()\n }\n }\n\n public selectValue(): boolean {\n const elementList = this.getElementList()\n const { startIndex } = this.getRange()\n const startElement = elementList[startIndex]\n if (\n !startElement?.controlId ||\n (startElement.controlComponent !== ControlComponent.VALUE &&\n elementList[startIndex + 1]?.controlComponent ===\n ControlComponent.VALUE)\n ) {\n return false\n }\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.controlComponent !== ControlComponent.VALUE) break\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.controlComponent !== ControlComponent.VALUE) {\n nextIndex--\n break\n }\n nextIndex++\n }\n if (preIndex !== nextIndex) {\n const range = this.range.getRange()\n this.range.replaceRange({\n ...range,\n startIndex: preIndex,\n endIndex: nextIndex\n })\n this.draw.render({\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n })\n return true\n }\n return false\n }\n\n public moveCursor(position: IControlInitOption): IMoveCursorResult {\n const { index, trIndex, tdIndex, tdValueIndex } = position\n let elementList = this.draw.getOriginalElementList()\n let element: IElement\n const newIndex = position.isTable ? tdValueIndex! : index\n if (position.isTable) {\n elementList = elementList[index!].trList![trIndex!].tdList[tdIndex!].value\n element = elementList[tdValueIndex!]\n } else {\n element = elementList[index]\n }\n if (element.hide || element.control?.hide || element.area?.hide) {\n const nonHideIndex = getNonHideElementIndex(elementList, newIndex)\n return {\n newIndex: nonHideIndex,\n newElement: elementList[nonHideIndex]\n }\n }\n if (element.controlComponent === ControlComponent.VALUE) {\n return {\n newIndex,\n newElement: element\n }\n } else if (element.controlComponent === ControlComponent.POSTFIX) {\n let startIndex = newIndex + 1\n while (startIndex < elementList.length) {\n const nextElement = elementList[startIndex]\n if (nextElement.controlId !== element.controlId) {\n return {\n newIndex: startIndex - 1,\n newElement: elementList[startIndex - 1]\n }\n }\n startIndex++\n }\n } else if (\n element.controlComponent === ControlComponent.PREFIX ||\n element.controlComponent === ControlComponent.PRE_TEXT\n ) {\n let startIndex = newIndex + 1\n while (startIndex < elementList.length) {\n const nextElement = elementList[startIndex]\n if (\n nextElement.controlId !== element.controlId ||\n (nextElement.controlComponent !== ControlComponent.PREFIX &&\n nextElement.controlComponent !== ControlComponent.PRE_TEXT)\n ) {\n return {\n newIndex: startIndex - 1,\n newElement: elementList[startIndex - 1]\n }\n }\n startIndex++\n }\n } else if (\n element.controlComponent === ControlComponent.PLACEHOLDER ||\n element.controlComponent === ControlComponent.POST_TEXT\n ) {\n let startIndex = newIndex - 1\n while (startIndex > 0) {\n const preElement = elementList[startIndex]\n if (\n preElement.controlId !== element.controlId ||\n preElement.controlComponent === ControlComponent.VALUE ||\n preElement.controlComponent === ControlComponent.PREFIX ||\n preElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n return {\n newIndex: startIndex,\n newElement: elementList[startIndex]\n }\n }\n startIndex--\n }\n }\n return {\n newIndex,\n newElement: element\n }\n }\n\n public removeControl(\n startIndex: number,\n context: IControlContext = {}\n ): number | null {\n const elementList = context.elementList || this.getElementList()\n const startElement = elementList[startIndex]\n if (\n !this.draw.isDesignMode() &&\n !startElement?.hide &&\n !startElement?.control?.hide &&\n !startElement?.area?.hide\n ) {\n const { deletable = true } = startElement.control!\n if (!deletable) return null\n const mode = this.draw.getMode()\n if (\n mode === EditorMode.FORM &&\n this.options.modeRule[mode].controlDeletableDisabled\n ) {\n return null\n }\n }\n let leftIndex = -1\n let rightIndex = -1\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.controlId !== startElement.controlId) {\n leftIndex = preIndex\n break\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.controlId !== startElement.controlId) {\n rightIndex = nextIndex - 1\n break\n }\n nextIndex++\n }\n if (nextIndex === elementList.length) {\n rightIndex = nextIndex - 1\n }\n if (!~leftIndex && !~rightIndex) return startIndex\n leftIndex = ~leftIndex ? leftIndex : 0\n this.draw.spliceElementList(\n elementList,\n leftIndex + 1,\n rightIndex - leftIndex\n )\n return leftIndex\n }\n\n public removePlaceholder(startIndex: number, context: IControlContext = {}) {\n const elementList = context.elementList || this.getElementList()\n const startElement = elementList[startIndex]\n const nextElement = elementList[startIndex + 1]\n if (\n startElement.controlComponent === ControlComponent.PLACEHOLDER ||\n nextElement.controlComponent === ControlComponent.PLACEHOLDER\n ) {\n let isHasSubmitHistory = false\n let index = startIndex\n while (index < elementList.length) {\n const curElement = elementList[index]\n if (curElement.controlId !== startElement.controlId) break\n if (curElement.controlComponent === ControlComponent.PLACEHOLDER) {\n if (!isHasSubmitHistory) {\n isHasSubmitHistory = true\n this.draw.getHistoryManager().popUndo()\n this.draw.submitHistory(startIndex)\n }\n elementList.splice(index, 1)\n } else {\n index++\n }\n }\n }\n }\n\n public addPlaceholder(startIndex: number, context: IControlContext = {}) {\n const elementList = context.elementList || this.getElementList()\n const startElement = elementList[startIndex]\n const control = startElement.control!\n if (!control.placeholder) return\n const placeholderStrList = splitText(control.placeholder)\n const anchorElementStyleAttr = pickObject(startElement, CONTROL_STYLE_ATTR)\n for (let p = 0; p < placeholderStrList.length; p++) {\n const value = placeholderStrList[p]\n const newElement: IElement = {\n ...anchorElementStyleAttr,\n value: value === '\\n' ? ZERO : value,\n controlId: startElement.controlId,\n type: ElementType.CONTROL,\n control: startElement.control,\n controlComponent: ControlComponent.PLACEHOLDER,\n color: this.controlOptions.placeholderColor\n }\n formatElementContext(elementList, [newElement], startIndex, {\n editorOptions: this.options\n })\n this.draw.spliceElementList(elementList, startIndex + p + 1, 0, [\n newElement\n ])\n }\n }\n\n public setValue(data: IElement[]): number {\n if (!this.activeControl) {\n throw new Error('active control is null')\n }\n return this.activeControl.setValue(data)\n }\n\n public setControlProperties(\n properties: Partial<IControl>,\n context: IControlContext = {}\n ) {\n const elementList = context.elementList || this.getElementList()\n const { startIndex } = context.range || this.getRange()\n const startElement = elementList[startIndex]\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.controlId !== startElement.controlId) break\n preElement.control = {\n ...preElement.control!,\n ...properties\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.controlId !== startElement.controlId) break\n nextElement.control = {\n ...nextElement.control!,\n ...properties\n }\n nextIndex++\n }\n }\n\n public keydown(evt: KeyboardEvent): number | null {\n if (!this.activeControl) {\n throw new Error('active control is null')\n }\n return this.activeControl.keydown(evt)\n }\n\n public cut(): number {\n if (!this.activeControl) {\n throw new Error('active control is null')\n }\n return this.activeControl.cut()\n }\n\n public getValueById(payload: IGetControlValueOption): IGetControlValueResult {\n const { id, groupId, conceptId, areaId } = payload\n const result: IGetControlValueResult = []\n if (!id && !conceptId && !groupId) return result\n const getValue = (elementList: IElement[], zone: EditorZone) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n getValue(td.value, zone)\n }\n }\n }\n if (\n !element.control ||\n (groupId && element.control.groupId !== groupId) ||\n (id && element.controlId !== id) ||\n (conceptId && element.control.conceptId !== conceptId) ||\n (areaId && element.areaId !== areaId)\n ) {\n continue\n }\n const { type, code, valueSets } = element.control\n let j = i\n let textControlValue = ''\n const textControlElementList = []\n while (j < elementList.length) {\n const nextElement = elementList[j]\n if (nextElement.controlId !== element.controlId) break\n if (\n (type === ControlType.TEXT ||\n type === ControlType.DATE ||\n type === ControlType.NUMBER) &&\n nextElement.controlComponent === ControlComponent.VALUE\n ) {\n textControlValue += nextElement.value\n textControlElementList.push(\n omitObject(nextElement, CONTROL_CONTEXT_ATTR)\n )\n }\n j++\n }\n if (\n type === ControlType.TEXT ||\n type === ControlType.DATE ||\n type === ControlType.NUMBER\n ) {\n result.push({\n ...element.control,\n zone,\n value: textControlValue || null,\n innerText: textControlValue || null,\n elementList: zipElementList(textControlElementList)\n })\n } else if (\n type === ControlType.SELECT ||\n type === ControlType.CHECKBOX ||\n type === ControlType.RADIO\n ) {\n const innerText = code\n ?.split(',')\n .map(\n selectCode =>\n valueSets?.find(valueSet => valueSet.code === selectCode)?.value\n )\n .filter(Boolean)\n .join('')\n result.push({\n ...element.control,\n zone,\n value: code || null,\n innerText: innerText || null\n })\n }\n i = j\n }\n }\n const data = [\n {\n zone: EditorZone.HEADER,\n elementList: this.draw.getHeaderElementList()\n },\n {\n zone: EditorZone.MAIN,\n elementList: this.draw.getOriginalMainElementList()\n },\n {\n zone: EditorZone.FOOTER,\n elementList: this.draw.getFooterElementList()\n }\n ]\n for (const { zone, elementList } of data) {\n getValue(elementList, zone)\n }\n return result\n }\n\n public setValueListById(payload: ISetControlValueOption[]) {\n if (!payload.length) return\n let isExistSet = false\n let isExistSubmitHistory = false\n const setValue = (elementList: IElement[]) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n setValue(td.value)\n }\n }\n }\n if (!element.control) continue\n const payloadItem = payload.find(\n p =>\n (!p.groupId || p.groupId === element.control?.groupId) &&\n ((p.id && element.controlId === p.id) ||\n (p.conceptId && element.control!.conceptId === p.conceptId) ||\n (p.areaId && element.areaId === p.areaId))\n )\n if (!payloadItem) continue\n const { value, isSubmitHistory = true } = payloadItem\n isExistSet = true\n if (isSubmitHistory) {\n isExistSubmitHistory = true\n }\n const { type } = element.control!\n let currentEndIndex = i\n while (currentEndIndex < elementList.length) {\n const nextElement = elementList[currentEndIndex]\n if (nextElement.controlId !== element.controlId) break\n currentEndIndex++\n }\n const fakeRange = {\n startIndex: i - 1,\n endIndex: currentEndIndex - 2\n }\n const controlContext: IControlContext = {\n range: fakeRange,\n elementList\n }\n const controlRule: IControlRuleOption = {\n isIgnoreDisabledRule: true,\n isIgnoreDeletedRule: true\n }\n if (type === ControlType.TEXT) {\n const formatValue = Array.isArray(value)\n ? value\n : value\n ? [{ value }]\n : []\n if (formatValue.length) {\n formatElementList(formatValue, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n }\n const text = new TextControl(element, this)\n this.activeControl = text\n if (formatValue.length) {\n text.setValue(formatValue, controlContext, controlRule)\n } else {\n text.clearValue(controlContext, controlRule)\n }\n } else if (type === ControlType.SELECT) {\n if (Array.isArray(value)) continue\n const select = new SelectControl(element, this)\n this.activeControl = select\n if (value) {\n select.setSelect(value, controlContext, controlRule)\n } else {\n select.clearSelect(controlContext, controlRule)\n }\n } else if (type === ControlType.CHECKBOX) {\n if (Array.isArray(value)) continue\n const checkbox = new CheckboxControl(element, this)\n this.activeControl = checkbox\n const codes = value ? value.split(',') : []\n checkbox.setSelect(codes, controlContext, controlRule)\n } else if (type === ControlType.RADIO) {\n if (Array.isArray(value)) continue\n const radio = new RadioControl(element, this)\n this.activeControl = radio\n const codes = value ? [value] : []\n radio.setSelect(codes, controlContext, controlRule)\n } else if (type === ControlType.DATE) {\n const date = new DateControl(element, this)\n this.activeControl = date\n if (isArray(value)) {\n if (value.length) {\n formatElementList(value, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n }\n date.setValue(value, controlContext, controlRule)\n } else if (isString(value)) {\n date.setSelect(value, controlContext, controlRule)\n } else {\n date.clearSelect(controlContext, controlRule)\n }\n } else if (type === ControlType.NUMBER) {\n const formatValue = Array.isArray(value)\n ? value\n : value\n ? [{ value }]\n : []\n if (formatValue.length) {\n formatElementList(formatValue, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n }\n const text = new NumberControl(element, this)\n this.activeControl = text\n if (formatValue.length) {\n text.setValue(formatValue, controlContext, controlRule)\n } else {\n text.clearValue(controlContext, controlRule)\n }\n }\n this.emitControlContentChange({\n context: controlContext\n })\n this.activeControl = null\n let newEndIndex = i\n while (newEndIndex < elementList.length) {\n const nextElement = elementList[newEndIndex]\n if (nextElement.controlId !== element.controlId) break\n newEndIndex++\n }\n i = newEndIndex\n }\n }\n this.destroyControl({\n isEmitEvent: false\n })\n const data = [\n this.draw.getHeaderElementList(),\n this.draw.getOriginalMainElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n setValue(elementList)\n }\n if (isExistSet) {\n if (!isExistSubmitHistory) {\n this.draw.getHistoryManager().recovery()\n }\n this.draw.render({\n isSubmitHistory: isExistSubmitHistory,\n isSetCursor: false\n })\n }\n }\n\n public setExtensionListById(payload: ISetControlExtensionOption[]) {\n if (!payload.length) return\n const setExtension = (elementList: IElement[]) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n setExtension(td.value)\n }\n }\n }\n if (!element.control) continue\n const payloadItem = payload.find(\n p =>\n (!p.groupId || p.groupId === element.control?.groupId) &&\n ((p.id && element.controlId === p.id) ||\n (p.conceptId && element.control!.conceptId === p.conceptId) ||\n (p.areaId && element.areaId === p.areaId))\n )\n if (!payloadItem) continue\n const { extension } = payloadItem\n this.setControlProperties(\n {\n extension\n },\n {\n elementList,\n range: { startIndex: i, endIndex: i }\n }\n )\n let newEndIndex = i\n while (newEndIndex < elementList.length) {\n const nextElement = elementList[newEndIndex]\n if (nextElement.controlId !== element.controlId) break\n newEndIndex++\n }\n i = newEndIndex\n }\n }\n const data = [\n this.draw.getHeaderElementList(),\n this.draw.getOriginalMainElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n setExtension(elementList)\n }\n }\n\n public setPropertiesListById(payload: ISetControlProperties[]) {\n if (!payload.length) return\n let isExistUpdate = false\n let isExistSubmitHistory = false\n const setProperties = (elementList: IElement[]) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n setProperties(td.value)\n }\n }\n }\n if (!element.control) continue\n const payloadItem = payload.find(\n p =>\n (!p.groupId || p.groupId === element.control?.groupId) &&\n ((p.id && element.controlId === p.id) ||\n (p.conceptId && element.control!.conceptId === p.conceptId) ||\n (p.areaId && element.areaId === p.areaId))\n )\n if (!payloadItem) continue\n const { properties, isSubmitHistory = true } = payloadItem\n isExistUpdate = true\n if (isSubmitHistory) {\n isExistSubmitHistory = true\n }\n this.setControlProperties(\n {\n ...element.control,\n ...properties,\n value: element.control.value\n },\n {\n elementList,\n range: { startIndex: i, endIndex: i }\n }\n )\n CONTROL_STYLE_ATTR.forEach(key => {\n const controlStyleProperty = properties[key]\n if (controlStyleProperty) {\n Reflect.set(element, key, controlStyleProperty)\n }\n })\n let newEndIndex = i\n while (newEndIndex < elementList.length) {\n const nextElement = elementList[newEndIndex]\n if (nextElement.controlId !== element.controlId) break\n newEndIndex++\n }\n i = newEndIndex\n }\n }\n const pageComponentData: IEditorData = {\n header: this.draw.getHeaderElementList(),\n main: this.draw.getOriginalMainElementList(),\n footer: this.draw.getFooterElementList()\n }\n for (const key in pageComponentData) {\n const elementList =\n pageComponentData[<keyof Omit<IEditorData, 'graffiti'>>key]!\n setProperties(elementList)\n }\n if (!isExistUpdate) return\n for (const key in pageComponentData) {\n const pageComponentKey = <keyof Omit<IEditorData, 'graffiti'>>key\n const elementList = zipElementList(pageComponentData[pageComponentKey]!, {\n isClassifyArea: true,\n extraPickAttrs: ['id']\n })\n pageComponentData[pageComponentKey] = elementList\n formatElementList(elementList, {\n editorOptions: this.options,\n isForceCompensation: true\n })\n }\n this.draw.setEditorData(pageComponentData)\n if (!isExistSubmitHistory) {\n this.draw.getHistoryManager().recovery()\n }\n this.draw.render({\n isSubmitHistory: isExistSubmitHistory,\n isSetCursor: false\n })\n }\n\n public getList(): IElement[] {\n const controlElementList: IElement[] = []\n function getControlElementList(elementList: IElement[]) {\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdElement = td.value\n getControlElementList(tdElement)\n }\n }\n }\n if (element.controlId) {\n const controlElement = omitObject(element, [\n ...TITLE_CONTEXT_ATTR,\n ...LIST_CONTEXT_ATTR\n ])\n controlElementList.push(controlElement)\n }\n }\n }\n const data = [\n this.draw.getHeader().getElementList(),\n this.draw.getOriginalMainElementList(),\n this.draw.getFooter().getElementList()\n ]\n for (const elementList of data) {\n getControlElementList(elementList)\n }\n return zipElementList(controlElementList, {\n extraPickAttrs: ['controlId']\n })\n }\n\n public recordBorderInfo(x: number, y: number, width: number, height: number) {\n this.controlBorder.recordBorderInfo(x, y, width, height)\n }\n\n public drawBorder(ctx: CanvasRenderingContext2D) {\n this.controlBorder.render(ctx)\n }\n\n public getPreControlContext(): INextControlContext | null {\n if (!this.activeControl) return null\n const position = this.draw.getPosition()\n const positionContext = position.getPositionContext()\n if (!positionContext) return null\n const controlElement = this.activeControl.getElement()\n function getPreContext(\n elementList: IElement[],\n start: number\n ): INextControlContext | null {\n for (let e = start; e > 0; e--) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList || []\n for (let r = trList.length - 1; r >= 0; r--) {\n const tr = trList[r]\n const tdList = tr.tdList\n for (let d = tdList.length - 1; d >= 0; d--) {\n const td = tdList[d]\n const context = getPreContext(td.value, td.value.length - 1)\n if (context) {\n return {\n positionContext: {\n isTable: true,\n index: e,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: element.id\n },\n nextIndex: context.nextIndex\n }\n }\n }\n }\n }\n if (\n !element.controlId ||\n element.controlId === controlElement.controlId\n ) {\n continue\n }\n let nextIndex = e\n while (nextIndex > 0) {\n const nextElement = elementList[nextIndex]\n if (\n nextElement.controlComponent === ControlComponent.VALUE ||\n nextElement.controlComponent === ControlComponent.PREFIX ||\n nextElement.controlComponent === ControlComponent.PRE_TEXT\n ) {\n break\n }\n nextIndex--\n }\n return {\n positionContext: {\n isTable: false\n },\n nextIndex\n }\n }\n return null\n }\n const { startIndex } = this.range.getRange()\n const elementList = this.getElementList()\n const context = getPreContext(elementList, startIndex)\n if (context) {\n return {\n positionContext: positionContext.isTable\n ? positionContext\n : context.positionContext,\n nextIndex: context.nextIndex\n }\n }\n if (controlElement.tableId) {\n const originalElementList = this.draw.getOriginalElementList()\n const { index, trIndex, tdIndex } = positionContext\n const trList = originalElementList[index!].trList!\n for (let r = trIndex!; r >= 0; r--) {\n const tr = trList[r]\n const tdList = tr.tdList\n for (let d = tdList.length - 1; d >= 0; d--) {\n if (trIndex === r && d >= tdIndex!) continue\n const td = tdList[d]\n const context = getPreContext(td.value, td.value.length - 1)\n if (context) {\n return {\n positionContext: {\n isTable: true,\n index: positionContext.index,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: controlElement.tableId\n },\n nextIndex: context.nextIndex\n }\n }\n }\n }\n const context = getPreContext(originalElementList, index! - 1)\n if (context) {\n return {\n positionContext: {\n isTable: false\n },\n nextIndex: context.nextIndex\n }\n }\n }\n return null\n }\n\n public getNextControlContext(): INextControlContext | null {\n if (!this.activeControl) return null\n const position = this.draw.getPosition()\n const positionContext = position.getPositionContext()\n if (!positionContext) return null\n const controlElement = this.activeControl.getElement()\n function getNextContext(\n elementList: IElement[],\n start: number\n ): INextControlContext | null {\n for (let e = start; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList || []\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n const tdList = tr.tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n const context = getNextContext(td.value!, 0)\n if (context) {\n return {\n positionContext: {\n isTable: true,\n index: e,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: element.id\n },\n nextIndex: context.nextIndex\n }\n }\n }\n }\n }\n if (\n !element.controlId ||\n element.controlId === controlElement.controlId ||\n elementList[e + 1]?.controlComponent === ControlComponent.PREFIX ||\n elementList[e + 1]?.controlComponent === ControlComponent.PRE_TEXT\n ) {\n continue\n }\n return {\n positionContext: {\n isTable: false\n },\n nextIndex: e\n }\n }\n return null\n }\n const { endIndex } = this.range.getRange()\n const elementList = this.getElementList()\n const context = getNextContext(elementList, endIndex)\n if (context) {\n return {\n positionContext: positionContext.isTable\n ? positionContext\n : context.positionContext,\n nextIndex: context.nextIndex\n }\n }\n if (controlElement.tableId) {\n const originalElementList = this.draw.getOriginalElementList()\n const { index, trIndex, tdIndex } = positionContext\n const trList = originalElementList[index!].trList!\n for (let r = trIndex!; r < trList.length; r++) {\n const tr = trList[r]\n const tdList = tr.tdList\n for (let d = 0; d < tdList.length; d++) {\n if (trIndex === r && d <= tdIndex!) continue\n const td = tdList[d]\n const context = getNextContext(td.value, 0)\n if (context) {\n return {\n positionContext: {\n isTable: true,\n index: positionContext.index,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: controlElement.tableId\n },\n nextIndex: context.nextIndex\n }\n }\n }\n }\n const context = getNextContext(originalElementList, index! + 1)\n if (context) {\n return {\n positionContext: {\n isTable: false\n },\n nextIndex: context.nextIndex\n }\n }\n }\n return null\n }\n\n public initNextControl(option: IInitNextControlOption = {}) {\n const { direction = MoveDirection.DOWN } = option\n let context: INextControlContext | null = null\n if (direction === MoveDirection.UP) {\n context = this.getPreControlContext()\n } else {\n context = this.getNextControlContext()\n }\n if (!context) return\n const { nextIndex, positionContext } = context\n const position = this.draw.getPosition()\n position.setPositionContext(positionContext)\n this.draw.getRange().replaceRange({\n startIndex: nextIndex,\n endIndex: nextIndex\n })\n this.draw.render({\n curIndex: nextIndex,\n isCompute: false,\n isSetCursor: true,\n isSubmitHistory: false\n })\n }\n\n public setMinWidthControlInfo(option: ISetControlRowFlexOption) {\n const { row, rowElement, controlRealWidth, availableWidth } = option\n if (!rowElement.control?.minWidth) return\n const { scale } = this.options\n const controlMinWidth = rowElement.control.minWidth * scale\n let controlFirstElement: IRowElement | null = null\n if (\n rowElement.control?.minWidth &&\n (rowElement.control?.rowFlex === RowFlex.CENTER ||\n rowElement.control?.rowFlex === RowFlex.RIGHT)\n ) {\n let controlContentWidth = rowElement.metrics.width\n let controlElementIndex = row.elementList.length - 1\n while (controlElementIndex >= 0) {\n const controlRowElement = row.elementList[controlElementIndex]\n controlContentWidth += controlRowElement.metrics.width\n if (\n row.elementList[controlElementIndex - 1]?.controlComponent ===\n ControlComponent.PREFIX\n ) {\n controlFirstElement = controlRowElement\n break\n }\n controlElementIndex--\n }\n if (controlFirstElement) {\n if (controlContentWidth < controlMinWidth) {\n if (rowElement.control.rowFlex === RowFlex.CENTER) {\n controlFirstElement.left =\n (controlMinWidth - controlContentWidth) / 2\n } else if (rowElement.control.rowFlex === RowFlex.RIGHT) {\n controlFirstElement.left =\n controlMinWidth - controlContentWidth - rowElement.metrics.width\n }\n }\n }\n }\n const extraWidth = controlMinWidth - controlRealWidth\n if (extraWidth > 0) {\n const controlFirstElementLeft = controlFirstElement?.left || 0\n const rowRemainingWidth =\n availableWidth - row.width - rowElement.metrics.width\n const left = Math.min(rowRemainingWidth, extraWidth)\n rowElement.left = left - controlFirstElementLeft\n row.width += left - controlFirstElementLeft\n }\n }\n}\n","import { NBSP, ZERO } from '../../../dataset/constant/Common'\nimport { VerticalAlign } from '../../../dataset/enum/VerticalAlign'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement } from '../../../interface/Element'\nimport { IRow, IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\ninterface ICheckboxRenderOption {\n ctx: CanvasRenderingContext2D\n x: number\n y: number\n row: IRow\n index: number\n}\n\nexport class CheckboxParticle {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n public setSelect(element: IElement) {\n const { checkbox } = element\n if (checkbox) {\n checkbox.value = !checkbox.value\n } else {\n element.checkbox = {\n value: true\n }\n }\n this.draw.render({\n isCompute: false,\n isSetCursor: false\n })\n }\n\n public render(payload: ICheckboxRenderOption) {\n const { ctx, x, index, row } = payload\n let { y } = payload\n const {\n checkbox: { gap, lineWidth, fillStyle, strokeStyle, verticalAlign },\n scale\n } = this.options\n const { metrics, checkbox } = row.elementList[index]\n if (\n verticalAlign === VerticalAlign.TOP ||\n verticalAlign === VerticalAlign.MIDDLE\n ) {\n let nextIndex = index + 1\n let nextElement: IRowElement | null = null\n while (nextIndex < row.elementList.length) {\n nextElement = row.elementList[nextIndex]\n if (nextElement.value !== ZERO && nextElement.value !== NBSP) break\n nextIndex++\n }\n if (nextElement) {\n const {\n metrics: { boundingBoxAscent, boundingBoxDescent }\n } = nextElement\n const textHeight = boundingBoxAscent + boundingBoxDescent\n if (textHeight > metrics.height) {\n if (verticalAlign === VerticalAlign.TOP) {\n y -= boundingBoxAscent - metrics.height\n } else if (verticalAlign === VerticalAlign.MIDDLE) {\n y -= (textHeight - metrics.height) / 2\n }\n }\n }\n }\n const left = Math.round(x + gap * scale)\n const top = Math.round(y - metrics.height + lineWidth)\n const width = metrics.width - gap * 2 * scale\n const height = metrics.height\n ctx.save()\n ctx.beginPath()\n ctx.translate(0.5, 0.5)\n if (checkbox?.value) {\n ctx.lineWidth = lineWidth\n ctx.strokeStyle = fillStyle\n ctx.rect(left, top, width, height)\n ctx.stroke()\n ctx.beginPath()\n ctx.fillStyle = fillStyle\n ctx.fillRect(left, top, width, height)\n ctx.beginPath()\n ctx.strokeStyle = strokeStyle\n ctx.lineWidth = lineWidth * 2 * scale\n ctx.moveTo(left + 2 * scale, top + height / 2)\n ctx.lineTo(left + width / 2, top + height - 3 * scale)\n ctx.lineTo(left + width - 2 * scale, top + 3 * scale)\n ctx.stroke()\n } else {\n ctx.lineWidth = lineWidth\n ctx.rect(left, top, width, height)\n ctx.stroke()\n }\n ctx.closePath()\n ctx.restore()\n }\n}\n","import { NBSP, ZERO } from '../../../dataset/constant/Common'\nimport { VerticalAlign } from '../../../dataset/enum/VerticalAlign'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement } from '../../../interface/Element'\nimport { IRow, IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\ninterface IRadioRenderOption {\n ctx: CanvasRenderingContext2D\n x: number\n y: number\n row: IRow\n index: number\n}\n\nexport class RadioParticle {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n public setSelect(element: IElement) {\n const { radio } = element\n if (radio) {\n radio.value = !radio.value\n } else {\n element.radio = {\n value: true\n }\n }\n this.draw.render({\n isCompute: false,\n isSetCursor: false\n })\n }\n\n public render(payload: IRadioRenderOption) {\n const { ctx, x, index, row } = payload\n let { y } = payload\n const {\n radio: { gap, lineWidth, fillStyle, strokeStyle, verticalAlign },\n scale\n } = this.options\n const { metrics, radio } = row.elementList[index]\n if (\n verticalAlign === VerticalAlign.TOP ||\n verticalAlign === VerticalAlign.MIDDLE\n ) {\n let nextIndex = index + 1\n let nextElement: IRowElement | null = null\n while (nextIndex < row.elementList.length) {\n nextElement = row.elementList[nextIndex]\n if (nextElement.value !== ZERO && nextElement.value !== NBSP) break\n nextIndex++\n }\n if (nextElement) {\n const {\n metrics: { boundingBoxAscent, boundingBoxDescent }\n } = nextElement\n const textHeight = boundingBoxAscent + boundingBoxDescent\n if (textHeight > metrics.height) {\n if (verticalAlign === VerticalAlign.TOP) {\n y -= boundingBoxAscent - metrics.height\n } else if (verticalAlign === VerticalAlign.MIDDLE) {\n y -= (textHeight - metrics.height) / 2\n }\n }\n }\n }\n const left = Math.round(x + gap * scale)\n const top = Math.round(y - metrics.height + lineWidth)\n const width = metrics.width - gap * 2 * scale\n const height = metrics.height\n ctx.save()\n ctx.beginPath()\n ctx.translate(0.5, 0.5)\n ctx.strokeStyle = radio?.value ? fillStyle : strokeStyle\n ctx.lineWidth = lineWidth\n ctx.arc(left + width / 2, top + height / 2, width / 2, 0, Math.PI * 2)\n ctx.stroke()\n if (radio?.value) {\n ctx.beginPath()\n ctx.fillStyle = fillStyle\n ctx.arc(left + width / 2, top + height / 2, width / 3, 0, Math.PI * 2)\n ctx.fill()\n }\n ctx.closePath()\n ctx.restore()\n }\n}\n","import { version } from '../../version'\nimport { Draw } from '../draw/Draw'\nimport { ICatalog, ICatalogItem } from '../../interface/Catalog'\nimport { IEditorResult, IEditorData } from '../../interface/Editor'\nimport { IGetValueOption } from '../../interface/Draw'\nimport { IElement, IElementPosition } from '../../interface/Element'\nimport { deepClone } from '../../utils'\nimport { zipElementList } from '../../utils/element'\n\n// Local enums for worker functions (to avoid import issues)\nenum ElementType {\n TEXT = 'text',\n IMAGE = 'image',\n TABLE = 'table',\n HYPERLINK = 'hyperlink',\n SUPERSCRIPT = 'superscript',\n SUBSCRIPT = 'subscript',\n SEPARATOR = 'separator',\n PAGE_BREAK = 'pageBreak',\n CONTROL = 'control',\n CHECKBOX = 'checkbox',\n RADIO = 'radio',\n LATEX = 'latex',\n TAB = 'tab',\n DATE = 'date',\n BLOCK = 'block',\n TITLE = 'title',\n AREA = 'area',\n LIST = 'list',\n LABEL = 'label',\n COLUMN_BREAK = 'columnBreak'\n}\n\nenum ControlComponent {\n VALUE = 'value'\n}\n\nenum TitleLevel {\n FIRST = 'first',\n SECOND = 'second',\n THIRD = 'third',\n FOURTH = 'fourth',\n FIFTH = 'fifth',\n SIXTH = 'sixth'\n}\n\nconst titleOrderNumberMapping: Record<TitleLevel, number> = {\n [TitleLevel.FIRST]: 1,\n [TitleLevel.SECOND]: 2,\n [TitleLevel.THIRD]: 3,\n [TitleLevel.FOURTH]: 4,\n [TitleLevel.FIFTH]: 5,\n [TitleLevel.SIXTH]: 6\n}\n\nconst TEXTLIKE_ELEMENT_TYPE: ElementType[] = [\n ElementType.TEXT,\n ElementType.HYPERLINK,\n ElementType.SUBSCRIPT,\n ElementType.SUPERSCRIPT,\n ElementType.CONTROL,\n ElementType.DATE,\n ElementType.LABEL\n]\n\nconst ZERO = '\\u200B'\nconst WRAP = '\\n'\n\n// Word count helper functions\nfunction pickText(elementList: IElement[]): string {\n let text = ''\n let e = 0\n while (e < elementList.length) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n if (element.trList) {\n for (let t = 0; t < element.trList.length; t++) {\n const tr = element.trList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n text += pickText(td.value)\n }\n }\n }\n } else if (element.type === ElementType.HYPERLINK) {\n const hyperlinkId = element.hyperlinkId\n const valueList: IElement[] = []\n while (e < elementList.length) {\n const hyperlinkE = elementList[e]\n if (hyperlinkId !== hyperlinkE.hyperlinkId) {\n e--\n break\n }\n delete hyperlinkE.type\n valueList.push(hyperlinkE)\n e++\n }\n text += pickText(valueList)\n } else if (element.controlId) {\n if (!element.control?.hide) {\n const controlId = element.controlId\n const valueList: IElement[] = []\n while (e < elementList.length) {\n const controlE = elementList[e]\n if (controlId !== controlE.controlId) {\n e--\n break\n }\n if (controlE.controlComponent === ControlComponent.VALUE) {\n delete controlE.controlId\n valueList.push(controlE)\n }\n e++\n }\n text += pickText(valueList)\n }\n } else if (\n (!element.type || element.type === ElementType.TEXT) &&\n !element.area?.hide\n ) {\n text += element.value\n }\n e++\n }\n return text\n}\n\nfunction groupText(text: string): string[] {\n const characterList: string[] = []\n const numberReg = /[0-9]/\n const letterReg = /[A-Za-z]/\n const blankReg = /\\s/\n let isPreLetter = false\n let isPreNumber = false\n let compositionText = ''\n function pushCompositionText() {\n if (compositionText) {\n characterList.push(compositionText)\n compositionText = ''\n }\n }\n for (const t of text) {\n if (letterReg.test(t)) {\n if (!isPreLetter) {\n pushCompositionText()\n }\n compositionText += t\n isPreLetter = true\n isPreNumber = false\n } else if (numberReg.test(t)) {\n if (!isPreNumber) {\n pushCompositionText()\n }\n compositionText += t\n isPreLetter = false\n isPreNumber = true\n } else {\n pushCompositionText()\n isPreLetter = false\n isPreNumber = false\n if (!blankReg.test(t)) {\n characterList.push(t)\n }\n }\n }\n pushCompositionText()\n return characterList\n}\n\nfunction computeWordCount(elementList: IElement[]): number {\n const originText = pickText(elementList)\n const filterText = originText\n .replace(new RegExp(`^${ZERO}`), '')\n .replace(new RegExp(ZERO, 'g'), WRAP)\n const textGroup = groupText(filterText)\n return textGroup.length\n}\n\n// Catalog helper functions\ntype ICatalogElement = IElement & {\n pageNo: number\n}\n\nfunction isTextLikeElement(element: IElement): boolean {\n return !element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type as ElementType)\n}\n\nfunction computeCatalog(elementList: IElement[], positionList: IElementPosition[]): ICatalog | null {\n const titleElementList: ICatalogElement[] = []\n let t = 0\n while (t < elementList.length) {\n const element = elementList[t]\n const getElementInfo = (\n element: IElement,\n list: IElement[],\n position: number\n ) => {\n const titleId = element.titleId\n const level = element.level\n const titleElement: ICatalogElement = {\n type: ElementType.TITLE,\n value: '',\n level,\n titleId,\n pageNo: positionList[t]?.pageNo || 1\n }\n const valueList: IElement[] = []\n while (position < list.length) {\n const titleE = list[position]\n if (titleId !== titleE.titleId) {\n position--\n break\n }\n valueList.push(titleE)\n position++\n }\n titleElement.value = valueList\n .filter(el => isTextLikeElement(el))\n .map(el => el.value)\n .join('')\n .replace(new RegExp(ZERO, 'g'), '')\n return { position, titleElement }\n }\n if (element.titleId) {\n const { position, titleElement } = getElementInfo(element, elementList, t)\n t = position\n titleElementList.push(titleElement)\n }\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const value = td.value\n if (value.length > 1) {\n let index = 1\n while (index < value.length) {\n if (value[index]?.titleId) {\n const { titleElement, position } = getElementInfo(\n value[index],\n value,\n index\n )\n titleElementList.push(titleElement)\n index = position\n }\n index++\n }\n }\n }\n }\n }\n t++\n }\n if (!titleElementList.length) return null\n const recursiveInsert = (\n title: ICatalogElement,\n catalogItem: ICatalogItem\n ) => {\n const subCatalogItem =\n catalogItem.subCatalog[catalogItem.subCatalog.length - 1]\n const catalogItemLevel = titleOrderNumberMapping[subCatalogItem?.level as TitleLevel]\n const titleLevel = titleOrderNumberMapping[title.level as TitleLevel]\n if (subCatalogItem && titleLevel > catalogItemLevel) {\n recursiveInsert(title, subCatalogItem)\n } else {\n catalogItem.subCatalog.push({\n id: title.titleId!,\n name: title.value,\n level: title.level!,\n pageNo: title.pageNo,\n subCatalog: []\n })\n }\n }\n const catalog: ICatalog = []\n for (let e = 0; e < titleElementList.length; e++) {\n const title = titleElementList[e]\n const catalogItem = catalog[catalog.length - 1]\n const catalogItemLevel = titleOrderNumberMapping[catalogItem?.level as TitleLevel]\n const titleLevel = titleOrderNumberMapping[title.level as TitleLevel]\n if (catalogItem && titleLevel > catalogItemLevel) {\n recursiveInsert(title, catalogItem)\n } else {\n catalog.push({\n id: title.titleId!,\n name: title.value,\n level: title.level!,\n pageNo: title.pageNo,\n subCatalog: []\n })\n }\n }\n return catalog\n}\n\n// Group IDs helper function\nfunction computeGroupIds(elementList: IElement[]): string[] {\n const groupIds: string[] = []\n for (const element of elementList) {\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n groupIds.push(...computeGroupIds(td.value))\n }\n }\n }\n if (!element.groupIds) continue\n for (const groupId of element.groupIds) {\n if (!groupIds.includes(groupId)) {\n groupIds.push(groupId)\n }\n }\n }\n return groupIds\n}\n\n// Value helper function\nfunction computeValue(data: Required<IEditorData>, options?: IGetValueOption): IEditorData {\n const { extraPickAttrs = [] } = options || {}\n\n return {\n header: zipElementList(data.header, {\n extraPickAttrs,\n isClone: false\n }),\n main: zipElementList(data.main, {\n extraPickAttrs,\n isClassifyArea: true,\n isClone: false\n }),\n footer: zipElementList(data.footer, {\n extraPickAttrs,\n isClone: false\n })\n }\n}\n\nexport class WorkerManager {\n private draw: Draw\n\n constructor(draw: Draw) {\n this.draw = draw\n }\n\n public getWordCount(): Promise<number> {\n return new Promise((resolve) => {\n const elementList = this.draw.getOriginalMainElementList()\n const count = computeWordCount(elementList)\n resolve(count)\n })\n }\n\n public getCatalog(): Promise<ICatalog | null> {\n return new Promise((resolve) => {\n const elementList = this.draw.getOriginalMainElementList()\n const positionList = this.draw.getPosition().getOriginalMainPositionList()\n const catalog = computeCatalog(elementList, positionList)\n resolve(catalog)\n })\n }\n\n public getGroupIds(): Promise<string[]> {\n return new Promise((resolve) => {\n const elementList = this.draw.getOriginalMainElementList()\n const groupIds = computeGroupIds(elementList)\n resolve(groupIds)\n })\n }\n\n public getValue(options?: IGetValueOption): Promise<IEditorResult> {\n return new Promise((resolve) => {\n const data = this.draw.getOriginValue(options) as Required<IEditorData>\n const editorData = computeValue(data, options)\n resolve({\n version,\n data: editorData,\n options: deepClone(this.draw.getOptions())\n })\n })\n }\n}\n","import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'\nimport { EditorMode } from '../../../../dataset/enum/Editor'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../../interface/Element'\nimport { EventBusMap } from '../../../../interface/EventBus'\nimport {\n IPreviewerCreateResult,\n IPreviewerDrawOption\n} from '../../../../interface/Previewer'\nimport { downloadFile } from '../../../../utils'\nimport { EventBus } from '../../../event/eventbus/EventBus'\nimport { Draw } from '../../Draw'\n\nexport class Previewer {\n private container: HTMLDivElement\n private canvas: HTMLCanvasElement\n private draw: Draw\n private options: Required<IEditorOption>\n private curElement: IElement | null\n private curElementSrc: string\n private previewerDrawOption: IPreviewerDrawOption\n private curPosition: IElementPosition | null\n private eventBus: EventBus<EventBusMap>\n private imageList: IElement[]\n private curShowElement: IElement | null\n private imageCount: HTMLSpanElement | null\n private imagePre: HTMLElement | null\n private imageNext: HTMLElement | null\n private resizerSelection: HTMLDivElement\n private resizerHandleList: HTMLDivElement[]\n private resizerImageContainer: HTMLDivElement\n private resizerImage: HTMLImageElement\n private resizerSize: HTMLSpanElement\n private width: number\n private height: number\n private mousedownX: number\n private mousedownY: number\n private curHandleIndex: number\n private previewerContainer: HTMLDivElement | null\n private previewerImage: HTMLImageElement | null\n\n constructor(draw: Draw) {\n this.container = draw.getContainer()\n this.canvas = draw.getPage()\n this.draw = draw\n this.options = draw.getOptions()\n this.curElement = null\n this.curElementSrc = ''\n this.previewerDrawOption = {}\n this.curPosition = null\n this.eventBus = draw.getEventBus()\n this.imageList = []\n this.curShowElement = null\n this.imageCount = null\n this.imagePre = null\n this.imageNext = null\n const {\n resizerSelection,\n resizerHandleList,\n resizerImageContainer,\n resizerImage,\n resizerSize\n } = this._createResizerDom()\n this.resizerSelection = resizerSelection\n this.resizerHandleList = resizerHandleList\n this.resizerImageContainer = resizerImageContainer\n this.resizerImage = resizerImage\n this.resizerSize = resizerSize\n this.width = 0\n this.height = 0\n this.mousedownX = 0\n this.mousedownY = 0\n this.curHandleIndex = 0\n this.previewerContainer = null\n this.previewerImage = null\n }\n\n private _getElementPosition(\n element: IElement,\n position: IElementPosition | null = null\n ): { x: number; y: number } {\n const { scale } = this.options\n let x = 0\n let y = 0\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const pageNo = position?.pageNo ?? this.draw.getPageNo()\n const preY = pageNo * (height + pageGap)\n if (element.imgFloatPosition) {\n x = element.imgFloatPosition.x! * scale\n y = element.imgFloatPosition.y * scale + preY\n } else if (position) {\n const {\n coordinate: {\n leftTop: [left, top]\n },\n ascent\n } = position\n x = left\n y = top + preY + ascent\n }\n return { x, y }\n }\n\n private _createResizerDom(): IPreviewerCreateResult {\n const { scale } = this.options\n const resizerSelection = document.createElement('div')\n resizerSelection.classList.add(`${EDITOR_PREFIX}-resizer-selection`)\n resizerSelection.style.display = 'none'\n resizerSelection.style.borderColor = this.options.resizerColor\n resizerSelection.style.borderWidth = `${scale}px`\n const resizerHandleList: HTMLDivElement[] = []\n for (let i = 0; i < 8; i++) {\n const handleDom = document.createElement('div')\n handleDom.style.background = this.options.resizerColor\n handleDom.classList.add(`resizer-handle`)\n handleDom.classList.add(`handle-${i}`)\n handleDom.setAttribute('data-index', String(i))\n handleDom.onmousedown = this._mousedown.bind(this)\n resizerSelection.append(handleDom)\n resizerHandleList.push(handleDom)\n }\n this.container.append(resizerSelection)\n const resizerSizeView = document.createElement('div')\n resizerSizeView.classList.add(`${EDITOR_PREFIX}-resizer-size-view`)\n const resizerSize = document.createElement('span')\n resizerSizeView.append(resizerSize)\n resizerSelection.append(resizerSizeView)\n const resizerImageContainer = document.createElement('div')\n resizerImageContainer.classList.add(`${EDITOR_PREFIX}-resizer-image`)\n resizerImageContainer.style.display = 'none'\n const resizerImage = document.createElement('img')\n resizerImageContainer.append(resizerImage)\n this.container.append(resizerImageContainer)\n return {\n resizerSelection,\n resizerHandleList,\n resizerImageContainer,\n resizerImage,\n resizerSize\n }\n }\n\n private _keydown = () => {\n if (this.resizerSelection.style.display === 'block') {\n this.clearResizer()\n document.removeEventListener('keydown', this._keydown)\n }\n }\n\n private _mousedown(evt: MouseEvent) {\n this.canvas = this.draw.getPage()\n if (!this.curElement) return\n const { scale } = this.options\n this.mousedownX = evt.x\n this.mousedownY = evt.y\n const target = evt.target as HTMLDivElement\n this.curHandleIndex = Number(target.dataset.index)\n const cursor = window.getComputedStyle(target).cursor\n document.body.style.cursor = cursor\n this.canvas.style.cursor = cursor\n this.resizerImage.src = this.curElementSrc\n this.resizerImageContainer.style.display = 'block'\n const { x: resizerLeft, y: resizerTop } = this._getElementPosition(\n this.curElement,\n this.curPosition\n )\n this.resizerImageContainer.style.left = `${resizerLeft}px`\n this.resizerImageContainer.style.top = `${resizerTop}px`\n this.resizerImage.style.width = `${this.curElement.width! * scale}px`\n this.resizerImage.style.height = `${this.curElement.height! * scale}px`\n const mousemoveFn = this._mousemove.bind(this)\n document.addEventListener('mousemove', mousemoveFn)\n document.addEventListener(\n 'mouseup',\n () => {\n if (this.curElement && !this.previewerDrawOption.dragDisable) {\n this.curElement.width = this.width\n this.curElement.height = this.height\n this.draw.render({\n isSetCursor: true,\n curIndex: this.curPosition?.index\n })\n }\n this.resizerImageContainer.style.display = 'none'\n document.removeEventListener('mousemove', mousemoveFn)\n document.body.style.cursor = ''\n this.canvas.style.cursor = 'text'\n },\n {\n once: true\n }\n )\n evt.preventDefault()\n }\n\n private _mousemove(evt: MouseEvent) {\n if (!this.curElement || this.previewerDrawOption.dragDisable) return\n const { scale } = this.options\n let dx = 0\n let dy = 0\n switch (this.curHandleIndex) {\n case 0:\n {\n const offsetX = this.mousedownX - evt.x\n const offsetY = this.mousedownY - evt.y\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.curElement.height! * dx) / this.curElement.width!\n }\n break\n case 1:\n dy = this.mousedownY - evt.y\n break\n case 2:\n {\n const offsetX = evt.x - this.mousedownX\n const offsetY = this.mousedownY - evt.y\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.curElement.height! * dx) / this.curElement.width!\n }\n break\n case 4:\n {\n const offsetX = evt.x - this.mousedownX\n const offsetY = evt.y - this.mousedownY\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.curElement.height! * dx) / this.curElement.width!\n }\n break\n case 3:\n dx = evt.x - this.mousedownX\n break\n case 5:\n dy = evt.y - this.mousedownY\n break\n case 6:\n {\n const offsetX = this.mousedownX - evt.x\n const offsetY = evt.y - this.mousedownY\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.curElement.height! * dx) / this.curElement.width!\n }\n break\n case 7:\n dx = this.mousedownX - evt.x\n break\n }\n const dw = this.curElement.width! + dx / scale\n const dh = this.curElement.height! + dy / scale\n if (dw <= 0 || dh <= 0) return\n this.width = dw\n this.height = dh\n const elementWidth = dw * scale\n const elementHeight = dh * scale\n this.resizerImage.style.width = `${elementWidth}px`\n this.resizerImage.style.height = `${elementHeight}px`\n this._updateResizerRect(elementWidth, elementHeight)\n this._updateResizerSizeView(elementWidth, elementHeight)\n evt.preventDefault()\n if (this.eventBus.isSubscribe('imageSizeChange')) {\n this.eventBus.emit('imageSizeChange', {\n element: this.curElement\n })\n }\n }\n\n private _drawPreviewer() {\n const previewerContainer = document.createElement('div')\n previewerContainer.classList.add(`${EDITOR_PREFIX}-image-previewer`)\n const closeBtn = document.createElement('i')\n closeBtn.classList.add('image-close')\n closeBtn.onclick = () => {\n this._clearPreviewer()\n }\n previewerContainer.append(closeBtn)\n const imgContainer = document.createElement('div')\n imgContainer.classList.add(`${EDITOR_PREFIX}-image-container`)\n const img = document.createElement('img')\n img.src = this.curElementSrc\n img.draggable = false\n imgContainer.append(img)\n this.previewerImage = img\n previewerContainer.append(imgContainer)\n let x = 0\n let y = 0\n let scaleSize = 1\n let rotateSize = 0\n const menuContainer = document.createElement('div')\n menuContainer.classList.add(`${EDITOR_PREFIX}-image-menu`)\n const navigateContainer = document.createElement('div')\n navigateContainer.classList.add('image-navigate')\n const imagePre = document.createElement('i')\n imagePre.classList.add('image-pre')\n imagePre.onclick = () => {\n const curIndex = this.imageList.findIndex(\n el => el.id === this.curShowElement?.id\n )\n if (curIndex <= 0) return\n this.curShowElement = this.imageList[curIndex - 1]\n img.src = this.curShowElement.value\n this._updateImageNavigate()\n }\n navigateContainer.append(imagePre)\n this.imagePre = imagePre\n const imageCount = document.createElement('span')\n imageCount.classList.add('image-count')\n this.imageCount = imageCount\n navigateContainer.append(imageCount)\n const imageNext = document.createElement('i')\n imageNext.classList.add('image-next')\n imageNext.onclick = () => {\n const curIndex = this.imageList.findIndex(\n el => el.id === this.curShowElement?.id\n )\n if (curIndex >= this.imageList.length - 1) return\n this.curShowElement = this.imageList[curIndex + 1]\n img.src = this.curShowElement.value\n this._updateImageNavigate()\n }\n this.imageNext = imageNext\n navigateContainer.append(imageNext)\n menuContainer.append(navigateContainer)\n const zoomIn = document.createElement('i')\n zoomIn.classList.add('zoom-in')\n zoomIn.onclick = () => {\n scaleSize += 0.1\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n menuContainer.append(zoomIn)\n const zoomOut = document.createElement('i')\n zoomOut.onclick = () => {\n if (scaleSize - 0.1 <= 0.1) return\n scaleSize -= 0.1\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n zoomOut.classList.add('zoom-out')\n menuContainer.append(zoomOut)\n const rotate = document.createElement('i')\n rotate.classList.add('rotate')\n rotate.onclick = () => {\n rotateSize += 1\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n menuContainer.append(rotate)\n const originalSize = document.createElement('i')\n originalSize.classList.add('original-size')\n originalSize.onclick = () => {\n x = 0\n y = 0\n scaleSize = 1\n rotateSize = 0\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n menuContainer.append(originalSize)\n const imageDownload = document.createElement('i')\n imageDownload.classList.add('image-download')\n imageDownload.onclick = () => {\n const { mime } = this.previewerDrawOption\n downloadFile(img.src, `${this.curElement?.id}.${mime || 'png'}`)\n }\n menuContainer.append(imageDownload)\n previewerContainer.append(menuContainer)\n this.previewerContainer = previewerContainer\n document.body.append(previewerContainer)\n let startX = 0\n let startY = 0\n let isAllowDrag = false\n img.onmousedown = evt => {\n isAllowDrag = true\n startX = evt.x\n startY = evt.y\n previewerContainer.style.cursor = 'move'\n }\n previewerContainer.onmousemove = (evt: MouseEvent) => {\n if (!isAllowDrag) return\n x += evt.x - startX\n y += evt.y - startY\n startX = evt.x\n startY = evt.y\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n previewerContainer.onmouseup = () => {\n isAllowDrag = false\n previewerContainer.style.cursor = 'auto'\n }\n previewerContainer.onwheel = evt => {\n evt.preventDefault()\n evt.stopPropagation()\n if (evt.deltaY < 0) {\n scaleSize += 0.1\n } else {\n if (scaleSize - 0.1 <= 0.1) return\n scaleSize -= 0.1\n }\n this._setPreviewerTransform(scaleSize, rotateSize, x, y)\n }\n this._updateImageNavigate()\n }\n\n private _updateImageNavigate() {\n const currentIndex = this.imageList.findIndex(\n el => el.id === this.curShowElement?.id\n )\n this.imageCount!.innerText = `${currentIndex + 1} / ${\n this.imageList.length\n }`\n if (currentIndex <= 0) {\n this.imagePre!.classList.add('disabled')\n } else {\n this.imagePre!.classList.remove('disabled')\n }\n if (currentIndex >= this.imageList.length - 1) {\n this.imageNext!.classList.add('disabled')\n } else {\n this.imageNext!.classList.remove('disabled')\n }\n }\n\n public _setPreviewerTransform(\n scale: number,\n rotate: number,\n x: number,\n y: number\n ) {\n if (!this.previewerImage) return\n this.previewerImage.style.left = `${x}px`\n this.previewerImage.style.top = `${y}px`\n this.previewerImage.style.transform = `scale(${scale}) rotate(${\n rotate * 90\n }deg)`\n }\n\n private _clearPreviewer() {\n this.previewerContainer?.remove()\n this.previewerContainer = null\n document.body.style.overflow = 'auto'\n }\n\n public _updateResizerRect(width: number, height: number) {\n const { resizerSize: handleSize, scale } = this.options\n const isReadonly = this.draw.isReadonly()\n this.resizerSelection.style.width = `${width}px`\n this.resizerSelection.style.height = `${height}px`\n // handle\n for (let i = 0; i < 8; i++) {\n const left =\n i === 0 || i === 6 || i === 7\n ? -handleSize\n : i === 1 || i === 5\n ? width / 2\n : width - handleSize\n const top =\n i === 0 || i === 1 || i === 2\n ? -handleSize\n : i === 3 || i === 7\n ? height / 2 - handleSize\n : height - handleSize\n this.resizerHandleList[i].style.transform = `scale(${scale})`\n this.resizerHandleList[i].style.left = `${left}px`\n this.resizerHandleList[i].style.top = `${top}px`\n this.resizerHandleList[i].style.display = isReadonly ? 'none' : 'block'\n }\n }\n\n public _updateResizerSizeView(width: number, height: number) {\n this.resizerSize.innerText = `${Math.round(width)} × ${Math.round(height)}`\n }\n\n public render() {\n const mode = this.draw.getMode()\n if (\n !this.curElement ||\n (this.curElement.imgToolDisabled && !this.draw.isDesignMode()) ||\n (mode === EditorMode.PRINT &&\n this.options.modeRule[EditorMode.PRINT]?.imagePreviewerDisabled) ||\n (mode === EditorMode.READONLY &&\n this.options.modeRule[EditorMode.READONLY]?.imagePreviewerDisabled)\n ) {\n return\n }\n this.imageList = this.draw.getImageParticle().getOriginalMainImageList()\n this.curShowElement = this.curElement\n this._drawPreviewer()\n document.body.style.overflow = 'hidden'\n }\n\n public drawResizer(\n element: IElement,\n position: IElementPosition | null = null,\n options: IPreviewerDrawOption = {}\n ) {\n const mode = this.draw.getMode()\n if (\n (element.imgToolDisabled && !this.draw.isDesignMode()) ||\n (mode === EditorMode.PRINT &&\n this.options.modeRule[EditorMode.PRINT]?.imagePreviewerDisabled) ||\n (mode === EditorMode.READONLY &&\n this.options.modeRule[EditorMode.READONLY]?.imagePreviewerDisabled)\n ) {\n return\n }\n this.previewerDrawOption = options\n this.curElementSrc = element[options.srcKey || 'value'] || ''\n this.updateResizer(element, position)\n document.addEventListener('keydown', this._keydown)\n }\n\n public updateResizer(\n element: IElement,\n position: IElementPosition | null = null\n ) {\n const { scale } = this.options\n const elementWidth = element.width! * scale\n const elementHeight = element.height! * scale\n this._updateResizerSizeView(elementWidth, elementHeight)\n const { x: resizerLeft, y: resizerTop } = this._getElementPosition(\n element,\n position\n )\n this.resizerSelection.style.left = `${resizerLeft}px`\n this.resizerSelection.style.top = `${resizerTop}px`\n this.resizerSelection.style.borderWidth = `${scale}px`\n this._updateResizerRect(elementWidth, elementHeight)\n this.resizerSelection.style.display = 'block'\n this.curElement = element\n this.curPosition = position\n this.width = elementWidth\n this.height = elementHeight\n }\n\n public clearResizer() {\n this.resizerSelection.style.display = 'none'\n document.removeEventListener('keydown', this._keydown)\n }\n}\n","import { ElementType } from '../../../../dataset/enum/Element'\nimport { DeepRequired } from '../../../../interface/Common'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../../interface/Element'\nimport { formatElementContext } from '../../../../utils/element'\nimport { RangeManager } from '../../../range/RangeManager'\nimport { Draw } from '../../Draw'\nimport { DatePicker } from './DatePicker'\n\nexport class DateParticle {\n private draw: Draw\n private range: RangeManager\n private datePicker: DatePicker\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.range = draw.getRange()\n this.datePicker = new DatePicker(draw, {\n onSubmit: this._setValue.bind(this)\n })\n }\n\n private _setValue(date: string) {\n if (!date) return\n const range = this.getDateElementRange()\n if (!range) return\n const [leftIndex, rightIndex] = range\n const elementList = this.draw.getElementList()\n const startElement = elementList[leftIndex + 1]\n this.draw.spliceElementList(\n elementList,\n leftIndex + 1,\n rightIndex - leftIndex\n )\n this.range.setRange(leftIndex, leftIndex)\n const dateElement: IElement = {\n type: ElementType.DATE,\n value: '',\n dateFormat: startElement.dateFormat,\n valueList: [\n {\n value: date\n }\n ]\n }\n formatElementContext(elementList, [dateElement], leftIndex, {\n editorOptions: this.options\n })\n this.draw.insertElementList([dateElement])\n }\n\n public getDateElementRange(): [number, number] | null {\n let leftIndex = -1\n let rightIndex = -1\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return null\n const elementList = this.draw.getElementList()\n const startElement = elementList[startIndex]\n if (startElement.type !== ElementType.DATE) return null\n let preIndex = startIndex\n while (preIndex >= 0) {\n const preElement = elementList[preIndex]\n if (preElement.dateId !== startElement.dateId) {\n leftIndex = preIndex\n break\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.dateId !== startElement.dateId) {\n rightIndex = nextIndex - 1\n break\n }\n nextIndex++\n }\n if (nextIndex === elementList.length) {\n rightIndex = nextIndex - 1\n }\n if (!~leftIndex || !~rightIndex) return null\n return [leftIndex, rightIndex]\n }\n\n public clearDatePicker() {\n this.datePicker.dispose()\n }\n\n public renderDatePicker(element: IElement, position: IElementPosition) {\n const elementList = this.draw.getElementList()\n const range = this.getDateElementRange()\n const value = range\n ? elementList\n .slice(range[0] + 1, range[1] + 1)\n .map(el => el.value)\n .join('')\n : ''\n this.datePicker.render({\n value,\n position,\n dateFormat: element.dateFormat\n })\n }\n}\n","import { IRowElement } from '../../../../../interface/Row'\n\nexport class VideoBlock {\n private element: IRowElement\n protected videoCache: Map<string, HTMLVideoElement>\n\n constructor(element: IRowElement) {\n this.element = element\n this.videoCache = new Map()\n }\n\n public snapshot(ctx: CanvasRenderingContext2D, x: number, y: number) {\n return new Promise((resolve, reject) => {\n const src = this.element.block?.videoBlock?.src || ''\n if (this.videoCache.has(src)) {\n const video = this.videoCache.get(src)!\n ctx.drawImage(\n video,\n x,\n y,\n this.element.metrics.width,\n this.element.metrics.height\n )\n resolve(this.element)\n } else {\n const video = document.createElement('video')\n video.src = src\n video.muted = true\n video.crossOrigin = 'anonymous'\n video.onloadeddata = () => {\n ctx.drawImage(\n video,\n x,\n y,\n this.element.metrics.width,\n this.element.metrics.height\n )\n this.videoCache.set(src, video)\n resolve(this.element)\n }\n video.onerror = error => {\n reject(error)\n }\n video.play().then(() => {\n video.pause()\n })\n }\n })\n }\n\n public render(blockItemContainer: HTMLDivElement) {\n const block = this.element.block!\n const video = document.createElement('video')\n video.style.width = '100%'\n video.style.height = '100%'\n video.style.objectFit = 'contain'\n video.src = block.videoBlock?.src || ''\n video.controls = true\n blockItemContainer.append(video)\n }\n}\n","import { EDITOR_PREFIX } from '../../../../../dataset/constant/Editor'\nimport { BlockType } from '../../../../../dataset/enum/Block'\nimport { IEditorOption } from '../../../../../interface/Editor'\nimport { IRowElement } from '../../../../../interface/Row'\nimport { Draw } from '../../../Draw'\nimport { BlockParticle } from '../BlockParticle'\nimport { IFrameBlock } from './IFrameBlock'\nimport { VideoBlock } from './VideoBlock'\n\nexport class BaseBlock {\n private draw: Draw\n private options: Required<IEditorOption>\n private element: IRowElement\n private block: IFrameBlock | VideoBlock | null\n private blockContainer: HTMLDivElement\n private blockItem: HTMLDivElement\n protected blockCache: Map<string, IFrameBlock | VideoBlock>\n private resizerMask: HTMLDivElement\n private resizerSelection: HTMLDivElement\n private resizerHandleList: HTMLDivElement[]\n private width: number\n private height: number\n private mousedownX: number\n private mousedownY: number\n private curHandleIndex: number\n private isAllowResize: boolean\n\n constructor(blockParticle: BlockParticle, element: IRowElement) {\n this.draw = blockParticle.getDraw()\n this.options = this.draw.getOptions()\n this.blockContainer = blockParticle.getBlockContainer()\n this.element = element\n this.block = null\n const { blockItem, resizerMask, resizerSelection, resizerHandleList } =\n this._createBlockItem()\n this.blockItem = blockItem\n this.blockContainer.append(this.blockItem)\n this.blockCache = new Map()\n this.resizerMask = resizerMask\n this.resizerSelection = resizerSelection\n this.resizerHandleList = resizerHandleList\n this.width = 0\n this.height = 0\n this.mousedownX = 0\n this.mousedownY = 0\n this.curHandleIndex = 0\n this.isAllowResize = false\n }\n\n public getBlockElement(): IRowElement {\n return this.element\n }\n\n public getBlockWidth(): number {\n return this.element.width || this.element.metrics.width\n }\n\n private _createBlockItem() {\n const { scale, resizerColor } = this.options\n const blockItem = document.createElement('div')\n blockItem.classList.add(`${EDITOR_PREFIX}-block-item`)\n const resizerSelection = document.createElement('div')\n resizerSelection.style.display = 'none'\n resizerSelection.classList.add(`${EDITOR_PREFIX}-resizer-selection`)\n resizerSelection.style.borderColor = resizerColor\n resizerSelection.style.borderWidth = `${scale}px`\n const resizerHandleList: HTMLDivElement[] = []\n for (let i = 0; i < 8; i++) {\n const handleDom = document.createElement('div')\n handleDom.style.background = resizerColor\n handleDom.classList.add(`resizer-handle`)\n handleDom.classList.add(`handle-${i}`)\n handleDom.setAttribute('data-index', String(i))\n handleDom.onmousedown = this._mousedown.bind(this)\n resizerSelection.append(handleDom)\n resizerHandleList.push(handleDom)\n }\n const resizerMask = document.createElement('div')\n resizerMask.classList.add(`${EDITOR_PREFIX}-resizer-mask`)\n resizerMask.style.display = 'none'\n blockItem.append(resizerMask)\n blockItem.onmouseenter = () => {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { width, height } = this.element.metrics\n this._updateResizerRect(width, height)\n resizerSelection.style.display = 'block'\n }\n blockItem.onmouseleave = () => {\n if (this.isAllowResize) return\n resizerSelection.style.display = 'none'\n }\n blockItem.append(resizerSelection)\n return {\n blockItem,\n resizerMask,\n resizerSelection,\n resizerHandleList\n }\n }\n\n private _updateResizerRect(width: number, height: number) {\n const { resizerSize: handleSize, scale } = this.options\n this.resizerSelection.style.width = `${width}px`\n this.resizerSelection.style.height = `${height}px`\n for (let i = 0; i < 8; i++) {\n const left =\n i === 0 || i === 6 || i === 7\n ? -handleSize\n : i === 1 || i === 5\n ? width / 2\n : width - handleSize\n const top =\n i === 0 || i === 1 || i === 2\n ? -handleSize\n : i === 3 || i === 7\n ? height / 2 - handleSize\n : height - handleSize\n this.resizerHandleList[i].style.transform = `scale(${scale})`\n this.resizerHandleList[i].style.left = `${left}px`\n this.resizerHandleList[i].style.top = `${top}px`\n }\n }\n\n private _mousedown(evt: MouseEvent) {\n const canvas = this.draw.getPage()\n this.mousedownX = evt.x\n this.mousedownY = evt.y\n this.isAllowResize = true\n const target = evt.target as HTMLDivElement\n this.curHandleIndex = Number(target.dataset.index)\n this.resizerMask.style.display = 'block'\n const cursor = window.getComputedStyle(target).cursor\n document.body.style.cursor = cursor\n canvas.style.cursor = cursor\n const mousemoveFn = this._mousemove.bind(this)\n document.addEventListener('mousemove', mousemoveFn)\n document.addEventListener(\n 'mouseup',\n () => {\n this.element.width = Math.min(this.width, this.draw.getInnerWidth())\n this.element.height = this.height\n this.isAllowResize = false\n this.resizerSelection.style.display = 'none'\n this.resizerMask.style.display = 'none'\n document.removeEventListener('mousemove', mousemoveFn)\n document.body.style.cursor = ''\n canvas.style.cursor = 'text'\n this.draw.render()\n },\n {\n once: true\n }\n )\n evt.preventDefault()\n }\n\n private _mousemove(evt: MouseEvent) {\n if (!this.isAllowResize) return\n const { scale } = this.options\n let dx = 0\n let dy = 0\n switch (this.curHandleIndex) {\n case 0:\n {\n const offsetX = this.mousedownX - evt.x\n const offsetY = this.mousedownY - evt.y\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.element.height! * dx) / this.getBlockWidth()\n }\n break\n case 1:\n dy = this.mousedownY - evt.y\n break\n case 2:\n {\n const offsetX = evt.x - this.mousedownX\n const offsetY = this.mousedownY - evt.y\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.element.height! * dx) / this.getBlockWidth()\n }\n break\n case 4:\n {\n const offsetX = evt.x - this.mousedownX\n const offsetY = evt.y - this.mousedownY\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.element.height! * dx) / this.getBlockWidth()\n }\n break\n case 3:\n dx = evt.x - this.mousedownX\n break\n case 5:\n dy = evt.y - this.mousedownY\n break\n case 6:\n {\n const offsetX = this.mousedownX - evt.x\n const offsetY = evt.y - this.mousedownY\n dx = Math.cbrt(offsetX ** 3 + offsetY ** 3)\n dy = (this.element.height! * dx) / this.getBlockWidth()\n }\n break\n case 7:\n dx = this.mousedownX - evt.x\n break\n }\n const dw = this.getBlockWidth() + dx / scale\n const dh = this.element.height! + dy / scale\n if (dw <= 0 || dh <= 0) return\n this.width = dw\n this.height = dh\n const elementWidth = dw * scale\n const elementHeight = dh * scale\n this._updateResizerRect(elementWidth, elementHeight)\n this.blockItem.style.width = `${elementWidth}px`\n this.blockItem.style.height = `${elementHeight}px`\n evt.preventDefault()\n }\n\n public snapshot(ctx: CanvasRenderingContext2D, x: number, y: number) {\n const block = this.element.block!\n if (block.type === BlockType.VIDEO) {\n this.blockItem.style.display = 'none'\n if (this.blockCache.has(this.element.id!)) {\n const videoBlock = <VideoBlock>this.blockCache.get(this.element.id!)\n videoBlock.snapshot(ctx, x, y)\n } else {\n this.block = new VideoBlock(this.element)\n const promise = this.block.snapshot(ctx, x, y)\n this.draw.getImageObserver().add(promise)\n this.blockCache.set(this.element.id!, this.block)\n }\n }\n }\n\n public render() {\n const block = this.element.block!\n if (block.type === BlockType.IFRAME) {\n this.block = new IFrameBlock(this.element)\n this.block.render(this.blockItem)\n } else if (block.type === BlockType.VIDEO) {\n this.block = new VideoBlock(this.element)\n this.block.render(this.blockItem)\n }\n }\n\n public setClientRects(pageNo: number, x: number, y: number) {\n const height = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const preY = pageNo * (height + pageGap)\n const { metrics } = this.element\n this.blockItem.style.display = 'block'\n this.blockItem.style.width = `${metrics.width}px`\n this.blockItem.style.height = `${metrics.height}px`\n this.blockItem.style.left = `${x}px`\n this.blockItem.style.top = `${preY + y}px`\n }\n\n public remove() {\n this.blockItem.remove()\n }\n}\n","import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'\nimport { ElementType } from '../../../../dataset/enum/Element'\nimport { IRowElement } from '../../../../interface/Row'\nimport { Draw } from '../../Draw'\nimport { BaseBlock } from './modules/BaseBlock'\n\nexport class BlockParticle {\n private draw: Draw\n private container: HTMLDivElement\n private blockContainer: HTMLDivElement\n private blockMap: Map<string, BaseBlock>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.container = draw.getContainer()\n this.blockMap = new Map()\n this.blockContainer = this._createBlockContainer()\n this.container.append(this.blockContainer)\n }\n\n private _createBlockContainer(): HTMLDivElement {\n const blockContainer = document.createElement('div')\n blockContainer.classList.add(`${EDITOR_PREFIX}-block-container`)\n return blockContainer\n }\n\n public getDraw(): Draw {\n return this.draw\n }\n\n public getBlockContainer(): HTMLDivElement {\n return this.blockContainer\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n pageNo: number,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const id = element.id!\n let cacheBlock = this.blockMap.get(id)\n if (!cacheBlock) {\n cacheBlock = new BaseBlock(this, element)\n cacheBlock.render()\n this.blockMap.set(id, cacheBlock)\n }\n if (this.draw.isPrintMode()) {\n cacheBlock.snapshot(ctx, x, y)\n } else {\n cacheBlock.setClientRects(pageNo, x, y)\n }\n }\n\n public clear() {\n if (!this.blockMap.size) return\n const elementList = this.draw.getOriginalMainElementList()\n const blockElementIds: string[] = []\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.BLOCK) {\n blockElementIds.push(element.id!)\n }\n }\n this.blockMap.forEach(block => {\n const id = block.getBlockElement().id!\n if (!blockElementIds.includes(id)) {\n block.remove()\n this.blockMap.delete(id)\n }\n })\n }\n}\n","{\n \"contextmenu\": {\n \"global\": {\n \"cut\": \"Cut\",\n \"copy\": \"Copy\",\n \"paste\": \"Paste\",\n \"selectAll\": \"Select All\",\n \"print\": \"Print\"\n },\n \"control\": {\n \"delete\": \"Delete Control\"\n },\n \"hyperlink\": {\n \"delete\": \"Delete Hyperlink\",\n \"cancel\": \"Cancel Hyperlink\",\n \"edit\": \"Edit Hyperlink\"\n },\n \"image\": {\n \"change\": \"Change Image\",\n \"saveAs\": \"Save As Image\",\n \"textWrap\": \"Text Wrapping\",\n \"textWrapType\": {\n \"embed\": \"Inline\",\n \"upDown\": \"Top and Bottom\",\n \"surround\": \"Square\",\n \"floatTop\": \"Float Over Text\",\n \"floatBottom\": \"Float Below Text\"\n }\n },\n \"table\": {\n \"insertRowCol\": \"Insert Row/Column\",\n \"insertTopRow\": \"Insert Row Above\",\n \"insertBottomRow\": \"Insert Row Below\",\n \"insertLeftCol\": \"Insert Column Left\",\n \"insertRightCol\": \"Insert Column Right\",\n \"deleteRowCol\": \"Delete Row/Column\",\n \"deleteRow\": \"Delete Row\",\n \"deleteCol\": \"Delete Column\",\n \"deleteTable\": \"Delete Table\",\n \"mergeCell\": \"Merge Cells\",\n \"mergeCancelCell\": \"Cancel Merge\",\n \"verticalAlign\": \"Vertical Alignment\",\n \"verticalAlignTop\": \"Align Top\",\n \"verticalAlignMiddle\": \"Align Middle\",\n \"verticalAlignBottom\": \"Align Bottom\",\n \"border\": \"Table Border\",\n \"borderAll\": \"All Borders\",\n \"borderEmpty\": \"No Border\",\n \"borderDash\": \"Dashed Border\",\n \"borderExternal\": \"Outer Border\",\n \"borderInternal\": \"Inner Border\",\n \"borderTd\": \"Cell Border\",\n \"borderTdTop\": \"Top Border\",\n \"borderTdRight\": \"Right Border\",\n \"borderTdBottom\": \"Bottom Border\",\n \"borderTdLeft\": \"Left Border\",\n \"borderTdForward\": \"Forward Slash\",\n \"borderTdBack\": \"Back Slash\"\n }\n },\n \"datePicker\": {\n \"now\": \"Now\",\n \"confirm\": \"Confirm\",\n \"return\": \"Return Date\",\n \"timeSelect\": \"Time Select\",\n \"weeks\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"year\": \"Year\",\n \"month\": \"Month\",\n \"hour\": \"Hour\",\n \"minute\": \"Minute\",\n \"second\": \"Second\"\n },\n \"frame\": {\n \"header\": \"Header\",\n \"footer\": \"Footer\"\n },\n \"pageBreak\": {\n \"displayName\": \"Page Break\"\n },\n \"zone\": {\n \"headerTip\": \"Double-click to edit header\",\n \"footerTip\": \"Double-click to edit footer\"\n }\n}\n","{\n \"contextmenu\": {\n \"global\": {\n \"cut\": \"Cut\",\n \"copy\": \"Copy\",\n \"paste\": \"Paste\",\n \"selectAll\": \"Select all\",\n \"print\": \"Print\"\n },\n \"control\": {\n \"delete\": \"Delete control\"\n },\n \"hyperlink\": {\n \"delete\": \"Delete hyperlink\",\n \"cancel\": \"Cancel hyperlink\",\n \"edit\": \"Edit hyperlink\"\n },\n \"image\": {\n \"change\": \"Change image\",\n \"saveAs\": \"Save as image\",\n \"textWrap\": \"Text wrap\",\n \"textWrapType\": {\n \"embed\": \"Embed\",\n \"upDown\": \"Up down\",\n \"surround\": \"Surround\",\n \"floatTop\": \"Float above text\",\n \"floatBottom\": \"Float below text\"\n }\n },\n \"table\": {\n \"insertRowCol\": \"Insert row col\",\n \"insertTopRow\": \"Insert top 1 row\",\n \"insertBottomRow\": \"Insert bottom 1 row\",\n \"insertLeftCol\": \"Insert left 1 col\",\n \"insertRightCol\": \"Insert right 1 col\",\n \"deleteRowCol\": \"Delete row col\",\n \"deleteRow\": \"Delete 1 row\",\n \"deleteCol\": \"Delete 1 col\",\n \"deleteTable\": \"Delete table\",\n \"mergeCell\": \"Merge cell\",\n \"mergeCancelCell\": \"Cancel merge cell\",\n \"verticalAlign\": \"Vertical align\",\n \"verticalAlignTop\": \"Top\",\n \"verticalAlignMiddle\": \"Middle\",\n \"verticalAlignBottom\": \"Bottom\",\n \"border\": \"Table border\",\n \"borderAll\": \"All\",\n \"borderEmpty\": \"Empty\",\n \"borderDash\": \"Dash\",\n \"borderExternal\": \"External\",\n \"borderInternal\": \"Internal\",\n \"borderTd\": \"Table cell border\",\n \"borderTdTop\": \"Top\",\n \"borderTdRight\": \"Right\",\n \"borderTdBottom\": \"Bottom\",\n \"borderTdLeft\": \"Left\",\n \"borderTdForward\": \"Forward\",\n \"borderTdBack\": \"Back\"\n }\n },\n \"datePicker\": {\n \"now\": \"Now\",\n \"confirm\": \"Confirm\",\n \"return\": \"Return\",\n \"timeSelect\": \"Time select\",\n \"weeks\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"year\": \" \",\n \"month\": \" \",\n \"hour\": \"Hour\",\n \"minute\": \"Minute\",\n \"second\": \"Second\"\n },\n \"frame\": {\n \"header\": \"Header\",\n \"footer\": \"Footer\"\n },\n \"pageBreak\": {\n \"displayName\": \"Page Break\"\n },\n \"zone\": {\n \"headerTip\": \"Double click to edit header\",\n \"footerTip\": \"Double click to edit footer\"\n }\n}\n","import { ILang } from '../../interface/i18n/I18n'\nimport zhCN from './lang/zh-CN.json'\nimport en from './lang/en.json'\nimport { mergeObject } from '../../utils'\nimport { DeepPartial } from '../../interface/Common'\n\nexport class I18n {\n private currentLocale: string\n\n private langMap: Map<string, ILang> = new Map([\n ['zhCN', zhCN],\n ['en', en]\n ])\n\n constructor(locale: string) {\n this.currentLocale = locale\n }\n\n public registerLangMap(locale: string, lang: DeepPartial<ILang>) {\n const sourceLang = this.langMap.get(locale)\n this.langMap.set(locale, <ILang>mergeObject(sourceLang || zhCN, lang))\n }\n\n public getLocale(): string {\n return this.currentLocale\n }\n\n public setLocale(locale: string) {\n this.currentLocale = locale\n }\n\n public getLang(): ILang {\n return this.langMap.get(this.currentLocale) || zhCN\n }\n\n public t(path: string): string {\n const keyList = path.split('.')\n let value = ''\n let item = this.getLang()\n for (let k = 0; k < keyList.length; k++) {\n const key = keyList[k]\n const currentValue = Reflect.get(item, key)\n if (currentValue) {\n value = item = currentValue\n } else {\n return ''\n }\n }\n return value\n }\n}\n","export class ImageObserver {\n private promiseList: Promise<unknown>[]\n\n constructor() {\n this.promiseList = []\n }\n\n public add(payload: Promise<unknown>) {\n this.promiseList.push(payload)\n }\n\n public clearAll() {\n this.promiseList = []\n }\n\n public allSettled() {\n return Promise.allSettled(this.promiseList)\n }\n}\n","const DPI = 96\nconst CM_PER_INCH = 2.54\nconst PX_PER_CM = DPI / CM_PER_INCH // ≈ 37.795\n\nexport function cmToPx(cm: number): number {\n return Math.round(cm * PX_PER_CM)\n}\n\nexport function pxToCm(px: number): number {\n return Math.round((px / PX_PER_CM) * 100) / 100\n}\n","import { EditorComponent } from '../../dataset/enum/Editor'\nimport { EDITOR_COMPONENT } from '../../dataset/constant/Editor'\nimport './dialog.css'\n\nexport interface IDialogData {\n type: string\n label?: string\n name: string\n value?: string\n options?: { label: string; value: string }[]\n placeholder?: string\n width?: number\n height?: number\n required?: boolean\n step?: string\n}\n\nexport interface IDialogConfirm {\n name: string\n value: string\n}\n\nexport interface IDialogOptions {\n onClose?: () => void\n onCancel?: () => void\n onConfirm?: (payload: IDialogConfirm[]) => void\n title: string\n data: IDialogData[]\n}\n\nexport class Dialog {\n private options: IDialogOptions\n private mask: HTMLDivElement | null\n private container: HTMLDivElement | null\n private inputList: (\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement\n )[]\n\n constructor(options: IDialogOptions) {\n this.options = options\n this.mask = null\n this.container = null\n this.inputList = []\n this._render()\n }\n\n private _render() {\n const { title, data, onClose, onCancel, onConfirm } = this.options\n const mask = document.createElement('div')\n mask.classList.add('dialog-mask')\n mask.setAttribute(EDITOR_COMPONENT, EditorComponent.COMPONENT)\n document.body.append(mask)\n const container = document.createElement('div')\n container.classList.add('dialog-container')\n container.setAttribute(EDITOR_COMPONENT, EditorComponent.COMPONENT)\n const dialogContainer = document.createElement('div')\n dialogContainer.classList.add('dialog')\n container.append(dialogContainer)\n const titleContainer = document.createElement('div')\n titleContainer.classList.add('dialog-title')\n const titleSpan = document.createElement('span')\n titleSpan.append(document.createTextNode(title))\n const titleClose = document.createElement('i')\n titleClose.onclick = () => {\n if (onClose) {\n onClose()\n }\n this._dispose()\n }\n titleContainer.append(titleSpan)\n titleContainer.append(titleClose)\n dialogContainer.append(titleContainer)\n const optionContainer = document.createElement('div')\n optionContainer.classList.add('dialog-option')\n for (let i = 0; i < data.length; i++) {\n const option = data[i]\n const optionItemContainer = document.createElement('div')\n optionItemContainer.classList.add('dialog-option__item')\n if (option.label) {\n const optionName = document.createElement('span')\n optionName.append(document.createTextNode(option.label))\n optionItemContainer.append(optionName)\n if (option.required) {\n optionName.classList.add('dialog-option__item--require')\n }\n }\n let optionInput:\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement\n if (option.type === 'select') {\n optionInput = document.createElement('select')\n option.options?.forEach(item => {\n const optionItem = document.createElement('option')\n optionItem.value = item.value\n optionItem.label = item.label\n optionInput.append(optionItem)\n })\n } else if (option.type === 'textarea') {\n optionInput = document.createElement('textarea')\n } else {\n optionInput = document.createElement('input')\n optionInput.type = option.type\n if (option.step) {\n optionInput.step = option.step\n }\n }\n if (option.width) {\n optionInput.style.width = `${option.width}px`\n }\n if (option.height) {\n optionInput.style.height = `${option.height}px`\n }\n optionInput.name = option.name\n optionInput.value = option.value || ''\n if (!(optionInput instanceof HTMLSelectElement)) {\n optionInput.placeholder = option.placeholder || ''\n }\n optionItemContainer.append(optionInput)\n optionContainer.append(optionItemContainer)\n this.inputList.push(optionInput)\n }\n dialogContainer.append(optionContainer)\n const menuContainer = document.createElement('div')\n menuContainer.classList.add('dialog-menu')\n const cancelBtn = document.createElement('button')\n cancelBtn.classList.add('dialog-menu__cancel')\n cancelBtn.append(document.createTextNode('Cancel'))\n cancelBtn.type = 'button'\n cancelBtn.onclick = () => {\n if (onCancel) {\n onCancel()\n }\n this._dispose()\n }\n menuContainer.append(cancelBtn)\n const confirmBtn = document.createElement('button')\n confirmBtn.append(document.createTextNode('Confirm'))\n confirmBtn.type = 'submit'\n confirmBtn.onclick = () => {\n if (onConfirm) {\n const payload = this.inputList.map<IDialogConfirm>(input => ({\n name: input.name,\n value: input.value\n }))\n onConfirm(payload)\n }\n this._dispose()\n }\n menuContainer.append(confirmBtn)\n dialogContainer.append(menuContainer)\n document.body.append(container)\n this.container = container\n this.mask = mask\n }\n\n private _dispose() {\n this.mask?.remove()\n this.container?.remove()\n }\n}\n","import { EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { EditorZone } from '../../dataset/enum/Editor'\nimport { throttle } from '../../utils'\nimport { Draw } from '../draw/Draw'\nimport { I18n } from '../i18n/I18n'\nimport { Zone } from './Zone'\n\nexport class ZoneTip {\n private draw: Draw\n private zone: Zone\n private i18n: I18n\n private container: HTMLDivElement\n private pageContainer: HTMLDivElement\n\n private isDisableMouseMove: boolean\n private tipContainer: HTMLDivElement\n private tipContent: HTMLSpanElement\n private currentMoveZone: EditorZone | undefined\n\n constructor(draw: Draw, zone: Zone) {\n this.draw = draw\n this.zone = zone\n this.i18n = draw.getI18n()\n this.container = draw.getContainer()\n this.pageContainer = draw.getPageContainer()\n\n const { tipContainer, tipContent } = this._drawZoneTip()\n this.tipContainer = tipContainer\n this.tipContent = tipContent\n this.isDisableMouseMove = true\n this.currentMoveZone = EditorZone.MAIN\n // Always watch both zones so tooltip works even after toggle\n const watchZones: EditorZone[] = [EditorZone.HEADER, EditorZone.FOOTER]\n this._watchMouseMoveZoneChange(watchZones)\n }\n\n private _watchMouseMoveZoneChange(watchZones: EditorZone[]) {\n this.pageContainer.addEventListener(\n 'mousemove',\n throttle((evt: MouseEvent) => {\n if (this.isDisableMouseMove || !this.draw.getIsPagingMode()) return\n if (!evt.offsetY) return\n if (evt.target instanceof HTMLCanvasElement) {\n const mousemoveZone = this.zone.getZoneByY(evt.offsetY)\n if (!watchZones.includes(mousemoveZone)) {\n this._updateZoneTip(false)\n return\n }\n this.currentMoveZone = mousemoveZone\n this._updateZoneTip(\n this.zone.getZone() === EditorZone.MAIN &&\n (mousemoveZone === EditorZone.HEADER ||\n mousemoveZone === EditorZone.FOOTER),\n evt.x,\n evt.y\n )\n } else {\n this._updateZoneTip(false)\n }\n }, 250)\n )\n this.pageContainer.addEventListener('mouseenter', () => {\n this.isDisableMouseMove = false\n })\n this.pageContainer.addEventListener('mouseleave', () => {\n this.isDisableMouseMove = true\n this._updateZoneTip(false)\n })\n }\n\n private _drawZoneTip() {\n const tipContainer = document.createElement('div')\n tipContainer.classList.add(`${EDITOR_PREFIX}-zone-tip`)\n const tipContent = document.createElement('span')\n tipContainer.append(tipContent)\n this.container.append(tipContainer)\n return {\n tipContainer,\n tipContent\n }\n }\n\n private _updateZoneTip(visible: boolean, left?: number, top?: number) {\n if (visible) {\n this.tipContainer.classList.add('show')\n this.tipContainer.style.left = `${left}px`\n this.tipContainer.style.top = `${top}px`\n const options = this.draw.getOptions()\n const isHeader = this.currentMoveZone === EditorZone.HEADER\n const isDisabled = isHeader\n ? options.header.disabled\n : options.footer.disabled\n if (isDisabled) {\n this.tipContent.innerText = `Double click to add ${\n isHeader ? 'header' : 'footer'\n }`\n } else {\n this.tipContent.innerText = this.i18n.t(\n `zone.${isHeader ? 'headerTip' : 'footerTip'}`\n )\n }\n } else {\n this.tipContainer.classList.remove('show')\n }\n }\n}\n","import { cmToPx, pxToCm } from '../../utils/unit'\nimport { EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { EditorZone } from '../../dataset/enum/Editor'\nimport { IEditorOption } from '../../interface/Editor'\nimport { nextTick } from '../../utils'\nimport { Dialog } from '../../components/dialog/Dialog'\nimport { Draw } from '../draw/Draw'\nimport { I18n } from '../i18n/I18n'\nimport { ZoneTip } from './ZoneTip'\n\nexport class Zone {\n private readonly INDICATOR_PADDING = 2\n private readonly INDICATOR_TITLE_TRANSLATE = [20, 5]\n\n private draw: Draw\n private options: Required<IEditorOption>\n private i18n: I18n\n private container: HTMLDivElement\n\n private currentZone: EditorZone\n private indicatorContainer: HTMLDivElement | null\n private dropdownContainer: HTMLDivElement | null\n private dropdownClickHandler: ((e: MouseEvent) => void) | null\n\n constructor(draw: Draw) {\n this.draw = draw\n this.i18n = draw.getI18n()\n this.options = draw.getOptions()\n this.container = draw.getContainer()\n this.currentZone = EditorZone.MAIN\n this.indicatorContainer = null\n this.dropdownContainer = null\n this.dropdownClickHandler = null\n if (!this.options.zone.tipDisabled) {\n new ZoneTip(draw, this)\n }\n }\n\n public isHeaderActive(): boolean {\n return this.getZone() === EditorZone.HEADER\n }\n\n public isMainActive(): boolean {\n return this.getZone() === EditorZone.MAIN\n }\n\n public isFooterActive(): boolean {\n return this.getZone() === EditorZone.FOOTER\n }\n\n public getZone(): EditorZone {\n return this.currentZone\n }\n\n public setZone(payload: EditorZone) {\n const { header, footer } = this.options\n if (\n (!header.editable && payload === EditorZone.HEADER) ||\n (!footer.editable && payload === EditorZone.FOOTER)\n ) {\n return\n }\n // Auto-enable header/footer when disabled\n let needsCompute = false\n if (payload === EditorZone.HEADER && header.disabled) {\n header.disabled = false\n needsCompute = true\n }\n if (payload === EditorZone.FOOTER && footer.disabled) {\n footer.disabled = false\n needsCompute = true\n }\n if (this.currentZone === payload && !needsCompute) return\n this.currentZone = payload\n this.draw.getRange().clearRange()\n this.draw.render({\n isSubmitHistory: false,\n isSetCursor: false,\n isCompute: needsCompute\n })\n this.drawZoneIndicator()\n nextTick(() => {\n const listener = this.draw.getListener()\n if (listener.zoneChange) {\n listener.zoneChange(payload)\n }\n const eventBus = this.draw.getEventBus()\n if (eventBus.isSubscribe('zoneChange')) {\n eventBus.emit('zoneChange', payload)\n }\n })\n }\n\n public getZoneByY(y: number): EditorZone {\n const header = this.draw.getHeader()\n const headerBottomY = header.getEffectiveBottomY()\n const footer = this.draw.getFooter()\n const footerTopY = footer.getEffectiveTopY()\n if (y < headerBottomY) {\n return EditorZone.HEADER\n }\n if (y > footerTopY) {\n return EditorZone.FOOTER\n }\n return EditorZone.MAIN\n }\n\n public drawZoneIndicator() {\n this._clearZoneIndicator()\n if (!this.isHeaderActive() && !this.isFooterActive()) return\n const { scale } = this.options\n const isHeaderActive = this.isHeaderActive()\n const pageList = this.draw.getPageList()\n const margins = this.draw.getMargins()\n const innerWidth = this.draw.getInnerWidth()\n const pageWidth = this.draw.getWidth()\n const pageHeight = this.draw.getHeight()\n const pageGap = this.draw.getPageGap()\n const preY = pageHeight + pageGap\n this.indicatorContainer = document.createElement('div')\n this.indicatorContainer.classList.add(`${EDITOR_PREFIX}-zone-indicator`)\n const header = this.draw.getHeader()\n const footer = this.draw.getFooter()\n const indicatorHeight = isHeaderActive\n ? header.getEffectiveBottomY()\n : pageHeight - footer.getEffectiveTopY()\n const indicatorTop = isHeaderActive\n ? 0\n : footer.getEffectiveTopY()\n for (let p = 0; p < pageList.length; p++) {\n const startY = preY * p + indicatorTop\n const indicatorLeftX = margins[3]\n const indicatorRightX = margins[3] + innerWidth\n const indicatorTopY = isHeaderActive\n ? startY\n : startY + indicatorHeight\n const indicatorBottomY = isHeaderActive\n ? startY + indicatorHeight\n : startY\n\n // Full-width bar (Google Docs style)\n const BAR_HEIGHT = 28\n const bar = document.createElement('div')\n bar.classList.add(`${EDITOR_PREFIX}-zone-indicator-bar`)\n const barTop = isHeaderActive\n ? indicatorBottomY\n : indicatorBottomY - BAR_HEIGHT\n bar.style.top = `${barTop}px`\n bar.style.left = '0px'\n bar.style.width = `${pageWidth}px`\n // Prevent focus loss and event propagation to canvas\n bar.onmousedown = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n const label = document.createElement('span')\n label.classList.add(`${EDITOR_PREFIX}-zone-indicator-bar__label`)\n label.textContent = this.i18n.t(\n `frame.${isHeaderActive ? 'header' : 'footer'}`\n )\n bar.append(label)\n\n const optionsBtn = document.createElement('span')\n optionsBtn.classList.add(`${EDITOR_PREFIX}-zone-indicator-bar__options`)\n optionsBtn.textContent = 'Options \\u25BE'\n optionsBtn.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._toggleDropdown(optionsBtn, isHeaderActive)\n }\n bar.append(optionsBtn)\n\n this.indicatorContainer.append(bar)\n\n // Only draw border lines when header/footer is not disabled\n const isZoneDisabled = isHeaderActive\n ? this.options.header.disabled\n : this.options.footer.disabled\n if (!isZoneDisabled) {\n const lineTop = document.createElement('span')\n lineTop.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__top`)\n lineTop.style.top = `${indicatorTopY}px`\n lineTop.style.width = `${innerWidth}px`\n lineTop.style.marginLeft = `${margins[3]}px`\n this.indicatorContainer.append(lineTop)\n\n const lineLeft = document.createElement('span')\n lineLeft.classList.add(`${EDITOR_PREFIX}-zone-indicator-border__left`)\n lineLeft.style.top = `${startY}px`\n lineLeft.style.height = `${indicatorHeight}px`\n lineLeft.style.left = `${indicatorLeftX}px`\n this.indicatorContainer.append(lineLeft)\n\n const lineBottom = document.createElement('span')\n lineBottom.classList.add(\n `${EDITOR_PREFIX}-zone-indicator-border__bottom`\n )\n lineBottom.style.top = `${indicatorBottomY}px`\n this.indicatorContainer.append(lineBottom)\n\n const lineRight = document.createElement('span')\n lineRight.classList.add(\n `${EDITOR_PREFIX}-zone-indicator-border__right`\n )\n lineRight.style.top = `${startY}px`\n lineRight.style.height = `${indicatorHeight}px`\n lineRight.style.left = `${indicatorRightX}px`\n this.indicatorContainer.append(lineRight)\n }\n }\n this.container.append(this.indicatorContainer)\n }\n\n private _toggleDropdown(anchor: HTMLElement, isHeaderActive: boolean) {\n this._closeDropdown()\n\n const dropdown = document.createElement('div')\n dropdown.classList.add(`${EDITOR_PREFIX}-zone-indicator-dropdown`)\n\n const { header, footer } = this.options\n const isDisabled = isHeaderActive ? header.disabled : footer.disabled\n\n if (isDisabled) {\n // Show \"Add Header/Footer\" when disabled\n const addItem = document.createElement('div')\n addItem.classList.add(`${EDITOR_PREFIX}-zone-indicator-dropdown__item`)\n addItem.textContent = isHeaderActive ? 'Add Header' : 'Add Footer'\n addItem.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._closeDropdown()\n if (isHeaderActive) {\n this.options.header.disabled = false\n } else {\n this.options.footer.disabled = false\n }\n this.draw.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n this.drawZoneIndicator()\n }\n dropdown.append(addItem)\n } else {\n // Show \"Format\" + \"Remove\" when enabled\n const formatItem = document.createElement('div')\n formatItem.classList.add(`${EDITOR_PREFIX}-zone-indicator-dropdown__item`)\n formatItem.textContent = isHeaderActive ? 'Header Format' : 'Footer Format'\n formatItem.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._closeDropdown()\n this._openFormatDialog()\n }\n dropdown.append(formatItem)\n\n const separator = document.createElement('div')\n separator.classList.add(\n `${EDITOR_PREFIX}-zone-indicator-dropdown__separator`\n )\n dropdown.append(separator)\n\n const removeItem = document.createElement('div')\n removeItem.classList.add(`${EDITOR_PREFIX}-zone-indicator-dropdown__item`)\n removeItem.textContent = isHeaderActive\n ? 'Remove Header'\n : 'Remove Footer'\n removeItem.onclick = (e: MouseEvent) => {\n e.stopPropagation()\n this._closeDropdown()\n if (isHeaderActive) {\n this.options.header.disabled = true\n } else {\n this.options.footer.disabled = true\n }\n this.currentZone = EditorZone.MAIN\n this._clearZoneIndicator()\n this.draw.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n nextTick(() => {\n const listener = this.draw.getListener()\n if (listener.zoneChange) {\n listener.zoneChange(EditorZone.MAIN)\n }\n const eventBus = this.draw.getEventBus()\n if (eventBus.isSubscribe('zoneChange')) {\n eventBus.emit('zoneChange', EditorZone.MAIN)\n }\n })\n }\n dropdown.append(removeItem)\n }\n\n document.body.append(dropdown)\n this.dropdownContainer = dropdown\n\n // Position dropdown below the anchor button\n const rect = anchor.getBoundingClientRect()\n const dropdownWidth = dropdown.getBoundingClientRect().width\n let left = rect.right - dropdownWidth\n if (left < 0) left = rect.left\n dropdown.style.left = `${left}px`\n dropdown.style.top = `${rect.bottom + 2}px`\n\n // Close on outside click\n this.dropdownClickHandler = (e: MouseEvent) => {\n if (!dropdown.contains(e.target as Node)) {\n this._closeDropdown()\n }\n }\n setTimeout(() => {\n document.addEventListener('click', this.dropdownClickHandler!)\n }, 0)\n }\n\n private _closeDropdown() {\n if (this.dropdownContainer) {\n this.dropdownContainer.remove()\n this.dropdownContainer = null\n }\n if (this.dropdownClickHandler) {\n document.removeEventListener('click', this.dropdownClickHandler)\n this.dropdownClickHandler = null\n }\n }\n\n private _openFormatDialog() {\n const options = this.draw.getOptions()\n new Dialog({\n title: 'Header & Footer',\n data: [\n {\n type: 'number',\n label: 'Header (cm from top)',\n name: 'headerTop',\n value: String(pxToCm(options.header.top)),\n step: '0.01'\n },\n {\n type: 'number',\n label: 'Footer (cm from bottom)',\n name: 'footerBottom',\n value: String(pxToCm(options.footer.bottom)),\n step: '0.01'\n },\n {\n type: 'color',\n label: 'Footer Background Color',\n name: 'footerBgColor',\n value: options.footer.backgroundColor || '#ffffff'\n }\n ],\n onConfirm: (payload) => {\n const headerTop = payload.find(p => p.name === 'headerTop')\n const footerBottom = payload.find(p => p.name === 'footerBottom')\n const footerBgColor = payload.find(p => p.name === 'footerBgColor')\n const newHeaderTop = cmToPx(Number(headerTop?.value ?? 0))\n const newFooterBottom = cmToPx(Number(footerBottom?.value ?? 0))\n options.header.top = Math.max(0, newHeaderTop)\n options.footer.bottom = Math.max(0, newFooterBottom)\n options.footer.backgroundColor = footerBgColor?.value || ''\n this.draw.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n this.drawZoneIndicator()\n }\n })\n }\n\n private _clearZoneIndicator() {\n this._closeDropdown()\n this.indicatorContainer?.remove()\n this.indicatorContainer = null\n }\n}\n","import { maxHeightRadioMapping } from '../../../dataset/constant/Common'\nimport { EditorZone } from '../../../dataset/enum/Editor'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../interface/Element'\nimport { IRow } from '../../../interface/Row'\nimport { Position } from '../../position/Position'\nimport { Zone } from '../../zone/Zone'\nimport { Draw } from '../Draw'\n\nexport class Footer {\n private readonly MIN_BAR_HEIGHT = 29\n\n private draw: Draw\n private position: Position\n private zone: Zone\n private options: DeepRequired<IEditorOption>\n\n private elementList: IElement[]\n private rowList: IRow[]\n private positionList: IElementPosition[]\n\n constructor(draw: Draw, data?: IElement[]) {\n this.draw = draw\n this.position = draw.getPosition()\n this.zone = draw.getZone()\n this.options = draw.getOptions()\n\n this.elementList = data || []\n this.rowList = []\n this.positionList = []\n }\n\n public getRowList(): IRow[] {\n return this.rowList\n }\n\n public setElementList(elementList: IElement[]) {\n this.elementList = elementList\n }\n\n public getElementList(): IElement[] {\n return this.elementList\n }\n\n public getPositionList(): IElementPosition[] {\n return this.positionList\n }\n\n public compute() {\n this.recovery()\n this._computeRowList()\n this._computePositionList()\n }\n\n public recovery() {\n this.rowList = []\n this.positionList = []\n }\n\n private _computeRowList() {\n const innerWidth = this.draw.getInnerWidth()\n this.rowList = this.draw.computeRowList({\n innerWidth,\n elementList: this.elementList\n })\n }\n\n private _computePositionList() {\n const footerBottom = this.getFooterBottom()\n const innerWidth = this.draw.getInnerWidth()\n const margins = this.draw.getMargins()\n const startX = margins[3]\n const pageHeight = this.draw.getHeight()\n const barHeight = this.getHeight()\n const contentHeight = this.getRowHeight()\n const paddingY = Math.max(0, (barHeight - contentHeight) / 2)\n const startY = pageHeight - footerBottom - barHeight + Math.floor(paddingY)\n this.position.computePageRowPosition({\n positionList: this.positionList,\n rowList: this.rowList,\n pageNo: 0,\n startRowIndex: 0,\n startIndex: 0,\n startX,\n startY,\n innerWidth,\n zone: EditorZone.FOOTER\n })\n }\n\n public getFooterBottom(): number {\n const {\n footer: { bottom, disabled },\n scale\n } = this.options\n if (disabled) return 0\n return Math.floor(bottom * scale)\n }\n\n public getMaxHeight(): number {\n const {\n footer: { maxHeightRadio }\n } = this.options\n const height = this.draw.getHeight()\n return Math.floor(height * maxHeightRadioMapping[maxHeightRadio])\n }\n\n public getHeight(): number {\n if (this.options.footer.disabled) return 0\n const maxHeight = this.getMaxHeight()\n const rowHeight = this.getRowHeight()\n const { scale } = this.options\n const minHeight = this.MIN_BAR_HEIGHT * scale\n const height = Math.max(rowHeight, minHeight)\n return height > maxHeight ? maxHeight : height\n }\n\n public getRowHeight(): number {\n return this.rowList.reduce((pre, cur) => pre + cur.height, 0)\n }\n\n // Footer area extends at least to the bottom margin line\n public getEffectiveTopY(): number {\n const margins = this.draw.getMargins()\n const pageHeight = this.draw.getHeight()\n const contentTopY = pageHeight - this.getFooterBottom() - this.getHeight()\n const marginTopY = pageHeight - margins[2]\n return Math.min(contentTopY, marginTopY)\n }\n\n public getExtraHeight(): number {\n const margins = this.draw.getMargins()\n const footerHeight = this.getHeight()\n const footerBottom = this.getFooterBottom()\n const extraHeight = footerBottom + footerHeight - margins[2]\n return extraHeight <= 0 ? 0 : extraHeight\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n ctx.save()\n ctx.globalAlpha = this.zone.isFooterActive()\n ? 1\n : this.options.footer.inactiveAlpha\n const innerWidth = this.draw.getInnerWidth()\n const maxHeight = this.getMaxHeight()\n const rowList: IRow[] = []\n let curRowHeight = 0\n for (let r = 0; r < this.rowList.length; r++) {\n const row = this.rowList[r]\n if (curRowHeight + row.height > maxHeight) {\n break\n }\n rowList.push(row)\n curRowHeight += row.height\n }\n // Draw background color if configured\n const { backgroundColor } = this.options.footer\n if (backgroundColor) {\n const width = this.draw.getWidth()\n const pageHeight = this.draw.getHeight()\n const footerBottom = this.getFooterBottom()\n const barHeight = this.getHeight()\n const bgY = pageHeight - footerBottom - barHeight\n ctx.fillStyle = backgroundColor\n ctx.fillRect(0, bgY, width, barHeight)\n }\n this.draw.drawRow(ctx, {\n elementList: this.elementList,\n positionList: this.positionList,\n rowList,\n pageNo,\n startIndex: 0,\n innerWidth,\n zone: EditorZone.FOOTER\n })\n ctx.restore()\n }\n}\n","import { ZERO } from '../../../dataset/constant/Common'\nimport {\n ulStyleMapping,\n olPresetCycles,\n ulPresetCycles,\n INDENT_PER_LEVEL,\n MAX_LIST_LEVEL\n} from '../../../dataset/constant/List'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { KeyMap } from '../../../dataset/enum/KeyMap'\nimport {\n ListStyle,\n ListType,\n OlPreset,\n UlPreset,\n UlStyle\n} from '../../../dataset/enum/List'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementPosition } from '../../../interface/Element'\nimport { IRow, IRowElement } from '../../../interface/Row'\nimport { getUUID } from '../../../utils'\nimport { RangeManager } from '../../range/RangeManager'\nimport { Draw } from '../Draw'\n\nfunction toAlpha(n: number, upper: boolean): string {\n let result = ''\n let num = n + 1\n while (num > 0) {\n num--\n result = String.fromCharCode((upper ? 65 : 97) + (num % 26)) + result\n num = Math.floor(num / 26)\n }\n return result\n}\n\nfunction toRoman(n: number, upper: boolean): string {\n const num = n + 1\n const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]\n const syms = [\n 'M',\n 'CM',\n 'D',\n 'CD',\n 'C',\n 'XC',\n 'L',\n 'XL',\n 'X',\n 'IX',\n 'V',\n 'IV',\n 'I'\n ]\n let result = ''\n let remaining = num\n for (let i = 0; i < vals.length; i++) {\n while (remaining >= vals[i]) {\n result += syms[i]\n remaining -= vals[i]\n }\n }\n return upper ? result : result.toLowerCase()\n}\n\nfunction formatOlNumber(\n index: number,\n style: string,\n _outlinePrefix?: string\n): string {\n switch (style) {\n case 'decimal':\n return `${index + 1}.`\n case 'decimalParen':\n return `${index + 1})`\n case 'decimalZero':\n return `${String(index + 1).padStart(2, '0')}.`\n case 'lowerAlpha':\n return `${toAlpha(index, false)}.`\n case 'lowerAlphaParen':\n return `${toAlpha(index, false)})`\n case 'upperAlpha':\n return `${toAlpha(index, true)}.`\n case 'lowerRoman':\n return `${toRoman(index, false)}.`\n case 'lowerRomanParen':\n return `${toRoman(index, false)})`\n case 'upperRoman':\n return `${toRoman(index, true)}.`\n case 'outline':\n return _outlinePrefix ? `${_outlinePrefix}.` : `${index + 1}.`\n default:\n return `${index + 1}.`\n }\n}\n\nexport class ListParticle {\n private draw: Draw\n private range: RangeManager\n private options: DeepRequired<IEditorOption>\n\n private readonly UN_COUNT_STYLE_WIDTH = 20\n private readonly MEASURE_BASE_TEXT = '0'\n private readonly LIST_GAP = 10\n\n constructor(draw: Draw) {\n this.draw = draw\n this.range = draw.getRange()\n this.options = draw.getOptions()\n }\n\n public setList(listType: ListType | null, listStyle?: ListStyle) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const changeElementList = this.range.getRangeParagraphElementList()\n if (!changeElementList || !changeElementList.length) return\n const isUnsetList = changeElementList.find(\n el => el.listType === listType && el.listStyle === listStyle\n )\n if (isUnsetList || !listType) {\n this.unsetList()\n return\n }\n const listId = getUUID()\n changeElementList.forEach(el => {\n el.listId = listId\n el.listType = listType\n el.listStyle = listStyle\n if (el.listLevel === undefined) {\n el.listLevel = 0\n }\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public setListWithPreset(\n listType: ListType,\n listStyle: ListStyle,\n preset: string\n ) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const changeElementList = this.range.getRangeParagraphElementList()\n if (!changeElementList || !changeElementList.length) return\n const isUnsetList = changeElementList.find(\n el =>\n el.listType === listType &&\n el.listStyle === listStyle &&\n el.listPreset === preset\n )\n if (isUnsetList) {\n this.unsetList()\n return\n }\n const listId = getUUID()\n changeElementList.forEach(el => {\n el.listId = listId\n el.listType = listType\n el.listStyle = listStyle\n el.listPreset = preset\n if (el.listLevel === undefined) {\n el.listLevel = 0\n }\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public indent() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const elementList = this.draw.getElementList()\n const curElement = elementList[endIndex]\n if (!curElement?.listId) return\n const changeElementList = this.range.getRangeParagraphElementList()\n if (!changeElementList || !changeElementList.length) return\n const currentLevel = changeElementList[0].listLevel ?? 0\n if (currentLevel >= MAX_LIST_LEVEL) return\n changeElementList.forEach(el => {\n el.listLevel = (el.listLevel ?? 0) + 1\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public outdent() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const elementList = this.draw.getElementList()\n const curElement = elementList[endIndex]\n if (!curElement?.listId) return\n const changeElementList = this.range.getRangeParagraphElementList()\n if (!changeElementList || !changeElementList.length) return\n const currentLevel = changeElementList[0].listLevel ?? 0\n if (currentLevel <= 0) return\n changeElementList.forEach(el => {\n el.listLevel = (el.listLevel ?? 0) - 1\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public unsetList() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const changeElementList = this.range\n .getRangeParagraphElementList()\n ?.filter(el => el.listId)\n if (!changeElementList || !changeElementList.length) return\n const elementList = this.draw.getElementList()\n const endElement = elementList[endIndex]\n if (endElement.listId) {\n let start = endIndex + 1\n while (start < elementList.length) {\n const element = elementList[start]\n if (element.value === ZERO && !element.listWrap) break\n if (element.listId !== endElement.listId) {\n this.draw.spliceElementList(elementList, start, 0, [\n {\n value: ZERO\n }\n ])\n break\n }\n start++\n }\n }\n changeElementList.forEach(el => {\n delete el.listId\n delete el.listType\n delete el.listStyle\n delete el.listWrap\n delete el.listLevel\n delete el.listPreset\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public getListIndentWidth(element: IElement): number {\n const { scale } = this.options\n const level = element.listLevel ?? 0\n return level * INDENT_PER_LEVEL * scale\n }\n\n public computeListStyle(\n ctx: CanvasRenderingContext2D,\n elementList: IElement[]\n ): Map<string, number> {\n const listStyleMap = new Map<string, number>()\n let start = 0\n let curListId = elementList[start].listId\n let curElementList: IElement[] = []\n const elementLength = elementList.length\n while (start < elementLength) {\n const curElement = elementList[start]\n if (curListId && curListId === curElement.listId) {\n curElementList.push(curElement)\n } else {\n if (curElement.listId && curElement.listId !== curListId) {\n if (curElementList.length) {\n const width = this.getListStyleWidth(ctx, curElementList)\n listStyleMap.set(curListId!, width)\n }\n curListId = curElement.listId\n curElementList = curListId ? [curElement] : []\n }\n }\n start++\n }\n if (curElementList.length) {\n const width = this.getListStyleWidth(ctx, curElementList)\n listStyleMap.set(curListId!, width)\n }\n return listStyleMap\n }\n\n public getListStyleWidth(\n ctx: CanvasRenderingContext2D,\n listElementList: IElement[]\n ): number {\n const { scale, checkbox } = this.options\n const startElement = listElementList[0]\n if (\n startElement.listStyle &&\n startElement.listStyle !== ListStyle.DECIMAL\n ) {\n if (startElement.listStyle === ListStyle.CHECKBOX) {\n return (checkbox.width + this.LIST_GAP) * scale\n }\n return this.UN_COUNT_STYLE_WIDTH * scale\n }\n const count = listElementList.reduce((pre, cur) => {\n if (cur.value === ZERO) {\n pre += 1\n }\n return pre\n }, 0)\n if (!count) return 0\n const text = `${this.MEASURE_BASE_TEXT.repeat(String(count).length)}${\n KeyMap.PERIOD\n }`\n const textMetrics = ctx.measureText(text)\n return Math.ceil((textMetrics.width + this.LIST_GAP) * scale)\n }\n\n private _getOlStyleForLevel(element: IElement): string {\n const preset = element.listPreset || OlPreset.DEFAULT\n const level = element.listLevel ?? 0\n const cycle = olPresetCycles[preset]\n if (!cycle) return 'decimal'\n return cycle[level % cycle.length]\n }\n\n private _getUlBulletForLevel(element: IElement): string {\n const preset = element.listPreset || UlPreset.DEFAULT\n const level = element.listLevel ?? 0\n const cycle = ulPresetCycles[preset]\n if (!cycle) return '●'\n return cycle[level % cycle.length]\n }\n\n public drawListStyle(\n ctx: CanvasRenderingContext2D,\n row: IRow,\n position: IElementPosition\n ) {\n const { elementList, offsetX, listIndex, ascent } = row\n const startElement = elementList[0]\n if (startElement.value !== ZERO || startElement.listWrap) return\n // tab width\n let tabWidth = 0\n const { defaultTabWidth, scale, defaultFont, defaultSize } = this.options\n for (let i = 1; i < elementList.length; i++) {\n const element = elementList[i]\n if (element?.type !== ElementType.TAB) break\n tabWidth += defaultTabWidth * scale\n }\n const {\n coordinate: {\n leftTop: [startX, startY]\n }\n } = position\n // Add indent for nested lists\n const indentWidth = this.getListIndentWidth(startElement)\n const x = startX - offsetX! + tabWidth + indentWidth\n const y = startY + ascent\n if (startElement.listStyle === ListStyle.CHECKBOX) {\n const { width, height, gap } = this.options.checkbox\n const checkboxRowElement: IRowElement = {\n ...startElement,\n checkbox: {\n value: !!startElement.checkbox?.value\n },\n metrics: {\n ...startElement.metrics,\n width: (width + gap * 2) * scale,\n height: height * scale\n }\n }\n this.draw.getCheckboxParticle().render({\n ctx,\n x: x - gap * scale,\n y,\n index: 0,\n row: {\n ...row,\n elementList: [checkboxRowElement, ...row.elementList]\n }\n })\n } else {\n let text = ''\n if (startElement.listType === ListType.UL) {\n // Use preset cycling for UL if available\n if (startElement.listPreset) {\n text = this._getUlBulletForLevel(startElement)\n } else {\n text =\n ulStyleMapping[<UlStyle>(<unknown>startElement.listStyle)] ||\n ulStyleMapping[UlStyle.DISC]\n }\n } else {\n // OL: use preset cycling if available\n if (startElement.listPreset) {\n const olStyle = this._getOlStyleForLevel(startElement)\n text = formatOlNumber(listIndex!, olStyle)\n } else {\n text = `${listIndex! + 1}${KeyMap.PERIOD}`\n }\n }\n if (!text) return\n ctx.save()\n ctx.font = `${defaultSize * scale}px ${defaultFont}`\n ctx.fillText(text, x, y)\n ctx.restore()\n }\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class LineBreakParticle {\n private options: DeepRequired<IEditorOption>\n public static readonly WIDTH = 12\n public static readonly HEIGHT = 9\n public static readonly GAP = 3\n\n constructor(draw: Draw) {\n this.options = draw.getOptions()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const {\n scale,\n lineBreak: { color, lineWidth }\n } = this.options\n ctx.save()\n ctx.beginPath()\n const top = y - (LineBreakParticle.HEIGHT * scale) / 2\n const left = x + element.metrics.width\n ctx.translate(left, top)\n ctx.scale(scale, scale)\n ctx.strokeStyle = color\n ctx.lineWidth = lineWidth\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n ctx.beginPath()\n ctx.moveTo(8, 0)\n ctx.lineTo(12, 0)\n ctx.lineTo(12, 6)\n ctx.lineTo(3, 6)\n ctx.moveTo(3, 6)\n ctx.lineTo(6, 3)\n ctx.moveTo(3, 6)\n ctx.lineTo(6, 9)\n ctx.stroke()\n ctx.closePath()\n ctx.restore()\n }\n}\n","import { IEditorOption, IElement } from '../../..'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IElementPosition } from '../../../interface/Element'\nimport { IPlaceholder } from '../../../interface/Placeholder'\nimport { IRow } from '../../../interface/Row'\nimport { formatElementList } from '../../../utils/element'\nimport { Position } from '../../position/Position'\nimport { Draw } from '../Draw'\nimport { LineBreakParticle } from '../particle/LineBreakParticle'\n\nexport interface IPlaceholderRenderOption {\n placeholder: Required<IPlaceholder>\n startY?: number\n}\n\nexport class Placeholder {\n private draw: Draw\n private position: Position\n private options: DeepRequired<IEditorOption>\n\n private elementList: IElement[]\n private rowList: IRow[]\n private positionList: IElementPosition[]\n\n constructor(draw: Draw) {\n this.draw = draw\n this.position = draw.getPosition()\n this.options = <DeepRequired<IEditorOption>>draw.getOptions()\n\n this.elementList = []\n this.rowList = []\n this.positionList = []\n }\n\n private _recovery() {\n this.elementList = []\n this.rowList = []\n this.positionList = []\n }\n\n public _compute(options?: IPlaceholderRenderOption) {\n this._computeRowList()\n this._computePositionList(options)\n }\n\n private _computeRowList() {\n const innerWidth = this.draw.getInnerWidth()\n this.rowList = this.draw.computeRowList({\n innerWidth,\n elementList: this.elementList\n })\n }\n\n private _computePositionList(options?: IPlaceholderRenderOption) {\n const { lineBreak, scale } = this.options\n const headerExtraHeight = this.draw.getHeader().getExtraHeight()\n const innerWidth = this.draw.getInnerWidth()\n const margins = this.draw.getMargins()\n let startX = margins[3]\n if (!lineBreak.disabled) {\n startX += (LineBreakParticle.WIDTH + LineBreakParticle.GAP) * scale\n }\n const startY = options?.startY || margins[0] + headerExtraHeight\n this.position.computePageRowPosition({\n positionList: this.positionList,\n rowList: this.rowList,\n pageNo: 0,\n startRowIndex: 0,\n startIndex: 0,\n startX,\n startY,\n innerWidth\n })\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n options?: IPlaceholderRenderOption\n ) {\n const { placeholder = this.options.placeholder } = options || {}\n const { data, font, size, color, opacity } = placeholder\n this._recovery()\n this.elementList = [\n {\n value: data,\n font,\n size,\n color\n }\n ]\n formatElementList(this.elementList, {\n editorOptions: this.options,\n isForceCompensation: true\n })\n this._compute(options)\n const innerWidth = this.draw.getInnerWidth()\n ctx.save()\n ctx.globalAlpha = opacity\n this.draw.drawRow(ctx, {\n elementList: this.elementList,\n positionList: this.positionList,\n rowList: this.rowList,\n pageNo: 0,\n startIndex: 0,\n innerWidth,\n isDrawLineBreak: false\n })\n ctx.restore()\n }\n}\n","import { EditorZone } from '../../../dataset/enum/Editor'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IElement, IElementFillRect } from '../../../interface/Element'\nimport { IPositionContext } from '../../../interface/Position'\nimport { IRange } from '../../../interface/Range'\nimport { getUUID } from '../../../utils'\nimport { RangeManager } from '../../range/RangeManager'\nimport { Draw } from '../Draw'\n\nexport class Group {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private range: RangeManager\n private fillRectMap: Map<string, IElementFillRect>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.range = draw.getRange()\n this.fillRectMap = new Map()\n }\n\n public setGroup(): string | null {\n if (\n this.draw.isReadonly() ||\n this.draw.getZone().getZone() !== EditorZone.MAIN\n ) {\n return null\n }\n const selection = this.range.getSelection()\n if (!selection) return null\n const groupId = getUUID()\n selection.forEach(el => {\n if (!Array.isArray(el.groupIds)) {\n el.groupIds = []\n }\n el.groupIds.push(groupId)\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n return groupId\n }\n\n public getElementListByGroupId(\n elementList: IElement[],\n groupId: string\n ): IElement[] {\n const groupElementList: IElement[] = []\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdGroupElementList = this.getElementListByGroupId(\n td.value,\n groupId\n )\n if (tdGroupElementList.length) {\n groupElementList.push(...tdGroupElementList)\n return groupElementList\n }\n }\n }\n }\n if (element?.groupIds?.includes(groupId)) {\n groupElementList.push(element)\n const nextElement = elementList[e + 1]\n if (!nextElement?.groupIds?.includes(groupId)) break\n }\n }\n return groupElementList\n }\n\n public deleteGroup(groupId: string) {\n if (this.draw.isReadonly()) return\n const elementList = this.draw.getOriginalMainElementList()\n const groupElementList = this.getElementListByGroupId(elementList, groupId)\n if (!groupElementList.length) return\n for (let e = 0; e < groupElementList.length; e++) {\n const element = groupElementList[e]\n const groupIds = element.groupIds!\n const groupIndex = groupIds.findIndex(id => id === groupId)\n groupIds.splice(groupIndex, 1)\n if (!groupIds.length) {\n delete element.groupIds\n }\n }\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n }\n\n public getContextByGroupId(\n elementList: IElement[],\n groupId: string\n ): (IRange & IPositionContext) | null {\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const range = this.getContextByGroupId(td.value, groupId)\n if (range) {\n return {\n ...range,\n isTable: true,\n index: e,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: element.tableId\n }\n }\n }\n }\n }\n const nextElement = elementList[e + 1]\n if (\n element.groupIds?.includes(groupId) &&\n !nextElement?.groupIds?.includes(groupId)\n ) {\n return {\n isTable: false,\n startIndex: e,\n endIndex: e\n }\n }\n }\n return null\n }\n\n public clearFillInfo() {\n this.fillRectMap.clear()\n }\n\n public recordFillInfo(\n element: IElement,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const groupIds = element.groupIds\n if (!groupIds) return\n for (const groupId of groupIds) {\n const fillRect = this.fillRectMap.get(groupId)\n if (!fillRect) {\n this.fillRectMap.set(groupId, {\n x,\n y,\n width,\n height\n })\n } else {\n fillRect.width += width\n }\n }\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n if (!this.fillRectMap.size) return\n const range = this.range.getRange()\n const elementList = this.draw.getElementList()\n const anchorGroupIds = elementList[range.endIndex]?.groupIds\n const {\n group: { backgroundColor, opacity, activeOpacity, activeBackgroundColor }\n } = this.options\n ctx.save()\n this.fillRectMap.forEach((fillRect, groupId) => {\n const { x, y, width, height } = fillRect\n if (anchorGroupIds?.includes(groupId)) {\n ctx.globalAlpha = activeOpacity\n ctx.fillStyle = activeBackgroundColor\n } else {\n ctx.globalAlpha = opacity\n ctx.fillStyle = backgroundColor\n }\n ctx.fillRect(x, y, width, height)\n })\n ctx.restore()\n this.clearFillInfo()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IRowElement } from '../../../interface/Row'\nimport { Draw } from '../Draw'\n\nexport class WhiteSpaceParticle {\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.options = draw.getOptions()\n }\n\n public render(\n ctx: CanvasRenderingContext2D,\n element: IRowElement,\n x: number,\n y: number\n ) {\n const {\n scale,\n whiteSpace: { color, radius }\n } = this.options\n const metrics = element.metrics\n ctx.save()\n ctx.fillStyle = color\n ctx.beginPath()\n ctx.arc(x + metrics.width / 2, y, radius * scale, 0, Math.PI * 2)\n ctx.fill()\n ctx.closePath()\n ctx.restore()\n }\n}\n","import { EventBusMap } from '../../interface/EventBus'\nimport { Draw } from '../draw/Draw'\nimport { EventBus } from '../event/eventbus/EventBus'\n\nexport class MouseObserver {\n private draw: Draw\n private eventBus: EventBus<EventBusMap>\n private pageContainer: HTMLDivElement\n constructor(draw: Draw) {\n this.draw = draw\n this.eventBus = this.draw.getEventBus()\n this.pageContainer = this.draw.getPageContainer()\n this.pageContainer.addEventListener('mousemove', this._mousemove.bind(this))\n this.pageContainer.addEventListener(\n 'mouseenter',\n this._mouseenter.bind(this)\n )\n this.pageContainer.addEventListener(\n 'mouseleave',\n this._mouseleave.bind(this)\n )\n this.pageContainer.addEventListener('mousedown', this._mousedown.bind(this))\n this.pageContainer.addEventListener('mouseup', this._mouseup.bind(this))\n this.pageContainer.addEventListener('click', this._click.bind(this))\n }\n\n private _mousemove(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('mousemove')) return\n this.eventBus.emit('mousemove', evt)\n }\n\n private _mouseenter(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('mouseenter')) return\n this.eventBus.emit('mouseenter', evt)\n }\n\n private _mouseleave(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('mouseleave')) return\n this.eventBus.emit('mouseleave', evt)\n }\n\n private _mousedown(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('mousedown')) return\n this.eventBus.emit('mousedown', evt)\n }\n\n private _mouseup(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('mouseup')) return\n this.eventBus.emit('mouseup', evt)\n }\n\n private _click(evt: MouseEvent) {\n if (!this.eventBus.isSubscribe('click')) return\n this.eventBus.emit('click', evt)\n }\n}\n","import { LineNumberType } from '../../../dataset/enum/LineNumber'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class LineNumber {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n const {\n scale,\n lineNumber: { color, size, font, right, type }\n } = this.options\n const textParticle = this.draw.getTextParticle()\n const margins = this.draw.getMargins()\n const positionList = this.draw.getPosition().getOriginalMainPositionList()\n const pageRowList = this.draw.getPageRowList()\n const rowList = pageRowList[pageNo]\n ctx.save()\n ctx.fillStyle = color\n ctx.font = `${size * scale}px ${font}`\n for (let i = 0; i < rowList.length; i++) {\n const row = rowList[i]\n const {\n coordinate: { leftBottom }\n } = positionList[row.startIndex]\n const seq = type === LineNumberType.PAGE ? i + 1 : row.rowIndex + 1\n const textMetrics = textParticle.measureText(ctx, {\n value: `${seq}`\n })\n const x = margins[3] - (textMetrics.width + right) * scale\n const y = leftBottom[1] - textMetrics.actualBoundingBoxAscent * scale\n ctx.fillText(`${seq}`, x, y)\n }\n ctx.restore()\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\nimport { Footer } from './Footer'\nimport { Header } from './Header'\n\nexport class PageBorder {\n private draw: Draw\n private header: Header\n private footer: Footer\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.header = draw.getHeader()\n this.footer = draw.getFooter()\n this.options = draw.getOptions()\n }\n\n public render(ctx: CanvasRenderingContext2D) {\n const {\n scale,\n pageBorder: { color, lineWidth, padding }\n } = this.options\n ctx.save()\n ctx.translate(0.5, 0.5)\n ctx.strokeStyle = color\n ctx.lineWidth = lineWidth * scale\n const margins = this.draw.getMargins()\n const x = margins[3] - padding[3] * scale\n const y = margins[0] + this.header.getExtraHeight() - padding[0] * scale\n const width = this.draw.getInnerWidth() + (padding[1] + padding[3]) * scale\n const height =\n this.draw.getHeight() -\n y -\n this.footer.getExtraHeight() -\n margins[2] +\n padding[2] * scale\n ctx.rect(x, y, width, height)\n ctx.stroke()\n ctx.restore()\n }\n}\n","import { IPositionContextChangePayload } from '../../../interface/Listener'\nimport { Draw } from '../../draw/Draw'\n\nexport function positionContextChange(\n draw: Draw,\n payload: IPositionContextChangePayload\n) {\n const { value, oldValue } = payload\n if (oldValue.isTable && !value.isTable) {\n draw.getTableTool().dispose()\n }\n}\n","import { EventBusMap } from '../../interface/EventBus'\nimport { Draw } from '../draw/Draw'\nimport { EventBus } from '../event/eventbus/EventBus'\nimport { positionContextChange } from './handlers/positionContextChange'\n\nexport class Actuator {\n private draw: Draw\n private eventBus: EventBus<EventBusMap>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.eventBus = draw.getEventBus()\n this.execute()\n }\n\n private execute() {\n this.eventBus.on('positionContextChange', payload => {\n positionContextChange(this.draw, payload)\n })\n }\n}\n","import { ElementType, IElement, TableBorder, VerticalAlign } from '../../../..'\nimport { ZERO } from '../../../../dataset/constant/Common'\nimport { TABLE_CONTEXT_ATTR } from '../../../../dataset/constant/Element'\nimport { TdBorder, TdSlash } from '../../../../dataset/enum/table/Table'\nimport { DeepRequired } from '../../../../interface/Common'\nimport { IEditorOption } from '../../../../interface/Editor'\nimport { IColgroup } from '../../../../interface/table/Colgroup'\nimport { ITd } from '../../../../interface/table/Td'\nimport { ITr } from '../../../../interface/table/Tr'\nimport { cloneProperty, getUUID } from '../../../../utils'\nimport {\n formatElementContext,\n formatElementList\n} from '../../../../utils/element'\nimport { Position } from '../../../position/Position'\nimport { RangeManager } from '../../../range/RangeManager'\nimport { Draw } from '../../Draw'\nimport { TableParticle } from './TableParticle'\nimport { TableTool } from './TableTool'\n\nexport class TableOperate {\n private draw: Draw\n private range: RangeManager\n private position: Position\n private tableTool: TableTool\n private tableParticle: TableParticle\n private options: DeepRequired<IEditorOption>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.range = draw.getRange()\n this.position = draw.getPosition()\n this.tableTool = draw.getTableTool()\n this.tableParticle = draw.getTableParticle()\n this.options = draw.getOptions()\n }\n\n public insertTable(row: number, col: number) {\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const { defaultTrMinHeight } = this.options.table\n const elementList = this.draw.getElementList()\n let offsetX = 0\n if (elementList[startIndex]?.listId) {\n const positionList = this.position.getPositionList()\n const { rowIndex } = positionList[startIndex]\n const rowList = this.draw.getRowList()\n const row = rowList[rowIndex]\n offsetX = row?.offsetX || 0\n }\n const innerWidth = this.draw.getContextInnerWidth() - offsetX\n // colgroup\n const colgroup: IColgroup[] = []\n const colWidth = innerWidth / col\n for (let c = 0; c < col; c++) {\n colgroup.push({\n width: colWidth\n })\n }\n // trlist\n const trList: ITr[] = []\n for (let r = 0; r < row; r++) {\n const tdList: ITd[] = []\n const tr: ITr = {\n height: defaultTrMinHeight,\n tdList\n }\n for (let c = 0; c < col; c++) {\n tdList.push({\n colspan: 1,\n rowspan: 1,\n value: []\n })\n }\n trList.push(tr)\n }\n const element: IElement = {\n type: ElementType.TABLE,\n value: '',\n colgroup,\n trList\n }\n formatElementList([element], {\n editorOptions: this.options\n })\n formatElementContext(elementList, [element], startIndex, {\n editorOptions: this.options\n })\n const curIndex = startIndex + 1\n this.draw.spliceElementList(\n elementList,\n curIndex,\n startIndex === endIndex ? 0 : endIndex - startIndex,\n [element]\n )\n this.range.setRange(curIndex, curIndex)\n this.draw.render({ curIndex, isSetCursor: false })\n }\n\n public insertTableTopRow() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, trIndex, tableId } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTr = curTrList[trIndex!]\n if (curTr.tdList.length < element.colgroup!.length) {\n const curTrNo = curTr.tdList[0].rowIndex!\n for (let t = 0; t < trIndex!; t++) {\n const tr = curTrList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n if (td.rowspan > 1 && td.rowIndex! + td.rowspan >= curTrNo + 1) {\n td.rowspan += 1\n }\n }\n }\n }\n const newTrId = getUUID()\n const newTr: ITr = {\n height: curTr.height,\n id: newTrId,\n tdList: []\n }\n for (let t = 0; t < curTr.tdList.length; t++) {\n const curTd = curTr.tdList[t]\n const newTdId = getUUID()\n newTr.tdList.push({\n id: newTdId,\n rowspan: 1,\n colspan: curTd.colspan,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId,\n trId: newTrId,\n tdId: newTdId\n }\n ]\n })\n }\n curTrList.splice(trIndex!, 0, newTr)\n this.position.setPositionContext({\n isTable: true,\n index,\n trIndex,\n tdIndex: 0,\n tdId: newTr.tdList[0].id,\n trId: newTr.id,\n tableId\n })\n this.range.setRange(0, 0)\n this.draw.render({ curIndex: 0 })\n this.tableTool.render()\n }\n\n public insertTableBottomRow() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, trIndex, tableId } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTr = curTrList[trIndex!]\n const anchorTr =\n curTrList.length - 1 === trIndex ? curTr : curTrList[trIndex! + 1]\n if (anchorTr.tdList.length < element.colgroup!.length) {\n const curTrNo = anchorTr.tdList[0].rowIndex!\n for (let t = 0; t < trIndex! + 1; t++) {\n const tr = curTrList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n if (td.rowspan > 1 && td.rowIndex! + td.rowspan >= curTrNo + 1) {\n td.rowspan += 1\n }\n }\n }\n }\n const newTrId = getUUID()\n const newTr: ITr = {\n height: anchorTr.height,\n id: newTrId,\n tdList: []\n }\n for (let t = 0; t < anchorTr.tdList.length; t++) {\n const curTd = anchorTr.tdList[t]\n const newTdId = getUUID()\n newTr.tdList.push({\n id: newTdId,\n rowspan: 1,\n colspan: curTd.colspan,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId,\n trId: newTrId,\n tdId: newTdId\n }\n ]\n })\n }\n curTrList.splice(trIndex! + 1, 0, newTr)\n this.position.setPositionContext({\n isTable: true,\n index,\n trIndex: trIndex! + 1,\n tdIndex: 0,\n tdId: newTr.tdList[0].id,\n trId: newTr.id,\n tableId: element.id\n })\n this.range.setRange(0, 0)\n this.draw.render({ curIndex: 0 })\n }\n\n public adjustColWidth(element: IElement) {\n if (element.type !== ElementType.TABLE) return\n const { defaultColMinWidth } = this.options.table\n const colgroup = element.colgroup!\n const colgroupWidth = colgroup.reduce((pre, cur) => pre + cur.width, 0)\n const width = this.draw.getOriginalInnerWidth()\n if (colgroupWidth > width) {\n const greaterMinWidthCol = colgroup.filter(\n col => col.width > defaultColMinWidth\n )\n const adjustWidth = (colgroupWidth - width) / greaterMinWidthCol.length\n for (let g = 0; g < colgroup.length; g++) {\n const group = colgroup[g]\n if (group.width - adjustWidth >= defaultColMinWidth) {\n group.width -= adjustWidth\n }\n }\n }\n }\n\n public insertTableLeftCol() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, tdIndex, tableId } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTdIndex = tdIndex!\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n const tdId = getUUID()\n tr.tdList.splice(curTdIndex, 0, {\n id: tdId,\n rowspan: 1,\n colspan: 1,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId,\n trId: tr.id,\n tdId\n }\n ]\n })\n }\n const { defaultColMinWidth } = this.options.table\n const colgroup = element.colgroup!\n colgroup.splice(curTdIndex, 0, {\n width: defaultColMinWidth\n })\n this.adjustColWidth(element)\n this.position.setPositionContext({\n isTable: true,\n index,\n trIndex: 0,\n tdIndex: curTdIndex,\n tdId: curTrList[0].tdList[curTdIndex].id,\n trId: curTrList[0].id,\n tableId\n })\n this.range.setRange(0, 0)\n this.draw.render({ curIndex: 0 })\n this.tableTool.render()\n }\n\n public insertTableRightCol() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, tdIndex, tableId } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTdIndex = tdIndex! + 1\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n const tdId = getUUID()\n tr.tdList.splice(curTdIndex, 0, {\n id: tdId,\n rowspan: 1,\n colspan: 1,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId,\n trId: tr.id,\n tdId\n }\n ]\n })\n }\n const { defaultColMinWidth } = this.options.table\n const colgroup = element.colgroup!\n colgroup.splice(curTdIndex, 0, {\n width: defaultColMinWidth\n })\n this.adjustColWidth(element)\n this.position.setPositionContext({\n isTable: true,\n index,\n trIndex: 0,\n tdIndex: curTdIndex,\n tdId: curTrList[0].tdList[curTdIndex].id,\n trId: curTrList[0].id,\n tableId: element.id\n })\n this.range.setRange(0, 0)\n this.draw.render({ curIndex: 0 })\n }\n\n public deleteTableRow() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, trIndex, tdIndex } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const trList = element.trList!\n const curTr = trList[trIndex!]\n const curTdRowIndex = curTr.tdList[tdIndex!].rowIndex!\n if (trList.length <= 1 && element.pagingIndex === 0) {\n this.deleteTable()\n return\n }\n for (let r = 0; r < curTdRowIndex; r++) {\n const tr = trList[r]\n const tdList = tr.tdList\n for (let d = 0; d < tdList.length; d++) {\n const td = tdList[d]\n if (td.rowIndex! + td.rowspan > curTdRowIndex) {\n td.rowspan--\n }\n }\n }\n for (let d = 0; d < curTr.tdList.length; d++) {\n const td = curTr.tdList[d]\n if (td.rowspan > 1) {\n const tdId = getUUID()\n const nextTr = trList[trIndex! + 1]\n nextTr.tdList.splice(d, 0, {\n id: tdId,\n rowspan: td.rowspan - 1,\n colspan: td.colspan,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId: element.id,\n trId: nextTr.id,\n tdId\n }\n ]\n })\n }\n }\n trList.splice(trIndex!, 1)\n this.position.setPositionContext({\n isTable: false\n })\n this.range.clearRange()\n this.draw.render({\n curIndex: positionContext.index\n })\n this.tableTool.dispose()\n }\n\n public deleteTableCol() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, tdIndex, trIndex } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTd = curTrList[trIndex!].tdList[tdIndex!]\n const curColIndex = curTd.colIndex!\n const moreTdTr = curTrList.find(tr => tr.tdList.length > 1)\n if (!moreTdTr) {\n this.deleteTable()\n return\n }\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n if (\n td.colIndex! <= curColIndex &&\n td.colIndex! + td.colspan > curColIndex\n ) {\n if (td.colspan > 1) {\n td.colspan--\n } else {\n tr.tdList.splice(d, 1)\n }\n }\n }\n }\n element.colgroup?.splice(curColIndex, 1)\n this.position.setPositionContext({\n isTable: false\n })\n this.range.setRange(0, 0)\n this.draw.render({\n curIndex: positionContext.index\n })\n this.tableTool.dispose()\n }\n\n public deleteTable() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const originalElementList = this.draw.getOriginalElementList()\n const tableElement = originalElementList[positionContext.index!]\n let deleteCount = 1\n let deleteStartIndex = positionContext.index!\n if (tableElement.pagingId) {\n deleteStartIndex = positionContext.index! - tableElement.pagingIndex!\n for (let i = deleteStartIndex + 1; i < originalElementList.length; i++) {\n if (originalElementList[i].pagingId === tableElement.pagingId) {\n deleteCount++\n } else {\n break\n }\n }\n }\n originalElementList.splice(deleteStartIndex, deleteCount)\n const curIndex = deleteStartIndex - 1\n this.position.setPositionContext({\n isTable: false,\n index: curIndex\n })\n this.range.setRange(curIndex, curIndex)\n this.draw.render({ curIndex })\n this.tableTool.dispose()\n }\n\n public mergeTableCell() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const {\n isCrossRowCol,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n } = this.range.getRange()\n if (!isCrossRowCol) return\n const { index } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n let startTd = curTrList[startTrIndex!].tdList[startTdIndex!]\n let endTd = curTrList[endTrIndex!].tdList[endTdIndex!]\n if (startTd.x! > endTd.x! || startTd.y! > endTd.y!) {\n // prettier-ignore\n [startTd, endTd] = [endTd, startTd]\n }\n const startColIndex = startTd.colIndex!\n const endColIndex = endTd.colIndex! + (endTd.colspan - 1)\n const startRowIndex = startTd.rowIndex!\n const endRowIndex = endTd.rowIndex! + (endTd.rowspan - 1)\n const rowCol: ITd[][] = []\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n const tdList: ITd[] = []\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdColIndex = td.colIndex!\n const tdRowIndex = td.rowIndex!\n if (\n tdColIndex >= startColIndex &&\n tdColIndex <= endColIndex &&\n tdRowIndex >= startRowIndex &&\n tdRowIndex <= endRowIndex\n ) {\n tdList.push(td)\n }\n }\n if (tdList.length) {\n rowCol.push(tdList)\n }\n }\n if (!rowCol.length) return\n const lastRow = rowCol[rowCol.length - 1]\n const leftTop = rowCol[0][0]\n const rightBottom = lastRow[lastRow.length - 1]\n const startX = leftTop.x!\n const startY = leftTop.y!\n const endX = rightBottom.x! + rightBottom.width!\n const endY = rightBottom.y! + rightBottom.height!\n for (let t = 0; t < rowCol.length; t++) {\n const tr = rowCol[t]\n for (let d = 0; d < tr.length; d++) {\n const td = tr[d]\n const tdStartX = td.x!\n const tdStartY = td.y!\n const tdEndX = tdStartX + td.width!\n const tdEndY = tdStartY + td.height!\n if (\n startX > tdStartX ||\n startY > tdStartY ||\n endX < tdEndX ||\n endY < tdEndY\n ) {\n return\n }\n }\n }\n const mergeTdIdList: string[] = []\n const anchorTd = rowCol[0][0]\n const anchorElement = anchorTd.value[0]\n for (let t = 0; t < rowCol.length; t++) {\n const tr = rowCol[t]\n for (let d = 0; d < tr.length; d++) {\n const td = tr[d]\n const isAnchorTd = t === 0 && d === 0\n if (!isAnchorTd) {\n mergeTdIdList.push(td.id!)\n const startTdValueIndex = td.value.length > 1 ? 0 : 1\n for (let d = startTdValueIndex; d < td.value.length; d++) {\n const tdElement = td.value[d]\n cloneProperty<IElement>(\n TABLE_CONTEXT_ATTR,\n anchorElement,\n tdElement\n )\n anchorTd.value.push(tdElement)\n }\n }\n if (t === 0 && d !== 0) {\n anchorTd.colspan += td.colspan\n }\n if (t !== 0) {\n if (anchorTd.colIndex === td.colIndex) {\n anchorTd.rowspan += td.rowspan\n }\n }\n }\n }\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n let d = 0\n while (d < tr.tdList.length) {\n const td = tr.tdList[d]\n if (mergeTdIdList.includes(td.id!)) {\n tr.tdList.splice(d, 1)\n d--\n }\n d++\n }\n }\n this.position.setPositionContext({\n ...positionContext,\n trIndex: anchorTd.trIndex,\n tdIndex: anchorTd.tdIndex\n })\n const curIndex = anchorTd.value.length - 1\n this.range.setRange(curIndex, curIndex)\n this.draw.render()\n this.tableTool.render()\n }\n\n public cancelMergeTableCell() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index, tdIndex, trIndex } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTr = curTrList[trIndex!]!\n const curTd = curTr.tdList[tdIndex!]\n if (curTd.rowspan === 1 && curTd.colspan === 1) return\n const colspan = curTd.colspan\n if (curTd.colspan > 1) {\n for (let c = 1; c < curTd.colspan; c++) {\n const tdId = getUUID()\n curTr.tdList.splice(tdIndex! + c, 0, {\n id: tdId,\n rowspan: 1,\n colspan: 1,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId: element.id,\n trId: curTr.id,\n tdId\n }\n ]\n })\n }\n curTd.colspan = 1\n }\n if (curTd.rowspan > 1) {\n for (let r = 1; r < curTd.rowspan; r++) {\n const tr = curTrList[trIndex! + r]\n for (let c = 0; c < colspan; c++) {\n const tdId = getUUID()\n tr.tdList.splice(curTd.colIndex!, 0, {\n id: tdId,\n rowspan: 1,\n colspan: 1,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId: element.id,\n trId: tr.id,\n tdId\n }\n ]\n })\n }\n }\n curTd.rowspan = 1\n }\n const curIndex = curTd.value.length - 1\n this.range.setRange(curIndex, curIndex)\n this.draw.render()\n this.tableTool.render()\n }\n\n public splitVerticalTableCell() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const range = this.range.getRange()\n if (range.isCrossRowCol) return\n const { index, tdIndex, trIndex } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTr = curTrList[trIndex!]!\n const curTd = curTr.tdList[tdIndex!]\n element.colgroup!.splice(tdIndex! + 1, 0, {\n width: this.options.table.defaultColMinWidth\n })\n for (let t = 0; t < curTrList.length; t++) {\n const tr = curTrList[t]\n let d = 0\n while (d < tr.tdList.length) {\n const td = tr.tdList[d]\n if (td.rowIndex !== curTd.rowIndex) {\n if (\n td.colIndex! <= curTd.colIndex! &&\n td.colIndex! + td.colspan > curTd.colIndex!\n ) {\n td.colspan++\n }\n } else {\n if (td.id === curTd.id) {\n const tdId = getUUID()\n curTr.tdList.splice(d + curTd.colspan, 0, {\n id: tdId,\n rowspan: curTd.rowspan,\n colspan: 1,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId: element.id,\n trId: tr.id,\n tdId\n }\n ]\n })\n d++\n }\n }\n d++\n }\n }\n this.draw.render()\n this.tableTool.render()\n }\n\n public splitHorizontalTableCell() {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const range = this.range.getRange()\n if (range.isCrossRowCol) return\n const { index, tdIndex, trIndex } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n const curTrList = element.trList!\n const curTr = curTrList[trIndex!]!\n const curTd = curTr.tdList[tdIndex!]\n let appendTrIndex = -1\n let t = 0\n while (t < curTrList.length) {\n if (t === appendTrIndex) {\n t++\n continue\n }\n const tr = curTrList[t]\n let d = 0\n while (d < tr.tdList.length) {\n const td = tr.tdList[d]\n if (td.id === curTd.id) {\n const trId = getUUID()\n const tdId = getUUID()\n curTrList.splice(t + curTd.rowspan, 0, {\n id: trId,\n height: this.options.table.defaultTrMinHeight,\n tdList: [\n {\n id: tdId,\n rowspan: 1,\n colspan: curTd.colspan,\n value: [\n {\n value: ZERO,\n size: 16,\n tableId: element.id,\n trId,\n tdId\n }\n ]\n }\n ]\n })\n appendTrIndex = t + curTd.rowspan\n } else if (\n td.rowIndex! >= curTd.rowIndex! &&\n td.rowIndex! < curTd.rowIndex! + curTd.rowspan &&\n td.rowIndex! + td.rowspan >= curTd.rowIndex! + curTd.rowspan\n ) {\n td.rowspan++\n }\n d++\n }\n t++\n }\n this.draw.render()\n this.tableTool.render()\n }\n\n public tableTdVerticalAlign(payload: VerticalAlign) {\n const rowCol = this.tableParticle.getRangeRowCol()\n if (!rowCol) return\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n for (let c = 0; c < row.length; c++) {\n const td = row[c]\n if (\n !td ||\n td.verticalAlign === payload ||\n (!td.verticalAlign && payload === VerticalAlign.TOP)\n ) {\n continue\n }\n td.verticalAlign = payload\n }\n }\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex\n })\n }\n\n public tableBorderType(payload: TableBorder) {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n if (\n (!element.borderType && payload === TableBorder.ALL) ||\n element.borderType === payload\n ) {\n return\n }\n element.borderType = payload\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex\n })\n }\n\n public tableBorderColor(payload: string) {\n const positionContext = this.position.getPositionContext()\n if (!positionContext.isTable) return\n const { index } = positionContext\n const originalElementList = this.draw.getOriginalElementList()\n const element = originalElementList[index!]\n if (\n (!element.borderColor &&\n payload === this.options.table.defaultBorderColor) ||\n element.borderColor === payload\n ) {\n return\n }\n element.borderColor = payload\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex,\n isCompute: false\n })\n }\n\n public tableTdBorderType(payload: TdBorder) {\n const rowCol = this.tableParticle.getRangeRowCol()\n if (!rowCol) return\n const tdList = rowCol.flat()\n const isSetBorderType = tdList.some(\n td => !td.borderTypes?.includes(payload)\n )\n tdList.forEach(td => {\n if (!td.borderTypes) {\n td.borderTypes = []\n }\n const borderTypeIndex = td.borderTypes.findIndex(type => type === payload)\n if (isSetBorderType) {\n if (!~borderTypeIndex) {\n td.borderTypes.push(payload)\n }\n } else {\n if (~borderTypeIndex) {\n td.borderTypes.splice(borderTypeIndex, 1)\n }\n }\n if (!td.borderTypes.length) {\n delete td.borderTypes\n }\n })\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex\n })\n }\n\n public tableTdSlashType(payload: TdSlash) {\n const rowCol = this.tableParticle.getRangeRowCol()\n if (!rowCol) return\n const tdList = rowCol.flat()\n const isSetTdSlashType = tdList.some(\n td => !td.slashTypes?.includes(payload)\n )\n tdList.forEach(td => {\n if (!td.slashTypes) {\n td.slashTypes = []\n }\n const slashTypeIndex = td.slashTypes.findIndex(type => type === payload)\n if (isSetTdSlashType) {\n if (!~slashTypeIndex) {\n td.slashTypes.push(payload)\n }\n } else {\n if (~slashTypeIndex) {\n td.slashTypes.splice(slashTypeIndex, 1)\n }\n }\n if (!td.slashTypes.length) {\n delete td.slashTypes\n }\n })\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex\n })\n }\n\n public tableTdBackgroundColor(payload: string) {\n const rowCol = this.tableParticle.getRangeRowCol()\n if (!rowCol) return\n for (let r = 0; r < rowCol.length; r++) {\n const row = rowCol[r]\n for (let c = 0; c < row.length; c++) {\n const col = row[c]\n col.backgroundColor = payload\n }\n }\n const { endIndex } = this.range.getRange()\n this.range.setRange(endIndex, endIndex)\n this.draw.render({\n isCompute: false\n })\n }\n\n public tableSelectAll() {\n const positionContext = this.position.getPositionContext()\n const { index, tableId, isTable } = positionContext\n if (!isTable || !tableId) return\n const { startIndex, endIndex } = this.range.getRange()\n const originalElementList = this.draw.getOriginalElementList()\n const trList = originalElementList[index!].trList!\n const endTrIndex = trList.length - 1\n const endTdIndex = trList[endTrIndex].tdList.length - 1\n this.range.replaceRange({\n startIndex,\n endIndex,\n tableId,\n startTdIndex: 0,\n endTdIndex,\n startTrIndex: 0,\n endTrIndex\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n}\n","export enum AreaMode {\n EDIT = 'edit',\n READONLY = 'readonly',\n FORM = 'form'\n}\n","import { Draw } from '../Draw'\nimport { deepClone, getUUID, isNonValue } from '../../../utils'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport {\n IArea,\n IAreaInfo,\n IGetAreaValueOption,\n IGetAreaValueResult,\n IInsertAreaOption,\n ILocationAreaOption,\n ISetAreaPropertiesOption,\n ISetAreaValueOption\n} from '../../../interface/Area'\nimport { EditorZone } from '../../../dataset/enum/Editor'\nimport { LocationPosition } from '../../../dataset/enum/Common'\nimport { RangeManager } from '../../range/RangeManager'\nimport { Zone } from '../../zone/Zone'\nimport { Position } from '../../position/Position'\nimport { formatElementList, zipElementList } from '../../../utils/element'\nimport { AreaMode } from '../../../dataset/enum/Area'\nimport { IRange } from '../../../interface/Range'\nimport { IElementPosition } from '../../../interface/Element'\nimport { Placeholder } from '../frame/Placeholder'\nimport { defaultPlaceholderOption } from '../../../dataset/constant/Placeholder'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\n\nexport class Area {\n private draw: Draw\n private zone: Zone\n private range: RangeManager\n private position: Position\n private options: DeepRequired<IEditorOption>\n private areaInfoMap = new Map<string, IAreaInfo>()\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.zone = draw.getZone()\n this.range = draw.getRange()\n this.position = draw.getPosition()\n }\n\n public getAreaInfo(): Map<string, IAreaInfo> {\n return this.areaInfoMap\n }\n\n public getActiveAreaId(): string | null {\n if (!this.areaInfoMap.size) return null\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n return element?.areaId || null\n }\n\n public getActiveAreaInfo(): IAreaInfo | null {\n const activeAreaId = this.getActiveAreaId()\n if (!activeAreaId) return null\n return this.areaInfoMap.get(activeAreaId) || null\n }\n\n public isReadonly() {\n const activeAreaInfo = this.getActiveAreaInfo()\n if (!activeAreaInfo?.area) return false\n switch (activeAreaInfo.area.mode) {\n case AreaMode.EDIT:\n return false\n case AreaMode.READONLY:\n return true\n case AreaMode.FORM:\n return !this.draw.getControl().getIsRangeWithinControl()\n default:\n return false\n }\n }\n\n public insertArea(payload: IInsertAreaOption): string | null {\n const { id, value, area, position, range } = payload\n if (this.zone.getZone() !== EditorZone.MAIN) {\n this.zone.setZone(EditorZone.MAIN)\n }\n this.draw.getPosition().setPositionContext({\n isTable: false\n })\n if (range && !this.getActiveAreaId()) {\n const { startIndex, endIndex } = range\n const elementList = this.draw.getOriginalMainElementList()\n if (!elementList[startIndex] || !elementList[endIndex]) {\n return null\n }\n this.range.setRange(range.startIndex, range.endIndex)\n } else {\n if (position === LocationPosition.BEFORE) {\n this.range.setRange(0, 0)\n } else {\n const elementList = this.draw.getOriginalMainElementList()\n const lastIndex = elementList.length - 1\n this.range.setRange(lastIndex, lastIndex)\n }\n }\n const areaId = id || getUUID()\n this.draw.insertElementList([\n {\n type: ElementType.AREA,\n value: '',\n areaId,\n valueList: value,\n area: deepClone(area)\n }\n ])\n return areaId\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n if (!this.areaInfoMap.size) return\n ctx.save()\n const margins = this.draw.getMargins()\n const width = this.draw.getInnerWidth()\n for (const areaInfoItem of this.areaInfoMap) {\n const { area, positionList } = areaInfoItem[1]\n if (\n area?.hide ||\n (!area?.backgroundColor && !area?.borderColor && !area?.placeholder)\n ) {\n continue\n }\n const pagePositionList = positionList.filter(p => p.pageNo === pageNo)\n if (!pagePositionList.length) continue\n ctx.translate(0.5, 0.5)\n const firstPosition = pagePositionList[0]\n const lastPosition = pagePositionList[pagePositionList.length - 1]\n const x = margins[3]\n const y = Math.ceil(firstPosition.coordinate.leftTop[1])\n const height = Math.ceil(lastPosition.coordinate.rightBottom[1] - y)\n if (area.backgroundColor) {\n ctx.fillStyle = area.backgroundColor\n ctx.fillRect(x, y, width, height)\n }\n if (area.borderColor) {\n ctx.strokeStyle = area.borderColor\n ctx.strokeRect(x, y, width, height)\n }\n if (area.placeholder && positionList.length <= 1) {\n const placeholder = new Placeholder(this.draw)\n placeholder.render(ctx, {\n placeholder: {\n ...defaultPlaceholderOption,\n ...area.placeholder\n },\n startY: firstPosition.coordinate.leftTop[1]\n })\n }\n ctx.translate(-0.5, -0.5)\n }\n ctx.restore()\n }\n\n public compute() {\n this.areaInfoMap.clear()\n const elementList = this.draw.getOriginalMainElementList()\n const positionList = this.position.getOriginalMainPositionList()\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n const areaId = element.areaId\n if (areaId) {\n const areaInfo = this.areaInfoMap.get(areaId)\n if (!areaInfo) {\n this.areaInfoMap.set(areaId, {\n id: areaId,\n area: element.area!,\n elementList: [element],\n positionList: [positionList[e]]\n })\n } else {\n areaInfo.elementList.push(element)\n areaInfo.positionList.push(positionList[e])\n }\n }\n }\n }\n\n public getAreaValue(\n options: IGetAreaValueOption = {}\n ): IGetAreaValueResult | null {\n const areaId = options.id || this.getActiveAreaId()\n if (!areaId) return null\n const areaInfo = this.areaInfoMap.get(areaId)\n if (!areaInfo) return null\n return {\n area: areaInfo.area,\n id: areaInfo.id,\n startPageNo: areaInfo.positionList[0].pageNo,\n endPageNo: areaInfo.positionList[areaInfo.positionList.length - 1].pageNo,\n value: zipElementList(areaInfo.elementList)\n }\n }\n\n public getContextByAreaId(\n areaId: string,\n options?: ILocationAreaOption\n ): { range: IRange; elementPosition: IElementPosition } | null {\n const elementList = this.draw.getOriginalMainElementList()\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (options?.position === LocationPosition.OUTER_BEFORE) {\n if (elementList[e + 1]?.areaId !== areaId) continue\n } else if (options?.position === LocationPosition.AFTER) {\n if (\n !(element.areaId === areaId && elementList[e + 1]?.areaId !== areaId)\n ) {\n continue\n }\n } else if (options?.position === LocationPosition.OUTER_AFTER) {\n if (\n !(element.areaId !== areaId && elementList[e - 1]?.areaId === areaId)\n ) {\n continue\n }\n } else {\n if (element.areaId !== areaId) continue\n }\n const positionList = this.position.getOriginalMainPositionList()\n return {\n range: {\n startIndex: e,\n endIndex: e\n },\n elementPosition: positionList[e]\n }\n }\n return null\n }\n\n public setAreaProperties(payload: ISetAreaPropertiesOption) {\n const areaId = payload.id || this.getActiveAreaId()\n if (!areaId) return\n const areaInfo = this.areaInfoMap.get(areaId)\n if (!areaInfo) return\n if (!areaInfo.area) {\n areaInfo.area = {}\n }\n let isCompute = false\n const computeProps: Array<keyof IArea> = ['top', 'hide']\n Object.entries(payload.properties).forEach(([key, value]) => {\n if (isNonValue(value)) return\n const propKey = key as keyof IArea\n areaInfo.area[propKey] = value\n if (computeProps.includes(propKey)) {\n isCompute = true\n }\n })\n this.draw.render({\n isCompute,\n isSetCursor: false\n })\n }\n\n public setAreaValue(payload: ISetAreaValueOption) {\n const areaId = payload.id || this.getActiveAreaId()\n if (!areaId) return\n const areaInfo = this.areaInfoMap.get(areaId)\n if (!areaInfo) return\n const { positionList } = areaInfo\n const elementList = this.draw.getOriginalMainElementList()\n const valueList = payload.value\n formatElementList(\n [\n {\n type: ElementType.AREA,\n value: '',\n valueList,\n areaId: areaInfo.id,\n area: areaInfo.area\n }\n ],\n {\n editorOptions: this.options\n }\n )\n this.draw.spliceElementList(\n elementList,\n positionList[0].index,\n positionList.length,\n valueList,\n {\n isIgnoreDeletedRule: true\n }\n )\n this.draw.render({\n isSetCursor: false\n })\n }\n}\n","import { IAreaBadge, IBadge } from '../../../interface/Badge'\nimport { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { Draw } from '../Draw'\n\nexport class Badge {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private imageCache: Map<string, HTMLImageElement>\n private mainBadge: IBadge | null\n private areaBadgeMap: Map<string, IBadge>\n\n constructor(draw: Draw) {\n this.draw = draw\n this.options = draw.getOptions()\n this.imageCache = new Map()\n this.mainBadge = null\n this.areaBadgeMap = new Map()\n }\n\n public setMainBadge(payload: IBadge | null) {\n this.mainBadge = payload\n }\n\n public setAreaBadgeMap(payload: IAreaBadge[]) {\n this.areaBadgeMap.clear()\n payload.forEach(areaBadge => {\n this.areaBadgeMap.set(areaBadge.areaId, areaBadge.badge)\n })\n }\n\n private _drawImage(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n value: string\n ) {\n if (this.imageCache.has(value)) {\n const img = this.imageCache.get(value)!\n ctx.drawImage(img, x, y, width, height)\n } else {\n const img = new Image()\n img.setAttribute('crossOrigin', 'Anonymous')\n img.src = value\n img.onload = () => {\n this.imageCache.set(value, img)\n ctx.drawImage(img, x, y, width, height)\n }\n }\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n if (pageNo === 0 && this.mainBadge) {\n const { scale, badge } = this.options\n const { left, top, width, height, value } = this.mainBadge\n const headerTop =\n this.draw.getMargins()[0] + this.draw.getHeader().getExtraHeight()\n const x = (left || badge.left) * scale\n const y = (top || badge.top) * scale + headerTop\n this._drawImage(ctx, x, y, width * scale, height * scale, value)\n }\n if (this.areaBadgeMap.size) {\n const areaInfo = this.draw.getArea().getAreaInfo()\n if (areaInfo.size) {\n const { scale, badge } = this.options\n for (const areaItem of areaInfo) {\n const { positionList } = areaItem[1]\n const firstPosition = positionList[0]\n if (firstPosition.pageNo !== pageNo) continue\n const badgeItem = this.areaBadgeMap.get(areaItem[0])\n if (!badgeItem) continue\n const { left, top, width, height, value } = badgeItem\n const x = (left || badge.left) * scale\n const y =\n (top || badge.top) * scale + firstPosition.coordinate.leftTop[1]\n this._drawImage(ctx, x, y, width * scale, height * scale, value)\n }\n }\n }\n }\n}\n","import { DeepRequired } from '../../../interface/Common'\nimport { IEditorOption } from '../../../interface/Editor'\nimport { IGraffitiData, IGraffitiStroke } from '../../../interface/Graffiti'\nimport { Draw } from '../Draw'\n\nexport class Graffiti {\n private draw: Draw\n private options: DeepRequired<IEditorOption>\n private data: IGraffitiData[]\n private pageContainer: HTMLDivElement\n private isDrawing = false\n private startStroke: IGraffitiStroke | null = null\n\n constructor(draw: Draw, data?: IGraffitiData[]) {\n this.draw = draw\n this.options = draw.getOptions()\n this.data = data || []\n this.pageContainer = draw.getPageContainer()\n this.register()\n }\n\n private register() {\n this.pageContainer.addEventListener('mousedown', this.start.bind(this))\n this.pageContainer.addEventListener('mouseup', this.stop.bind(this))\n this.pageContainer.addEventListener('mouseleave', this.stop.bind(this))\n this.pageContainer.addEventListener('mousemove', this.drawing.bind(this))\n }\n\n private start(evt: MouseEvent) {\n if (!this.draw.isGraffitiMode()) return\n this.isDrawing = true\n const { scale } = this.options\n this.startStroke = {\n lineColor: this.options.graffiti.defaultLineColor,\n lineWidth: this.options.graffiti.defaultLineWidth,\n points: [evt.offsetX / scale, evt.offsetY / scale]\n }\n }\n\n private stop() {\n this.isDrawing = false\n }\n\n private drawing(evt: MouseEvent) {\n if (!this.isDrawing || !this.draw.isGraffitiMode()) return\n const { offsetX, offsetY } = evt\n const DISTANCE = 2\n if (\n this.startStroke &&\n Math.abs(this.startStroke.points[0] - offsetX) < DISTANCE &&\n Math.abs(this.startStroke.points[1] - offsetY) < DISTANCE\n ) {\n return\n }\n const pageNo = this.draw.getPageNo()\n let currentValue = this.data.find(item => item.pageNo === pageNo)\n if (this.startStroke) {\n if (!currentValue) {\n currentValue = {\n pageNo,\n strokes: []\n }\n this.data.push(currentValue)\n }\n currentValue.strokes.push(this.startStroke)\n this.startStroke = null\n }\n if (!currentValue?.strokes?.length) return\n const { scale } = this.options\n const lastPoints =\n currentValue.strokes[currentValue.strokes.length - 1].points\n lastPoints.push(offsetX / scale, offsetY / scale)\n this.draw.render({\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n })\n }\n\n public getValue(): IGraffitiData[] {\n return this.data\n }\n\n public compute() {\n const pageSize = this.draw.getPageRowList().length\n for (let d = this.data.length - 1; d >= 0; d--) {\n const pageNo = this.data[d].pageNo\n if (pageNo > pageSize - 1) {\n this.data.splice(d, 1)\n }\n }\n }\n\n public clear() {\n this.data = []\n }\n\n public render(ctx: CanvasRenderingContext2D, pageNo: number) {\n const strokes = this.data.find(item => item.pageNo === pageNo)?.strokes\n if (!strokes?.length) return\n const {\n graffiti: { defaultLineColor, defaultLineWidth },\n scale\n } = this.options\n ctx.save()\n for (let s = 0; s < strokes.length; s++) {\n const stroke = strokes[s]\n ctx.beginPath()\n ctx.strokeStyle = stroke.lineColor || defaultLineColor\n ctx.lineWidth = (stroke.lineWidth || defaultLineWidth) * scale\n ctx.moveTo(stroke.points[0] * scale, stroke.points[1] * scale)\n for (let p = 2; p < stroke.points.length; p += 2) {\n ctx.lineTo(stroke.points[p] * scale, stroke.points[p + 1] * scale)\n }\n ctx.stroke()\n }\n ctx.restore()\n }\n}\n","import { version } from '../../version'\nimport { ZERO } from '../../dataset/constant/Common'\nimport { RowFlex } from '../../dataset/enum/Row'\nimport {\n IAppendElementListOption,\n IComputeRowListPayload,\n IDrawFloatPayload,\n IDrawOption,\n IDrawPagePayload,\n IDrawRowPayload,\n IGetImageOption,\n IGetOriginValueOption,\n IGetValueOption,\n IPainterOption\n} from '../../interface/Draw'\nimport {\n IEditorData,\n IEditorOption,\n IEditorResult,\n ISetValueOption\n} from '../../interface/Editor'\nimport {\n IElement,\n IElementMetrics,\n IElementFillRect,\n IElementStyle,\n ISpliceElementListOption,\n IInsertElementListOption\n} from '../../interface/Element'\nimport { IRow, IRowElement } from '../../interface/Row'\nimport { deepClone, getUUID, nextTick } from '../../utils'\nimport { Cursor } from '../cursor/Cursor'\nimport { CanvasEvent } from '../event/CanvasEvent'\nimport { GlobalEvent } from '../event/GlobalEvent'\nimport { HistoryManager } from '../history/HistoryManager'\nimport { Listener } from '../listener/Listener'\nimport { Position } from '../position/Position'\nimport { RangeManager } from '../range/RangeManager'\nimport { Background } from './frame/Background'\nimport { Highlight } from './richtext/Highlight'\nimport { Margin } from './frame/Margin'\nimport { Search } from './interactive/Search'\nimport { Strikeout } from './richtext/Strikeout'\nimport { Underline } from './richtext/Underline'\nimport { ElementType } from '../../dataset/enum/Element'\nimport { ImageParticle } from './particle/ImageParticle'\nimport { LaTexParticle } from './particle/latex/LaTexParticle'\nimport { TextParticle } from './particle/TextParticle'\nimport { PageNumber } from './frame/PageNumber'\nimport { ScrollObserver } from '../observer/ScrollObserver'\nimport { SelectionObserver } from '../observer/SelectionObserver'\nimport { TableParticle } from './particle/table/TableParticle'\nimport { TableTool } from './particle/table/TableTool'\nimport { HyperlinkParticle } from './particle/HyperlinkParticle'\nimport { LabelParticle } from './particle/LabelParticle'\nimport { Header } from './frame/Header'\nimport { SuperscriptParticle } from './particle/SuperscriptParticle'\nimport { SubscriptParticle } from './particle/SubscriptParticle'\nimport { SeparatorParticle } from './particle/SeparatorParticle'\nimport { PageBreakParticle } from './particle/PageBreakParticle'\nimport { ColumnBreakParticle } from './particle/ColumnBreakParticle'\nimport { Watermark } from './frame/Watermark'\nimport {\n EditorComponent,\n EditorMode,\n EditorZone,\n PageMode,\n PaperDirection,\n WordBreak\n} from '../../dataset/enum/Editor'\nimport { Control } from './control/Control'\nimport {\n deleteSurroundElementList,\n getIsBlockElement,\n getSlimCloneElementList,\n pickSurroundElementList,\n zipElementList\n} from '../../utils/element'\nimport { CheckboxParticle } from './particle/CheckboxParticle'\nimport { RadioParticle } from './particle/RadioParticle'\nimport { DeepRequired, IPadding } from '../../interface/Common'\nimport {\n ControlComponent,\n ControlIndentation\n} from '../../dataset/enum/Control'\nimport { formatElementList } from '../../utils/element'\nimport { WorkerManager } from '../worker/WorkerManager'\nimport { Previewer } from './particle/previewer/Previewer'\nimport { DateParticle } from './particle/date/DateParticle'\nimport { IMargin } from '../../interface/Margin'\nimport { BlockParticle } from './particle/block/BlockParticle'\nimport { EDITOR_COMPONENT, EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { I18n } from '../i18n/I18n'\nimport { ImageObserver } from '../observer/ImageObserver'\nimport { Zone } from '../zone/Zone'\nimport { Footer } from './frame/Footer'\nimport {\n IMAGE_ELEMENT_TYPE,\n TEXTLIKE_ELEMENT_TYPE\n} from '../../dataset/constant/Element'\nimport { ListParticle } from './particle/ListParticle'\nimport { Placeholder } from './frame/Placeholder'\nimport { EventBus } from '../event/eventbus/EventBus'\nimport { EventBusMap } from '../../interface/EventBus'\nimport { Group } from './interactive/Group'\nimport { Override } from '../override/Override'\nimport { FlexDirection, ImageDisplay } from '../../dataset/enum/Common'\nimport {\n PUNCTUATION_REG,\n WHITE_SPACE_REG\n} from '../../dataset/constant/Regular'\nimport { LineBreakParticle } from './particle/LineBreakParticle'\nimport { WhiteSpaceParticle } from './particle/WhiteSpaceParticle'\nimport { MouseObserver } from '../observer/MouseObserver'\nimport { LineNumber } from './frame/LineNumber'\nimport { PageBorder } from './frame/PageBorder'\nimport { ITd } from '../../interface/table/Td'\nimport { Actuator } from '../actuator/Actuator'\nimport { TableOperate } from './particle/table/TableOperate'\nimport { Area } from './interactive/Area'\nimport { Badge } from './frame/Badge'\nimport { Graffiti } from './graffiti/Graffiti'\n\nexport class Draw {\n private container: HTMLDivElement\n private pageContainer: HTMLDivElement\n private pageList: HTMLCanvasElement[]\n private ctxList: CanvasRenderingContext2D[]\n private pageNo: number\n private renderCount: number\n private pagePixelRatio: number | null\n private mode: EditorMode\n private options: DeepRequired<IEditorOption>\n private position: Position\n private zone: Zone\n private elementList: IElement[]\n private listener: Listener\n private eventBus: EventBus<EventBusMap>\n private override: Override\n\n private i18n: I18n\n private canvasEvent: CanvasEvent\n private globalEvent: GlobalEvent\n private cursor: Cursor\n private range: RangeManager\n private margin: Margin\n private background: Background\n private badge: Badge\n private search: Search\n private group: Group\n private area: Area\n private underline: Underline\n private strikeout: Strikeout\n private highlight: Highlight\n private historyManager: HistoryManager\n private previewer: Previewer\n private imageParticle: ImageParticle\n private laTexParticle: LaTexParticle\n private textParticle: TextParticle\n private tableParticle: TableParticle\n private tableTool: TableTool\n private tableOperate: TableOperate\n private pageNumber: PageNumber\n private lineNumber: LineNumber\n private waterMark: Watermark\n private placeholder: Placeholder\n private header: Header\n private footer: Footer\n private hyperlinkParticle: HyperlinkParticle\n private labelParticle: LabelParticle\n private dateParticle: DateParticle\n private separatorParticle: SeparatorParticle\n private pageBreakParticle: PageBreakParticle\n private columnBreakParticle: ColumnBreakParticle\n private superscriptParticle: SuperscriptParticle\n private subscriptParticle: SubscriptParticle\n private checkboxParticle: CheckboxParticle\n private radioParticle: RadioParticle\n private blockParticle: BlockParticle\n private listParticle: ListParticle\n private lineBreakParticle: LineBreakParticle\n private whiteSpaceParticle: WhiteSpaceParticle\n private control: Control\n private pageBorder: PageBorder\n private workerManager: WorkerManager\n private scrollObserver: ScrollObserver\n private selectionObserver: SelectionObserver\n private imageObserver: ImageObserver\n private graffiti: Graffiti\n\n private LETTER_REG: RegExp\n private WORD_LIKE_REG: RegExp\n private rowList: IRow[]\n private pageRowList: IRow[][]\n private painterStyle: IElementStyle | null\n private painterOptions: IPainterOption | null\n private visiblePageNoList: number[]\n private intersectionPageNo: number\n private lazyRenderIntersectionObserver: IntersectionObserver | null\n private printModeData: Required<Omit<IEditorData, 'graffiti'>> | null\n\n constructor(\n rootContainer: HTMLElement,\n options: DeepRequired<IEditorOption>,\n data: IEditorData,\n listener: Listener,\n eventBus: EventBus<EventBusMap>,\n override: Override\n ) {\n this.container = this._wrapContainer(rootContainer)\n this.pageList = []\n this.ctxList = []\n this.pageNo = 0\n this.renderCount = 0\n this.pagePixelRatio = null\n this.mode = options.mode\n this.options = options\n this.elementList = data.main\n this.listener = listener\n this.eventBus = eventBus\n this.override = override\n\n this._formatContainer()\n this.pageContainer = this._createPageContainer()\n this._createPage(0)\n\n this.i18n = new I18n(options.locale)\n this.historyManager = new HistoryManager(this)\n this.position = new Position(this)\n this.zone = new Zone(this)\n this.range = new RangeManager(this)\n this.margin = new Margin(this)\n this.background = new Background(this)\n this.badge = new Badge(this)\n this.search = new Search(this)\n this.group = new Group(this)\n this.area = new Area(this)\n this.underline = new Underline(this)\n this.strikeout = new Strikeout(this)\n this.highlight = new Highlight(this)\n this.previewer = new Previewer(this)\n this.imageParticle = new ImageParticle(this)\n this.laTexParticle = new LaTexParticle(this)\n this.textParticle = new TextParticle(this)\n this.tableParticle = new TableParticle(this)\n this.tableTool = new TableTool(this)\n this.tableOperate = new TableOperate(this)\n this.pageNumber = new PageNumber(this)\n this.lineNumber = new LineNumber(this)\n this.waterMark = new Watermark(this)\n this.placeholder = new Placeholder(this)\n this.header = new Header(this, data.header)\n this.footer = new Footer(this, data.footer)\n this.hyperlinkParticle = new HyperlinkParticle(this)\n this.labelParticle = new LabelParticle(this)\n this.dateParticle = new DateParticle(this)\n this.separatorParticle = new SeparatorParticle(this)\n this.pageBreakParticle = new PageBreakParticle(this)\n this.columnBreakParticle = new ColumnBreakParticle(this)\n this.superscriptParticle = new SuperscriptParticle()\n this.subscriptParticle = new SubscriptParticle()\n this.checkboxParticle = new CheckboxParticle(this)\n this.radioParticle = new RadioParticle(this)\n this.blockParticle = new BlockParticle(this)\n this.listParticle = new ListParticle(this)\n this.lineBreakParticle = new LineBreakParticle(this)\n this.whiteSpaceParticle = new WhiteSpaceParticle(this)\n this.control = new Control(this)\n this.pageBorder = new PageBorder(this)\n this.graffiti = new Graffiti(this, data.graffiti)\n\n this.scrollObserver = new ScrollObserver(this)\n this.selectionObserver = new SelectionObserver(this)\n this.imageObserver = new ImageObserver()\n new MouseObserver(this)\n\n this.canvasEvent = new CanvasEvent(this)\n this.cursor = new Cursor(this, this.canvasEvent)\n this.canvasEvent.register()\n this.globalEvent = new GlobalEvent(this, this.canvasEvent)\n this.globalEvent.register()\n\n this.workerManager = new WorkerManager(this)\n new Actuator(this)\n\n const { letterClass } = options\n this.LETTER_REG = new RegExp(`[${letterClass.join('')}]`)\n this.WORD_LIKE_REG = new RegExp(\n `${letterClass.map(letter => `[^${letter}][${letter}]`).join('|')}`\n )\n this.rowList = []\n this.pageRowList = []\n this.painterStyle = null\n this.painterOptions = null\n this.visiblePageNoList = []\n this.intersectionPageNo = 0\n this.lazyRenderIntersectionObserver = null\n this.printModeData = null\n\n if (this.mode === EditorMode.PRINT) {\n this.setPrintData()\n }\n this.render({\n isInit: true,\n isSetCursor: false,\n isFirstRender: true\n })\n }\n\n public setPrintData() {\n this.printModeData = {\n header: this.header.getElementList(),\n main: this.elementList,\n footer: this.footer.getElementList()\n }\n const clonePrintModeData = deepClone(this.printModeData)\n const editorDataKeys: (keyof Omit<IEditorData, 'graffiti'>)[] = [\n 'header',\n 'main',\n 'footer'\n ]\n editorDataKeys.forEach(key => {\n clonePrintModeData[key] = this.control.filterAssistElement(\n clonePrintModeData[key]\n )\n })\n this.setEditorData(clonePrintModeData)\n }\n\n public clearPrintData() {\n if (this.printModeData) {\n this.setEditorData(this.printModeData)\n this.printModeData = null\n }\n }\n\n public getLetterReg(): RegExp {\n return this.LETTER_REG\n }\n\n public getMode(): EditorMode {\n return this.mode\n }\n\n public setMode(payload: EditorMode) {\n if (this.mode === payload) return\n if (payload === EditorMode.PRINT) {\n this.setPrintData()\n }\n if (this.mode === EditorMode.PRINT) {\n this.clearPrintData()\n }\n this.clearSideEffect()\n this.range.clearRange()\n this.mode = payload\n this.options.mode = payload\n this.render({\n isSetCursor: false,\n isSubmitHistory: false\n })\n }\n\n public isReadonly() {\n if (this.area.getActiveAreaInfo()?.area?.mode) {\n return this.area.isReadonly()\n }\n switch (this.mode) {\n case EditorMode.DESIGN:\n return false\n case EditorMode.READONLY:\n case EditorMode.PRINT:\n case EditorMode.GRAFFITI:\n return true\n case EditorMode.FORM:\n return !this.control.getIsRangeWithinControl()\n default:\n return false\n }\n }\n\n public isDisabled() {\n if (this.mode === EditorMode.DESIGN) return false\n const { startIndex, endIndex } = this.range.getRange()\n const elementList = this.getElementList()\n if (this.getTd()?.disabled) return true\n if (startIndex === endIndex) {\n const startElement = elementList[startIndex]\n const nextElement = elementList[startIndex + 1]\n return !!(\n (startElement?.title?.disabled &&\n nextElement?.title?.disabled &&\n startElement.titleId === nextElement.titleId) ||\n (startElement?.control?.disabled &&\n nextElement?.control?.disabled &&\n startElement.controlId === nextElement.controlId)\n )\n }\n const selectionElementList = elementList.slice(startIndex + 1, endIndex + 1)\n return selectionElementList.some(\n element => element.title?.disabled || element.control?.disabled\n )\n }\n\n public isDesignMode() {\n return this.mode === EditorMode.DESIGN\n }\n\n public isPrintMode() {\n return this.mode === EditorMode.PRINT\n }\n\n public isGraffitiMode() {\n return this.mode === EditorMode.GRAFFITI\n }\n\n public getOriginalWidth(): number {\n const { paperDirection, width, height } = this.options\n return paperDirection === PaperDirection.VERTICAL ? width : height\n }\n\n public getOriginalHeight(): number {\n const { paperDirection, width, height } = this.options\n return paperDirection === PaperDirection.VERTICAL ? height : width\n }\n\n public getWidth(): number {\n return Math.floor(this.getOriginalWidth() * this.options.scale)\n }\n\n public getHeight(): number {\n return Math.floor(this.getOriginalHeight() * this.options.scale)\n }\n\n public getMainHeight(): number {\n const pageHeight = this.getHeight()\n return pageHeight - this.getMainOuterHeight()\n }\n\n public getMainOuterHeight(): number {\n const margins = this.getMargins()\n const headerExtraHeight = this.header.getExtraHeight()\n const footerExtraHeight = this.footer.getExtraHeight()\n return margins[0] + margins[2] + headerExtraHeight + footerExtraHeight\n }\n\n public getCanvasWidth(pageNo = -1): number {\n const page = this.getPage(pageNo)\n return page.width\n }\n\n public getCanvasHeight(pageNo = -1): number {\n const page = this.getPage(pageNo)\n return page.height\n }\n\n public getInnerWidth(): number {\n const width = this.getWidth()\n const margins = this.getMargins()\n return width - margins[1] - margins[3]\n }\n\n public getColumnCount(): number {\n const { column, pageMode } = this.options\n if (pageMode !== PageMode.PAGING) return 1\n return column.count\n }\n\n public getColumnWidth(): number {\n const columnCount = this.getColumnCount()\n const innerWidth = this.getInnerWidth()\n if (columnCount <= 1) return innerWidth\n const {\n column: { gap },\n scale\n } = this.options\n return (innerWidth - gap * scale * (columnCount - 1)) / columnCount\n }\n\n public getOriginalInnerWidth(): number {\n const width = this.getOriginalWidth()\n const margins = this.getOriginalMargins()\n return width - margins[1] - margins[3]\n }\n\n public getContextInnerWidth(): number {\n const positionContext = this.position.getPositionContext()\n if (positionContext.isTable) {\n const { index, trIndex, tdIndex } = positionContext\n const elementList = this.getOriginalElementList()\n const td = elementList[index!].trList![trIndex!].tdList[tdIndex!]\n const tdPadding = this.getTdPadding()\n return td!.width! - tdPadding[1] - tdPadding[3]\n }\n return this.getColumnWidth() / this.options.scale\n }\n\n public getMargins(): IMargin {\n return <IMargin>this.getOriginalMargins().map(m => m * this.options.scale)\n }\n\n public getOriginalMargins(): number[] {\n const { margins, paperDirection } = this.options\n return paperDirection === PaperDirection.VERTICAL\n ? margins\n : [margins[1], margins[2], margins[3], margins[0]]\n }\n\n public getPageGap(): number {\n return this.options.pageGap * this.options.scale\n }\n\n public getOriginalPageGap(): number {\n return this.options.pageGap\n }\n\n public getPageNumberBottom(): number {\n const {\n pageNumber: { bottom },\n scale\n } = this.options\n return bottom * scale\n }\n\n public getMarginIndicatorSize(): number {\n return this.options.marginIndicatorSize * this.options.scale\n }\n\n public getDefaultBasicRowMarginHeight(): number {\n return this.options.defaultBasicRowMarginHeight * this.options.scale\n }\n\n public getHighlightMarginHeight(): number {\n return this.options.highlightMarginHeight * this.options.scale\n }\n\n public getTdPadding(): IPadding {\n const {\n table: { tdPadding },\n scale\n } = this.options\n return <IPadding>tdPadding.map(m => m * scale)\n }\n\n public getContainer(): HTMLDivElement {\n return this.container\n }\n\n public getPageContainer(): HTMLDivElement {\n return this.pageContainer\n }\n\n public getVisiblePageNoList(): number[] {\n return this.visiblePageNoList\n }\n\n public setVisiblePageNoList(payload: number[]) {\n this.visiblePageNoList = payload\n if (this.listener.visiblePageNoListChange) {\n this.listener.visiblePageNoListChange(this.visiblePageNoList)\n }\n if (this.eventBus.isSubscribe('visiblePageNoListChange')) {\n this.eventBus.emit('visiblePageNoListChange', this.visiblePageNoList)\n }\n }\n\n public getIntersectionPageNo(): number {\n return this.intersectionPageNo\n }\n\n public setIntersectionPageNo(payload: number) {\n this.intersectionPageNo = payload\n if (this.listener.intersectionPageNoChange) {\n this.listener.intersectionPageNoChange(this.intersectionPageNo)\n }\n if (this.eventBus.isSubscribe('intersectionPageNoChange')) {\n this.eventBus.emit('intersectionPageNoChange', this.intersectionPageNo)\n }\n }\n\n public getPageNo(): number {\n return this.pageNo\n }\n\n public setPageNo(payload: number) {\n this.pageNo = payload\n }\n\n public getRenderCount(): number {\n return this.renderCount\n }\n\n public getPage(pageNo = -1): HTMLCanvasElement {\n return this.pageList[~pageNo ? pageNo : this.pageNo]\n }\n\n public getPageList(): HTMLCanvasElement[] {\n return this.pageList\n }\n\n public getPageCount(): number {\n return this.pageList.length\n }\n\n public getTableRowList(sourceElementList: IElement[]): IRow[] {\n const positionContext = this.position.getPositionContext()\n const { index, trIndex, tdIndex } = positionContext\n return sourceElementList[index!].trList![trIndex!].tdList[tdIndex!].rowList!\n }\n\n public getOriginalRowList() {\n const zoneManager = this.getZone()\n if (zoneManager.isHeaderActive()) {\n return this.header.getRowList()\n }\n if (zoneManager.isFooterActive()) {\n return this.footer.getRowList()\n }\n return this.rowList\n }\n\n public getRowList(): IRow[] {\n const positionContext = this.position.getPositionContext()\n return positionContext.isTable\n ? this.getTableRowList(this.getOriginalElementList())\n : this.getOriginalRowList()\n }\n\n public getPageRowList(): IRow[][] {\n return this.pageRowList\n }\n\n public getCtx(): CanvasRenderingContext2D {\n return this.ctxList[this.pageNo]\n }\n\n public getOptions(): DeepRequired<IEditorOption> {\n return this.options\n }\n\n public getSearch(): Search {\n return this.search\n }\n\n public getGroup(): Group {\n return this.group\n }\n\n public getArea(): Area {\n return this.area\n }\n\n public getBadge(): Badge {\n return this.badge\n }\n\n public getHistoryManager(): HistoryManager {\n return this.historyManager\n }\n\n public getPosition(): Position {\n return this.position\n }\n\n public getZone(): Zone {\n return this.zone\n }\n\n public getRange(): RangeManager {\n return this.range\n }\n\n public getLineBreakParticle(): LineBreakParticle {\n return this.lineBreakParticle\n }\n\n public getTextParticle(): TextParticle {\n return this.textParticle\n }\n\n public getHeaderElementList(): IElement[] {\n return this.header.getElementList()\n }\n\n public getTableElementList(sourceElementList: IElement[]): IElement[] {\n const positionContext = this.position.getPositionContext()\n const { index, trIndex, tdIndex } = positionContext\n return (\n sourceElementList[index!].trList?.[trIndex!].tdList[tdIndex!].value || []\n )\n }\n\n public getElementList(): IElement[] {\n const positionContext = this.position.getPositionContext()\n const elementList = this.getOriginalElementList()\n return positionContext.isTable\n ? this.getTableElementList(elementList)\n : elementList\n }\n\n public getMainElementList(): IElement[] {\n const positionContext = this.position.getPositionContext()\n return positionContext.isTable\n ? this.getTableElementList(this.elementList)\n : this.elementList\n }\n\n public getOriginalElementList() {\n const zoneManager = this.getZone()\n if (zoneManager.isHeaderActive()) {\n return this.getHeaderElementList()\n }\n if (zoneManager.isFooterActive()) {\n return this.getFooterElementList()\n }\n return this.elementList\n }\n\n public getOriginalMainElementList(): IElement[] {\n return this.elementList\n }\n\n public getFooterElementList(): IElement[] {\n return this.footer.getElementList()\n }\n\n public getTd(): ITd | null {\n const positionContext = this.position.getPositionContext()\n const { index, trIndex, tdIndex, isTable } = positionContext\n if (isTable) {\n const elementList = this.getOriginalElementList()\n return elementList[index!].trList![trIndex!].tdList[tdIndex!]\n }\n return null\n }\n\n public insertElementList(\n payload: IElement[],\n options: IInsertElementListOption = {}\n ) {\n if (!payload.length || !this.range.getIsCanInput()) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const { isSubmitHistory = true } = options\n formatElementList(payload, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n let curIndex = -1\n let activeControl = this.control.getActiveControl()\n if (!activeControl && this.control.getIsRangeWithinControl()) {\n this.control.initControl()\n activeControl = this.control.getActiveControl()\n }\n if (activeControl && this.control.getIsRangeWithinControl()) {\n curIndex = activeControl.setValue(payload, undefined, {\n isIgnoreDisabledRule: true\n })\n this.control.emitControlContentChange()\n } else {\n const elementList = this.getElementList()\n const isCollapsed = startIndex === endIndex\n const start = startIndex + 1\n if (!isCollapsed) {\n this.spliceElementList(elementList, start, endIndex - startIndex)\n }\n this.spliceElementList(elementList, start, 0, payload)\n curIndex = startIndex + payload.length\n const preElement = elementList[start - 1]\n if (\n payload[0].listId &&\n preElement &&\n !preElement.listId &&\n preElement?.value === ZERO &&\n (!preElement.type || preElement.type === ElementType.TEXT)\n ) {\n elementList.splice(startIndex, 1)\n curIndex -= 1\n }\n }\n if (~curIndex) {\n this.range.setRange(curIndex, curIndex)\n this.render({\n curIndex,\n isSubmitHistory\n })\n }\n }\n\n public appendElementList(\n elementList: IElement[],\n options: IAppendElementListOption = {}\n ) {\n if (!elementList.length) return\n formatElementList(elementList, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n let curIndex: number\n const { isPrepend, isSubmitHistory = true } = options\n if (isPrepend) {\n this.elementList.splice(1, 0, ...elementList)\n curIndex = elementList.length\n } else {\n this.elementList.push(...elementList)\n curIndex = this.elementList.length - 1\n }\n this.range.setRange(curIndex, curIndex)\n this.render({\n curIndex,\n isSubmitHistory\n })\n }\n\n public spliceElementList(\n elementList: IElement[],\n start: number,\n deleteCount: number,\n items?: IElement[],\n options?: ISpliceElementListOption\n ) {\n const { isIgnoreDeletedRule = false } = options || {}\n const { group, modeRule } = this.options\n if (deleteCount > 0) {\n const endIndex = start + deleteCount\n const endElement = elementList[endIndex]\n const endElementListId = endElement?.listId\n if (\n endElementListId &&\n elementList[start - 1]?.listId !== endElementListId\n ) {\n let startIndex = endIndex\n while (startIndex < elementList.length) {\n const curElement = elementList[startIndex]\n if (\n curElement.listId !== endElementListId ||\n curElement.value === ZERO\n ) {\n break\n }\n delete curElement.listId\n delete curElement.listType\n delete curElement.listStyle\n startIndex++\n }\n }\n if (\n !isIgnoreDeletedRule &&\n !this.isDesignMode() &&\n !this.control.getIsRangeWithinControl()\n ) {\n const tdDeletable = this.getTd()?.deletable\n let deleteIndex = endIndex - 1\n while (deleteIndex >= start) {\n const deleteElement = elementList[deleteIndex]\n if (\n deleteElement?.hide ||\n deleteElement?.control?.hide ||\n deleteElement?.area?.hide ||\n (tdDeletable !== false &&\n deleteElement?.control?.deletable !== false &&\n (!deleteElement.controlId ||\n this.mode !== EditorMode.FORM ||\n !modeRule[this.mode].controlDeletableDisabled) &&\n deleteElement?.title?.deletable !== false &&\n (group.deletable !== false || !deleteElement.groupIds?.length) &&\n (deleteElement?.area?.deletable !== false ||\n deleteElement?.areaIndex !== 0))\n ) {\n elementList.splice(deleteIndex, 1)\n }\n deleteIndex--\n }\n } else {\n elementList.splice(start, deleteCount)\n }\n }\n if (items?.length) {\n for (let i = 0; i < items.length; i++) {\n elementList.splice(start + i, 0, items[i])\n }\n }\n }\n\n public getCanvasEvent(): CanvasEvent {\n return this.canvasEvent\n }\n\n public getGlobalEvent(): GlobalEvent {\n return this.globalEvent\n }\n\n public getListener(): Listener {\n return this.listener\n }\n\n public getEventBus(): EventBus<EventBusMap> {\n return this.eventBus\n }\n\n public getOverride(): Override {\n return this.override\n }\n\n public getCursor(): Cursor {\n return this.cursor\n }\n\n public getPreviewer(): Previewer {\n return this.previewer\n }\n\n public getImageParticle(): ImageParticle {\n return this.imageParticle\n }\n\n public getTableTool(): TableTool {\n return this.tableTool\n }\n\n public getTableOperate(): TableOperate {\n return this.tableOperate\n }\n\n public getTableParticle(): TableParticle {\n return this.tableParticle\n }\n\n public getHeader(): Header {\n return this.header\n }\n\n public getFooter(): Footer {\n return this.footer\n }\n\n public getHyperlinkParticle(): HyperlinkParticle {\n return this.hyperlinkParticle\n }\n\n public getDateParticle(): DateParticle {\n return this.dateParticle\n }\n\n public getListParticle(): ListParticle {\n return this.listParticle\n }\n\n public getCheckboxParticle(): CheckboxParticle {\n return this.checkboxParticle\n }\n\n public getRadioParticle(): RadioParticle {\n return this.radioParticle\n }\n\n public getControl(): Control {\n return this.control\n }\n\n public getWorkerManager(): WorkerManager {\n return this.workerManager\n }\n\n public getImageObserver(): ImageObserver {\n return this.imageObserver\n }\n\n public getI18n(): I18n {\n return this.i18n\n }\n\n public getGraffiti(): Graffiti {\n return this.graffiti\n }\n\n public getRowCount(): number {\n return this.getRowList().length\n }\n\n public async getDataURL(payload: IGetImageOption = {}): Promise<string[]> {\n const { pixelRatio, mode } = payload\n if (pixelRatio) {\n this.setPagePixelRatio(pixelRatio)\n }\n const currentMode = this.mode\n const isSwitchMode = !!mode && currentMode !== mode\n if (isSwitchMode) {\n this.setMode(mode)\n }\n this.render({\n isLazy: false,\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n })\n await this.imageObserver.allSettled()\n const dataUrlList = this.pageList.map(c => c.toDataURL())\n if (pixelRatio) {\n this.setPagePixelRatio(null)\n }\n if (isSwitchMode) {\n this.setMode(currentMode)\n }\n return dataUrlList\n }\n\n public getPainterStyle(): IElementStyle | null {\n return this.painterStyle && Object.keys(this.painterStyle).length\n ? this.painterStyle\n : null\n }\n\n public getPainterOptions(): IPainterOption | null {\n return this.painterOptions\n }\n\n public setPainterStyle(\n payload: IElementStyle | null,\n options?: IPainterOption\n ) {\n this.painterStyle = payload\n this.painterOptions = options || null\n if (this.getPainterStyle()) {\n this.pageList.forEach(c => (c.style.cursor = 'copy'))\n }\n }\n\n public setDefaultRange() {\n if (!this.elementList.length) return\n setTimeout(() => {\n const curIndex = this.elementList.length - 1\n this.range.setRange(curIndex, curIndex)\n this.range.setRangeStyle()\n })\n }\n\n public getIsPagingMode(): boolean {\n return this.options.pageMode === PageMode.PAGING\n }\n\n public setPageMode(payload: PageMode) {\n if (!payload || this.options.pageMode === payload) return\n this.options.pageMode = payload\n if (payload === PageMode.PAGING) {\n const { height } = this.options\n const dpr = this.getPagePixelRatio()\n const canvas = this.pageList[0]\n canvas.style.height = `${height}px`\n canvas.height = height * dpr\n this._initPageContext(this.ctxList[0])\n } else {\n this._disconnectLazyRender()\n this.header.recovery()\n this.footer.recovery()\n this.zone.setZone(EditorZone.MAIN)\n }\n const { startIndex } = this.range.getRange()\n const isCollapsed = this.range.getIsCollapsed()\n this.render({\n isSetCursor: true,\n curIndex: startIndex,\n isSubmitHistory: false\n })\n if (!isCollapsed) {\n this.cursor.drawCursor({\n isShow: false\n })\n }\n setTimeout(() => {\n if (this.listener.pageModeChange) {\n this.listener.pageModeChange(payload)\n }\n if (this.eventBus.isSubscribe('pageModeChange')) {\n this.eventBus.emit('pageModeChange', payload)\n }\n })\n }\n\n public setColumnCount(count: number) {\n if (count === this.options.column.count) return\n this.options.column.count = count\n const { startIndex } = this.range.getRange()\n this.render({\n isSetCursor: true,\n curIndex: startIndex,\n isSubmitHistory: false\n })\n }\n\n public setColumnGap(gap: number) {\n if (gap === this.options.column.gap) return\n this.options.column.gap = gap\n const { startIndex } = this.range.getRange()\n this.render({\n isSetCursor: true,\n curIndex: startIndex,\n isSubmitHistory: false\n })\n }\n\n public setPageScale(payload: number) {\n const dpr = this.getPagePixelRatio()\n this.options.scale = payload\n const width = this.getWidth()\n const height = this.getHeight()\n this.container.style.width = `${width}px`\n this.pageList.forEach((p, i) => {\n p.width = width * dpr\n p.height = height * dpr\n p.style.width = `${width}px`\n p.style.height = `${height}px`\n p.style.marginBottom = `${this.getPageGap()}px`\n this._initPageContext(this.ctxList[i])\n })\n const cursorPosition = this.position.getCursorPosition()\n this.render({\n isSubmitHistory: false,\n isSetCursor: !!cursorPosition,\n curIndex: cursorPosition?.index\n })\n if (this.listener.pageScaleChange) {\n this.listener.pageScaleChange(payload)\n }\n if (this.eventBus.isSubscribe('pageScaleChange')) {\n this.eventBus.emit('pageScaleChange', payload)\n }\n }\n\n public getPagePixelRatio(): number {\n return this.pagePixelRatio || window.devicePixelRatio\n }\n\n public setPagePixelRatio(payload: number | null) {\n if (\n (!this.pagePixelRatio && payload === window.devicePixelRatio) ||\n payload === this.pagePixelRatio\n ) {\n return\n }\n this.pagePixelRatio = payload\n this.setPageDevicePixel()\n }\n\n public setPageDevicePixel() {\n const dpr = this.getPagePixelRatio()\n const width = this.getWidth()\n const height = this.getHeight()\n this.pageList.forEach((p, i) => {\n p.width = width * dpr\n p.height = height * dpr\n this._initPageContext(this.ctxList[i])\n })\n this.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n }\n\n public setPaperSize(width: number, height: number) {\n this.options.width = width\n this.options.height = height\n const dpr = this.getPagePixelRatio()\n const realWidth = this.getWidth()\n const realHeight = this.getHeight()\n this.container.style.width = `${realWidth}px`\n this.pageList.forEach((p, i) => {\n p.width = realWidth * dpr\n p.height = realHeight * dpr\n p.style.width = `${realWidth}px`\n p.style.height = `${realHeight}px`\n this._initPageContext(this.ctxList[i])\n })\n this.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n }\n\n public setPaperDirection(payload: PaperDirection) {\n const dpr = this.getPagePixelRatio()\n this.options.paperDirection = payload\n const width = this.getWidth()\n const height = this.getHeight()\n this.container.style.width = `${width}px`\n this.pageList.forEach((p, i) => {\n p.width = width * dpr\n p.height = height * dpr\n p.style.width = `${width}px`\n p.style.height = `${height}px`\n this._initPageContext(this.ctxList[i])\n })\n this.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n }\n\n public setPaperMargin(payload: IMargin) {\n this.options.margins = payload\n this.render({\n isSubmitHistory: false,\n isSetCursor: false\n })\n }\n\n public getOriginValue(\n options: IGetOriginValueOption = {}\n ): Required<IEditorData> {\n const { pageNo } = options\n let mainElementList = this.elementList\n if (\n Number.isInteger(pageNo) &&\n pageNo! >= 0 &&\n pageNo! < this.pageRowList.length\n ) {\n mainElementList = this.pageRowList[pageNo!].flatMap(\n row => row.elementList\n )\n }\n const data: Required<IEditorData> = {\n header: this.getHeaderElementList(),\n main: mainElementList,\n footer: this.getFooterElementList(),\n graffiti: this.graffiti.getValue()\n }\n return data\n }\n\n public getValue(options: IGetValueOption = {}): IEditorResult {\n const originData = this.getOriginValue(options)\n const { extraPickAttrs } = options\n const data: IEditorData = {\n header: zipElementList(originData.header, {\n extraPickAttrs\n }),\n main: zipElementList(originData.main, {\n extraPickAttrs,\n isClassifyArea: true\n }),\n footer: zipElementList(originData.footer, {\n extraPickAttrs\n }),\n graffiti: originData.graffiti\n }\n return {\n version,\n data,\n options: deepClone(this.options)\n }\n }\n\n public setValue(payload: Partial<IEditorData>, options?: ISetValueOption) {\n const { header, main, footer } = deepClone(payload)\n if (!header && !main && !footer) return\n const { isSetCursor = false } = options || {}\n const pageComponentData = [header, main, footer]\n pageComponentData.forEach(data => {\n if (!data) return\n formatElementList(data, {\n editorOptions: this.options,\n isForceCompensation: true\n })\n })\n this.setEditorData({\n header,\n main,\n footer\n })\n this.historyManager.recovery()\n const curIndex = isSetCursor\n ? main?.length\n ? main.length - 1\n : 0\n : undefined\n if (curIndex !== undefined) {\n this.range.setRange(curIndex, curIndex)\n }\n this.render({\n curIndex,\n isSetCursor,\n isFirstRender: true\n })\n }\n\n public setEditorData(payload: Partial<Omit<IEditorData, 'graffiti'>>) {\n const { header, main, footer } = payload\n if (header) {\n this.header.setElementList(header)\n }\n if (main) {\n this.elementList = main\n }\n if (footer) {\n this.footer.setElementList(footer)\n }\n }\n\n private _wrapContainer(rootContainer: HTMLElement): HTMLDivElement {\n const container = document.createElement('div')\n rootContainer.append(container)\n return container\n }\n\n private _formatContainer() {\n this.container.style.position = 'relative'\n this.container.style.width = `${this.getWidth()}px`\n this.container.setAttribute(EDITOR_COMPONENT, EditorComponent.MAIN)\n }\n\n private _createPageContainer(): HTMLDivElement {\n const pageContainer = document.createElement('div')\n pageContainer.classList.add(`${EDITOR_PREFIX}-page-container`)\n this.container.append(pageContainer)\n return pageContainer\n }\n\n private _createPage(pageNo: number) {\n const width = this.getWidth()\n const height = this.getHeight()\n const canvas = document.createElement('canvas')\n canvas.style.width = `${width}px`\n canvas.style.height = `${height}px`\n canvas.style.display = 'block'\n canvas.style.backgroundColor = '#ffffff'\n canvas.style.marginBottom = `${this.getPageGap()}px`\n canvas.setAttribute('data-index', String(pageNo))\n this.pageContainer.append(canvas)\n const dpr = this.getPagePixelRatio()\n canvas.width = width * dpr\n canvas.height = height * dpr\n canvas.style.cursor = 'text'\n const ctx = canvas.getContext('2d')!\n this._initPageContext(ctx)\n this.pageList.push(canvas)\n this.ctxList.push(ctx)\n }\n\n private _initPageContext(ctx: CanvasRenderingContext2D) {\n const dpr = this.getPagePixelRatio()\n ctx.scale(dpr, dpr)\n ctx.letterSpacing = '0px'\n ctx.wordSpacing = '0px'\n ctx.direction = 'ltr'\n }\n\n public getElementFont(el: IElement, scale = 1): string {\n const { defaultSize, defaultFont } = this.options\n const font = el.font || defaultFont\n const size = el.actualSize || el.size || defaultSize\n return `${el.italic ? 'italic ' : ''}${el.bold ? 'bold ' : ''}${\n size * scale\n }px ${font}`\n }\n\n public getElementSize(el: IElement) {\n return el.actualSize || el.size || this.options.defaultSize\n }\n\n public getElementRowMargin(el: IElement) {\n const {\n defaultSize,\n defaultBasicRowMarginHeight,\n defaultRowMargin,\n scale\n } = this.options\n const fontSize = el.size || defaultSize\n let ratio = 1\n if (fontSize < 12) {\n ratio = fontSize / 12\n } else if (fontSize > 30) {\n ratio = 1 + (fontSize - 30) / 30\n }\n return (\n defaultBasicRowMarginHeight *\n ratio *\n (el.rowMargin ?? defaultRowMargin) *\n scale\n )\n }\n\n public computeRowList(payload: IComputeRowListPayload) {\n const {\n innerWidth,\n elementList,\n isPagingMode = false,\n isFromTable = false,\n startX = 0,\n startY = 0,\n pageHeight = 0,\n mainOuterHeight = 0,\n surroundElementList = []\n } = payload\n const {\n defaultSize,\n scale,\n table: { tdPadding, defaultTrMinHeight },\n defaultTabWidth\n } = this.options\n const defaultBasicRowMarginHeight = this.getDefaultBasicRowMarginHeight()\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D\n const listStyleMap = this.listParticle.computeListStyle(ctx, elementList)\n const rowList: IRow[] = []\n if (elementList.length) {\n rowList.push({\n width: 0,\n height: 0,\n ascent: 0,\n elementList: [],\n startIndex: 0,\n rowIndex: 0,\n rowFlex: elementList?.[0]?.rowFlex || elementList?.[1]?.rowFlex\n })\n }\n let x = startX\n let y = startY\n let pageNo = 0\n let listId: string | undefined\n let listIndex = 0\n let listLevelIndex: Map<number, number> = new Map()\n let prevListLevel = 0\n let controlRealWidth = 0\n for (let i = 0; i < elementList.length; i++) {\n const curRow: IRow = rowList[rowList.length - 1]\n const element = elementList[i]\n const rowMargin = this.getElementRowMargin(element)\n const metrics: IElementMetrics = {\n width: 0,\n height: 0,\n boundingBoxAscent: 0,\n boundingBoxDescent: 0\n }\n const listIndentWidth = element.listId\n ? this.listParticle.getListIndentWidth(element)\n : 0\n const offsetX =\n curRow.offsetX ||\n ((element.listId && listStyleMap.get(element.listId)) || 0) +\n listIndentWidth ||\n 0\n const availableWidth = innerWidth - offsetX\n const isStartElement = curRow.elementList.length === 1\n x += isStartElement ? offsetX : 0\n y += isStartElement ? curRow.offsetY || 0 : 0\n if (\n (element.hide || element.control?.hide || element.area?.hide) &&\n !this.isDesignMode()\n ) {\n const preElement = curRow.elementList[curRow.elementList.length - 1]\n metrics.height =\n preElement?.metrics.height || this.options.defaultSize * scale\n metrics.boundingBoxAscent = preElement?.metrics.boundingBoxAscent || 0\n metrics.boundingBoxDescent = preElement?.metrics.boundingBoxDescent || 0\n } else if (\n element.type === ElementType.IMAGE ||\n element.type === ElementType.LATEX\n ) {\n if (\n element.imgDisplay === ImageDisplay.SURROUND ||\n element.imgDisplay === ImageDisplay.FLOAT_TOP ||\n element.imgDisplay === ImageDisplay.FLOAT_BOTTOM\n ) {\n metrics.width = 0\n metrics.height = 0\n metrics.boundingBoxDescent = 0\n } else {\n const elementWidth = element.width! * scale\n const elementHeight = element.height! * scale\n if (elementWidth > availableWidth) {\n const adaptiveHeight =\n (elementHeight * availableWidth) / elementWidth\n element.width = availableWidth / scale\n element.height = adaptiveHeight / scale\n metrics.width = availableWidth\n metrics.height = adaptiveHeight\n metrics.boundingBoxDescent = adaptiveHeight\n } else {\n metrics.width = elementWidth\n metrics.height = elementHeight\n metrics.boundingBoxDescent = elementHeight\n }\n }\n metrics.boundingBoxAscent = 0\n } else if (element.type === ElementType.TABLE) {\n const tdPaddingWidth = tdPadding[1] + tdPadding[3]\n const tdPaddingHeight = tdPadding[0] + tdPadding[2]\n if (element.pagingId) {\n let tableIndex = i + 1\n let combineCount = 0\n while (tableIndex < elementList.length) {\n const nextElement = elementList[tableIndex]\n if (nextElement.pagingId === element.pagingId) {\n const nexTrList = nextElement.trList!.filter(\n tr => !tr.pagingRepeat\n )\n element.trList!.push(...nexTrList)\n element.height! += nextElement.height!\n tableIndex++\n combineCount++\n } else {\n break\n }\n }\n if (combineCount) {\n elementList.splice(i + 1, combineCount)\n }\n }\n element.pagingIndex = element.pagingIndex ?? 0\n const trList = element.trList!\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n tr.height = tr.minHeight || defaultTrMinHeight\n tr.minHeight = tr.height\n }\n this.tableParticle.computeRowColInfo(element)\n for (let t = 0; t < trList.length; t++) {\n const tr = trList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const rowList = this.computeRowList({\n innerWidth: (td.width! - tdPaddingWidth) * scale,\n elementList: td.value,\n isFromTable: true,\n isPagingMode\n })\n const rowHeight = rowList.reduce((pre, cur) => pre + cur.height, 0)\n td.rowList = rowList\n const curTdHeight = rowHeight / scale + tdPaddingHeight\n if (td.height! < curTdHeight) {\n const extraHeight = curTdHeight - td.height!\n const changeTr = trList[t + td.rowspan - 1]\n changeTr.height += extraHeight\n changeTr.tdList.forEach(changeTd => {\n changeTd.height! += extraHeight\n if (!changeTd.realHeight) {\n changeTd.realHeight = changeTd.height!\n } else {\n changeTd.realHeight! += extraHeight\n }\n })\n }\n let curTdMinHeight = 0\n let curTdRealHeight = 0\n let i = 0\n while (i < td.rowspan) {\n const curTr = trList[i + t] || trList[t]\n curTdMinHeight += curTr.minHeight!\n curTdRealHeight += curTr.height!\n i++\n }\n td.realMinHeight = curTdMinHeight\n td.realHeight = curTdRealHeight\n td.mainHeight = curTdHeight\n }\n }\n const reduceTrList = this.tableParticle.getTrListGroupByCol(trList)\n for (let t = 0; t < reduceTrList.length; t++) {\n const tr = reduceTrList[t]\n let reduceHeight = -1\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const curTdRealHeight = td.realHeight!\n const curTdHeight = td.mainHeight!\n const curTdMinHeight = td.realMinHeight!\n const curReduceHeight =\n curTdHeight < curTdMinHeight\n ? curTdRealHeight - curTdMinHeight\n : curTdRealHeight - curTdHeight\n if (!~reduceHeight || curReduceHeight < reduceHeight) {\n reduceHeight = curReduceHeight\n }\n }\n if (reduceHeight > 0) {\n const changeTr = trList[t]\n changeTr.height -= reduceHeight\n changeTr.tdList.forEach(changeTd => {\n changeTd.height! -= reduceHeight\n changeTd.realHeight! -= reduceHeight\n })\n }\n }\n this.tableParticle.computeRowColInfo(element)\n const tableHeight = this.tableParticle.getTableHeight(element)\n let tableWidth = this.tableParticle.getTableWidth(element)\n // Constrain table width to available column width (e.g. in 2-column mode)\n const maxTableWidth = availableWidth / scale\n if (tableWidth > maxTableWidth && element.colgroup) {\n const ratio = maxTableWidth / tableWidth\n for (let c = 0; c < element.colgroup.length; c++) {\n element.colgroup[c].width *= ratio\n }\n // Recompute row/col info with new colgroup widths\n this.tableParticle.computeRowColInfo(element)\n // Recompute cell layouts with new td widths\n const constrainedTrList = element.trList!\n for (let t = 0; t < constrainedTrList.length; t++) {\n const tr = constrainedTrList[t]\n tr.height = tr.minHeight || defaultTrMinHeight\n tr.minHeight = tr.height\n }\n for (let t = 0; t < constrainedTrList.length; t++) {\n const tr = constrainedTrList[t]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const tdRowList = this.computeRowList({\n innerWidth: (td.width! - tdPaddingWidth) * scale,\n elementList: td.value,\n isFromTable: true,\n isPagingMode\n })\n const rowHeight =\n tdRowList.reduce((pre, cur) => pre + cur.height, 0)\n td.rowList = tdRowList\n const curTdHeight = rowHeight / scale + tdPaddingHeight\n if (td.height! < curTdHeight) {\n const extraHeight = curTdHeight - td.height!\n const changeTr = constrainedTrList[t + td.rowspan - 1]\n changeTr.height += extraHeight\n changeTr.tdList.forEach(changeTd => {\n changeTd.height! += extraHeight\n if (!changeTd.realHeight) {\n changeTd.realHeight = changeTd.height!\n } else {\n changeTd.realHeight! += extraHeight\n }\n })\n }\n let curTdMinHeight = 0\n let curTdRealHeight = 0\n let idx = 0\n while (idx < td.rowspan) {\n const curTr = constrainedTrList[idx + t] || constrainedTrList[t]\n curTdMinHeight += curTr.minHeight!\n curTdRealHeight += curTr.height!\n idx++\n }\n td.realMinHeight = curTdMinHeight\n td.realHeight = curTdRealHeight\n td.mainHeight = curTdHeight\n }\n }\n this.tableParticle.computeRowColInfo(element)\n tableWidth = maxTableWidth\n }\n element.width = tableWidth\n element.height = this.tableParticle.getTableHeight(element)\n const elementWidth = tableWidth * scale\n const elementHeight = element.height * scale\n metrics.width = elementWidth\n metrics.height = elementHeight\n metrics.boundingBoxDescent = elementHeight\n metrics.boundingBoxAscent = -rowMargin\n if (elementList[i + 1]?.type === ElementType.TABLE) {\n metrics.boundingBoxAscent -= rowMargin\n }\n if (isPagingMode) {\n const height = this.getHeight()\n const marginHeight = this.getMainOuterHeight()\n let curPagePreHeight = marginHeight\n for (let r = 0; r < rowList.length; r++) {\n const row = rowList[r]\n const rowOffsetY = row.offsetY || 0\n if (\n row.height + curPagePreHeight + rowOffsetY > height ||\n rowList[r - 1]?.isPageBreak\n ) {\n curPagePreHeight = marginHeight + row.height + rowOffsetY\n } else {\n curPagePreHeight += row.height + rowOffsetY\n }\n }\n const rowMarginHeight = rowMargin * 2 * scale\n const firstTrHeight = element.trList![0].height! * scale\n if (\n curPagePreHeight + firstTrHeight + rowMarginHeight > height ||\n (element.pagingIndex !== 0 && element.trList![0].pagingRepeat) ||\n elementList[i - 1]?.type === ElementType.PAGE_BREAK\n ) {\n curPagePreHeight = marginHeight\n }\n if (curPagePreHeight + rowMarginHeight + elementHeight > height) {\n const trList = element.trList!\n let deleteStart = 0\n let deleteCount = 0\n let preTrHeight = 0\n if (trList.length > 1) {\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n const trHeight = tr.height * scale\n if (\n curPagePreHeight + rowMarginHeight + preTrHeight + trHeight >\n height\n ) {\n const rowColCount = tr.tdList.reduce(\n (pre, cur) => pre + cur.colspan,\n 0\n )\n if (element.colgroup?.length !== rowColCount) {\n deleteCount = 0\n }\n break\n } else {\n deleteStart = r + 1\n deleteCount = trList.length - deleteStart\n preTrHeight += trHeight\n }\n }\n }\n if (deleteCount) {\n const cloneTrList = trList.splice(deleteStart, deleteCount)\n const cloneTrHeight = cloneTrList.reduce(\n (pre, cur) => pre + cur.height,\n 0\n )\n const cloneTrRealHeight = cloneTrHeight * scale\n const pagingId = element.pagingId || getUUID()\n element.pagingId = pagingId\n element.height -= cloneTrHeight\n metrics.height -= cloneTrRealHeight\n metrics.boundingBoxDescent -= cloneTrRealHeight\n const cloneElement = deepClone(element)\n cloneElement.pagingId = pagingId\n cloneElement.pagingIndex = element.pagingIndex! + 1\n const repeatTrList = trList.filter(tr => tr.pagingRepeat)\n if (repeatTrList.length) {\n const cloneRepeatTrList = deepClone(repeatTrList)\n cloneRepeatTrList.forEach(tr => (tr.id = getUUID()))\n cloneTrList.unshift(...cloneRepeatTrList)\n }\n cloneElement.trList = cloneTrList\n cloneElement.id = getUUID()\n this.spliceElementList(elementList, i + 1, 0, [cloneElement])\n }\n }\n if (element.pagingId) {\n const positionContext = this.position.getPositionContext()\n if (positionContext.isTable) {\n let newPositionContextIndex = -1\n let newPositionContextTrIndex = -1\n let tableIndex = i\n while (tableIndex < elementList.length) {\n const curElement = elementList[tableIndex]\n if (curElement.pagingId !== element.pagingId) break\n const trIndex = curElement.trList!.findIndex(\n r => r.id === positionContext.trId\n )\n if (~trIndex) {\n newPositionContextIndex = tableIndex\n newPositionContextTrIndex = trIndex\n break\n }\n tableIndex++\n }\n if (~newPositionContextIndex) {\n positionContext.index = newPositionContextIndex\n positionContext.trIndex = newPositionContextTrIndex\n this.position.setPositionContext(positionContext)\n }\n }\n }\n }\n } else if (element.type === ElementType.SEPARATOR) {\n const {\n separator: { lineWidth: defaultLineWidth }\n } = this.options\n const lineWidth = element.lineWidth || defaultLineWidth\n element.width = availableWidth / scale\n metrics.width = availableWidth\n metrics.height = lineWidth * scale\n metrics.boundingBoxAscent = -rowMargin\n metrics.boundingBoxDescent = -rowMargin + metrics.height\n } else if (element.type === ElementType.PAGE_BREAK) {\n element.width = availableWidth / scale\n metrics.width = availableWidth\n metrics.height = defaultSize\n } else if (element.type === ElementType.COLUMN_BREAK) {\n element.width = availableWidth / scale\n metrics.width = availableWidth\n metrics.height = defaultSize\n } else if (\n element.type === ElementType.RADIO ||\n element.controlComponent === ControlComponent.RADIO\n ) {\n const { width, height, gap } = this.options.radio\n const elementWidth = width + gap * 2\n element.width = elementWidth\n metrics.width = elementWidth * scale\n metrics.height = height * scale\n } else if (\n element.type === ElementType.CHECKBOX ||\n element.controlComponent === ControlComponent.CHECKBOX\n ) {\n const { width, height, gap } = this.options.checkbox\n const elementWidth = width + gap * 2\n element.width = elementWidth\n metrics.width = elementWidth * scale\n metrics.height = height * scale\n } else if (element.type === ElementType.TAB) {\n metrics.width = defaultTabWidth * scale\n metrics.height = defaultSize * scale\n metrics.boundingBoxDescent = 0\n metrics.boundingBoxAscent =\n this.textParticle.getBasisWordBoundingBoxAscent(ctx, ctx.font)\n } else if (element.type === ElementType.BLOCK) {\n if (!element.width) {\n metrics.width = availableWidth\n } else {\n const elementWidth = element.width * scale\n metrics.width = Math.min(elementWidth, availableWidth)\n }\n metrics.height = element.height! * scale\n metrics.boundingBoxDescent = metrics.height\n metrics.boundingBoxAscent = 0\n } else if (element.type === ElementType.LABEL) {\n const {\n defaultSize,\n label: { defaultPadding }\n } = this.options\n const labelPadding = element.label?.padding || defaultPadding\n ctx.font = this.getElementFont(element)\n const fontMetrics = this.textParticle.measureText(ctx, element)\n metrics.width =\n (fontMetrics.width + labelPadding[1] + labelPadding[3]) * scale\n metrics.height = (element.size || defaultSize) * scale\n metrics.boundingBoxDescent = labelPadding[2] * scale\n metrics.boundingBoxAscent =\n (labelPadding[0] + fontMetrics.actualBoundingBoxAscent) * scale\n } else {\n const size = element.size || defaultSize\n if (\n element.type === ElementType.SUPERSCRIPT ||\n element.type === ElementType.SUBSCRIPT\n ) {\n element.actualSize = Math.ceil(size * 0.6)\n }\n metrics.height = (element.actualSize || size) * scale\n ctx.font = this.getElementFont(element)\n const fontMetrics = this.textParticle.measureText(ctx, element)\n metrics.width = fontMetrics.width * scale\n if (element.letterSpacing) {\n metrics.width += element.letterSpacing * scale\n }\n const basisMetrics = this.textParticle.measureBasisWord(\n ctx,\n element.font!\n )\n metrics.boundingBoxAscent = basisMetrics.actualBoundingBoxAscent * scale\n metrics.boundingBoxDescent =\n basisMetrics.actualBoundingBoxDescent * scale\n if (element.type === ElementType.SUPERSCRIPT) {\n metrics.boundingBoxAscent += metrics.height / 2\n } else if (element.type === ElementType.SUBSCRIPT) {\n metrics.boundingBoxDescent += metrics.height / 2\n }\n }\n const ascent =\n !element.hide &&\n ((element.imgDisplay !== ImageDisplay.INLINE &&\n element.type === ElementType.IMAGE) ||\n element.type === ElementType.LATEX)\n ? metrics.height + rowMargin\n : metrics.boundingBoxAscent + rowMargin\n const height =\n rowMargin +\n metrics.boundingBoxAscent +\n metrics.boundingBoxDescent +\n rowMargin\n const rowElement: IRowElement = Object.assign(element, {\n metrics,\n left: 0,\n style: this.getElementFont(element, scale)\n })\n if (rowElement.control?.minWidth) {\n if (rowElement.controlComponent) {\n controlRealWidth += metrics.width\n }\n if (rowElement.controlComponent === ControlComponent.POSTFIX) {\n this.control.setMinWidthControlInfo({\n row: curRow,\n rowElement,\n availableWidth,\n controlRealWidth\n })\n controlRealWidth = 0\n }\n }\n const preElement = elementList[i - 1]\n let nextElement = elementList[i + 1]\n let curRowWidth = curRow.width + metrics.width\n if (this.options.wordBreak === WordBreak.BREAK_WORD) {\n if (\n (!preElement?.type || preElement?.type === ElementType.TEXT) &&\n (!element.type || element.type === ElementType.TEXT)\n ) {\n const word = `${preElement?.value || ''}${element.value}`\n if (this.WORD_LIKE_REG.test(word)) {\n const { width, endElement } = this.textParticle.measureWord(\n ctx,\n elementList,\n i\n )\n const wordWidth = width * scale\n if (endElement && wordWidth <= availableWidth) {\n curRowWidth += wordWidth\n nextElement = endElement\n }\n }\n const punctuationWidth = this.textParticle.measurePunctuationWidth(\n ctx,\n nextElement\n )\n curRowWidth += punctuationWidth * scale\n }\n }\n if (element.listId) {\n const curLevel = element.listLevel ?? 0\n if (element.listId !== listId) {\n listIndex = 0\n listLevelIndex = new Map()\n listLevelIndex.set(curLevel, 0)\n prevListLevel = curLevel\n } else if (element.value === ZERO && !element.listWrap) {\n if (curLevel !== prevListLevel) {\n // Level changed: reset counters for deeper levels\n if (curLevel > prevListLevel) {\n // Indent: start new counter at this level\n listLevelIndex.set(curLevel, 0)\n } else {\n // Outdent: clear all deeper level counters\n for (const [lvl] of listLevelIndex) {\n if (lvl > curLevel) {\n listLevelIndex.delete(lvl)\n }\n }\n listLevelIndex.set(curLevel, (listLevelIndex.get(curLevel) ?? -1) + 1)\n }\n } else {\n listLevelIndex.set(curLevel, (listLevelIndex.get(curLevel) ?? -1) + 1)\n }\n listIndex = listLevelIndex.get(curLevel) ?? 0\n prevListLevel = curLevel\n }\n }\n listId = element.listId\n const surroundPosition = this.position.setSurroundPosition({\n pageNo,\n rowElement,\n row: curRow,\n rowElementRect: {\n x,\n y,\n height,\n width: metrics.width\n },\n availableWidth,\n surroundElementList\n })\n x = surroundPosition.x\n curRowWidth += surroundPosition.rowIncreaseWidth\n x += metrics.width\n const isForceBreak =\n element.type === ElementType.SEPARATOR ||\n element.type === ElementType.TABLE ||\n preElement?.type === ElementType.TABLE ||\n preElement?.type === ElementType.BLOCK ||\n element.type === ElementType.BLOCK ||\n preElement?.imgDisplay === ImageDisplay.INLINE ||\n element.imgDisplay === ImageDisplay.INLINE ||\n preElement?.listId !== element.listId ||\n (preElement?.areaId !== element.areaId && !element.area?.hide) ||\n (element.control?.flexDirection === FlexDirection.COLUMN &&\n (element.controlComponent === ControlComponent.CHECKBOX ||\n element.controlComponent === ControlComponent.RADIO) &&\n preElement?.controlComponent === ControlComponent.VALUE) ||\n (i !== 0 && element.value === ZERO && !element.area?.hide)\n const isWidthNotEnough = curRowWidth > availableWidth\n const isWrap = isForceBreak || isWidthNotEnough\n if (isWrap) {\n const row: IRow = {\n width: metrics.width,\n height,\n startIndex: i,\n elementList: [rowElement],\n ascent,\n rowIndex: curRow.rowIndex + 1,\n rowFlex: elementList[i]?.rowFlex || elementList[i + 1]?.rowFlex,\n isPageBreak: element.type === ElementType.PAGE_BREAK,\n isColumnBreak: element.type === ElementType.COLUMN_BREAK\n }\n if (\n rowElement.controlComponent !== ControlComponent.PREFIX &&\n rowElement.control?.indentation === ControlIndentation.VALUE_START\n ) {\n const preStartIndex = curRow.elementList.findIndex(\n el =>\n el.controlId === rowElement.controlId &&\n el.controlComponent !== ControlComponent.PREFIX\n )\n if (~preStartIndex) {\n const preRowPositionList = this.position.computeRowPosition({\n row: curRow,\n innerWidth: this.getInnerWidth()\n })\n const valueStartPosition = preRowPositionList[preStartIndex]\n if (valueStartPosition) {\n row.offsetX = valueStartPosition.coordinate.leftTop[0]\n }\n }\n }\n if (element.listId) {\n row.isList = true\n const baseListOffset = listStyleMap.get(element.listId!) || 0\n const rowListIndent = this.listParticle.getListIndentWidth(element)\n row.offsetX = baseListOffset + rowListIndent\n row.listIndex = listIndex\n }\n row.offsetY =\n !isFromTable &&\n element.area?.top &&\n element.areaId !== elementList[i - 1]?.areaId\n ? element.area.top * scale\n : 0\n rowList.push(row)\n } else {\n curRow.width += metrics.width\n if (\n i === 0 &&\n (getIsBlockElement(elementList[1]) || !!elementList[1]?.areaId)\n ) {\n curRow.height = defaultBasicRowMarginHeight\n curRow.ascent = defaultBasicRowMarginHeight\n } else if (curRow.height < height) {\n curRow.height = height\n curRow.ascent = ascent\n }\n curRow.elementList.push(rowElement)\n }\n if (isWrap || i === elementList.length - 1) {\n curRow.isWidthNotEnough = isWidthNotEnough && !isForceBreak\n if (\n !curRow.isSurround &&\n (preElement?.rowFlex === RowFlex.JUSTIFY ||\n (preElement?.rowFlex === RowFlex.ALIGNMENT &&\n curRow.isWidthNotEnough))\n ) {\n const rowElementList =\n curRow.elementList[0]?.value === ZERO\n ? curRow.elementList.slice(1)\n : curRow.elementList\n // Word-level justify: distribute gap to spaces only\n const spaceIndices: number[] = []\n for (let e = 0; e < rowElementList.length; e++) {\n const val = rowElementList[e].value\n if (val === ' ' || val === '\\u00A0' || val === '\\u0020') {\n spaceIndices.push(e)\n }\n }\n if (spaceIndices.length > 0) {\n const gap =\n (availableWidth - curRow.width) / spaceIndices.length\n for (const idx of spaceIndices) {\n rowElementList[idx].metrics.width += gap\n }\n } else {\n // Fallback to character-level for CJK or text without spaces\n const gap =\n (availableWidth - curRow.width) / (rowElementList.length - 1)\n for (let e = 0; e < rowElementList.length - 1; e++) {\n rowElementList[e].metrics.width += gap\n }\n }\n curRow.width = availableWidth\n }\n }\n if (isWrap) {\n x = startX\n y += curRow.height\n if (\n isPagingMode &&\n !isFromTable &&\n pageHeight &&\n (y - startY + mainOuterHeight + height > pageHeight ||\n element.type === ElementType.PAGE_BREAK)\n ) {\n y = startY\n deleteSurroundElementList(surroundElementList, pageNo)\n pageNo += 1\n }\n rowElement.left = 0\n const nextRow = rowList[rowList.length - 1]\n const surroundPosition = this.position.setSurroundPosition({\n pageNo,\n rowElement,\n row: nextRow,\n rowElementRect: {\n x,\n y,\n height,\n width: metrics.width\n },\n availableWidth,\n surroundElementList\n })\n x = surroundPosition.x\n x += metrics.width\n }\n }\n return rowList\n }\n\n private _computePageList(): IRow[][] {\n const pageRowList: IRow[][] = [[]]\n const {\n pageMode,\n pageNumber: { maxPageNo }\n } = this.options\n const height = this.getHeight()\n const marginHeight = this.getMainOuterHeight()\n let pageHeight = marginHeight\n let pageNo = 0\n if (pageMode === PageMode.CONTINUITY) {\n pageRowList[0] = this.rowList\n for (let i = 0; i < this.rowList.length; i++) {\n this.rowList[i].columnNo = 0\n }\n pageHeight += this.rowList.reduce(\n (pre, cur) => pre + cur.height + (cur.offsetY || 0),\n 0\n )\n const dpr = this.getPagePixelRatio()\n const pageDom = this.pageList[0]\n const pageDomHeight = Number(pageDom.style.height.replace('px', ''))\n if (pageHeight > pageDomHeight) {\n pageDom.style.height = `${pageHeight}px`\n pageDom.height = pageHeight * dpr\n } else {\n const reduceHeight = pageHeight < height ? height : pageHeight\n pageDom.style.height = `${reduceHeight}px`\n pageDom.height = reduceHeight * dpr\n }\n this._initPageContext(this.ctxList[0])\n } else {\n const columnCount = this.getColumnCount()\n let columnNo = 0\n for (let i = 0; i < this.rowList.length; i++) {\n const row = this.rowList[i]\n const rowOffsetY = row.offsetY || 0\n const isPageBreak = this.rowList[i - 1]?.isPageBreak\n const isColumnBreak = this.rowList[i - 1]?.isColumnBreak\n if (\n row.height + rowOffsetY + pageHeight > height ||\n isPageBreak ||\n isColumnBreak\n ) {\n if (\n (!isPageBreak || isColumnBreak) &&\n columnCount > 1 &&\n columnNo < columnCount - 1\n ) {\n // Column break or height overflow → move to next column\n columnNo++\n pageHeight = marginHeight + row.height + rowOffsetY\n row.columnNo = columnNo\n pageRowList[pageNo].push(row)\n } else {\n if (Number.isInteger(maxPageNo) && pageNo >= maxPageNo!) {\n this.elementList = this.elementList.slice(0, row.startIndex)\n break\n }\n columnNo = 0\n pageHeight = marginHeight + row.height + rowOffsetY\n row.columnNo = columnNo\n pageRowList.push([row])\n pageNo++\n }\n } else {\n row.columnNo = columnNo\n pageHeight += row.height + rowOffsetY\n pageRowList[pageNo].push(row)\n }\n }\n }\n return pageRowList\n }\n\n private _drawHighlight(\n ctx: CanvasRenderingContext2D,\n payload: IDrawRowPayload\n ) {\n const { rowList, positionList, elementList } = payload\n const marginHeight = this.getDefaultBasicRowMarginHeight()\n const highlightMarginHeight = this.getHighlightMarginHeight()\n for (let i = 0; i < rowList.length; i++) {\n const curRow = rowList[i]\n for (let j = 0; j < curRow.elementList.length; j++) {\n const element = curRow.elementList[j]\n const preElement = curRow.elementList[j - 1]\n const highlight =\n element.highlight ||\n this.control.getControlHighlight(elementList, curRow.startIndex + j)\n if (highlight) {\n if (\n preElement &&\n preElement.highlight &&\n preElement.highlight !== element.highlight\n ) {\n this.highlight.render(ctx)\n }\n const {\n coordinate: {\n leftTop: [x, y]\n }\n } = positionList[curRow.startIndex + j]\n const offsetX = element.left || 0\n this.highlight.recordFillInfo(\n ctx,\n x - offsetX,\n y + marginHeight - highlightMarginHeight,\n element.metrics.width + offsetX,\n curRow.height - 2 * marginHeight + 2 * highlightMarginHeight,\n highlight\n )\n } else if (preElement?.highlight) {\n this.highlight.render(ctx)\n }\n }\n this.highlight.render(ctx)\n }\n }\n\n public drawRow(ctx: CanvasRenderingContext2D, payload: IDrawRowPayload) {\n this._drawHighlight(ctx, payload)\n const {\n scale,\n table: { tdPadding },\n group,\n lineBreak,\n whiteSpace\n } = this.options\n const {\n rowList,\n pageNo,\n elementList,\n positionList,\n startIndex,\n zone,\n isDrawLineBreak = !lineBreak.disabled,\n isDrawWhiteSpace = !whiteSpace.disabled\n } = payload\n const isPrintMode = this.isPrintMode()\n const isGraffitiMode = this.isGraffitiMode()\n const { isCrossRowCol, tableId } = this.range.getRange()\n let index = startIndex\n for (let i = 0; i < rowList.length; i++) {\n const curRow = rowList[i]\n const rangeRecord: IElementFillRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }\n let tableRangeElement: IElement | null = null\n for (let j = 0; j < curRow.elementList.length; j++) {\n const element = curRow.elementList[j]\n const metrics = element.metrics\n const {\n ascent: offsetY,\n coordinate: {\n leftTop: [x, y]\n }\n } = positionList[curRow.startIndex + j]\n const preElement = curRow.elementList[j - 1]\n if (\n (element.hide || element.control?.hide || element.area?.hide) &&\n !this.isDesignMode()\n ) {\n this.textParticle.complete()\n } else if (element.type === ElementType.IMAGE) {\n this.textParticle.complete()\n if (\n element.imgDisplay !== ImageDisplay.SURROUND &&\n element.imgDisplay !== ImageDisplay.FLOAT_TOP &&\n element.imgDisplay !== ImageDisplay.FLOAT_BOTTOM\n ) {\n this.imageParticle.render(ctx, element, x, y + offsetY)\n }\n } else if (element.type === ElementType.LATEX) {\n this.textParticle.complete()\n this.laTexParticle.render(ctx, element, x, y + offsetY)\n } else if (element.type === ElementType.TABLE) {\n if (isCrossRowCol) {\n rangeRecord.x = x\n rangeRecord.y = y\n tableRangeElement = element\n }\n this.tableParticle.render(ctx, element, x, y)\n } else if (element.type === ElementType.HYPERLINK) {\n this.textParticle.complete()\n this.hyperlinkParticle.render(ctx, element, x, y + offsetY)\n } else if (element.type === ElementType.LABEL) {\n this.textParticle.complete()\n this.labelParticle.render(ctx, element, x, y + offsetY)\n } else if (element.type === ElementType.DATE) {\n const nextElement = curRow.elementList[j + 1]\n if (!preElement || preElement.dateId !== element.dateId) {\n this.textParticle.complete()\n }\n this.textParticle.record(ctx, element, x, y + offsetY)\n if (!nextElement || nextElement.dateId !== element.dateId) {\n this.textParticle.complete()\n }\n } else if (element.type === ElementType.SUPERSCRIPT) {\n this.textParticle.complete()\n this.superscriptParticle.render(ctx, element, x, y + offsetY)\n } else if (element.type === ElementType.SUBSCRIPT) {\n this.underline.render(ctx)\n this.textParticle.complete()\n this.subscriptParticle.render(ctx, element, x, y + offsetY)\n } else if (element.type === ElementType.SEPARATOR) {\n this.separatorParticle.render(ctx, element, x, y)\n } else if (element.type === ElementType.PAGE_BREAK) {\n // no visual rendering\n } else if (element.type === ElementType.COLUMN_BREAK) {\n // no visual rendering\n } else if (\n element.type === ElementType.CHECKBOX ||\n element.controlComponent === ControlComponent.CHECKBOX\n ) {\n this.textParticle.complete()\n this.checkboxParticle.render({\n ctx,\n x,\n y: y + offsetY,\n index: j,\n row: curRow\n })\n } else if (\n element.type === ElementType.RADIO ||\n element.controlComponent === ControlComponent.RADIO\n ) {\n this.textParticle.complete()\n this.radioParticle.render({\n ctx,\n x,\n y: y + offsetY,\n index: j,\n row: curRow\n })\n } else if (element.type === ElementType.TAB) {\n this.textParticle.complete()\n } else if (\n element.rowFlex === RowFlex.ALIGNMENT ||\n element.rowFlex === RowFlex.JUSTIFY\n ) {\n this.textParticle.record(ctx, element, x, y + offsetY)\n this.textParticle.complete()\n } else if (element.type === ElementType.BLOCK) {\n this.textParticle.complete()\n this.blockParticle.render(ctx, pageNo, element, x, y + offsetY)\n } else {\n if (element.left) {\n this.textParticle.complete()\n }\n this.textParticle.record(ctx, element, x, y + offsetY)\n if (\n element.width ||\n element.letterSpacing ||\n PUNCTUATION_REG.test(element.value)\n ) {\n this.textParticle.complete()\n }\n }\n if (\n isDrawLineBreak &&\n !isPrintMode &&\n this.mode !== EditorMode.CLEAN &&\n !curRow.isWidthNotEnough &&\n j === curRow.elementList.length - 1\n ) {\n this.lineBreakParticle.render(ctx, element, x, y + curRow.height / 2)\n }\n if (isDrawWhiteSpace && WHITE_SPACE_REG.test(element.value)) {\n this.whiteSpaceParticle.render(ctx, element, x, y + curRow.height / 2)\n }\n if (element.control?.border) {\n if (\n preElement?.control?.border &&\n preElement.controlId !== element.controlId\n ) {\n this.control.drawBorder(ctx)\n }\n const rowMargin = this.getElementRowMargin(element)\n this.control.recordBorderInfo(\n x,\n y + rowMargin,\n element.metrics.width,\n curRow.height - 2 * rowMargin\n )\n } else if (preElement?.control?.border) {\n this.control.drawBorder(ctx)\n }\n if (element.underline || element.control?.underline) {\n if (\n preElement?.type === ElementType.SUBSCRIPT &&\n element.type !== ElementType.SUBSCRIPT\n ) {\n this.underline.render(ctx)\n }\n const rowMargin = this.getElementRowMargin(element)\n const offsetX = element.left || 0\n let offsetY = 0\n if (element.type === ElementType.SUBSCRIPT) {\n offsetY = this.subscriptParticle.getOffsetY(element)\n }\n const color = element.control?.underline\n ? this.options.underlineColor\n : element.color\n this.underline.recordFillInfo(\n ctx,\n x - offsetX,\n y + curRow.height - rowMargin + offsetY,\n metrics.width + offsetX,\n 0,\n color,\n element.textDecoration?.style\n )\n } else if (preElement?.underline || preElement?.control?.underline) {\n this.underline.render(ctx)\n }\n if (element.strikeout) {\n if (!element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {\n if (\n preElement &&\n ((preElement.type === ElementType.SUBSCRIPT &&\n element.type !== ElementType.SUBSCRIPT) ||\n (preElement.type === ElementType.SUPERSCRIPT &&\n element.type !== ElementType.SUPERSCRIPT) ||\n this.getElementSize(preElement) !==\n this.getElementSize(element))\n ) {\n this.strikeout.render(ctx)\n }\n const standardMetrics = this.textParticle.measureBasisWord(\n ctx,\n this.getElementFont(element)\n )\n let adjustY =\n y +\n offsetY +\n standardMetrics.actualBoundingBoxDescent * scale -\n metrics.height / 2\n if (element.type === ElementType.SUBSCRIPT) {\n adjustY += this.subscriptParticle.getOffsetY(element)\n } else if (element.type === ElementType.SUPERSCRIPT) {\n adjustY += this.superscriptParticle.getOffsetY(element)\n }\n this.strikeout.recordFillInfo(ctx, x, adjustY, metrics.width, 0, element.color)\n }\n } else if (preElement?.strikeout) {\n this.strikeout.render(ctx)\n }\n const {\n zone: currentZone,\n startIndex,\n endIndex\n } = this.range.getRange()\n if (\n currentZone === zone &&\n startIndex !== endIndex &&\n startIndex <= index &&\n index <= endIndex\n ) {\n const positionContext = this.position.getPositionContext()\n if (\n (!positionContext.isTable && !element.tdId) ||\n positionContext.tdId === element.tdId\n ) {\n if (startIndex === index) {\n const nextElement = elementList[startIndex + 1]\n if (nextElement && nextElement.value === ZERO) {\n rangeRecord.x = x + metrics.width\n rangeRecord.y = y\n rangeRecord.height = curRow.height\n rangeRecord.width += this.options.rangeMinWidth\n }\n } else {\n let rangeWidth = metrics.width\n if (rangeWidth === 0 && curRow.elementList.length === 1) {\n rangeWidth = this.options.rangeMinWidth\n }\n if (!rangeRecord.width) {\n rangeRecord.x = x\n rangeRecord.y = y\n rangeRecord.height = curRow.height\n }\n rangeRecord.width += rangeWidth\n }\n }\n }\n if (!group.disabled && element.groupIds) {\n this.group.recordFillInfo(element, x, y, metrics.width, curRow.height)\n }\n index++\n if (element.type === ElementType.TABLE && !element.hide) {\n const tdPaddingWidth = tdPadding[1] + tdPadding[3]\n for (let t = 0; t < element.trList!.length; t++) {\n const tr = element.trList![t]\n for (let d = 0; d < tr.tdList!.length; d++) {\n const td = tr.tdList[d]\n this.drawRow(ctx, {\n elementList: td.value,\n positionList: td.positionList!,\n rowList: td.rowList!,\n pageNo,\n startIndex: 0,\n innerWidth: (td.width! - tdPaddingWidth) * scale,\n zone,\n isDrawLineBreak\n })\n }\n }\n }\n }\n if (curRow.isList) {\n this.listParticle.drawListStyle(\n ctx,\n curRow,\n positionList[curRow.startIndex]\n )\n }\n this.textParticle.complete()\n this.control.drawBorder(ctx)\n this.underline.render(ctx)\n this.strikeout.render(ctx)\n this.group.render(ctx)\n if (!isPrintMode && !isGraffitiMode) {\n if (rangeRecord.width && rangeRecord.height) {\n const { x, y, width, height } = rangeRecord\n this.range.render(ctx, x, y, width, height)\n }\n if (\n isCrossRowCol &&\n tableRangeElement &&\n tableRangeElement.id === tableId\n ) {\n const {\n coordinate: {\n leftTop: [x, y]\n }\n } = positionList[curRow.startIndex]\n this.tableParticle.drawRange(ctx, tableRangeElement, x, y)\n }\n }\n }\n }\n\n private _drawFloat(\n ctx: CanvasRenderingContext2D,\n payload: IDrawFloatPayload\n ) {\n const { scale } = this.options\n const floatPositionList = this.position.getFloatPositionList()\n const { imgDisplays, pageNo } = payload\n for (let e = 0; e < floatPositionList.length; e++) {\n const floatPosition = floatPositionList[e]\n const element = floatPosition.element\n if (\n (pageNo === floatPosition.pageNo ||\n floatPosition.zone === EditorZone.HEADER ||\n floatPosition.zone == EditorZone.FOOTER) &&\n element.imgDisplay &&\n imgDisplays.includes(element.imgDisplay) &&\n element.type === ElementType.IMAGE\n ) {\n const imgFloatPosition = element.imgFloatPosition!\n this.imageParticle.render(\n ctx,\n element,\n imgFloatPosition.x * scale,\n imgFloatPosition.y * scale\n )\n }\n }\n }\n\n private _clearPage(pageNo: number) {\n const ctx = this.ctxList[pageNo]\n const pageDom = this.pageList[pageNo]\n ctx.clearRect(\n 0,\n 0,\n Math.max(pageDom.width, this.getWidth()),\n Math.max(pageDom.height, this.getHeight())\n )\n this.blockParticle.clear()\n }\n\n private _drawColumnGuide(ctx: CanvasRenderingContext2D) {\n const columnCount = this.getColumnCount()\n if (columnCount <= 1) return\n const columnWidth = this.getColumnWidth()\n const margins = this.getMargins()\n const {\n column: { gap },\n scale\n } = this.options\n const headerExtraHeight = this.header.getExtraHeight()\n const footerExtraHeight = this.footer.getExtraHeight()\n const startY = margins[0] + headerExtraHeight\n const endY = this.getHeight() - margins[2] - footerExtraHeight\n const scaledGap = gap * scale\n\n ctx.save()\n ctx.strokeStyle = '#DCDCDC'\n ctx.lineWidth = 1\n ctx.setLineDash([4, 4])\n for (let i = 1; i < columnCount; i++) {\n const lineX = margins[3] + i * columnWidth + (i - 0.5) * scaledGap\n ctx.beginPath()\n ctx.moveTo(lineX, startY)\n ctx.lineTo(lineX, endY)\n ctx.stroke()\n }\n ctx.restore()\n }\n\n private _drawPage(payload: IDrawPagePayload) {\n const { elementList, positionList, rowList, pageNo } = payload\n const {\n inactiveAlpha,\n pageMode,\n header,\n footer,\n pageNumber,\n lineNumber,\n pageBorder\n } = this.options\n const isPrintMode = this.mode === EditorMode.PRINT\n const innerWidth = this.getColumnWidth()\n const ctx = this.ctxList[pageNo]\n ctx.globalAlpha = !this.zone.isMainActive() ? inactiveAlpha : 1\n this._clearPage(pageNo)\n if (\n !isPrintMode ||\n !this.options.modeRule[EditorMode.PRINT]?.backgroundDisabled\n ) {\n this.background.render(ctx, pageNo)\n }\n if (!isPrintMode) {\n this.area.render(ctx, pageNo)\n }\n if (pageMode !== PageMode.CONTINUITY && this.options.watermark.data && !this.options.watermark.inFront) {\n this.waterMark.render(ctx, pageNo)\n }\n this._drawFloat(ctx, {\n pageNo,\n imgDisplays: [ImageDisplay.FLOAT_BOTTOM]\n })\n if (!isPrintMode) {\n this.control.renderHighlightList(ctx, pageNo)\n }\n const index = rowList[0]?.startIndex\n this.drawRow(ctx, {\n elementList,\n positionList,\n rowList,\n pageNo,\n startIndex: index,\n innerWidth,\n zone: EditorZone.MAIN\n })\n if (pageMode !== PageMode.CONTINUITY && this.options.watermark.data && this.options.watermark.inFront) {\n this.waterMark.render(ctx, pageNo)\n }\n if (!isPrintMode) {\n this._drawColumnGuide(ctx)\n }\n if (this.getIsPagingMode()) {\n if (!header.disabled) {\n this.header.render(ctx, pageNo)\n }\n if (!footer.disabled) {\n this.footer.render(ctx, pageNo)\n }\n if (!pageNumber.disabled) {\n this.pageNumber.render(ctx, pageNo)\n }\n }\n this._drawFloat(ctx, {\n pageNo,\n imgDisplays: [ImageDisplay.FLOAT_TOP, ImageDisplay.SURROUND]\n })\n if (!isPrintMode && this.search.getSearchKeyword()) {\n this.search.render(ctx, pageNo)\n }\n if (this.elementList.length <= 1 && !this.elementList[0]?.listId) {\n this.placeholder.render(ctx)\n }\n if (!lineNumber.disabled) {\n this.lineNumber.render(ctx, pageNo)\n }\n if (!pageBorder.disabled) {\n this.pageBorder.render(ctx)\n }\n this.badge.render(ctx, pageNo)\n if (this.isGraffitiMode()) {\n this.graffiti.render(ctx, pageNo)\n }\n }\n\n private _disconnectLazyRender() {\n this.lazyRenderIntersectionObserver?.disconnect()\n }\n\n private _lazyRender() {\n const positionList = this.position.getOriginalMainPositionList()\n const elementList = this.getOriginalMainElementList()\n this._disconnectLazyRender()\n this.lazyRenderIntersectionObserver = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const index = Number((<HTMLCanvasElement>entry.target).dataset.index)\n this._drawPage({\n elementList,\n positionList,\n rowList: this.pageRowList[index],\n pageNo: index\n })\n }\n })\n })\n this.pageList.forEach(el => {\n this.lazyRenderIntersectionObserver!.observe(el)\n })\n }\n\n private _immediateRender() {\n const positionList = this.position.getOriginalMainPositionList()\n const elementList = this.getOriginalMainElementList()\n for (let i = 0; i < this.pageRowList.length; i++) {\n this._drawPage({\n elementList,\n positionList,\n rowList: this.pageRowList[i],\n pageNo: i\n })\n }\n }\n\n public render(payload?: IDrawOption) {\n this.renderCount++\n const { header, footer } = this.options\n const {\n isSubmitHistory = true,\n isSetCursor = true,\n isCompute = true,\n isLazy = true,\n isInit = false,\n isSourceHistory = false,\n isFirstRender = false\n } = payload || {}\n let { curIndex } = payload || {}\n const innerWidth = this.getInnerWidth()\n const columnWidth = this.getColumnWidth()\n const isPagingMode = this.getIsPagingMode()\n const oldPageSize = this.pageRowList.length\n if (isCompute) {\n this.position.setFloatPositionList([])\n if (isPagingMode) {\n if (!header.disabled) {\n this.header.compute()\n }\n if (!footer.disabled) {\n this.footer.compute()\n }\n }\n const margins = this.getMargins()\n const pageHeight = this.getHeight()\n const extraHeight = this.header.getExtraHeight()\n const mainOuterHeight = this.getMainOuterHeight()\n const startX = margins[3]\n const startY = margins[0] + extraHeight\n const surroundElementList = pickSurroundElementList(this.elementList)\n this.rowList = this.computeRowList({\n startX,\n startY,\n pageHeight,\n mainOuterHeight,\n isPagingMode,\n innerWidth: columnWidth,\n surroundElementList,\n elementList: this.elementList\n })\n this.pageRowList = this._computePageList()\n this.position.computePositionList()\n this.area.compute()\n if (!this.isPrintMode()) {\n const searchKeyword = this.search.getSearchKeyword()\n if (searchKeyword) {\n this.search.compute(searchKeyword)\n }\n this.control.computeHighlightList()\n }\n if (this.isGraffitiMode()) {\n this.graffiti.compute()\n }\n }\n this.imageObserver.clearAll()\n this.cursor.recoveryCursor()\n for (let i = 0; i < this.pageRowList.length; i++) {\n if (!this.pageList[i]) {\n this._createPage(i)\n }\n }\n const curPageCount = this.pageRowList.length\n const prePageCount = this.pageList.length\n if (prePageCount > curPageCount) {\n const deleteCount = prePageCount - curPageCount\n this.ctxList.splice(curPageCount, deleteCount)\n this.pageList\n .splice(curPageCount, deleteCount)\n .forEach(page => page.remove())\n }\n if (isLazy && isPagingMode) {\n this._lazyRender()\n } else {\n this._immediateRender()\n }\n if (isSetCursor) {\n curIndex = this.setCursor(curIndex)\n } else if (this.range.getIsSelection()) {\n this.cursor.focus()\n }\n if (\n (isSubmitHistory && !isFirstRender) ||\n (curIndex !== undefined && this.historyManager.isStackEmpty())\n ) {\n this.submitHistory(curIndex)\n }\n nextTick(() => {\n this.range.setRangeStyle()\n if (isCompute && this.control.getActiveControl()) {\n this.control.reAwakeControl()\n }\n if (\n isCompute &&\n !this.isReadonly() &&\n this.position.getPositionContext().isTable\n ) {\n this.tableTool.render()\n }\n if (isCompute && !this.zone.isMainActive()) {\n this.zone.drawZoneIndicator()\n }\n if (oldPageSize !== this.pageRowList.length) {\n if (this.listener.pageSizeChange) {\n this.listener.pageSizeChange(this.pageRowList.length)\n }\n if (this.eventBus.isSubscribe('pageSizeChange')) {\n this.eventBus.emit('pageSizeChange', this.pageRowList.length)\n }\n }\n if ((isSubmitHistory || isSourceHistory) && !isInit) {\n if (this.listener.contentChange) {\n this.listener.contentChange()\n }\n if (this.eventBus.isSubscribe('contentChange')) {\n this.eventBus.emit('contentChange')\n }\n }\n })\n }\n\n public setCursor(curIndex: number | undefined) {\n const positionContext = this.position.getPositionContext()\n const positionList = this.position.getPositionList()\n if (positionContext.isTable) {\n const { index, trIndex, tdIndex } = positionContext\n const elementList = this.getOriginalElementList()\n const tablePositionList =\n elementList[index!].trList?.[trIndex!].tdList[tdIndex!].positionList\n if (curIndex === undefined && tablePositionList) {\n curIndex = tablePositionList.length - 1\n }\n const tablePosition = tablePositionList?.[curIndex!]\n this.position.setCursorPosition(tablePosition || null)\n } else {\n this.position.setCursorPosition(\n curIndex !== undefined ? positionList[curIndex] : null\n )\n }\n let isShowCursor = true\n if (\n curIndex !== undefined &&\n positionContext.isImage &&\n positionContext.isDirectHit\n ) {\n const elementList = this.getElementList()\n const element = elementList[curIndex]\n if (IMAGE_ELEMENT_TYPE.includes(element.type!)) {\n isShowCursor = false\n const position = this.position.getCursorPosition()\n this.previewer.updateResizer(element, position)\n }\n }\n this.cursor.drawCursor({\n isShow: isShowCursor\n })\n return curIndex\n }\n\n public submitHistory(curIndex: number | undefined) {\n const positionContext = this.position.getPositionContext()\n const oldElementList = getSlimCloneElementList(this.elementList)\n const oldHeaderElementList = getSlimCloneElementList(\n this.header.getElementList()\n )\n const oldFooterElementList = getSlimCloneElementList(\n this.footer.getElementList()\n )\n const oldRange = deepClone(this.range.getRange())\n const pageNo = this.pageNo\n const oldPositionContext = deepClone(positionContext)\n const zone = this.zone.getZone()\n this.historyManager.execute(() => {\n this.zone.setZone(zone)\n this.setPageNo(pageNo)\n this.position.setPositionContext(deepClone(oldPositionContext))\n this.header.setElementList(deepClone(oldHeaderElementList))\n this.footer.setElementList(deepClone(oldFooterElementList))\n this.elementList = deepClone(oldElementList)\n this.range.replaceRange(deepClone(oldRange))\n this.render({\n curIndex,\n isSubmitHistory: false,\n isSourceHistory: true\n })\n })\n }\n\n public destroy() {\n this.container.remove()\n this.globalEvent.removeEvent()\n this.scrollObserver.removeEvent()\n this.selectionObserver.removeEvent()\n }\n\n public clearSideEffect() {\n this.getPreviewer().clearResizer()\n this.getTableTool().dispose()\n this.getHyperlinkParticle().clearHyperlinkPopup()\n this.getDateParticle().clearDatePicker()\n }\n}\n","import { CommandAdapt } from './CommandAdapt'\n\nexport class Command {\n public executeMode: CommandAdapt['mode']\n public executeCut: CommandAdapt['cut']\n public executeCopy: CommandAdapt['copy']\n public executePaste: CommandAdapt['paste']\n public executeSelectAll: CommandAdapt['selectAll']\n public executeBackspace: CommandAdapt['backspace']\n public executeSetRange: CommandAdapt['setRange']\n public executeReplaceRange: CommandAdapt['replaceRange']\n public executeSetPositionContext: CommandAdapt['setPositionContext']\n public executeForceUpdate: CommandAdapt['forceUpdate']\n public executeBlur: CommandAdapt['blur']\n public executeUndo: CommandAdapt['undo']\n public executeRedo: CommandAdapt['redo']\n public executePainter: CommandAdapt['painter']\n public executeApplyPainterStyle: CommandAdapt['applyPainterStyle']\n public executeFormat: CommandAdapt['format']\n public executeFont: CommandAdapt['font']\n public executeSize: CommandAdapt['size']\n public executeSizeAdd: CommandAdapt['sizeAdd']\n public executeSizeMinus: CommandAdapt['sizeMinus']\n public executeBold: CommandAdapt['bold']\n public executeItalic: CommandAdapt['italic']\n public executeUnderline: CommandAdapt['underline']\n public executeStrikeout: CommandAdapt['strikeout']\n public executeSuperscript: CommandAdapt['superscript']\n public executeSubscript: CommandAdapt['subscript']\n public executeColor: CommandAdapt['color']\n public executeHighlight: CommandAdapt['highlight']\n public executeTitle: CommandAdapt['title']\n public executeList: CommandAdapt['list']\n public executeListWithPreset: CommandAdapt['listWithPreset']\n public executeListIndent: CommandAdapt['listIndent']\n public executeListOutdent: CommandAdapt['listOutdent']\n public executeRowFlex: CommandAdapt['rowFlex']\n public executeRowMargin: CommandAdapt['rowMargin']\n public executeInsertTable: CommandAdapt['insertTable']\n public executeInsertTableTopRow: CommandAdapt['insertTableTopRow']\n public executeInsertTableBottomRow: CommandAdapt['insertTableBottomRow']\n public executeInsertTableLeftCol: CommandAdapt['insertTableLeftCol']\n public executeInsertTableRightCol: CommandAdapt['insertTableRightCol']\n public executeDeleteTableRow: CommandAdapt['deleteTableRow']\n public executeDeleteTableCol: CommandAdapt['deleteTableCol']\n public executeDeleteTable: CommandAdapt['deleteTable']\n public executeMergeTableCell: CommandAdapt['mergeTableCell']\n public executeCancelMergeTableCell: CommandAdapt['cancelMergeTableCell']\n public executeSplitVerticalTableCell: CommandAdapt['splitVerticalTableCell']\n public executeSplitHorizontalTableCell: CommandAdapt['splitHorizontalTableCell']\n public executeTableTdVerticalAlign: CommandAdapt['tableTdVerticalAlign']\n public executeTableBorderType: CommandAdapt['tableBorderType']\n public executeTableBorderColor: CommandAdapt['tableBorderColor']\n public executeTableTdBorderType: CommandAdapt['tableTdBorderType']\n public executeTableTdSlashType: CommandAdapt['tableTdSlashType']\n public executeTableTdBackgroundColor: CommandAdapt['tableTdBackgroundColor']\n public executeTableSelectAll: CommandAdapt['tableSelectAll']\n public executeImage: CommandAdapt['image']\n public executeHyperlink: CommandAdapt['hyperlink']\n public executeDeleteHyperlink: CommandAdapt['deleteHyperlink']\n public executeCancelHyperlink: CommandAdapt['cancelHyperlink']\n public executeEditHyperlink: CommandAdapt['editHyperlink']\n public executeSeparator: CommandAdapt['separator']\n public executePageBreak: CommandAdapt['pageBreak']\n public executeAddWatermark: CommandAdapt['addWatermark']\n public executeDeleteWatermark: CommandAdapt['deleteWatermark']\n public executeSearch: CommandAdapt['search']\n public executeSearchNavigatePre: CommandAdapt['searchNavigatePre']\n public executeSearchNavigateNext: CommandAdapt['searchNavigateNext']\n public executeReplace: CommandAdapt['replace']\n public executePrint: CommandAdapt['print']\n public executeReplaceImageElement: CommandAdapt['replaceImageElement']\n public executeSaveAsImageElement: CommandAdapt['saveAsImageElement']\n public executeSetImageCrop: CommandAdapt['setImageCrop']\n public executeChangeImageDisplay: CommandAdapt['changeImageDisplay']\n public executePageMode: CommandAdapt['pageMode']\n public executePageScale: CommandAdapt['pageScale']\n public executePageScaleRecovery: CommandAdapt['pageScaleRecovery']\n public executePageScaleMinus: CommandAdapt['pageScaleMinus']\n public executePageScaleAdd: CommandAdapt['pageScaleAdd']\n public executePaperSize: CommandAdapt['paperSize']\n public executePaperDirection: CommandAdapt['paperDirection']\n public executeSetPaperMargin: CommandAdapt['setPaperMargin']\n public executeSetMainBadge: CommandAdapt['setMainBadge']\n public executeSetAreaBadge: CommandAdapt['setAreaBadge']\n public executeInsertElementList: CommandAdapt['insertElementList']\n public executeInsertArea: CommandAdapt['insertArea']\n public executeSetAreaValue: CommandAdapt['setAreaValue']\n public executeSetAreaProperties: CommandAdapt['setAreaProperties']\n public executeLocationArea: CommandAdapt['locationArea']\n public executeClearGraffiti: CommandAdapt['clearGraffiti']\n public executeColumnCount: CommandAdapt['columnCount']\n public executeColumnBreak: CommandAdapt['columnBreak']\n public executeColumnGap: CommandAdapt['columnGap']\n public executeAppendElementList: CommandAdapt['appendElementList']\n public executeUpdateElementById: CommandAdapt['updateElementById']\n public executeDeleteElementById: CommandAdapt['deleteElementById']\n public executeSetValue: CommandAdapt['setValue']\n public executeRemoveControl: CommandAdapt['removeControl']\n public executeTranslate: CommandAdapt['translate']\n public executeSetLocale: CommandAdapt['setLocale']\n public executeLocationCatalog: CommandAdapt['locationCatalog']\n public executeWordTool: CommandAdapt['wordTool']\n public executeSetHTML: CommandAdapt['setHTML']\n public executeSetGroup: CommandAdapt['setGroup']\n public executeDeleteGroup: CommandAdapt['deleteGroup']\n public executeLocationGroup: CommandAdapt['locationGroup']\n public executeSetZone: CommandAdapt['setZone']\n public executeSetControlValue: CommandAdapt['setControlValue']\n public executeSetControlValueList: CommandAdapt['setControlValueList']\n public executeSetControlExtension: CommandAdapt['setControlExtension']\n public executeSetControlExtensionList: CommandAdapt['setControlExtensionList']\n public executeSetControlProperties: CommandAdapt['setControlProperties']\n public executeSetControlPropertiesList: CommandAdapt['setControlPropertiesList']\n public executeSetControlHighlight: CommandAdapt['setControlHighlight']\n public executeLocationControl: CommandAdapt['locationControl']\n public executeInsertControl: CommandAdapt['insertControl']\n public executeJumpControl: CommandAdapt['jumpControl']\n public executeUpdateOptions: CommandAdapt['updateOptions']\n public executeInsertTitle: CommandAdapt['insertTitle']\n public executeFocus: CommandAdapt['focus']\n public getCatalog: CommandAdapt['getCatalog']\n public getImage: CommandAdapt['getImage']\n public getOptions: CommandAdapt['getOptions']\n public getValue: CommandAdapt['getValue']\n public getValueAsync: CommandAdapt['getValueAsync']\n public getAreaValue: CommandAdapt['getAreaValue']\n public getHTML: CommandAdapt['getHTML']\n public getText: CommandAdapt['getText']\n public getWordCount: CommandAdapt['getWordCount']\n public getCursorPosition: CommandAdapt['getCursorPosition']\n public getRange: CommandAdapt['getRange']\n public getRangeText: CommandAdapt['getRangeText']\n public getRangeContext: CommandAdapt['getRangeContext']\n public getRangeRow: CommandAdapt['getRangeRow']\n public getRangeParagraph: CommandAdapt['getRangeParagraph']\n public getKeywordRangeList: CommandAdapt['getKeywordRangeList']\n public getKeywordContext: CommandAdapt['getKeywordContext']\n public getPaperMargin: CommandAdapt['getPaperMargin']\n public getSearchNavigateInfo: CommandAdapt['getSearchNavigateInfo']\n public getLocale: CommandAdapt['getLocale']\n public getGroupIds: CommandAdapt['getGroupIds']\n public getControlValue: CommandAdapt['getControlValue']\n public getControlList: CommandAdapt['getControlList']\n public getContainer: CommandAdapt['getContainer']\n public getTitleValue: CommandAdapt['getTitleValue']\n public getPositionContextByEvent: CommandAdapt['getPositionContextByEvent']\n public getElementById: CommandAdapt['getElementById']\n\n constructor(adapt: CommandAdapt) {\n this.executeMode = adapt.mode.bind(adapt)\n this.executeCut = adapt.cut.bind(adapt)\n this.executeCopy = adapt.copy.bind(adapt)\n this.executePaste = adapt.paste.bind(adapt)\n this.executeSelectAll = adapt.selectAll.bind(adapt)\n this.executeBackspace = adapt.backspace.bind(adapt)\n this.executeSetRange = adapt.setRange.bind(adapt)\n this.executeReplaceRange = adapt.replaceRange.bind(adapt)\n this.executeSetPositionContext = adapt.setPositionContext.bind(adapt)\n this.executeForceUpdate = adapt.forceUpdate.bind(adapt)\n this.executeBlur = adapt.blur.bind(adapt)\n this.executeUndo = adapt.undo.bind(adapt)\n this.executeRedo = adapt.redo.bind(adapt)\n this.executePainter = adapt.painter.bind(adapt)\n this.executeApplyPainterStyle = adapt.applyPainterStyle.bind(adapt)\n this.executeFormat = adapt.format.bind(adapt)\n this.executeFont = adapt.font.bind(adapt)\n this.executeSize = adapt.size.bind(adapt)\n this.executeSizeAdd = adapt.sizeAdd.bind(adapt)\n this.executeSizeMinus = adapt.sizeMinus.bind(adapt)\n this.executeBold = adapt.bold.bind(adapt)\n this.executeItalic = adapt.italic.bind(adapt)\n this.executeUnderline = adapt.underline.bind(adapt)\n this.executeStrikeout = adapt.strikeout.bind(adapt)\n this.executeSuperscript = adapt.superscript.bind(adapt)\n this.executeSubscript = adapt.subscript.bind(adapt)\n this.executeColor = adapt.color.bind(adapt)\n this.executeHighlight = adapt.highlight.bind(adapt)\n this.executeTitle = adapt.title.bind(adapt)\n this.executeList = adapt.list.bind(adapt)\n this.executeListWithPreset = adapt.listWithPreset.bind(adapt)\n this.executeListIndent = adapt.listIndent.bind(adapt)\n this.executeListOutdent = adapt.listOutdent.bind(adapt)\n this.executeRowFlex = adapt.rowFlex.bind(adapt)\n this.executeRowMargin = adapt.rowMargin.bind(adapt)\n this.executeInsertTable = adapt.insertTable.bind(adapt)\n this.executeInsertTableTopRow = adapt.insertTableTopRow.bind(adapt)\n this.executeInsertTableBottomRow = adapt.insertTableBottomRow.bind(adapt)\n this.executeInsertTableLeftCol = adapt.insertTableLeftCol.bind(adapt)\n this.executeInsertTableRightCol = adapt.insertTableRightCol.bind(adapt)\n this.executeDeleteTableRow = adapt.deleteTableRow.bind(adapt)\n this.executeDeleteTableCol = adapt.deleteTableCol.bind(adapt)\n this.executeDeleteTable = adapt.deleteTable.bind(adapt)\n this.executeMergeTableCell = adapt.mergeTableCell.bind(adapt)\n this.executeCancelMergeTableCell = adapt.cancelMergeTableCell.bind(adapt)\n this.executeSplitVerticalTableCell =\n adapt.splitVerticalTableCell.bind(adapt)\n this.executeSplitHorizontalTableCell =\n adapt.splitHorizontalTableCell.bind(adapt)\n this.executeTableTdVerticalAlign = adapt.tableTdVerticalAlign.bind(adapt)\n this.executeTableBorderType = adapt.tableBorderType.bind(adapt)\n this.executeTableBorderColor = adapt.tableBorderColor.bind(adapt)\n this.executeTableTdBorderType = adapt.tableTdBorderType.bind(adapt)\n this.executeTableTdSlashType = adapt.tableTdSlashType.bind(adapt)\n this.executeTableTdBackgroundColor =\n adapt.tableTdBackgroundColor.bind(adapt)\n this.executeTableSelectAll = adapt.tableSelectAll.bind(adapt)\n this.executeImage = adapt.image.bind(adapt)\n this.executeHyperlink = adapt.hyperlink.bind(adapt)\n this.executeDeleteHyperlink = adapt.deleteHyperlink.bind(adapt)\n this.executeCancelHyperlink = adapt.cancelHyperlink.bind(adapt)\n this.executeEditHyperlink = adapt.editHyperlink.bind(adapt)\n this.executeSeparator = adapt.separator.bind(adapt)\n this.executePageBreak = adapt.pageBreak.bind(adapt)\n this.executeAddWatermark = adapt.addWatermark.bind(adapt)\n this.executeDeleteWatermark = adapt.deleteWatermark.bind(adapt)\n this.executeSearch = adapt.search.bind(adapt)\n this.executeSearchNavigatePre = adapt.searchNavigatePre.bind(adapt)\n this.executeSearchNavigateNext = adapt.searchNavigateNext.bind(adapt)\n this.executeReplace = adapt.replace.bind(adapt)\n this.executePrint = adapt.print.bind(adapt)\n this.executeReplaceImageElement = adapt.replaceImageElement.bind(adapt)\n this.executeSaveAsImageElement = adapt.saveAsImageElement.bind(adapt)\n this.executeSetImageCrop = adapt.setImageCrop.bind(adapt)\n this.executeChangeImageDisplay = adapt.changeImageDisplay.bind(adapt)\n this.executePageMode = adapt.pageMode.bind(adapt)\n this.executePageScale = adapt.pageScale.bind(adapt)\n this.executePageScaleRecovery = adapt.pageScaleRecovery.bind(adapt)\n this.executePageScaleMinus = adapt.pageScaleMinus.bind(adapt)\n this.executePageScaleAdd = adapt.pageScaleAdd.bind(adapt)\n this.executePaperSize = adapt.paperSize.bind(adapt)\n this.executePaperDirection = adapt.paperDirection.bind(adapt)\n this.executeSetPaperMargin = adapt.setPaperMargin.bind(adapt)\n this.executeSetMainBadge = adapt.setMainBadge.bind(adapt)\n this.executeSetAreaBadge = adapt.setAreaBadge.bind(adapt)\n this.getAreaValue = adapt.getAreaValue.bind(adapt)\n this.executeInsertArea = adapt.insertArea.bind(adapt)\n this.executeSetAreaValue = adapt.setAreaValue.bind(adapt)\n this.executeSetAreaProperties = adapt.setAreaProperties.bind(adapt)\n this.executeLocationArea = adapt.locationArea.bind(adapt)\n this.executeClearGraffiti = adapt.clearGraffiti.bind(adapt)\n this.executeColumnCount = adapt.columnCount.bind(adapt)\n this.executeColumnBreak = adapt.columnBreak.bind(adapt)\n this.executeColumnGap = adapt.columnGap.bind(adapt)\n this.executeInsertElementList = adapt.insertElementList.bind(adapt)\n this.executeAppendElementList = adapt.appendElementList.bind(adapt)\n this.executeUpdateElementById = adapt.updateElementById.bind(adapt)\n this.executeDeleteElementById = adapt.deleteElementById.bind(adapt)\n this.executeSetValue = adapt.setValue.bind(adapt)\n this.executeRemoveControl = adapt.removeControl.bind(adapt)\n this.executeTranslate = adapt.translate.bind(adapt)\n this.executeSetLocale = adapt.setLocale.bind(adapt)\n this.executeLocationCatalog = adapt.locationCatalog.bind(adapt)\n this.executeWordTool = adapt.wordTool.bind(adapt)\n this.executeSetHTML = adapt.setHTML.bind(adapt)\n this.executeSetGroup = adapt.setGroup.bind(adapt)\n this.executeDeleteGroup = adapt.deleteGroup.bind(adapt)\n this.executeLocationGroup = adapt.locationGroup.bind(adapt)\n this.executeSetZone = adapt.setZone.bind(adapt)\n this.executeUpdateOptions = adapt.updateOptions.bind(adapt)\n this.executeInsertTitle = adapt.insertTitle.bind(adapt)\n this.executeFocus = adapt.focus.bind(adapt)\n this.getImage = adapt.getImage.bind(adapt)\n this.getOptions = adapt.getOptions.bind(adapt)\n this.getValue = adapt.getValue.bind(adapt)\n this.getValueAsync = adapt.getValueAsync.bind(adapt)\n this.getHTML = adapt.getHTML.bind(adapt)\n this.getText = adapt.getText.bind(adapt)\n this.getWordCount = adapt.getWordCount.bind(adapt)\n this.getCursorPosition = adapt.getCursorPosition.bind(adapt)\n this.getRange = adapt.getRange.bind(adapt)\n this.getRangeText = adapt.getRangeText.bind(adapt)\n this.getRangeContext = adapt.getRangeContext.bind(adapt)\n this.getRangeRow = adapt.getRangeRow.bind(adapt)\n this.getRangeParagraph = adapt.getRangeParagraph.bind(adapt)\n this.getKeywordRangeList = adapt.getKeywordRangeList.bind(adapt)\n this.getKeywordContext = adapt.getKeywordContext.bind(adapt)\n this.getCatalog = adapt.getCatalog.bind(adapt)\n this.getPaperMargin = adapt.getPaperMargin.bind(adapt)\n this.getSearchNavigateInfo = adapt.getSearchNavigateInfo.bind(adapt)\n this.getLocale = adapt.getLocale.bind(adapt)\n this.getGroupIds = adapt.getGroupIds.bind(adapt)\n this.getContainer = adapt.getContainer.bind(adapt)\n this.getTitleValue = adapt.getTitleValue.bind(adapt)\n this.getPositionContextByEvent = adapt.getPositionContextByEvent.bind(adapt)\n this.getElementById = adapt.getElementById.bind(adapt)\n this.executeSetControlValue = adapt.setControlValue.bind(adapt)\n this.executeSetControlValueList = adapt.setControlValueList.bind(adapt)\n this.executeSetControlExtension = adapt.setControlExtension.bind(adapt)\n this.executeSetControlExtensionList =\n adapt.setControlExtensionList.bind(adapt)\n this.executeSetControlProperties = adapt.setControlProperties.bind(adapt)\n this.executeSetControlPropertiesList =\n adapt.setControlPropertiesList.bind(adapt)\n this.executeSetControlHighlight = adapt.setControlHighlight.bind(adapt)\n this.getControlValue = adapt.getControlValue.bind(adapt)\n this.getControlList = adapt.getControlList.bind(adapt)\n this.executeLocationControl = adapt.locationControl.bind(adapt)\n this.executeInsertControl = adapt.insertControl.bind(adapt)\n this.executeJumpControl = adapt.jumpControl.bind(adapt)\n }\n}\n","import { PaperDirection } from '../dataset/enum/Editor'\n\nfunction convertPxToPaperSize(width: number, height: number) {\n if (width === 1125 && height === 1593) {\n return {\n size: 'a3',\n width: '297mm',\n height: '420mm'\n }\n }\n if (width === 794 && height === 1123) {\n return {\n size: 'a4',\n width: '210mm',\n height: '297mm'\n }\n }\n if (width === 565 && height === 796) {\n return {\n size: 'a5',\n width: '148mm',\n height: '210mm'\n }\n }\n return {\n size: '',\n width: `${width}px`,\n height: `${height}px`\n }\n}\n\nexport interface IPrintImageBase64Option {\n width: number\n height: number\n direction?: PaperDirection\n}\nexport function printImageBase64(\n base64List: string[],\n options: IPrintImageBase64Option\n) {\n const { width, height, direction = PaperDirection.VERTICAL } = options\n const iframe = document.createElement('iframe')\n iframe.style.visibility = 'hidden'\n iframe.style.position = 'absolute'\n iframe.style.left = '0'\n iframe.style.top = '0'\n iframe.style.width = '0'\n iframe.style.height = '0'\n iframe.style.border = 'none'\n document.body.append(iframe)\n const contentWindow = iframe.contentWindow!\n const doc = contentWindow.document\n doc.open()\n const container = document.createElement('div')\n const paperSize = convertPxToPaperSize(width, height)\n base64List.forEach(base64 => {\n const image = document.createElement('img')\n image.style.width =\n direction === PaperDirection.HORIZONTAL\n ? paperSize.height\n : paperSize.width\n image.style.height =\n direction === PaperDirection.HORIZONTAL\n ? paperSize.width\n : paperSize.height\n image.src = base64\n container.append(image)\n })\n const style = document.createElement('style')\n const stylesheet = `\n * {\n margin: 0;\n padding: 0;\n }\n @page {\n margin: 0;\n size: ${paperSize.size} ${\n direction === PaperDirection.HORIZONTAL ? `landscape` : `portrait`\n };\n }`\n style.append(document.createTextNode(stylesheet))\n setTimeout(() => {\n doc.write(`${style.outerHTML}${container.innerHTML}`)\n contentWindow.print()\n doc.close()\n window.addEventListener(\n 'mouseover',\n () => {\n iframe?.remove()\n },\n {\n once: true\n }\n )\n })\n}\n","import { NBSP, WRAP, ZERO } from '../../dataset/constant/Common'\nimport {\n AREA_CONTEXT_ATTR,\n EDITOR_ELEMENT_STYLE_ATTR,\n EDITOR_ROW_ATTR,\n LIST_CONTEXT_ATTR,\n TABLE_CONTEXT_ATTR\n} from '../../dataset/constant/Element'\nimport {\n titleOrderNumberMapping,\n titleSizeMapping\n} from '../../dataset/constant/Title'\nimport { defaultWatermarkOption } from '../../dataset/constant/Watermark'\nimport { ImageDisplay, LocationPosition } from '../../dataset/enum/Common'\nimport { ControlComponent } from '../../dataset/enum/Control'\nimport {\n EditorMode,\n EditorZone,\n PageMode,\n PaperDirection\n} from '../../dataset/enum/Editor'\nimport { ElementType } from '../../dataset/enum/Element'\nimport { ElementStyleKey } from '../../dataset/enum/ElementStyle'\nimport { ListStyle, ListType } from '../../dataset/enum/List'\nimport { MoveDirection } from '../../dataset/enum/Observer'\nimport { RowFlex } from '../../dataset/enum/Row'\nimport { TableBorder, TdBorder, TdSlash } from '../../dataset/enum/table/Table'\nimport { TitleLevel } from '../../dataset/enum/Title'\nimport { VerticalAlign } from '../../dataset/enum/VerticalAlign'\nimport { ICatalog } from '../../interface/Catalog'\nimport { DeepRequired } from '../../interface/Common'\nimport {\n IGetControlValueOption,\n IGetControlValueResult,\n ILocationControlOption,\n IRemoveControlOption,\n ISetControlExtensionOption,\n ISetControlHighlightOption,\n ISetControlProperties,\n ISetControlValueOption\n} from '../../interface/Control'\nimport {\n IAppendElementListOption,\n IDrawImagePayload,\n IDrawOption,\n IForceUpdateOption,\n IGetImageOption,\n IGetValueOption,\n IPainterOption\n} from '../../interface/Draw'\nimport {\n IEditorData,\n IEditorHTML,\n IEditorOption,\n IEditorResult,\n IEditorText,\n IFocusOption,\n ISetValueOption,\n IUpdateOption\n} from '../../interface/Editor'\nimport {\n IDeleteElementByIdOption,\n IElement,\n IElementPosition,\n IElementStyle,\n IGetElementByIdOption,\n IImageCrop,\n IInsertElementListOption,\n IUpdateElementByIdOption\n} from '../../interface/Element'\nimport {\n ICopyOption,\n IPasteOption,\n IPositionContextByEventOption,\n IPositionContextByEventResult,\n ITableInfoByEvent\n} from '../../interface/Event'\nimport { IMargin } from '../../interface/Margin'\nimport { ILocationPosition, IPositionContext } from '../../interface/Position'\nimport { IRange, RangeContext, RangeRect } from '../../interface/Range'\nimport {\n IReplaceOption,\n ISearchOption,\n ISearchResultContext\n} from '../../interface/Search'\nimport { ITextDecoration } from '../../interface/Text'\nimport {\n IGetTitleValueOption,\n IGetTitleValueResult\n} from '../../interface/Title'\nimport { IWatermark } from '../../interface/Watermark'\nimport {\n cloneProperty,\n deepClone,\n downloadFile,\n getUUID,\n isNumber,\n isObjectEqual\n} from '../../utils'\nimport {\n createDomFromElementList,\n formatElementContext,\n formatElementList,\n isTextLikeElement,\n pickElementAttr,\n getElementListByHTML,\n getTextFromElementList,\n zipElementList,\n getAnchorElement\n} from '../../utils/element'\nimport { mergeOption } from '../../utils/option'\nimport { printImageBase64 } from '../../utils/print'\nimport { Control } from '../draw/control/Control'\nimport { Draw } from '../draw/Draw'\nimport { INavigateInfo, Search } from '../draw/interactive/Search'\nimport { TableOperate } from '../draw/particle/table/TableOperate'\nimport { CanvasEvent } from '../event/CanvasEvent'\nimport { pasteByApi } from '../event/handlers/paste'\nimport { HistoryManager } from '../history/HistoryManager'\nimport { I18n } from '../i18n/I18n'\nimport { Position } from '../position/Position'\nimport { RangeManager } from '../range/RangeManager'\nimport { WorkerManager } from '../worker/WorkerManager'\nimport { Zone } from '../zone/Zone'\nimport {\n IGetAreaValueOption,\n IGetAreaValueResult,\n IInsertAreaOption,\n ILocationAreaOption,\n ISetAreaPropertiesOption,\n ISetAreaValueOption\n} from '../../interface/Area'\nimport { IAreaBadge, IBadge } from '../../interface/Badge'\nimport { IRichtextOption } from '../../interface/Command'\nimport { WatermarkType } from '../../dataset/enum/Watermark'\n\nexport class CommandAdapt {\n private draw: Draw\n private range: RangeManager\n private position: Position\n private historyManager: HistoryManager\n private canvasEvent: CanvasEvent\n private options: DeepRequired<IEditorOption>\n private control: Control\n private workerManager: WorkerManager\n private searchManager: Search\n private i18n: I18n\n private zone: Zone\n private tableOperate: TableOperate\n\n constructor(draw: Draw) {\n this.draw = draw\n this.range = draw.getRange()\n this.position = draw.getPosition()\n this.historyManager = draw.getHistoryManager()\n this.canvasEvent = draw.getCanvasEvent()\n this.options = draw.getOptions()\n this.control = draw.getControl()\n this.workerManager = draw.getWorkerManager()\n this.searchManager = draw.getSearch()\n this.i18n = draw.getI18n()\n this.zone = draw.getZone()\n this.tableOperate = draw.getTableOperate()\n }\n\n public mode(payload: EditorMode) {\n this.draw.setMode(payload)\n }\n\n public async cut() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n await this.canvasEvent.cut()\n }\n\n public async copy(payload?: ICopyOption) {\n await this.canvasEvent.copy(payload)\n }\n\n public paste(payload?: IPasteOption) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n pasteByApi(this.canvasEvent, payload)\n }\n\n public selectAll() {\n this.canvasEvent.selectAll()\n }\n\n public backspace() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const elementList = this.draw.getElementList()\n const { startIndex, endIndex } = this.range.getRange()\n const isCollapsed = startIndex === endIndex\n // Prevent deletion of first character\n if (\n isCollapsed &&\n elementList[startIndex].value === ZERO &&\n startIndex === 0\n ) {\n return\n }\n if (!isCollapsed) {\n this.draw.spliceElementList(\n elementList,\n startIndex + 1,\n endIndex - startIndex\n )\n } else {\n this.draw.spliceElementList(elementList, startIndex, 1)\n }\n const curIndex = isCollapsed ? startIndex - 1 : startIndex\n this.range.setRange(curIndex, curIndex)\n this.draw.render({ curIndex })\n }\n\n public setRange(\n startIndex: number,\n endIndex: number,\n tableId?: string,\n startTdIndex?: number,\n endTdIndex?: number,\n startTrIndex?: number,\n endTrIndex?: number\n ) {\n if (startIndex < 0 || endIndex < 0 || endIndex < startIndex) return\n this.range.setRange(\n startIndex,\n endIndex,\n tableId,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n )\n const isCollapsed = startIndex === endIndex\n this.draw.render({\n curIndex: isCollapsed ? startIndex : undefined,\n isCompute: false,\n isSubmitHistory: false,\n isSetCursor: isCollapsed\n })\n }\n\n public replaceRange(range: IRange) {\n this.setRange(\n range.startIndex,\n range.endIndex,\n range.tableId,\n range.startTdIndex,\n range.endTdIndex,\n range.startTrIndex,\n range.endTrIndex\n )\n }\n\n public setPositionContext(range: IRange) {\n const { tableId, startTrIndex, startTdIndex } = range\n const elementList = this.draw.getOriginalElementList()\n if (tableId) {\n const tableElementIndex = elementList.findIndex(el => el.id === tableId)\n if (!~tableElementIndex) return\n const tableElement = elementList[tableElementIndex]\n const tr = tableElement.trList![startTrIndex!]\n const td = tr.tdList[startTdIndex!]\n this.position.setPositionContext({\n isTable: true,\n index: tableElementIndex,\n trIndex: startTrIndex,\n tdIndex: startTdIndex,\n tdId: td.id,\n trId: tr.id,\n tableId\n })\n } else {\n this.position.setPositionContext({\n isTable: false\n })\n }\n }\n\n public forceUpdate(options?: IForceUpdateOption) {\n const { isSubmitHistory = false } = options || {}\n this.range.clearRange()\n this.draw.render({\n isSubmitHistory,\n isSetCursor: false\n })\n }\n\n public blur() {\n this.range.clearRange()\n this.draw.getCursor().recoveryCursor()\n }\n\n public undo() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.historyManager.undo()\n }\n\n public redo() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.historyManager.redo()\n }\n\n public painter(options: IPainterOption) {\n if (!options.isDblclick && this.draw.getPainterStyle()) {\n this.canvasEvent.clearPainterStyle()\n return\n }\n const selection = this.range.getSelection()\n if (!selection) return\n const painterStyle: IElementStyle = {}\n selection.forEach(s => {\n const painterStyleKeys = EDITOR_ELEMENT_STYLE_ATTR\n painterStyleKeys.forEach(p => {\n const key = p as keyof typeof ElementStyleKey\n if (painterStyle[key] === undefined) {\n Reflect.set(painterStyle, key, s[key])\n }\n })\n })\n this.draw.setPainterStyle(painterStyle, options)\n }\n\n public applyPainterStyle() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n this.canvasEvent.applyPainterStyle()\n }\n\n public format(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n let renderOption: IDrawOption = {}\n let changeElementList: IElement[] = []\n if (selection?.length) {\n changeElementList = selection\n renderOption = { isSetCursor: false }\n } else {\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n if (enterElement?.value === ZERO) {\n changeElementList.push(enterElement)\n renderOption = { curIndex: endIndex }\n }\n }\n if (!changeElementList.length) return\n changeElementList.forEach(el => {\n EDITOR_ELEMENT_STYLE_ATTR.forEach(attr => {\n delete el[attr]\n })\n })\n this.draw.render(renderOption)\n }\n\n public font(payload: string, options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n selection.forEach(el => {\n el.font = payload\n })\n this.draw.render({ isSetCursor: false })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n font: payload\n })\n if (enterElement?.value === ZERO) {\n enterElement.font = payload\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public size(payload: number, options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const { minSize, maxSize, defaultSize } = this.options\n if (payload < minSize || payload > maxSize) return\n let renderOption: IDrawOption = {}\n let changeElementList: IElement[] = []\n const selection = this.range.getTextLikeSelectionElementList()\n if (selection?.length) {\n changeElementList = selection\n renderOption = { isSetCursor: false }\n } else {\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n size: payload\n })\n if (enterElement?.value === ZERO) {\n changeElementList.push(enterElement)\n renderOption = { curIndex: endIndex }\n } else {\n this.draw.render({\n curIndex: endIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n }\n if (!changeElementList.length) return\n let isExistUpdate = false\n changeElementList.forEach(el => {\n if (\n (!el.size && payload === defaultSize) ||\n (el.size && el.size === payload)\n ) {\n return\n }\n el.size = payload\n isExistUpdate = true\n })\n if (isExistUpdate) {\n this.draw.render(renderOption)\n }\n }\n\n public sizeAdd(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const { defaultSize, maxSize } = this.options\n const selection = this.range.getTextLikeSelectionElementList()\n let renderOption: IDrawOption = {}\n let changeElementList: IElement[] = []\n if (selection?.length) {\n changeElementList = selection\n renderOption = { isSetCursor: false }\n } else {\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n const style = this.range.getDefaultStyle()\n const anchorSize = style?.size || enterElement.size || defaultSize\n this.range.setDefaultStyle({\n size: anchorSize + 2 > maxSize ? maxSize : anchorSize + 2\n })\n if (enterElement?.value === ZERO) {\n changeElementList.push(enterElement)\n renderOption = { curIndex: endIndex }\n } else {\n this.draw.render({\n curIndex: endIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n }\n if (!changeElementList.length) return\n let isExistUpdate = false\n changeElementList.forEach(el => {\n if (!el.size) {\n el.size = defaultSize\n }\n if (el.size >= maxSize) return\n if (el.size + 2 > maxSize) {\n el.size = maxSize\n } else {\n el.size += 2\n }\n isExistUpdate = true\n })\n if (isExistUpdate) {\n this.draw.render(renderOption)\n }\n }\n\n public sizeMinus(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const { defaultSize, minSize } = this.options\n const selection = this.range.getTextLikeSelectionElementList()\n let renderOption: IDrawOption = {}\n let changeElementList: IElement[] = []\n if (selection?.length) {\n changeElementList = selection\n renderOption = { isSetCursor: false }\n } else {\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n const style = this.range.getDefaultStyle()\n const anchorSize = style?.size || enterElement.size || defaultSize\n this.range.setDefaultStyle({\n size: anchorSize - 2 < minSize ? minSize : anchorSize - 2\n })\n if (enterElement?.value === ZERO) {\n changeElementList.push(enterElement)\n renderOption = { curIndex: endIndex }\n } else {\n this.draw.render({\n curIndex: endIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n }\n if (!changeElementList.length) return\n let isExistUpdate = false\n changeElementList.forEach(el => {\n if (!el.size) {\n el.size = defaultSize\n }\n if (el.size <= minSize) return\n if (el.size - 2 < minSize) {\n el.size = minSize\n } else {\n el.size -= 2\n }\n isExistUpdate = true\n })\n if (isExistUpdate) {\n this.draw.render(renderOption)\n }\n }\n\n public bold(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n const noBoldIndex = selection.findIndex(s => !s.bold)\n selection.forEach(el => {\n el.bold = !!~noBoldIndex\n })\n this.draw.render({ isSetCursor: false })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n bold: enterElement.bold ? false : !this.range.getDefaultStyle()?.bold\n })\n if (enterElement?.value === ZERO) {\n enterElement.bold = !enterElement.bold\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public italic(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n const noItalicIndex = selection.findIndex(s => !s.italic)\n selection.forEach(el => {\n el.italic = !!~noItalicIndex\n })\n this.draw.render({ isSetCursor: false })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n italic: enterElement.italic\n ? false\n : !this.range.getDefaultStyle()?.italic\n })\n if (enterElement?.value === ZERO) {\n enterElement.italic = !enterElement.italic\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public underline(\n textDecoration?: ITextDecoration,\n options?: IRichtextOption\n ) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n // Reset underline when not set, current/previous missing, or text decoration inconsistent\n const isSetUnderline = selection.some(\n s =>\n !s.underline ||\n (!textDecoration && s.textDecoration) ||\n (textDecoration && !s.textDecoration) ||\n (textDecoration &&\n s.textDecoration &&\n !isObjectEqual(s.textDecoration, textDecoration))\n )\n selection.forEach(el => {\n el.underline = isSetUnderline\n if (isSetUnderline && textDecoration) {\n el.textDecoration = textDecoration\n } else {\n delete el.textDecoration\n }\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n underline: enterElement?.underline\n ? false\n : !this.range.getDefaultStyle()?.underline\n })\n if (enterElement?.value === ZERO) {\n enterElement.underline = !enterElement.underline\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public strikeout(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n const noStrikeoutIndex = selection.findIndex(s => !s.strikeout)\n selection.forEach(el => {\n el.strikeout = !!~noStrikeoutIndex\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n strikeout: enterElement.strikeout\n ? false\n : !this.range.getDefaultStyle()?.strikeout\n })\n if (enterElement?.value === ZERO) {\n enterElement.strikeout = !enterElement.strikeout\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public superscript(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (!selection) return\n const superscriptIndex = selection.findIndex(\n s => s.type === ElementType.SUPERSCRIPT\n )\n selection.forEach(el => {\n if (~superscriptIndex) {\n if (el.type === ElementType.SUPERSCRIPT) {\n el.type = ElementType.TEXT\n delete el.actualSize\n }\n } else {\n if (\n !el.type ||\n el.type === ElementType.TEXT ||\n el.type === ElementType.SUBSCRIPT\n ) {\n el.type = ElementType.SUPERSCRIPT\n }\n }\n })\n this.draw.render({ isSetCursor: false })\n }\n\n public subscript(options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (!selection) return\n const subscriptIndex = selection.findIndex(\n s => s.type === ElementType.SUBSCRIPT\n )\n selection.forEach(el => {\n if (~subscriptIndex) {\n if (el.type === ElementType.SUBSCRIPT) {\n el.type = ElementType.TEXT\n delete el.actualSize\n }\n } else {\n if (\n !el.type ||\n el.type === ElementType.TEXT ||\n el.type === ElementType.SUPERSCRIPT\n ) {\n el.type = ElementType.SUBSCRIPT\n }\n }\n })\n this.draw.render({ isSetCursor: false })\n }\n\n public color(payload: string | null, options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n selection.forEach(el => {\n if (payload) {\n el.color = payload\n } else {\n delete el.color\n }\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n color: payload || undefined\n })\n if (enterElement?.value === ZERO) {\n if (payload) {\n enterElement.color = payload\n } else {\n delete enterElement.color\n }\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public highlight(payload: string | null, options?: IRichtextOption) {\n const { isIgnoreDisabledRule = false } = options || {}\n const isDisabled =\n !isIgnoreDisabledRule &&\n (this.draw.isReadonly() || this.draw.isDisabled())\n if (isDisabled) return\n const selection = this.range.getSelectionElementList()\n if (selection?.length) {\n selection.forEach(el => {\n if (payload) {\n el.highlight = payload\n } else {\n delete el.highlight\n }\n })\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n } else {\n let isSubmitHistory = true\n const { endIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const enterElement = elementList[endIndex]\n this.range.setDefaultStyle({\n highlight: payload || undefined\n })\n if (enterElement?.value === ZERO) {\n if (payload) {\n enterElement.highlight = payload\n } else {\n delete enterElement.highlight\n }\n } else {\n isSubmitHistory = false\n }\n this.draw.render({\n isSubmitHistory,\n curIndex: endIndex,\n isCompute: false\n })\n }\n }\n\n public title(payload: TitleLevel | null) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const elementList = this.draw.getElementList()\n const changeElementList =\n startIndex === endIndex\n ? this.range.getRangeParagraphElementList()\n : elementList.slice(startIndex + 1, endIndex + 1)\n if (!changeElementList || !changeElementList.length) return\n const titleId = getUUID()\n const titleOptions = this.draw.getOptions().title\n changeElementList.forEach(el => {\n if (payload) {\n el.level = payload\n el.titleId = titleId\n // isTextLikeElement sudah mencakup ZERO (no type = text-like)\n // sehingga empty heading line juga dapat size/bold yang benar\n if (isTextLikeElement(el)) {\n el.size = titleOptions[titleSizeMapping[payload]]\n el.bold = true\n } else if (el.type === ElementType.LABEL) {\n el.size = Math.max(titleOptions[titleSizeMapping[payload]] - 1, 8)\n el.bold = true\n }\n } else {\n if (el.titleId) {\n delete el.titleId\n delete el.title\n delete el.level\n delete el.size\n delete el.bold\n }\n }\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n // Update defaultStyle agar karakter baru yang diketik di heading\n // langsung inherit ukuran dan bold heading tersebut\n if (payload) {\n this.range.setDefaultStyle({\n size: titleOptions[titleSizeMapping[payload]],\n bold: true\n })\n } else {\n this.range.setDefaultStyle(null)\n }\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public list(listType: ListType | null, listStyle?: ListStyle) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.getListParticle().setList(listType, listStyle)\n }\n\n public listWithPreset(\n listType: ListType,\n listStyle: ListStyle,\n preset: string\n ) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.getListParticle().setListWithPreset(listType, listStyle, preset)\n }\n\n public listIndent() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.getListParticle().indent()\n }\n\n public listOutdent() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.getListParticle().outdent()\n }\n\n public rowFlex(payload: RowFlex) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const rowElementList = this.range.getRangeRowElementList()\n if (!rowElementList) return\n rowElementList.forEach(element => {\n element.rowFlex = payload\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public rowMargin(payload: number) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const rowElementList = this.range.getRangeRowElementList()\n if (!rowElementList) return\n rowElementList.forEach(element => {\n element.rowMargin = payload\n })\n const isSetCursor = startIndex === endIndex\n const curIndex = isSetCursor ? endIndex : startIndex\n this.draw.render({ curIndex, isSetCursor })\n }\n\n public insertTable(row: number, col: number) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const activeControl = this.control.getActiveControl()\n if (activeControl) return\n this.tableOperate.insertTable(row, col)\n }\n\n public insertTableTopRow() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.insertTableTopRow()\n }\n\n public insertTableBottomRow() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.insertTableBottomRow()\n }\n\n public insertTableLeftCol() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.insertTableLeftCol()\n }\n\n public insertTableRightCol() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.insertTableRightCol()\n }\n\n public deleteTableRow() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.deleteTableRow()\n }\n\n public deleteTableCol() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.deleteTableCol()\n }\n\n public deleteTable() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.deleteTable()\n }\n\n public mergeTableCell() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.mergeTableCell()\n }\n\n public cancelMergeTableCell() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.cancelMergeTableCell()\n }\n\n public splitVerticalTableCell() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.splitVerticalTableCell()\n }\n\n public splitHorizontalTableCell() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.splitHorizontalTableCell()\n }\n\n public tableTdVerticalAlign(payload: VerticalAlign) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableTdVerticalAlign(payload)\n }\n\n public tableBorderType(payload: TableBorder) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableBorderType(payload)\n }\n\n public tableBorderColor(payload: string) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableBorderColor(payload)\n }\n\n public tableTdBorderType(payload: TdBorder) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableTdBorderType(payload)\n }\n\n public tableTdSlashType(payload: TdSlash) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableTdSlashType(payload)\n }\n\n public tableTdBackgroundColor(payload: string) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.tableOperate.tableTdBackgroundColor(payload)\n }\n\n public tableSelectAll() {\n this.tableOperate.tableSelectAll()\n }\n\n public hyperlink(\n payload: Pick<IElement, 'valueList' | 'hyperlinkId' | 'url'>\n ) {\n const { valueList, url, hyperlinkId } = payload\n if (!url || !valueList?.length) return\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const activeControl = this.control.getActiveControl()\n if (activeControl) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n this.insertElementList([\n {\n type: ElementType.HYPERLINK,\n value: '',\n valueList,\n url,\n hyperlinkId: hyperlinkId || getUUID()\n }\n ])\n }\n\n public getHyperlinkRange(): [number, number] | null {\n let leftIndex = -1\n let rightIndex = -1\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return null\n const elementList = this.draw.getElementList()\n const startElement = elementList[startIndex]\n if (startElement.type !== ElementType.HYPERLINK) return null\n let preIndex = startIndex\n while (preIndex > 0) {\n const preElement = elementList[preIndex]\n if (preElement.hyperlinkId !== startElement.hyperlinkId) {\n leftIndex = preIndex + 1\n break\n }\n preIndex--\n }\n let nextIndex = startIndex + 1\n while (nextIndex < elementList.length) {\n const nextElement = elementList[nextIndex]\n if (nextElement.hyperlinkId !== startElement.hyperlinkId) {\n rightIndex = nextIndex - 1\n break\n }\n nextIndex++\n }\n if (nextIndex === elementList.length) {\n rightIndex = nextIndex - 1\n }\n if (!~leftIndex || !~rightIndex) return null\n return [leftIndex, rightIndex]\n }\n\n public deleteHyperlink() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const hyperRange = this.getHyperlinkRange()\n if (!hyperRange) return\n const elementList = this.draw.getElementList()\n const [leftIndex, rightIndex] = hyperRange\n this.draw.spliceElementList(\n elementList,\n leftIndex,\n rightIndex - leftIndex + 1\n )\n this.draw.getHyperlinkParticle().clearHyperlinkPopup()\n const newIndex = leftIndex - 1\n this.range.setRange(newIndex, newIndex)\n this.draw.render({\n curIndex: newIndex\n })\n }\n\n public cancelHyperlink() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const hyperRange = this.getHyperlinkRange()\n if (!hyperRange) return\n const elementList = this.draw.getElementList()\n const [leftIndex, rightIndex] = hyperRange\n for (let i = leftIndex; i <= rightIndex; i++) {\n const element = elementList[i]\n delete element.type\n delete element.url\n delete element.hyperlinkId\n delete element.underline\n }\n this.draw.getHyperlinkParticle().clearHyperlinkPopup()\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex,\n isCompute: false\n })\n }\n\n public editHyperlink(payload: string) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const hyperRange = this.getHyperlinkRange()\n if (!hyperRange) return\n const elementList = this.draw.getElementList()\n const [leftIndex, rightIndex] = hyperRange\n for (let i = leftIndex; i <= rightIndex; i++) {\n const element = elementList[i]\n element.url = payload\n }\n this.draw.getHyperlinkParticle().clearHyperlinkPopup()\n const { endIndex } = this.range.getRange()\n this.draw.render({\n curIndex: endIndex,\n isCompute: false\n })\n }\n\n public separator(\n dashArray: number[],\n option?: { lineWidth?: number; color?: string }\n ) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const activeControl = this.control.getActiveControl()\n if (activeControl) return\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return\n const elementList = this.draw.getElementList()\n let curIndex = -1\n // If cursor is at separator, treat as modify segment logic\n const endElement = elementList[endIndex + 1]\n if (endElement && endElement.type === ElementType.SEPARATOR) {\n if (\n endElement.dashArray &&\n endElement.dashArray.join() === dashArray.join()\n ) {\n return\n }\n curIndex = endIndex\n Object.assign(endElement, {\n dashArray,\n ...option\n })\n } else {\n const newElement: IElement = {\n value: WRAP,\n type: ElementType.SEPARATOR,\n dashArray,\n ...option\n }\n formatElementContext(elementList, [newElement], startIndex, {\n editorOptions: this.options\n })\n if (startIndex !== 0 && elementList[startIndex].value === ZERO) {\n this.draw.spliceElementList(elementList, startIndex, 1, [newElement])\n curIndex = startIndex - 1\n } else {\n this.draw.spliceElementList(elementList, startIndex + 1, 0, [\n newElement\n ])\n curIndex = startIndex\n }\n }\n this.range.setRange(curIndex, curIndex)\n this.draw.render({ curIndex })\n }\n\n public pageBreak() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const activeControl = this.control.getActiveControl()\n if (activeControl) return\n this.insertElementList([\n {\n type: ElementType.PAGE_BREAK,\n value: WRAP\n },\n { value: ZERO }\n ])\n }\n\n public addWatermark(payload: IWatermark) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const options = this.draw.getOptions()\n const { color, size, opacity, font, gap } = defaultWatermarkOption\n options.watermark.data = payload.data\n options.watermark.type = payload.type || WatermarkType.TEXT\n if (payload.width) {\n options.watermark.width = payload.width\n }\n if (payload.height) {\n options.watermark.height = payload.height\n }\n options.watermark.color = payload.color || color\n options.watermark.opacity = payload.opacity || opacity\n options.watermark.size = payload.size || size\n options.watermark.font = payload.font || font\n options.watermark.repeat = !!payload.repeat\n if (payload.numberType) {\n options.watermark.numberType = payload.numberType\n }\n options.watermark.gap = payload.gap || gap\n options.watermark.rotation = payload.rotation ?? defaultWatermarkOption.rotation\n options.watermark.inFront = !!payload.inFront\n this.draw.render({\n isSetCursor: false,\n isSubmitHistory: false,\n isCompute: false\n })\n }\n\n public deleteWatermark() {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n const options = this.draw.getOptions()\n if (options.watermark && options.watermark.data) {\n options.watermark = { ...defaultWatermarkOption }\n this.draw.render({\n isSetCursor: false,\n isSubmitHistory: false,\n isCompute: false\n })\n }\n }\n\n public image(payload: IDrawImagePayload): string | null {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return null\n const { startIndex, endIndex } = this.range.getRange()\n if (!~startIndex && !~endIndex) return null\n const imageId = payload.id || getUUID()\n this.insertElementList([\n {\n ...payload,\n id: imageId,\n type: ElementType.IMAGE\n }\n ])\n return imageId\n }\n\n public search(payload: string | null, options?: ISearchOption) {\n this.searchManager.setSearchKeyword(payload, options)\n this.draw.render({\n isSubmitHistory: false\n })\n }\n\n public searchNavigatePre() {\n const index = this.searchManager.searchNavigatePre()\n if (index === null) return\n this.draw.render({\n isSetCursor: false,\n isSubmitHistory: false,\n isCompute: false,\n isLazy: false\n })\n }\n\n public searchNavigateNext() {\n const index = this.searchManager.searchNavigateNext()\n if (index === null) return\n this.draw.render({\n isSetCursor: false,\n isSubmitHistory: false,\n isCompute: false,\n isLazy: false\n })\n }\n\n public getSearchNavigateInfo(): null | INavigateInfo {\n return this.searchManager.getSearchNavigateInfo()\n }\n\n public replace(payload: string, option?: IReplaceOption) {\n this.draw.getSearch().replace(payload, option)\n }\n\n public async print() {\n const { scale, printPixelRatio, paperDirection, width, height } =\n this.options\n if (scale !== 1) {\n this.draw.setPageScale(1)\n }\n const base64List = await this.draw.getDataURL({\n pixelRatio: printPixelRatio,\n mode: EditorMode.PRINT\n })\n printImageBase64(base64List, {\n width,\n height,\n direction: paperDirection\n })\n if (scale !== 1) {\n this.draw.setPageScale(scale)\n }\n }\n\n public replaceImageElement(payload: string) {\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n if (!element || element.type !== ElementType.IMAGE) return\n element.value = payload\n this.draw.render({\n isSetCursor: false\n })\n }\n\n public saveAsImageElement() {\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n if (!element || element.type !== ElementType.IMAGE) return\n downloadFile(element.value, `${element.id!}.png`)\n }\n\n public setImageCrop(crop: IImageCrop) {\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n if (!element || element.type !== ElementType.IMAGE) return\n element.imgCrop = crop\n this.draw.render({\n isSetCursor: false,\n isCompute: false\n })\n }\n\n public changeImageDisplay(element: IElement, display: ImageDisplay) {\n if (element.imgDisplay === display) return\n element.imgDisplay = display\n const { startIndex, endIndex } = this.range.getRange()\n if (\n display === ImageDisplay.SURROUND ||\n display === ImageDisplay.FLOAT_TOP ||\n display === ImageDisplay.FLOAT_BOTTOM\n ) {\n const positionList = this.position.getPositionList()\n const {\n pageNo,\n coordinate: { leftTop }\n } = positionList[startIndex]\n element.imgFloatPosition = {\n pageNo,\n x: leftTop[0],\n y: leftTop[1]\n }\n } else {\n delete element.imgFloatPosition\n }\n this.draw.getPreviewer().clearResizer()\n this.draw.render({\n isSetCursor: true,\n curIndex: endIndex\n })\n }\n\n public getImage(payload?: IGetImageOption): Promise<string[]> {\n return this.draw.getDataURL(payload)\n }\n\n public getOptions(): DeepRequired<IEditorOption> {\n return this.options\n }\n\n public getValue(options?: IGetValueOption): IEditorResult {\n return this.draw.getValue(options)\n }\n\n public getValueAsync(options?: IGetValueOption): Promise<IEditorResult> {\n return this.draw.getWorkerManager().getValue(options)\n }\n\n public getAreaValue(\n options?: IGetAreaValueOption\n ): IGetAreaValueResult | null {\n return this.draw.getArea().getAreaValue(options)\n }\n\n public getHTML(): IEditorHTML {\n const options = this.options\n const headerElementList = this.draw.getHeaderElementList()\n const mainElementList = this.draw.getOriginalMainElementList()\n const footerElementList = this.draw.getFooterElementList()\n return {\n header: createDomFromElementList(headerElementList, options).innerHTML,\n main: createDomFromElementList(mainElementList, options).innerHTML,\n footer: createDomFromElementList(footerElementList, options).innerHTML\n }\n }\n\n public getText(): IEditorText {\n const headerElementList = this.draw.getHeaderElementList()\n const mainElementList = this.draw.getOriginalMainElementList()\n const footerElementList = this.draw.getFooterElementList()\n return {\n header: getTextFromElementList(headerElementList),\n main: getTextFromElementList(mainElementList),\n footer: getTextFromElementList(footerElementList)\n }\n }\n\n public getWordCount(): Promise<number> {\n return this.workerManager.getWordCount()\n }\n\n public getCursorPosition(): IElementPosition | null {\n return this.position.getCursorPosition()\n }\n\n public getRange(): IRange {\n return deepClone(this.range.getRange())\n }\n\n public getRangeText(): string {\n return this.range.toString()\n }\n\n public getRangeContext(): RangeContext | null {\n const range = this.range.getRange()\n const { startIndex, endIndex } = range\n if (!~startIndex && !~endIndex) return null\n const isCollapsed = startIndex === endIndex\n const selectionText = this.range.toString()\n const selectionElementList = zipElementList(\n this.range.getSelectionElementList() || []\n )\n const elementList = this.draw.getElementList()\n const startElement = pickElementAttr(\n elementList[isCollapsed ? startIndex : startIndex + 1],\n {\n extraPickAttrs: ['id', 'controlComponent']\n }\n )\n const endElement = pickElementAttr(elementList[endIndex], {\n extraPickAttrs: ['id', 'controlComponent']\n })\n // Page info and row info\n const rowList = this.draw.getRowList()\n const positionList = this.position.getPositionList()\n const startPosition = positionList[startIndex]\n const endPosition = positionList[endIndex]\n const startPageNo = startPosition.pageNo\n const endPageNo = endPosition.pageNo\n const startRowNo = startPosition.rowIndex\n const endRowNo = endPosition.rowIndex\n const startRow = rowList[startRowNo]\n const endRow = rowList[endRowNo]\n let startColNo = 0\n let endColNo = 0\n if (!this.draw.getCursor().getHitLineStartIndex()) {\n startColNo =\n startRow.elementList[0]?.value === ZERO\n ? startPosition.index! - startRow.startIndex\n : startPosition.index! - startRow.startIndex + 1\n }\n if (startPosition === endPosition) {\n endColNo = startColNo\n } else {\n endColNo =\n endRow.elementList[0]?.value === ZERO\n ? endPosition.index! - endRow.startIndex\n : endPosition.index! - endRow.startIndex + 1\n }\n\n // Coordinate info (relative to editor writing area)\n const rangeRects: RangeRect[] = []\n const height = this.draw.getOriginalHeight()\n const pageGap = this.draw.getOriginalPageGap()\n const selectionPositionList = this.position.getSelectionPositionList()\n if (selectionPositionList) {\n // Start info and x coordinate\n let currentRowNo: number | null = null\n let currentX = 0\n let rangeRect: RangeRect | null = null\n for (let p = 0; p < selectionPositionList.length; p++) {\n const {\n rowNo,\n pageNo,\n coordinate: { leftTop, rightTop },\n lineHeight\n } = selectionPositionList[p]\n if (currentRowNo === null || currentRowNo !== rowNo) {\n if (rangeRect) {\n rangeRects.push(rangeRect)\n }\n rangeRect = {\n x: leftTop[0],\n y: leftTop[1] + pageNo * (height + pageGap),\n width: rightTop[0] - leftTop[0],\n height: lineHeight\n }\n currentRowNo = rowNo\n currentX = leftTop[0]\n } else {\n rangeRect!.width = rightTop[0] - currentX\n }\n // Append selection info at end of last element\n if (p === selectionPositionList.length - 1 && rangeRect) {\n rangeRects.push(rangeRect)\n }\n }\n } else {\n const positionList = this.position.getPositionList()\n const position = positionList[endIndex]\n const {\n coordinate: { rightTop },\n pageNo,\n lineHeight\n } = position\n rangeRects.push({\n x: rightTop[0],\n y: rightTop[1] + pageNo * (height + pageGap),\n width: 0,\n height: lineHeight\n })\n }\n const zone = this.draw.getZone().getZone()\n const { isTable, trIndex, tdIndex, index } =\n this.position.getPositionContext()\n let tableElement: IElement | null = null\n if (isTable) {\n const originalElementList = this.draw.getOriginalElementList()\n const originTableElement = originalElementList[index!] || null\n if (originTableElement) {\n tableElement = zipElementList([originTableElement])[0]\n }\n }\n let titleId: string | null = null\n let titleStartPageNo: number | null = null\n let start = startIndex - 1\n while (start > 0) {\n const curElement = elementList[start]\n const preElement = elementList[start - 1]\n if (curElement.titleId && curElement.titleId !== preElement?.titleId) {\n titleId = curElement.titleId\n titleStartPageNo = positionList[start].pageNo\n break\n }\n start--\n }\n return deepClone<RangeContext>({\n isCollapsed,\n startElement,\n endElement,\n startPageNo,\n endPageNo,\n startRowNo,\n endRowNo,\n startColNo,\n endColNo,\n rangeRects,\n zone,\n isTable,\n trIndex: trIndex ?? null,\n tdIndex: tdIndex ?? null,\n tableElement,\n selectionText,\n selectionElementList,\n titleId,\n titleStartPageNo\n })\n }\n\n public getRangeRow(): IElement[] | null {\n const rowElementList = this.range.getRangeRowElementList()\n return rowElementList ? zipElementList(rowElementList) : null\n }\n\n public getRangeParagraph(): IElement[] | null {\n const paragraphElementList = this.range.getRangeParagraphElementList()\n return paragraphElementList ? zipElementList(paragraphElementList) : null\n }\n\n public getKeywordRangeList(payload: string): IRange[] {\n return this.range.getKeywordRangeList(payload)\n }\n\n public getKeywordContext(payload: string): ISearchResultContext[] | null {\n const rangeList = this.getKeywordRangeList(payload)\n if (!rangeList.length) return null\n const searchResultContextList: ISearchResultContext[] = []\n const positionList = this.position.getOriginalMainPositionList()\n const elementList = this.draw.getOriginalMainElementList()\n for (let r = 0; r < rangeList.length; r++) {\n const range = rangeList[r]\n const { startIndex, endIndex, tableId, startTrIndex, startTdIndex } =\n range\n let keywordPositionList: IElementPosition[] = positionList\n if (range.tableId) {\n const tableElement = elementList.find(el => el.id === tableId)\n if (tableElement) {\n keywordPositionList =\n tableElement.trList?.[startTrIndex!]?.tdList?.[startTdIndex!]\n ?.positionList || []\n }\n }\n const startPosition = deepClone(keywordPositionList[startIndex])\n const endPosition = deepClone(keywordPositionList[endIndex])\n searchResultContextList.push({\n range,\n startPosition,\n endPosition\n })\n }\n return searchResultContextList\n }\n\n public pageMode(payload: PageMode) {\n this.draw.setPageMode(payload)\n }\n\n public pageScale(scale: number) {\n if (scale === this.options.scale) return\n this.draw.setPageScale(scale)\n }\n\n public pageScaleRecovery() {\n const { scale } = this.options\n if (scale !== 1) {\n this.draw.setPageScale(1)\n }\n }\n\n public pageScaleMinus() {\n const { scale } = this.options\n const nextScale = scale * 10 - 1\n if (nextScale >= 5) {\n this.draw.setPageScale(nextScale / 10)\n }\n }\n\n public pageScaleAdd() {\n const { scale } = this.options\n const nextScale = scale * 10 + 1\n if (nextScale <= 30) {\n this.draw.setPageScale(nextScale / 10)\n }\n }\n\n public paperSize(width: number, height: number) {\n this.draw.setPaperSize(width, height)\n }\n\n public paperDirection(payload: PaperDirection) {\n this.draw.setPaperDirection(payload)\n }\n\n public getPaperMargin(): number[] {\n return this.options.margins\n }\n\n public setPaperMargin(payload: IMargin) {\n return this.draw.setPaperMargin(payload)\n }\n\n public setMainBadge(payload: IBadge | null) {\n this.draw.getBadge().setMainBadge(payload)\n this.draw.render({\n isCompute: false,\n isSubmitHistory: false\n })\n }\n\n public setAreaBadge(payload: IAreaBadge[]) {\n this.draw.getBadge().setAreaBadgeMap(payload)\n this.draw.render({\n isCompute: false,\n isSubmitHistory: false\n })\n }\n\n public insertElementList(\n payload: IElement[],\n options: IInsertElementListOption = {}\n ) {\n if (!payload.length) return\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const { isReplace = true, ignoreContextKeys } = options\n // If replace is not configured, need to shrink selection to end\n if (!isReplace) {\n this.range.shrinkRange()\n }\n const cloneElementList = deepClone(payload)\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n formatElementContext(elementList, cloneElementList, startIndex, {\n ignoreContextKeys,\n isBreakWhenWrap: true,\n editorOptions: this.options\n })\n this.draw.insertElementList(cloneElementList, options)\n }\n\n public appendElementList(\n elementList: IElement[],\n options?: IAppendElementListOption\n ) {\n if (!elementList.length) return\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.appendElementList(deepClone(elementList), options)\n }\n\n public updateElementById(payload: IUpdateElementByIdOption) {\n const { id, conceptId } = payload\n if (!id && !conceptId) return\n const updateElementInfoList: {\n elementList: IElement[]\n index: number\n }[] = []\n function getElementInfoById(elementList: IElement[]) {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n getElementInfoById(td.value)\n }\n }\n }\n if (\n (id && element.id === id) ||\n (conceptId && element.conceptId === conceptId)\n ) {\n updateElementInfoList.push({\n elementList,\n index: i - 1\n })\n }\n }\n }\n const data = [\n this.draw.getOriginalMainElementList(),\n this.draw.getHeaderElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n getElementInfoById(elementList)\n }\n if (!updateElementInfoList.length) return\n for (let i = 0; i < updateElementInfoList.length; i++) {\n const { elementList, index } = updateElementInfoList[i]\n const oldElement = elementList[index]\n const newElement = zipElementList(\n [\n {\n ...oldElement,\n ...payload.properties\n }\n ],\n {\n extraPickAttrs: ['id']\n }\n )\n cloneProperty<IElement>(AREA_CONTEXT_ATTR, oldElement, newElement[0])\n formatElementList(newElement, {\n isHandleFirstElement: false,\n editorOptions: this.options\n })\n elementList[index] = newElement[0]\n }\n this.draw.render({\n isSetCursor: false\n })\n }\n\n public deleteElementById(payload: IDeleteElementByIdOption) {\n const { id, conceptId } = payload\n if (!id && !conceptId) return\n let isExistDelete = false\n function deleteElement(elementList: IElement[]) {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n deleteElement(td.value)\n }\n }\n }\n if (\n (id && element.id === id) ||\n (conceptId && element.conceptId === conceptId)\n ) {\n isExistDelete = true\n elementList.splice(i, 1)\n i--\n }\n i++\n }\n }\n const data = [\n this.draw.getOriginalMainElementList(),\n this.draw.getHeaderElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n deleteElement(elementList)\n }\n if (!isExistDelete) return\n this.draw.render({\n isSetCursor: false\n })\n }\n\n public getElementById(payload: IGetElementByIdOption): IElement[] {\n const { id, conceptId } = payload\n const result: IElement[] = []\n if (!id && !conceptId) return result\n const getElement = (elementList: IElement[]) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n getElement(td.value)\n }\n }\n }\n if (\n (id && element.id !== id) ||\n (conceptId && element.conceptId !== conceptId)\n ) {\n continue\n }\n result.push(element)\n }\n }\n const data = [\n this.draw.getHeaderElementList(),\n this.draw.getOriginalMainElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n getElement(elementList)\n }\n return zipElementList(result, {\n extraPickAttrs: ['id']\n })\n }\n\n public setValue(payload: Partial<IEditorData>, options?: ISetValueOption) {\n this.draw.setValue(payload, options)\n }\n\n public removeControl(payload?: IRemoveControlOption) {\n if (payload?.id || payload?.conceptId) {\n const { id, conceptId } = payload\n let isExistRemove = false\n const remove = (elementList: IElement[]) => {\n let i = elementList.length - 1\n while (i >= 0) {\n const element = elementList[i]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n remove(td.value)\n }\n }\n }\n i--\n if (\n !element.control ||\n (id && element.controlId !== id) ||\n (conceptId && element.control.conceptId !== conceptId)\n ) {\n continue\n }\n isExistRemove = true\n elementList.splice(i + 1, 1)\n }\n }\n const data = [\n this.draw.getHeaderElementList(),\n this.draw.getOriginalMainElementList(),\n this.draw.getFooterElementList()\n ]\n for (const elementList of data) {\n remove(elementList)\n }\n if (isExistRemove) {\n this.draw.render({\n isSetCursor: false\n })\n }\n } else {\n const { startIndex, endIndex } = this.range.getRange()\n if (startIndex !== endIndex) return\n const elementList = this.draw.getElementList()\n const element = elementList[startIndex]\n if (!element.controlId) return\n const control = this.draw.getControl()\n const newIndex = control.removeControl(startIndex)\n if (newIndex === null) return\n this.range.setRange(newIndex, newIndex)\n this.draw.render({\n curIndex: newIndex\n })\n }\n }\n\n public translate(path: string): string {\n return this.i18n.t(path)\n }\n\n public setLocale(payload: string) {\n this.i18n.setLocale(payload)\n }\n\n public getLocale(): string {\n return this.i18n.getLocale()\n }\n\n public getCatalog(): Promise<ICatalog | null> {\n return this.workerManager.getCatalog()\n }\n\n public locationCatalog(titleId: string) {\n const elementList = this.draw.getOriginalElementList()\n\n function getPosition(\n elementList: IElement[],\n titleId: string\n ): (IRange & IPositionContext) | null {\n for (let e = 0; e < elementList.length; e++) {\n const element = elementList[e]\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const range = getPosition(td.value, titleId)\n if (range) {\n return {\n ...range,\n isTable: true,\n index: e,\n trIndex: r,\n tdIndex: d,\n tdId: td.id,\n trId: tr.id,\n tableId: element.id\n }\n }\n }\n }\n }\n if (element.titleId === titleId) {\n let newIndex = e\n while (newIndex < elementList.length) {\n if (elementList[newIndex + 1]?.titleId !== titleId) {\n return {\n isTable: false,\n startIndex: newIndex,\n endIndex: newIndex\n }\n }\n newIndex++\n }\n }\n }\n return null\n }\n\n const context = getPosition(elementList, titleId)\n if (!context) return\n const {\n isTable,\n index,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId,\n endIndex\n } = context\n this.position.setPositionContext({\n isTable,\n index,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId\n })\n this.range.setRange(\n endIndex,\n endIndex,\n tableId,\n startTdIndex,\n endTdIndex,\n startTrIndex,\n endTrIndex\n )\n this.draw.render({\n curIndex: endIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n\n public wordTool() {\n const elementList = this.draw.getMainElementList()\n let isApply = false\n for (let i = 0; i < elementList.length; i++) {\n const element = elementList[i]\n // Delete empty lines and leading spaces\n if (element.value === ZERO) {\n while (i + 1 < elementList.length) {\n const nextElement = elementList[i + 1]\n if (nextElement.value !== ZERO && nextElement.value !== NBSP) break\n elementList.splice(i + 1, 1)\n isApply = true\n }\n }\n }\n if (!isApply) {\n const isCollapsed = this.range.getIsCollapsed()\n this.draw.getCursor().drawCursor({\n isShow: isCollapsed\n })\n } else {\n this.draw.render({\n isSetCursor: false\n })\n }\n }\n\n public setHTML(payload: Partial<IEditorHTML>) {\n const { header, main, footer } = payload\n const innerWidth = this.draw.getOriginalInnerWidth()\n // Data is undefined when not set to avoid overwriting current data\n const getElementList = (htmlText?: string) =>\n htmlText !== undefined\n ? getElementListByHTML(htmlText, {\n innerWidth\n })\n : undefined\n this.setValue({\n header: getElementList(header),\n main: getElementList(main),\n footer: getElementList(footer)\n })\n }\n\n public setGroup(): string | null {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return null\n return this.draw.getGroup().setGroup()\n }\n\n public deleteGroup(groupId: string) {\n const isReadonly = this.draw.isReadonly()\n if (isReadonly) return\n this.draw.getGroup().deleteGroup(groupId)\n }\n\n public getGroupIds(): Promise<string[]> {\n return this.draw.getWorkerManager().getGroupIds()\n }\n\n public locationGroup(groupId: string) {\n const elementList = this.draw.getOriginalMainElementList()\n const context = this.draw\n .getGroup()\n .getContextByGroupId(elementList, groupId)\n if (!context) return\n const { isTable, index, trIndex, tdIndex, tdId, trId, tableId, endIndex } =\n context\n this.position.setPositionContext({\n isTable,\n index,\n trIndex,\n tdIndex,\n tdId,\n trId,\n tableId\n })\n this.range.setRange(endIndex, endIndex)\n this.draw.render({\n curIndex: endIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n\n public setZone(zone: EditorZone) {\n this.draw.getZone().setZone(zone)\n }\n\n public getControlValue(\n payload: IGetControlValueOption\n ): IGetControlValueResult | null {\n return this.draw.getControl().getValueById(payload)\n }\n\n public setControlValue(payload: ISetControlValueOption) {\n this.draw.getControl().setValueListById([payload])\n }\n\n public setControlValueList(payload: ISetControlValueOption[]) {\n this.draw.getControl().setValueListById(payload)\n }\n\n public setControlExtension(payload: ISetControlExtensionOption) {\n this.draw.getControl().setExtensionListById([payload])\n }\n\n public setControlExtensionList(payload: ISetControlExtensionOption[]) {\n this.draw.getControl().setExtensionListById(payload)\n }\n\n public setControlProperties(payload: ISetControlProperties) {\n this.draw.getControl().setPropertiesListById([payload])\n }\n\n public setControlPropertiesList(payload: ISetControlProperties[]) {\n this.draw.getControl().setPropertiesListById(payload)\n }\n\n public setControlHighlight(payload: ISetControlHighlightOption) {\n this.draw.getControl().setHighlightList(payload)\n this.draw.render({\n isSubmitHistory: false\n })\n }\n\n public updateOptions(payload: IUpdateOption) {\n const newOption = mergeOption(payload)\n Object.entries(newOption).forEach(([key, value]) => {\n Reflect.set(this.options, key, value)\n })\n this.forceUpdate()\n }\n\n public getControlList(): IElement[] {\n return this.draw.getControl().getList()\n }\n\n public locationControl(controlId: string, options?: ILocationControlOption) {\n function location(\n elementList: IElement[],\n zone: EditorZone\n ): ILocationPosition | null {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n const locationContext = location(td.value, zone)\n if (locationContext) {\n return {\n ...locationContext,\n positionContext: {\n isTable: true,\n index: i - 1,\n trIndex: r,\n tdIndex: d,\n tdId: element.tdId,\n trId: element.trId,\n tableId: element.tableId\n }\n }\n }\n }\n }\n }\n if (element?.controlId !== controlId) continue\n let curIndex = i - 1\n if (options?.position === LocationPosition.OUTER_AFTER) {\n if (\n !(\n element.controlComponent === ControlComponent.POSTFIX &&\n elementList[i + 1]?.controlComponent !==\n ControlComponent.POST_TEXT\n )\n ) {\n continue\n }\n } else if (options?.position === LocationPosition.OUTER_BEFORE) {\n curIndex -= 1\n } else if (options?.position === LocationPosition.AFTER) {\n curIndex -= 1\n if (\n element.controlComponent !== ControlComponent.PLACEHOLDER &&\n element.controlComponent !== ControlComponent.POSTFIX &&\n element.controlComponent !== ControlComponent.POST_TEXT\n ) {\n continue\n }\n } else {\n // Front inside control (default)\n if (\n (element.controlComponent !== ControlComponent.PREFIX &&\n element.controlComponent !== ControlComponent.PRE_TEXT) ||\n elementList[i]?.controlComponent === ControlComponent.PREFIX ||\n elementList[i]?.controlComponent === ControlComponent.PRE_TEXT\n ) {\n continue\n }\n }\n return {\n zone,\n range: {\n startIndex: curIndex,\n endIndex: curIndex\n },\n positionContext: {\n isTable: false\n }\n }\n }\n return null\n }\n const data = [\n {\n zone: EditorZone.HEADER,\n elementList: this.draw.getHeaderElementList()\n },\n {\n zone: EditorZone.MAIN,\n elementList: this.draw.getOriginalMainElementList()\n },\n {\n zone: EditorZone.FOOTER,\n elementList: this.draw.getFooterElementList()\n }\n ]\n for (const context of data) {\n const locationContext = location(context.elementList, context.zone)\n if (locationContext) {\n // Set area, context, and cursor info\n this.setZone(locationContext.zone)\n this.position.setPositionContext(locationContext.positionContext)\n this.range.replaceRange(locationContext.range)\n this.draw.render({\n curIndex: locationContext.range.startIndex,\n isCompute: false,\n isSubmitHistory: false\n })\n break\n }\n }\n }\n\n public insertControl(payload: IElement) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const cloneElement = deepClone(payload)\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const copyElement = getAnchorElement(elementList, startIndex)\n if (!copyElement) return\n const cloneAttr = [\n ...TABLE_CONTEXT_ATTR,\n ...EDITOR_ROW_ATTR,\n ...LIST_CONTEXT_ATTR,\n ...AREA_CONTEXT_ATTR\n ]\n cloneProperty<IElement>(cloneAttr, copyElement, cloneElement)\n this.draw.insertElementList([cloneElement])\n }\n\n public jumpControl(payload?: { direction?: MoveDirection }) {\n this.draw.getControl().initNextControl({\n direction: payload?.direction\n })\n }\n\n public getContainer(): HTMLDivElement {\n return this.draw.getContainer()\n }\n\n public getTitleValue(\n payload: IGetTitleValueOption\n ): IGetTitleValueResult | null {\n const { conceptId } = payload\n const result: IGetTitleValueResult = []\n const getValue = (elementList: IElement[], zone: EditorZone) => {\n let i = 0\n while (i < elementList.length) {\n const element = elementList[i]\n i++\n if (element.type === ElementType.TABLE) {\n const trList = element.trList!\n for (let r = 0; r < trList.length; r++) {\n const tr = trList[r]\n for (let d = 0; d < tr.tdList.length; d++) {\n const td = tr.tdList[d]\n getValue(td.value, zone)\n }\n }\n }\n if (element?.title?.conceptId !== conceptId) continue\n // First find the title, then loop and stop at same level or parent level title\n const valueList: IElement[] = []\n let j = i\n while (j < elementList.length) {\n const nextElement = elementList[j]\n j++\n if (element.titleId === nextElement.titleId) continue\n if (\n nextElement.level &&\n titleOrderNumberMapping[nextElement.level] <=\n titleOrderNumberMapping[element.level!]\n ) {\n break\n }\n valueList.push(nextElement)\n }\n result.push({\n ...element.title!,\n value: getTextFromElementList(valueList),\n elementList: zipElementList(valueList),\n zone\n })\n i = j\n }\n }\n const data = [\n {\n zone: EditorZone.HEADER,\n elementList: this.draw.getHeaderElementList()\n },\n {\n zone: EditorZone.MAIN,\n elementList: this.draw.getOriginalMainElementList()\n },\n {\n zone: EditorZone.FOOTER,\n elementList: this.draw.getFooterElementList()\n }\n ]\n for (const { zone, elementList } of data) {\n getValue(elementList, zone)\n }\n return result\n }\n\n public getPositionContextByEvent(\n evt: MouseEvent,\n options: IPositionContextByEventOption = {}\n ): IPositionContextByEventResult | null {\n const pageIndex = (<HTMLElement>evt.target)?.dataset.index\n if (!pageIndex) return null\n const { isMustDirectHit = true } = options\n const pageNo = Number(pageIndex)\n const positionContext = this.position.getPositionByXY({\n x: evt.offsetX,\n y: evt.offsetY,\n pageNo\n })\n const {\n isDirectHit,\n isTable,\n index,\n trIndex,\n tdIndex,\n tdValueIndex,\n zone\n } = positionContext\n // Return null if not directly hit or selection is inconsistent\n if (\n (isMustDirectHit && !isDirectHit) ||\n (zone && zone !== this.zone.getZone())\n ) {\n return null\n }\n let tableInfo: ITableInfoByEvent | null = null\n let element: IElement | null = null\n const elementList = this.draw.getOriginalElementList()\n let position: IElementPosition | null = null\n const positionList = this.position.getOriginalPositionList()\n if (isTable) {\n const td = elementList[index!].trList?.[trIndex!].tdList[tdIndex!]\n element = td?.value[tdValueIndex!] || null\n position = td?.positionList?.[tdValueIndex!] || null\n tableInfo = {\n element: elementList[index!],\n trIndex: trIndex!,\n tdIndex: tdIndex!\n }\n } else {\n element = elementList[index] || null\n position = positionList[index] || null\n }\n // Element surrounding info\n let rangeRect: RangeRect | null = null\n if (position) {\n const {\n pageNo,\n coordinate: { leftTop, rightTop },\n lineHeight\n } = position\n const height = this.draw.getOriginalHeight()\n const pageGap = this.draw.getOriginalPageGap()\n rangeRect = {\n x: leftTop[0],\n y: leftTop[1] + pageNo * (height + pageGap),\n width: rightTop[0] - leftTop[0],\n height: lineHeight\n }\n }\n return {\n pageNo,\n element,\n rangeRect,\n tableInfo\n }\n }\n\n public insertTitle(payload: IElement) {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const cloneElement = deepClone(payload)\n const { startIndex } = this.range.getRange()\n const elementList = this.draw.getElementList()\n const copyElement = getAnchorElement(elementList, startIndex)\n if (!copyElement) return\n const cloneAttr = [\n ...TABLE_CONTEXT_ATTR,\n ...EDITOR_ROW_ATTR,\n ...LIST_CONTEXT_ATTR,\n ...AREA_CONTEXT_ATTR\n ]\n cloneElement.valueList?.forEach(valueItem => {\n cloneProperty<IElement>(cloneAttr, copyElement, valueItem)\n })\n this.draw.insertElementList([cloneElement])\n }\n\n public focus(payload?: IFocusOption) {\n const {\n position = LocationPosition.AFTER,\n isMoveCursorToVisible = true,\n rowNo,\n range\n } = payload || {}\n let curIndex = -1\n if (range) {\n this.range.replaceRange(range)\n curIndex =\n position === LocationPosition.BEFORE ? range.startIndex : range.endIndex\n } else if (isNumber(rowNo)) {\n const rowList = this.draw.getOriginalRowList()\n curIndex =\n position === LocationPosition.BEFORE\n ? rowList[rowNo]?.startIndex\n : rowList[rowNo + 1]?.startIndex - 1\n if (!isNumber(curIndex)) return\n this.range.setRange(curIndex, curIndex)\n } else {\n curIndex =\n position === LocationPosition.BEFORE\n ? 0\n : this.draw.getOriginalMainElementList().length - 1\n this.range.setRange(curIndex, curIndex)\n }\n const renderParams: IDrawOption = {\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n }\n if (isMoveCursorToVisible && ~curIndex && this.range.getIsCollapsed()) {\n renderParams.curIndex = curIndex\n renderParams.isSetCursor = true\n }\n this.draw.render(renderParams)\n }\n\n public insertArea(payload: IInsertAreaOption) {\n return this.draw.getArea().insertArea(payload)\n }\n\n public setAreaValue(payload: ISetAreaValueOption) {\n return this.draw.getArea().setAreaValue(payload)\n }\n\n public setAreaProperties(payload: ISetAreaPropertiesOption) {\n this.draw.getArea().setAreaProperties(payload)\n }\n\n public locationArea(areaId: string, options?: ILocationAreaOption) {\n // When area is at end, whether to append line break if no element after\n if (\n options?.isAppendLastLineBreak &&\n options?.position === LocationPosition.OUTER_AFTER\n ) {\n const elementList = this.draw.getOriginalMainElementList()\n if (elementList[elementList.length - 1].areaId === areaId) {\n this.draw.appendElementList(\n [\n {\n value: ZERO\n }\n ],\n {\n isSubmitHistory: false\n }\n )\n }\n }\n const context = this.draw.getArea().getContextByAreaId(areaId, options)\n if (!context) return\n const {\n range: { endIndex }\n } = context\n this.position.setPositionContext({\n isTable: false\n })\n this.range.setRange(endIndex, endIndex)\n this.draw.render({\n curIndex: endIndex,\n isSetCursor: true,\n isCompute: false,\n isSubmitHistory: false\n })\n }\n\n public clearGraffiti() {\n this.draw.getGraffiti().clear()\n if (this.draw.isGraffitiMode()) {\n this.draw.render({\n isCompute: false,\n isSetCursor: false,\n isSubmitHistory: false\n })\n }\n }\n\n public columnCount(payload: number) {\n this.draw.setColumnCount(payload)\n }\n\n public columnBreak() {\n const isDisabled = this.draw.isReadonly() || this.draw.isDisabled()\n if (isDisabled) return\n const activeControl = this.control.getActiveControl()\n if (activeControl) return\n const columnCount = this.draw.getColumnCount()\n if (columnCount <= 1) return\n this.insertElementList([\n { type: ElementType.COLUMN_BREAK, value: WRAP },\n { value: ZERO }\n ])\n }\n\n public columnGap(gap: number) {\n this.draw.setColumnGap(gap)\n }\n}\n","import {\n IContentChange,\n IControlChange,\n IControlContentChange,\n IIntersectionPageNoChange,\n IPageModeChange,\n IPageScaleChange,\n IPageSizeChange,\n IRangeStyleChange,\n ISaved,\n IVisiblePageNoListChange,\n IZoneChange\n} from '../../interface/Listener'\n\nexport class Listener {\n public rangeStyleChange: IRangeStyleChange | null\n public visiblePageNoListChange: IVisiblePageNoListChange | null\n public intersectionPageNoChange: IIntersectionPageNoChange | null\n public pageSizeChange: IPageSizeChange | null\n public pageScaleChange: IPageScaleChange | null\n public saved: ISaved | null\n public contentChange: IContentChange | null\n public controlChange: IControlChange | null\n public controlContentChange: IControlContentChange | null\n public pageModeChange: IPageModeChange | null\n public zoneChange: IZoneChange | null\n\n constructor() {\n this.rangeStyleChange = null\n this.visiblePageNoListChange = null\n this.intersectionPageNoChange = null\n this.pageSizeChange = null\n this.pageScaleChange = null\n this.saved = null\n this.contentChange = null\n this.controlChange = null\n this.controlContentChange = null\n this.pageModeChange = null\n this.zoneChange = null\n }\n}\n","import { IRegisterContextMenu } from '../../interface/contextmenu/ContextMenu'\nimport { IRegisterShortcut } from '../../interface/shortcut/Shortcut'\nimport { ContextMenu } from '../contextmenu/ContextMenu'\nimport { Shortcut } from '../shortcut/Shortcut'\nimport { I18n } from '../i18n/I18n'\nimport { ILang } from '../../interface/i18n/I18n'\nimport { DeepPartial } from '../../interface/Common'\n\ninterface IRegisterPayload {\n contextMenu: ContextMenu\n shortcut: Shortcut\n i18n: I18n\n}\n\nexport class Register {\n public contextMenuList: (payload: IRegisterContextMenu[]) => void\n public getContextMenuList: () => IRegisterContextMenu[]\n public shortcutList: (payload: IRegisterShortcut[]) => void\n public langMap: (locale: string, lang: DeepPartial<ILang>) => void\n\n constructor(payload: IRegisterPayload) {\n const { contextMenu, shortcut, i18n } = payload\n this.contextMenuList = contextMenu.registerContextMenuList.bind(contextMenu)\n this.getContextMenuList = contextMenu.getContextMenuList.bind(contextMenu)\n this.shortcutList = shortcut.registerShortcutList.bind(shortcut)\n this.langMap = i18n.registerLangMap.bind(i18n)\n }\n}\n","export const NAME_PLACEHOLDER = {\n SELECTED_TEXT: '%s'\n}\n\nexport const INTERNAL_CONTEXT_MENU_KEY = {\n GLOBAL: {\n CUT: 'globalCut',\n COPY: 'globalCopy',\n PASTE: 'globalPaste',\n SELECT_ALL: 'globalSelectAll',\n PRINT: 'globalPrint'\n },\n CONTROL: {\n DELETE: 'controlDelete'\n },\n HYPERLINK: {\n DELETE: 'hyperlinkDelete',\n CANCEL: 'hyperlinkCancel',\n EDIT: 'hyperlinkEdit'\n },\n IMAGE: {\n CHANGE: 'imageChange',\n SAVE_AS: 'imageSaveAs',\n TEXT_WRAP: 'imageTextWrap',\n TEXT_WRAP_EMBED: 'imageTextWrapEmbed',\n TEXT_WRAP_UP_DOWN: 'imageTextWrapUpDown',\n TEXT_WRAP_SURROUND: 'imageTextWrapSurround',\n TEXT_WRAP_FLOAT_TOP: 'imageTextWrapFloatTop',\n TEXT_WRAP_FLOAT_BOTTOM: 'imageTextWrapFloatBottom'\n },\n TABLE: {\n BORDER: 'border',\n BORDER_ALL: 'tableBorderAll',\n BORDER_EMPTY: 'tableBorderEmpty',\n BORDER_DASH: 'tableBorderDash',\n BORDER_EXTERNAL: 'tableBorderExternal',\n BORDER_INTERNAL: 'tableBorderInternal',\n BORDER_TD: 'tableBorderTd',\n BORDER_TD_TOP: 'tableBorderTdTop',\n BORDER_TD_RIGHT: 'tableBorderTdRight',\n BORDER_TD_BOTTOM: 'tableBorderTdBottom',\n BORDER_TD_LEFT: 'tableBorderTdLeft',\n BORDER_TD_FORWARD: 'tableBorderTdForward',\n BORDER_TD_BACK: 'tableBorderTdBack',\n VERTICAL_ALIGN: 'tableVerticalAlign',\n VERTICAL_ALIGN_TOP: 'tableVerticalAlignTop',\n VERTICAL_ALIGN_MIDDLE: 'tableVerticalAlignMiddle',\n VERTICAL_ALIGN_BOTTOM: 'tableVerticalAlignBottom',\n INSERT_ROW_COL: 'tableInsertRowCol',\n INSERT_TOP_ROW: 'tableInsertTopRow',\n INSERT_BOTTOM_ROW: 'tableInsertBottomRow',\n INSERT_LEFT_COL: 'tableInsertLeftCol',\n INSERT_RIGHT_COL: 'tableInsertRightCol',\n DELETE_ROW_COL: 'tableDeleteRowCol',\n DELETE_ROW: 'tableDeleteRow',\n DELETE_COL: 'tableDeleteCol',\n DELETE_TABLE: 'tableDeleteTable',\n MERGE_CELL: 'tableMergeCell',\n CANCEL_MERGE_CELL: 'tableCancelMergeCell'\n }\n}\n","import { INTERNAL_CONTEXT_MENU_KEY } from '../../../dataset/constant/ContextMenu'\nimport { EditorMode } from '../../../dataset/enum/Editor'\nimport { IRegisterContextMenu } from '../../../interface/contextmenu/ContextMenu'\nimport { Command } from '../../command/Command'\nconst {\n CONTROL: { DELETE }\n} = INTERNAL_CONTEXT_MENU_KEY\n\nexport const controlMenus: IRegisterContextMenu[] = [\n {\n key: DELETE,\n i18nPath: 'contextmenu.control.delete',\n when: payload => {\n return (\n !payload.isReadonly &&\n !payload.editorHasSelection &&\n !!payload.startElement?.controlId &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n callback: (command: Command) => {\n command.executeRemoveControl()\n }\n }\n]\n","import { INTERNAL_CONTEXT_MENU_KEY } from '../../../dataset/constant/ContextMenu'\nimport { IRegisterContextMenu } from '../../../interface/contextmenu/ContextMenu'\nimport { isApple } from '../../../utils/ua'\nimport { Command } from '../../command/Command'\nconst {\n GLOBAL: { CUT, COPY, PASTE, SELECT_ALL, PRINT }\n} = INTERNAL_CONTEXT_MENU_KEY\n\nexport const globalMenus: IRegisterContextMenu[] = [\n {\n key: CUT,\n i18nPath: 'contextmenu.global.cut',\n shortCut: `${isApple ? '⌘' : 'Ctrl'} + X`,\n when: payload => {\n return !payload.isReadonly\n },\n callback: (command: Command) => {\n command.executeCut()\n }\n },\n {\n key: COPY,\n i18nPath: 'contextmenu.global.copy',\n shortCut: `${isApple ? '⌘' : 'Ctrl'} + C`,\n when: payload => {\n return payload.editorHasSelection || payload.isCrossRowCol\n },\n callback: (command: Command) => {\n command.executeCopy()\n }\n },\n {\n key: PASTE,\n i18nPath: 'contextmenu.global.paste',\n shortCut: `${isApple ? '⌘' : 'Ctrl'} + V`,\n when: payload => {\n return !payload.isReadonly && payload.editorTextFocus\n },\n callback: (command: Command) => {\n command.executePaste()\n }\n },\n {\n key: SELECT_ALL,\n i18nPath: 'contextmenu.global.selectAll',\n shortCut: `${isApple ? '⌘' : 'Ctrl'} + A`,\n when: payload => {\n return payload.editorTextFocus\n },\n callback: (command: Command) => {\n command.executeSelectAll()\n }\n },\n {\n isDivider: true\n },\n {\n key: PRINT,\n i18nPath: 'contextmenu.global.print',\n icon: 'print',\n when: () => true,\n callback: (command: Command) => {\n command.executePrint()\n }\n }\n]\n","import { INTERNAL_CONTEXT_MENU_KEY } from '../../../dataset/constant/ContextMenu'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport {\n IContextMenuContext,\n IRegisterContextMenu\n} from '../../../interface/contextmenu/ContextMenu'\nimport { Command } from '../../command/Command'\nconst {\n HYPERLINK: { DELETE, CANCEL, EDIT }\n} = INTERNAL_CONTEXT_MENU_KEY\n\nexport const hyperlinkMenus: IRegisterContextMenu[] = [\n {\n key: DELETE,\n i18nPath: 'contextmenu.hyperlink.delete',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.startElement?.type === ElementType.HYPERLINK\n )\n },\n callback: (command: Command) => {\n command.executeDeleteHyperlink()\n }\n },\n {\n key: CANCEL,\n i18nPath: 'contextmenu.hyperlink.cancel',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.startElement?.type === ElementType.HYPERLINK\n )\n },\n callback: (command: Command) => {\n command.executeCancelHyperlink()\n }\n },\n {\n key: EDIT,\n i18nPath: 'contextmenu.hyperlink.edit',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.startElement?.type === ElementType.HYPERLINK\n )\n },\n callback: (command: Command, context: IContextMenuContext) => {\n const url = window.prompt(\n command.executeTranslate('contextmenu.hyperlink.edit'),\n context.startElement?.url\n )\n if (url) {\n command.executeEditHyperlink(url)\n }\n }\n }\n]\n","import { INTERNAL_CONTEXT_MENU_KEY } from '../../../dataset/constant/ContextMenu'\nimport { ImageDisplay } from '../../../dataset/enum/Common'\nimport { ElementType } from '../../../dataset/enum/Element'\nimport {\n IContextMenuContext,\n IRegisterContextMenu\n} from '../../../interface/contextmenu/ContextMenu'\nimport { Command } from '../../command/Command'\nconst {\n IMAGE: {\n CHANGE,\n SAVE_AS,\n TEXT_WRAP,\n TEXT_WRAP_EMBED,\n TEXT_WRAP_UP_DOWN,\n TEXT_WRAP_SURROUND,\n TEXT_WRAP_FLOAT_TOP,\n TEXT_WRAP_FLOAT_BOTTOM\n }\n} = INTERNAL_CONTEXT_MENU_KEY\n\nexport const imageMenus: IRegisterContextMenu[] = [\n {\n key: CHANGE,\n i18nPath: 'contextmenu.image.change',\n icon: 'image-change',\n when: payload => {\n return (\n !payload.isReadonly &&\n !payload.editorHasSelection &&\n payload.startElement?.type === ElementType.IMAGE\n )\n },\n callback: (command: Command) => {\n const proxyInputFile = document.createElement('input')\n proxyInputFile.type = 'file'\n proxyInputFile.accept = '.png, .jpg, .jpeg'\n proxyInputFile.onchange = () => {\n const file = proxyInputFile.files![0]!\n const fileReader = new FileReader()\n fileReader.readAsDataURL(file)\n fileReader.onload = () => {\n const value = fileReader.result as string\n command.executeReplaceImageElement(value)\n }\n }\n proxyInputFile.click()\n }\n },\n {\n key: SAVE_AS,\n i18nPath: 'contextmenu.image.saveAs',\n icon: 'image',\n when: payload => {\n return (\n !payload.editorHasSelection &&\n payload.startElement?.type === ElementType.IMAGE\n )\n },\n callback: (command: Command) => {\n command.executeSaveAsImageElement()\n }\n },\n {\n key: TEXT_WRAP,\n i18nPath: 'contextmenu.image.textWrap',\n when: payload => {\n return (\n !payload.isReadonly &&\n !payload.editorHasSelection &&\n payload.startElement?.type === ElementType.IMAGE\n )\n },\n childMenus: [\n {\n key: TEXT_WRAP_EMBED,\n i18nPath: 'contextmenu.image.textWrapType.embed',\n when: () => true,\n callback: (command: Command, context: IContextMenuContext) => {\n command.executeChangeImageDisplay(\n context.startElement!,\n ImageDisplay.BLOCK\n )\n }\n },\n {\n key: TEXT_WRAP_UP_DOWN,\n i18nPath: 'contextmenu.image.textWrapType.upDown',\n when: () => true,\n callback: (command: Command, context: IContextMenuContext) => {\n command.executeChangeImageDisplay(\n context.startElement!,\n ImageDisplay.INLINE\n )\n }\n },\n {\n key: TEXT_WRAP_SURROUND,\n i18nPath: 'contextmenu.image.textWrapType.surround',\n when: () => true,\n callback: (command: Command, context: IContextMenuContext) => {\n command.executeChangeImageDisplay(\n context.startElement!,\n ImageDisplay.SURROUND\n )\n }\n },\n {\n key: TEXT_WRAP_FLOAT_TOP,\n i18nPath: 'contextmenu.image.textWrapType.floatTop',\n when: () => true,\n callback: (command: Command, context: IContextMenuContext) => {\n command.executeChangeImageDisplay(\n context.startElement!,\n ImageDisplay.FLOAT_TOP\n )\n }\n },\n {\n key: TEXT_WRAP_FLOAT_BOTTOM,\n i18nPath: 'contextmenu.image.textWrapType.floatBottom',\n when: () => true,\n callback: (command: Command, context: IContextMenuContext) => {\n command.executeChangeImageDisplay(\n context.startElement!,\n ImageDisplay.FLOAT_BOTTOM\n )\n }\n }\n ]\n }\n]\n","import { INTERNAL_CONTEXT_MENU_KEY } from '../../../dataset/constant/ContextMenu'\nimport { EditorMode } from '../../../dataset/enum/Editor'\nimport { VerticalAlign } from '../../../dataset/enum/VerticalAlign'\nimport {\n TableBorder,\n TdBorder,\n TdSlash\n} from '../../../dataset/enum/table/Table'\nimport { IRegisterContextMenu } from '../../../interface/contextmenu/ContextMenu'\nimport { Command } from '../../command/Command'\nconst {\n TABLE: {\n BORDER,\n BORDER_ALL,\n BORDER_EMPTY,\n BORDER_DASH,\n BORDER_EXTERNAL,\n BORDER_INTERNAL,\n BORDER_TD,\n BORDER_TD_TOP,\n BORDER_TD_LEFT,\n BORDER_TD_BOTTOM,\n BORDER_TD_RIGHT,\n BORDER_TD_BACK,\n BORDER_TD_FORWARD,\n VERTICAL_ALIGN,\n VERTICAL_ALIGN_TOP,\n VERTICAL_ALIGN_MIDDLE,\n VERTICAL_ALIGN_BOTTOM,\n INSERT_ROW_COL,\n INSERT_TOP_ROW,\n INSERT_BOTTOM_ROW,\n INSERT_LEFT_COL,\n INSERT_RIGHT_COL,\n DELETE_ROW_COL,\n DELETE_ROW,\n DELETE_COL,\n DELETE_TABLE,\n MERGE_CELL,\n CANCEL_MERGE_CELL\n }\n} = INTERNAL_CONTEXT_MENU_KEY\n\nexport const tableMenus: IRegisterContextMenu[] = [\n {\n isDivider: true\n },\n {\n key: BORDER,\n i18nPath: 'contextmenu.table.border',\n icon: 'border-all',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isInTable &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n childMenus: [\n {\n key: BORDER_ALL,\n i18nPath: 'contextmenu.table.borderAll',\n icon: 'border-all',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableBorderType(TableBorder.ALL)\n }\n },\n {\n key: BORDER_EMPTY,\n i18nPath: 'contextmenu.table.borderEmpty',\n icon: 'border-empty',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableBorderType(TableBorder.EMPTY)\n }\n },\n {\n key: BORDER_DASH,\n i18nPath: 'contextmenu.table.borderDash',\n icon: 'border-dash',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableBorderType(TableBorder.DASH)\n }\n },\n {\n key: BORDER_EXTERNAL,\n i18nPath: 'contextmenu.table.borderExternal',\n icon: 'border-external',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableBorderType(TableBorder.EXTERNAL)\n }\n },\n {\n key: BORDER_INTERNAL,\n i18nPath: 'contextmenu.table.borderInternal',\n icon: 'border-internal',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableBorderType(TableBorder.INTERNAL)\n }\n },\n {\n key: BORDER_TD,\n i18nPath: 'contextmenu.table.borderTd',\n icon: 'border-td',\n when: () => true,\n childMenus: [\n {\n key: BORDER_TD_TOP,\n i18nPath: 'contextmenu.table.borderTdTop',\n icon: 'border-td-top',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdBorderType(TdBorder.TOP)\n }\n },\n {\n key: BORDER_TD_RIGHT,\n i18nPath: 'contextmenu.table.borderTdRight',\n icon: 'border-td-right',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdBorderType(TdBorder.RIGHT)\n }\n },\n {\n key: BORDER_TD_BOTTOM,\n i18nPath: 'contextmenu.table.borderTdBottom',\n icon: 'border-td-bottom',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdBorderType(TdBorder.BOTTOM)\n }\n },\n {\n key: BORDER_TD_LEFT,\n i18nPath: 'contextmenu.table.borderTdLeft',\n icon: 'border-td-left',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdBorderType(TdBorder.LEFT)\n }\n },\n {\n key: BORDER_TD_FORWARD,\n i18nPath: 'contextmenu.table.borderTdForward',\n icon: 'border-td-forward',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdSlashType(TdSlash.FORWARD)\n }\n },\n {\n key: BORDER_TD_BACK,\n i18nPath: 'contextmenu.table.borderTdBack',\n icon: 'border-td-back',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdSlashType(TdSlash.BACK)\n }\n }\n ]\n }\n ]\n },\n {\n key: VERTICAL_ALIGN,\n i18nPath: 'contextmenu.table.verticalAlign',\n icon: 'vertical-align',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isInTable &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n childMenus: [\n {\n key: VERTICAL_ALIGN_TOP,\n i18nPath: 'contextmenu.table.verticalAlignTop',\n icon: 'vertical-align-top',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdVerticalAlign(VerticalAlign.TOP)\n }\n },\n {\n key: VERTICAL_ALIGN_MIDDLE,\n i18nPath: 'contextmenu.table.verticalAlignMiddle',\n icon: 'vertical-align-middle',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdVerticalAlign(VerticalAlign.MIDDLE)\n }\n },\n {\n key: VERTICAL_ALIGN_BOTTOM,\n i18nPath: 'contextmenu.table.verticalAlignBottom',\n icon: 'vertical-align-bottom',\n when: () => true,\n callback: (command: Command) => {\n command.executeTableTdVerticalAlign(VerticalAlign.BOTTOM)\n }\n }\n ]\n },\n {\n key: INSERT_ROW_COL,\n i18nPath: 'contextmenu.table.insertRowCol',\n icon: 'insert-row-col',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isInTable &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n childMenus: [\n {\n key: INSERT_TOP_ROW,\n i18nPath: 'contextmenu.table.insertTopRow',\n icon: 'insert-top-row',\n when: () => true,\n callback: (command: Command) => {\n command.executeInsertTableTopRow()\n }\n },\n {\n key: INSERT_BOTTOM_ROW,\n i18nPath: 'contextmenu.table.insertBottomRow',\n icon: 'insert-bottom-row',\n when: () => true,\n callback: (command: Command) => {\n command.executeInsertTableBottomRow()\n }\n },\n {\n key: INSERT_LEFT_COL,\n i18nPath: 'contextmenu.table.insertLeftCol',\n icon: 'insert-left-col',\n when: () => true,\n callback: (command: Command) => {\n command.executeInsertTableLeftCol()\n }\n },\n {\n key: INSERT_RIGHT_COL,\n i18nPath: 'contextmenu.table.insertRightCol',\n icon: 'insert-right-col',\n when: () => true,\n callback: (command: Command) => {\n command.executeInsertTableRightCol()\n }\n }\n ]\n },\n {\n key: DELETE_ROW_COL,\n i18nPath: 'contextmenu.table.deleteRowCol',\n icon: 'delete-row-col',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isInTable &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n childMenus: [\n {\n key: DELETE_ROW,\n i18nPath: 'contextmenu.table.deleteRow',\n icon: 'delete-row',\n when: () => true,\n callback: (command: Command) => {\n command.executeDeleteTableRow()\n }\n },\n {\n key: DELETE_COL,\n i18nPath: 'contextmenu.table.deleteCol',\n icon: 'delete-col',\n when: () => true,\n callback: (command: Command) => {\n command.executeDeleteTableCol()\n }\n },\n {\n key: DELETE_TABLE,\n i18nPath: 'contextmenu.table.deleteTable',\n icon: 'delete-table',\n when: () => true,\n callback: (command: Command) => {\n command.executeDeleteTable()\n }\n }\n ]\n },\n {\n key: MERGE_CELL,\n i18nPath: 'contextmenu.table.mergeCell',\n icon: 'merge-cell',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isCrossRowCol &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n callback: (command: Command) => {\n command.executeMergeTableCell()\n }\n },\n {\n key: CANCEL_MERGE_CELL,\n i18nPath: 'contextmenu.table.mergeCancelCell',\n icon: 'merge-cancel-cell',\n when: payload => {\n return (\n !payload.isReadonly &&\n payload.isInTable &&\n payload.options.mode !== EditorMode.FORM\n )\n },\n callback: (command: Command) => {\n command.executeCancelMergeTableCell()\n }\n }\n]\n","import { NAME_PLACEHOLDER } from '../../dataset/constant/ContextMenu'\nimport { EDITOR_COMPONENT, EDITOR_PREFIX } from '../../dataset/constant/Editor'\nimport { EditorComponent } from '../../dataset/enum/Editor'\nimport { DeepRequired } from '../../interface/Common'\nimport { IEditorOption } from '../../interface/Editor'\nimport { IElement } from '../../interface/Element'\nimport {\n IContextMenuContext,\n IRegisterContextMenu\n} from '../../interface/contextmenu/ContextMenu'\nimport { findParent } from '../../utils'\nimport { zipElementList } from '../../utils/element'\nimport { Command } from '../command/Command'\nimport { Draw } from '../draw/Draw'\nimport { I18n } from '../i18n/I18n'\nimport { Position } from '../position/Position'\nimport { RangeManager } from '../range/RangeManager'\nimport { controlMenus } from './menus/controlMenus'\nimport { globalMenus } from './menus/globalMenus'\nimport { hyperlinkMenus } from './menus/hyperlinkMenus'\nimport { imageMenus } from './menus/imageMenus'\nimport { tableMenus } from './menus/tableMenus'\n\ninterface IRenderPayload {\n contextMenuList: IRegisterContextMenu[]\n left: number\n top: number\n parentMenuContainer?: HTMLDivElement\n}\n\nexport class ContextMenu {\n private options: DeepRequired<IEditorOption>\n private draw: Draw\n private command: Command\n private range: RangeManager\n private position: Position\n private i18n: I18n\n private container: HTMLDivElement\n private contextMenuList: IRegisterContextMenu[]\n private contextMenuContainerList: HTMLDivElement[]\n private contextMenuRelationShip: Map<HTMLDivElement, HTMLDivElement>\n private context: IContextMenuContext | null\n\n constructor(draw: Draw, command: Command) {\n this.options = draw.getOptions()\n this.draw = draw\n this.command = command\n this.range = draw.getRange()\n this.position = draw.getPosition()\n this.i18n = draw.getI18n()\n this.container = draw.getContainer()\n this.context = null\n this.contextMenuList = [\n ...globalMenus,\n ...tableMenus,\n ...imageMenus,\n ...controlMenus,\n ...hyperlinkMenus\n ]\n this.contextMenuContainerList = []\n this.contextMenuRelationShip = new Map()\n this._addEvent()\n }\n\n public getContextMenuList(): IRegisterContextMenu[] {\n return this.contextMenuList\n }\n\n private _addEvent() {\n this.container.addEventListener('contextmenu', this._proxyContextMenuEvent)\n document.addEventListener('mousedown', this._handleSideEffect)\n }\n\n public removeEvent() {\n this.container.removeEventListener(\n 'contextmenu',\n this._proxyContextMenuEvent\n )\n document.removeEventListener('mousedown', this._handleSideEffect)\n }\n\n private _filterMenuList(\n menuList: IRegisterContextMenu[]\n ): IRegisterContextMenu[] {\n const { contextMenuDisableKeys } = this.options\n const renderList: IRegisterContextMenu[] = []\n for (let m = 0; m < menuList.length; m++) {\n const menu = menuList[m]\n if (\n menu.disable ||\n (menu.key && contextMenuDisableKeys.includes(menu.key))\n ) {\n continue\n }\n if (menu.isDivider) {\n renderList.push(menu)\n } else {\n if (menu.when?.(this.context!)) {\n renderList.push(menu)\n }\n }\n }\n return renderList\n }\n\n private _proxyContextMenuEvent = (evt: MouseEvent) => {\n this.context = this._getContext()\n const renderList = this._filterMenuList(this.contextMenuList)\n const isRegisterContextMenu = renderList.some(menu => !menu.isDivider)\n if (isRegisterContextMenu) {\n this.dispose()\n this._render({\n contextMenuList: renderList,\n left: evt.x,\n top: evt.y\n })\n }\n evt.preventDefault()\n }\n\n private _handleSideEffect = (evt: MouseEvent) => {\n if (this.contextMenuContainerList.length) {\n const target = <Element>(evt?.composedPath()[0] || evt.target)\n const contextMenuDom = findParent(\n target,\n (node: Node & Element) =>\n !!node &&\n node.nodeType === 1 &&\n node.getAttribute(EDITOR_COMPONENT) === EditorComponent.CONTEXTMENU,\n true\n )\n if (!contextMenuDom) {\n this.dispose()\n }\n }\n }\n\n private _getContext(): IContextMenuContext {\n const isReadonly = this.draw.isReadonly()\n const {\n isCrossRowCol: crossRowCol,\n startIndex,\n endIndex\n } = this.range.getRange()\n const editorTextFocus = !!(~startIndex || ~endIndex)\n const editorHasSelection = editorTextFocus && startIndex !== endIndex\n const { isTable, trIndex, tdIndex, index } =\n this.position.getPositionContext()\n let tableElement: IElement | null = null\n if (isTable) {\n const originalElementList = this.draw.getOriginalElementList()\n const originTableElement = originalElementList[index!] || null\n if (originTableElement) {\n tableElement = zipElementList([originTableElement], {\n extraPickAttrs: ['id']\n })[0]\n }\n }\n const isCrossRowCol = isTable && !!crossRowCol\n const elementList = this.draw.getElementList()\n const startElement = elementList[startIndex] || null\n const endElement = elementList[endIndex] || null\n const zone = this.draw.getZone().getZone()\n return {\n startElement,\n endElement,\n isReadonly,\n editorHasSelection,\n editorTextFocus,\n isCrossRowCol,\n zone,\n isInTable: isTable,\n trIndex: trIndex ?? null,\n tdIndex: tdIndex ?? null,\n tableElement,\n options: this.options\n }\n }\n\n private _createContextMenuContainer(): HTMLDivElement {\n const contextMenuContainer = document.createElement('div')\n contextMenuContainer.classList.add(`${EDITOR_PREFIX}-contextmenu-container`)\n contextMenuContainer.setAttribute(\n EDITOR_COMPONENT,\n EditorComponent.CONTEXTMENU\n )\n this.container.append(contextMenuContainer)\n return contextMenuContainer\n }\n\n private _render(payload: IRenderPayload): HTMLDivElement {\n const { contextMenuList, left, top, parentMenuContainer } = payload\n const contextMenuContainer = this._createContextMenuContainer()\n const contextMenuContent = document.createElement('div')\n contextMenuContent.classList.add(`${EDITOR_PREFIX}-contextmenu-content`)\n let childMenuContainer: HTMLDivElement | null = null\n if (parentMenuContainer) {\n this.contextMenuRelationShip.set(\n parentMenuContainer,\n contextMenuContainer\n )\n }\n for (let c = 0; c < contextMenuList.length; c++) {\n const menu = contextMenuList[c]\n if (menu.isDivider) {\n if (\n c !== 0 &&\n c !== contextMenuList.length - 1 &&\n !contextMenuList[c - 1]?.isDivider\n ) {\n const divider = document.createElement('div')\n divider.classList.add(`${EDITOR_PREFIX}-contextmenu-divider`)\n contextMenuContent.append(divider)\n }\n } else {\n const menuItem = document.createElement('div')\n menuItem.classList.add(`${EDITOR_PREFIX}-contextmenu-item`)\n if (menu.childMenus) {\n const childMenus = this._filterMenuList(menu.childMenus)\n const isRegisterContextMenu = childMenus.some(menu => !menu.isDivider)\n if (isRegisterContextMenu) {\n menuItem.classList.add(`${EDITOR_PREFIX}-contextmenu-sub-item`)\n menuItem.onmouseenter = () => {\n this._setHoverStatus(menuItem, true)\n this._removeSubMenu(contextMenuContainer)\n const subMenuRect = menuItem.getBoundingClientRect()\n const left = subMenuRect.left + subMenuRect.width\n const top = subMenuRect.top\n childMenuContainer = this._render({\n contextMenuList: childMenus,\n left,\n top,\n parentMenuContainer: contextMenuContainer\n })\n }\n menuItem.onmouseleave = evt => {\n if (\n !childMenuContainer ||\n !childMenuContainer.contains(evt.relatedTarget as Node)\n ) {\n this._setHoverStatus(menuItem, false)\n }\n }\n }\n } else {\n menuItem.onmouseenter = () => {\n this._setHoverStatus(menuItem, true)\n this._removeSubMenu(contextMenuContainer)\n }\n menuItem.onmouseleave = () => {\n this._setHoverStatus(menuItem, false)\n }\n menuItem.onclick = () => {\n if (menu.callback && this.context) {\n menu.callback(this.command, this.context)\n }\n this.dispose()\n }\n }\n const icon = document.createElement('i')\n menuItem.append(icon)\n if (menu.icon) {\n icon.classList.add(`${EDITOR_PREFIX}-contextmenu-${menu.icon}`)\n }\n const span = document.createElement('span')\n const name = menu.i18nPath\n ? this._formatName(this.i18n.t(menu.i18nPath))\n : this._formatName(menu.name || '')\n span.append(document.createTextNode(name))\n menuItem.append(span)\n if (menu.shortCut) {\n const span = document.createElement('span')\n span.classList.add(`${EDITOR_PREFIX}-shortcut`)\n span.append(document.createTextNode(menu.shortCut))\n menuItem.append(span)\n }\n contextMenuContent.append(menuItem)\n }\n }\n contextMenuContainer.append(contextMenuContent)\n contextMenuContainer.style.display = 'block'\n const innerWidth = window.innerWidth\n const contextmenuRect = contextMenuContainer.getBoundingClientRect()\n const contextMenuWidth = contextmenuRect.width\n const adjustLeft =\n left + contextMenuWidth > innerWidth ? left - contextMenuWidth : left\n contextMenuContainer.style.left = `${adjustLeft}px`\n const innerHeight = window.innerHeight\n const contextMenuHeight = contextmenuRect.height\n const adjustTop =\n top + contextMenuHeight > innerHeight ? top - contextMenuHeight : top\n contextMenuContainer.style.top = `${adjustTop}px`\n this.contextMenuContainerList.push(contextMenuContainer)\n return contextMenuContainer\n }\n\n private _removeSubMenu(payload: HTMLDivElement) {\n const childMenu = this.contextMenuRelationShip.get(payload)\n if (childMenu) {\n this._removeSubMenu(childMenu)\n childMenu.remove()\n this.contextMenuRelationShip.delete(payload)\n }\n }\n\n private _setHoverStatus(payload: HTMLDivElement, status: boolean) {\n if (status) {\n payload.parentNode\n ?.querySelectorAll(`${EDITOR_PREFIX}-contextmenu-item`)\n .forEach(child => child.classList.remove('hover'))\n payload.classList.add('hover')\n } else {\n payload.classList.remove('hover')\n }\n }\n\n private _formatName(name: string): string {\n const placeholderValues = Object.values(NAME_PLACEHOLDER)\n const placeholderReg = new RegExp(`${placeholderValues.join('|')}`)\n let formatName = name\n if (placeholderReg.test(formatName)) {\n const selectedReg = new RegExp(NAME_PLACEHOLDER.SELECTED_TEXT, 'g')\n if (selectedReg.test(formatName)) {\n const selectedText = this.range.toString()\n formatName = formatName.replace(selectedReg, selectedText)\n }\n }\n return formatName\n }\n\n public registerContextMenuList(payload: IRegisterContextMenu[]) {\n this.contextMenuList.push(...payload)\n }\n\n public dispose() {\n this.contextMenuContainerList.forEach(child => child.remove())\n this.contextMenuContainerList = []\n this.contextMenuRelationShip.clear()\n }\n}\n","import { Command, RowFlex } from '../../..'\nimport { KeyMap } from '../../../dataset/enum/KeyMap'\nimport { IRegisterShortcut } from '../../../interface/shortcut/Shortcut'\nimport { isApple } from '../../../utils/ua'\n\nexport const richtextKeys: IRegisterShortcut[] = [\n {\n key: KeyMap.X,\n ctrl: true,\n shift: true,\n callback: (command: Command) => {\n command.executeStrikeout()\n }\n },\n {\n key: KeyMap.LEFT_BRACKET,\n mod: true,\n callback: (command: Command) => {\n command.executeSizeAdd()\n }\n },\n {\n key: KeyMap.RIGHT_BRACKET,\n mod: true,\n callback: (command: Command) => {\n command.executeSizeMinus()\n }\n },\n {\n key: KeyMap.B,\n mod: true,\n callback: (command: Command) => {\n command.executeBold()\n }\n },\n {\n key: KeyMap.I,\n mod: true,\n callback: (command: Command) => {\n command.executeItalic()\n }\n },\n {\n key: KeyMap.U,\n mod: true,\n callback: (command: Command) => {\n command.executeUnderline()\n }\n },\n {\n key: isApple ? KeyMap.COMMA : KeyMap.RIGHT_ANGLE_BRACKET,\n mod: true,\n shift: true,\n callback: (command: Command) => {\n command.executeSuperscript()\n }\n },\n {\n key: isApple ? KeyMap.PERIOD : KeyMap.LEFT_ANGLE_BRACKET,\n mod: true,\n shift: true,\n callback: (command: Command) => {\n command.executeSubscript()\n }\n },\n {\n key: KeyMap.L,\n mod: true,\n callback: (command: Command) => {\n command.executeRowFlex(RowFlex.LEFT)\n }\n },\n {\n key: KeyMap.E,\n mod: true,\n callback: (command: Command) => {\n command.executeRowFlex(RowFlex.CENTER)\n }\n },\n {\n key: KeyMap.R,\n mod: true,\n callback: (command: Command) => {\n command.executeRowFlex(RowFlex.RIGHT)\n }\n },\n {\n key: KeyMap.J,\n mod: true,\n callback: (command: Command) => {\n command.executeRowFlex(RowFlex.ALIGNMENT)\n }\n },\n {\n key: KeyMap.J,\n mod: true,\n shift: true,\n callback: (command: Command) => {\n command.executeRowFlex(RowFlex.JUSTIFY)\n }\n }\n]\n","import { Command, TitleLevel } from '../../..'\nimport { KeyMap } from '../../../dataset/enum/KeyMap'\nimport { IRegisterShortcut } from '../../../interface/shortcut/Shortcut'\n\nexport const titleKeys: IRegisterShortcut[] = [\n {\n key: KeyMap.ZERO,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(null)\n }\n },\n {\n key: KeyMap.ONE,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.FIRST)\n }\n },\n {\n key: KeyMap.TWO,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.SECOND)\n }\n },\n {\n key: KeyMap.THREE,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.THIRD)\n }\n },\n {\n key: KeyMap.FOUR,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.FOURTH)\n }\n },\n {\n key: KeyMap.FIVE,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.FIFTH)\n }\n },\n {\n key: KeyMap.SIX,\n alt: true,\n ctrl: true,\n callback: (command: Command) => {\n command.executeTitle(TitleLevel.SIXTH)\n }\n }\n]\n","import { Command, ListStyle, ListType } from '../../..'\nimport { KeyMap } from '../../../dataset/enum/KeyMap'\nimport { IRegisterShortcut } from '../../../interface/shortcut/Shortcut'\n\nexport const listKeys: IRegisterShortcut[] = [\n {\n key: KeyMap.I,\n shift: true,\n mod: true,\n callback: (command: Command) => {\n command.executeList(ListType.UL, ListStyle.DISC)\n }\n },\n {\n key: KeyMap.U,\n shift: true,\n mod: true,\n callback: (command: Command) => {\n command.executeList(ListType.OL)\n }\n }\n]\n","import { IRegisterShortcut } from '../../interface/shortcut/Shortcut'\nimport { richtextKeys } from './keys/richtextKeys'\nimport { Command } from '../command/Command'\nimport { Draw } from '../draw/Draw'\nimport { isMod } from '../../utils/hotkey'\nimport { titleKeys } from './keys/titleKeys'\nimport { listKeys } from './keys/listKeys'\n\nexport class Shortcut {\n private command: Command\n private globalShortcutList: IRegisterShortcut[]\n private agentShortcutList: IRegisterShortcut[]\n\n constructor(draw: Draw, command: Command) {\n this.command = command\n this.globalShortcutList = []\n this.agentShortcutList = []\n this._addShortcutList([...richtextKeys, ...titleKeys, ...listKeys])\n this._addEvent()\n const agentDom = draw.getCursor().getAgentDom()\n agentDom.addEventListener('keydown', this._agentKeydown.bind(this))\n }\n\n private _addEvent() {\n document.addEventListener('keydown', this._globalKeydown)\n }\n\n public removeEvent() {\n document.removeEventListener('keydown', this._globalKeydown)\n }\n\n private _addShortcutList(payload: IRegisterShortcut[]) {\n for (let s = payload.length - 1; s >= 0; s--) {\n const shortCut = payload[s]\n if (shortCut.isGlobal) {\n this.globalShortcutList.unshift(shortCut)\n } else {\n this.agentShortcutList.unshift(shortCut)\n }\n }\n }\n\n public registerShortcutList(payload: IRegisterShortcut[]) {\n this._addShortcutList(payload)\n }\n\n private _globalKeydown = (evt: KeyboardEvent) => {\n if (!this.globalShortcutList.length) return\n this._execute(evt, this.globalShortcutList)\n }\n\n private _agentKeydown(evt: KeyboardEvent) {\n if (!this.agentShortcutList.length) return\n this._execute(evt, this.agentShortcutList)\n }\n\n private _execute(evt: KeyboardEvent, shortCutList: IRegisterShortcut[]) {\n for (let s = 0; s < shortCutList.length; s++) {\n const shortCut = shortCutList[s]\n if (\n (shortCut.mod\n ? isMod(evt) === !!shortCut.mod\n : evt.ctrlKey === !!shortCut.ctrl &&\n evt.metaKey === !!shortCut.meta) &&\n evt.shiftKey === !!shortCut.shift &&\n evt.altKey === !!shortCut.alt &&\n evt.key.toLowerCase() === shortCut.key.toLowerCase()\n ) {\n if (!shortCut.disable) {\n shortCut?.callback?.(this.command)\n evt.preventDefault()\n }\n break\n }\n }\n }\n}\n","import Editor from '../..'\nimport { PluginFunction } from '../../interface/Plugin'\n\nexport class Plugin {\n private editor: Editor\n\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n public use<Options>(\n pluginFunction: PluginFunction<Options>,\n options?: Options\n ) {\n pluginFunction(this.editor, options)\n }\n}\n","export class EventBus<EventMap> {\n private eventHub: Map<string, Set<Function>>\n\n constructor() {\n this.eventHub = new Map()\n }\n\n public on<K extends string & keyof EventMap>(\n eventName: K,\n callback: EventMap[K]\n ) {\n if (!eventName || typeof callback !== 'function') return\n const eventSet = this.eventHub.get(eventName) || new Set()\n eventSet.add(callback)\n this.eventHub.set(eventName, eventSet)\n }\n\n public emit<K extends string & keyof EventMap>(\n eventName: K,\n payload?: EventMap[K] extends (payload: infer P) => void ? P : never\n ) {\n if (!eventName) return\n const callBackSet = this.eventHub.get(eventName)\n if (!callBackSet) return\n if (callBackSet.size === 1) {\n const callBack = [...callBackSet]\n return callBack[0](payload)\n }\n callBackSet.forEach(callBack => callBack(payload))\n }\n\n public off<K extends string & keyof EventMap>(\n eventName: K,\n callback: EventMap[K]\n ) {\n if (!eventName || typeof callback !== 'function') return\n const callBackSet = this.eventHub.get(eventName)\n if (!callBackSet) return\n callBackSet.delete(callback)\n }\n\n public isSubscribe<K extends string & keyof EventMap>(eventName: K): boolean {\n const eventSet = this.eventHub.get(eventName)\n return !!eventSet && eventSet.size > 0\n }\n\n public dangerouslyClearAll() {\n this.eventHub.clear()\n }\n}\n","export interface IOverrideResult {\n preventDefault?: boolean\n}\n\nexport class Override {\n public paste:\n | ((evt?: ClipboardEvent) => unknown | IOverrideResult)\n | undefined\n public copy: (() => unknown | IOverrideResult) | undefined\n public drop: ((evt: DragEvent) => unknown | IOverrideResult) | undefined\n}\n","import { EditorComponent } from '../../dataset/enum/Editor'\nimport { EDITOR_COMPONENT } from '../../dataset/constant/Editor'\nimport './signature.css'\n\nexport interface ISignatureResult {\n value: string\n width: number\n height: number\n}\n\nexport interface ISignatureOptions {\n width?: number\n height?: number\n onClose?: () => void\n onCancel?: () => void\n onConfirm?: (payload: ISignatureResult | null) => void\n}\n\nexport class Signature {\n private readonly MAX_RECORD_COUNT = 1000\n private readonly DEFAULT_WIDTH = 390\n private readonly DEFAULT_HEIGHT = 180\n private undoStack: Array<Function> = []\n private x = 0\n private y = 0\n private isDrawing = false\n private isDrawn = false\n private linePoints: [number, number][] = []\n private canvasWidth: number\n private canvasHeight: number\n private options: ISignatureOptions\n private mask: HTMLDivElement\n private container: HTMLDivElement\n private trashContainer: HTMLDivElement\n private undoContainer: HTMLDivElement\n private canvas: HTMLCanvasElement\n private ctx: CanvasRenderingContext2D\n private preTimeStamp: number\n private dpr: number\n\n constructor(options: ISignatureOptions) {\n this.options = options\n this.preTimeStamp = 0\n this.dpr = window.devicePixelRatio\n this.canvasWidth = (options.width || this.DEFAULT_WIDTH) * this.dpr\n this.canvasHeight = (options.height || this.DEFAULT_HEIGHT) * this.dpr\n const { mask, container, trashContainer, undoContainer, canvas } =\n this._render()\n this.mask = mask\n this.container = container\n this.trashContainer = trashContainer\n this.undoContainer = undoContainer\n this.canvas = canvas\n this.ctx = <CanvasRenderingContext2D>canvas.getContext('2d')\n this.ctx.scale(this.dpr, this.dpr)\n this.ctx.lineCap = 'round'\n this._bindEvent()\n this._clearUndoFn()\n // this is necessary so that the screen does not move when moving - it is removed when closing the modal\n document.documentElement.classList.add('overflow-hidden')\n document.body.classList.add('overflow-hidden')\n this.container.classList.add('overflow-hidden')\n }\n\n private _render() {\n const { onClose, onCancel, onConfirm } = this.options\n const mask = document.createElement('div')\n mask.classList.add('signature-mask')\n mask.setAttribute(EDITOR_COMPONENT, EditorComponent.COMPONENT)\n document.body.append(mask)\n const container = document.createElement('div')\n container.classList.add('signature-container')\n container.setAttribute(EDITOR_COMPONENT, EditorComponent.COMPONENT)\n const signatureContainer = document.createElement('div')\n signatureContainer.classList.add('signature')\n container.append(signatureContainer)\n const titleContainer = document.createElement('div')\n titleContainer.classList.add('signature-title')\n const titleSpan = document.createElement('span')\n titleSpan.append(document.createTextNode('Insert Signature'))\n const titleClose = document.createElement('i')\n titleClose.onclick = () => {\n if (onClose) {\n onClose()\n }\n this._dispose()\n }\n titleContainer.append(titleSpan)\n titleContainer.append(titleClose)\n signatureContainer.append(titleContainer)\n const operationContainer = document.createElement('div')\n operationContainer.classList.add('signature-operation')\n const undoContainer = document.createElement('div')\n undoContainer.classList.add('signature-operation__undo')\n const undoIcon = document.createElement('i')\n const undoLabel = document.createElement('span')\n undoLabel.innerText = 'Undo'\n undoContainer.append(undoIcon)\n undoContainer.append(undoLabel)\n operationContainer.append(undoContainer)\n const trashContainer = document.createElement('div')\n trashContainer.classList.add('signature-operation__trash')\n const trashIcon = document.createElement('i')\n const trashLabel = document.createElement('span')\n trashLabel.innerText = 'Clear'\n trashContainer.append(trashIcon)\n trashContainer.append(trashLabel)\n operationContainer.append(trashContainer)\n signatureContainer.append(operationContainer)\n const canvasContainer = document.createElement('div')\n canvasContainer.classList.add('signature-canvas')\n const canvas = document.createElement('canvas')\n canvas.width = this.canvasWidth\n canvas.height = this.canvasHeight\n canvas.style.width = `${this.canvasWidth / this.dpr}px`\n canvas.style.height = `${this.canvasHeight / this.dpr}px`\n canvasContainer.append(canvas)\n signatureContainer.append(canvasContainer)\n const menuContainer = document.createElement('div')\n menuContainer.classList.add('signature-menu')\n const cancelBtn = document.createElement('button')\n cancelBtn.classList.add('signature-menu__cancel')\n cancelBtn.append(document.createTextNode('Cancel'))\n cancelBtn.type = 'button'\n cancelBtn.onclick = () => {\n if (onCancel) {\n onCancel()\n }\n this._dispose()\n }\n menuContainer.append(cancelBtn)\n const confirmBtn = document.createElement('button')\n confirmBtn.append(document.createTextNode('Confirm'))\n confirmBtn.type = 'submit'\n confirmBtn.onclick = () => {\n if (onConfirm) {\n onConfirm(this._toData())\n }\n this._dispose()\n }\n menuContainer.append(confirmBtn)\n signatureContainer.append(menuContainer)\n document.body.append(container)\n this.container = container\n this.mask = mask\n return {\n mask,\n canvas,\n container,\n trashContainer,\n undoContainer\n }\n }\n\n private _bindEvent() {\n this.trashContainer.onclick = this._clearCanvas.bind(this)\n this.undoContainer.onclick = this._undo.bind(this)\n this.canvas.onmousedown = this._startDraw.bind(this)\n this.canvas.onmousemove = this._draw.bind(this)\n this.container.onmouseup = this._stopDraw.bind(this)\n this.container.ontouchmove = this.registerTouchmove.bind(this)\n this.container.ontouchstart = this.registerTouchstart.bind(this)\n this.container.ontouchend = this.registerTouchend.bind(this)\n }\n\n private _undo() {\n if (this.undoStack.length > 1) {\n this.undoStack.pop()\n if (this.undoStack.length) {\n this.undoStack[this.undoStack.length - 1]()\n }\n }\n }\n\n private _saveUndoFn(fn: Function) {\n this.undoStack.push(fn)\n while (this.undoStack.length > this.MAX_RECORD_COUNT) {\n this.undoStack.shift()\n }\n }\n\n private _clearUndoFn() {\n const clearFn = () => {\n this.ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight)\n }\n this.undoStack = [clearFn]\n }\n\n private _clearCanvas() {\n this._clearUndoFn()\n this.ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight)\n }\n\n private _startDraw(evt: MouseEvent) {\n this.isDrawing = true\n this.x = evt.offsetX\n this.y = evt.offsetY\n this.ctx.lineWidth = 1\n }\n\n private _draw(evt: MouseEvent) {\n if (!this.isDrawing) return\n const curTimestamp = performance.now()\n const distance = Math.sqrt(evt.movementX ** 2 + evt.movementY ** 2)\n const speed = distance / (curTimestamp - this.preTimeStamp)\n const SPEED_FACTOR = 3\n const targetLineWidth = Math.min(5, Math.max(1, 5 - speed * SPEED_FACTOR))\n const SMOOTH_FACTOR = 0.2\n this.ctx.lineWidth =\n this.ctx.lineWidth * (1 - SMOOTH_FACTOR) + targetLineWidth * SMOOTH_FACTOR\n const { offsetX, offsetY } = evt\n this.ctx.beginPath()\n this.ctx.moveTo(this.x, this.y)\n this.ctx.lineTo(offsetX, offsetY)\n this.ctx.stroke()\n this.x = offsetX\n this.y = offsetY\n this.linePoints.push([offsetX, offsetY])\n this.isDrawn = true\n this.preTimeStamp = curTimestamp\n }\n\n private _stopDraw() {\n this.isDrawing = false\n if (this.isDrawn) {\n const imageData = this.ctx.getImageData(\n 0,\n 0,\n this.canvasWidth,\n this.canvasHeight\n )\n const self = this\n this._saveUndoFn(function () {\n self.ctx.clearRect(0, 0, self.canvasWidth, self.canvasHeight)\n self.ctx.putImageData(imageData, 0, 0)\n })\n this.isDrawn = false\n }\n }\n\n private _toData(): ISignatureResult | null {\n if (!this.linePoints.length) return null\n const startX = this.linePoints[0][0]\n const startY = this.linePoints[0][1]\n let minX = startX\n let minY = startY\n let maxX = startX\n let maxY = startY\n for (let p = 0; p < this.linePoints.length; p++) {\n const point = this.linePoints[p]\n if (minX > point[0]) {\n minX = point[0]\n }\n if (maxX < point[0]) {\n maxX = point[0]\n }\n if (minY > point[1]) {\n minY = point[1]\n }\n if (maxY < point[1]) {\n maxY = point[1]\n }\n }\n const lineWidth = this.ctx.lineWidth\n minX = minX < lineWidth ? 0 : minX - lineWidth\n minY = minY < lineWidth ? 0 : minY - lineWidth\n maxX = maxX + lineWidth\n maxY = maxY + lineWidth\n const sw = maxX - minX\n const sh = maxY - minY\n const imageData = this.ctx.getImageData(\n minX * this.dpr,\n minY * this.dpr,\n sw * this.dpr,\n sh * this.dpr\n )\n const canvas = document.createElement('canvas')\n canvas.style.width = `${sw}px`\n canvas.style.height = `${sh}px`\n canvas.width = sw * this.dpr\n canvas.height = sh * this.dpr\n const ctx = <CanvasRenderingContext2D>canvas.getContext('2d')!\n ctx.putImageData(imageData, 0, 0)\n const value = canvas.toDataURL()\n return {\n value,\n width: sw,\n height: sh\n }\n }\n\n private registerTouchmove(evt: TouchEvent) {\n this.registerTouchEvent(evt, 'mousemove')\n }\n\n private registerTouchstart(evt: TouchEvent) {\n this.registerTouchEvent(evt, 'mousedown')\n }\n\n private registerTouchend() {\n const me = new MouseEvent('mouseup', {})\n this.canvas.dispatchEvent(me)\n }\n\n private registerTouchEvent(evt: TouchEvent, eventName: string) {\n const touch = evt.touches[0]\n const me = new MouseEvent(eventName, {\n clientX: touch.clientX,\n clientY: touch.clientY\n })\n this.canvas.dispatchEvent(me)\n }\n\n private _dispose() {\n this.mask.remove()\n this.container.remove()\n document.documentElement.classList.remove('overflow-hidden')\n document.body.classList.remove('overflow-hidden')\n }\n}\n","import './assets/css/index.css'\nimport { version } from './version'\nimport { IEditorData, IEditorOption, IEditorResult } from './interface/Editor'\nimport { IElement } from './interface/Element'\nimport { Draw } from './core/draw/Draw'\nimport { Command } from './core/command/Command'\nimport { CommandAdapt } from './core/command/CommandAdapt'\nimport { Listener } from './core/listener/Listener'\nimport { RowFlex } from './dataset/enum/Row'\nimport {\n FlexDirection,\n ImageDisplay,\n LocationPosition\n} from './dataset/enum/Common'\nimport { ElementType } from './dataset/enum/Element'\nimport { formatElementList } from './utils/element'\nimport { Register } from './core/register/Register'\nimport { ContextMenu } from './core/contextmenu/ContextMenu'\nimport {\n IContextMenuContext,\n IRegisterContextMenu\n} from './interface/contextmenu/ContextMenu'\nimport {\n EditorComponent,\n EditorZone,\n EditorMode,\n PageMode,\n PaperDirection,\n WordBreak,\n RenderMode\n} from './dataset/enum/Editor'\nimport { EDITOR_CLIPBOARD, EDITOR_COMPONENT } from './dataset/constant/Editor'\nimport { IWatermark } from './interface/Watermark'\nimport {\n ControlComponent,\n ControlIndentation,\n ControlState,\n ControlType\n} from './dataset/enum/Control'\nimport { INavigateInfo } from './core/draw/interactive/Search'\nimport { Shortcut } from './core/shortcut/Shortcut'\nimport { KeyMap } from './dataset/enum/KeyMap'\nimport { BlockType } from './dataset/enum/Block'\nimport { IBlock } from './interface/Block'\nimport { ILang } from './interface/i18n/I18n'\nimport { VerticalAlign } from './dataset/enum/VerticalAlign'\nimport { TableBorder, TdBorder, TdSlash } from './dataset/enum/table/Table'\nimport { MaxHeightRatio, NumberType } from './dataset/enum/Common'\nimport { TitleLevel } from './dataset/enum/Title'\nimport { ListStyle, ListType, OlPreset, UlPreset } from './dataset/enum/List'\nimport { ICatalog, ICatalogItem } from './interface/Catalog'\nimport { Plugin } from './core/plugin/Plugin'\nimport { UsePlugin } from './interface/Plugin'\nimport { EventBus } from './core/event/eventbus/EventBus'\nimport { EventBusMap } from './interface/EventBus'\nimport { IRangeStyle } from './interface/Listener'\nimport { Override } from './core/override/Override'\nimport { LETTER_CLASS } from './dataset/constant/Common'\nimport { INTERNAL_CONTEXT_MENU_KEY } from './dataset/constant/ContextMenu'\nimport { IRange } from './interface/Range'\nimport { deepClone, splitText } from './utils'\nimport {\n createDomFromElementList,\n getElementListByHTML,\n getTextFromElementList,\n type IGetElementListByHTMLOption\n} from './utils/element'\nimport { BackgroundRepeat, BackgroundSize } from './dataset/enum/Background'\nimport { TextDecorationStyle } from './dataset/enum/Text'\nimport { mergeOption } from './utils/option'\nimport { LineNumberType } from './dataset/enum/LineNumber'\nimport { AreaMode } from './dataset/enum/Area'\nimport { IBadge } from './interface/Badge'\nimport { WatermarkType } from './dataset/enum/Watermark'\nimport { INTERNAL_SHORTCUT_KEY } from './dataset/constant/Shortcut'\nimport { IGraffitiData } from './interface/Graffiti'\nimport { Dialog } from './components/dialog/Dialog'\nimport { Signature } from './components/signature/Signature'\n\nexport default class Editor {\n public command: Command\n public version: string\n public listener: Listener\n public eventBus: EventBus<EventBusMap>\n public override: Override\n public register: Register\n public destroy: () => void\n public use: UsePlugin\n\n constructor(\n container: HTMLDivElement,\n data: IEditorData | IElement[],\n options: IEditorOption = {}\n ) {\n // Merge options\n const editorOptions = mergeOption(options)\n // Data processing\n data = deepClone(data)\n let headerElementList: IElement[] = []\n let mainElementList: IElement[] = []\n let footerElementList: IElement[] = []\n let graffitiData: IGraffitiData[] = []\n if (Array.isArray(data)) {\n mainElementList = data\n } else {\n headerElementList = data.header || []\n mainElementList = data.main\n footerElementList = data.footer || []\n graffitiData = data.graffiti || []\n }\n const pageComponentData = [\n headerElementList,\n mainElementList,\n footerElementList\n ]\n pageComponentData.forEach(elementList => {\n formatElementList(elementList, {\n editorOptions,\n isForceCompensation: true\n })\n })\n // Version\n this.version = version\n // Listener\n this.listener = new Listener()\n // Event bus\n this.eventBus = new EventBus<EventBusMap>()\n // Override\n this.override = new Override()\n // Initialize draw\n const draw = new Draw(\n container,\n editorOptions,\n {\n header: headerElementList,\n main: mainElementList,\n footer: footerElementList,\n graffiti: graffitiData\n },\n this.listener,\n this.eventBus,\n this.override\n )\n // Command\n this.command = new Command(new CommandAdapt(draw))\n // Context menu\n const contextMenu = new ContextMenu(draw, this.command)\n // Shortcut\n const shortcut = new Shortcut(draw, this.command)\n // Register\n this.register = new Register({\n contextMenu,\n shortcut,\n i18n: draw.getI18n()\n })\n // Register destroy method\n this.destroy = () => {\n draw.destroy()\n shortcut.removeEvent()\n contextMenu.removeEvent()\n this.eventBus.dangerouslyClearAll()\n }\n // Plugin\n const plugin = new Plugin(this)\n this.use = plugin.use.bind(plugin)\n }\n}\n\n// Public methods\nexport {\n splitText,\n createDomFromElementList,\n getElementListByHTML,\n getTextFromElementList\n}\n\n// Public components\nexport {\n Dialog,\n Signature\n}\n\n// Public constants\nexport {\n EDITOR_COMPONENT,\n LETTER_CLASS,\n INTERNAL_CONTEXT_MENU_KEY,\n INTERNAL_SHORTCUT_KEY,\n EDITOR_CLIPBOARD\n}\n\n// Public enums\nexport {\n Editor,\n RowFlex,\n VerticalAlign,\n EditorZone,\n EditorMode,\n ElementType,\n ControlType,\n EditorComponent,\n PageMode,\n RenderMode,\n ImageDisplay,\n Command,\n KeyMap,\n BlockType,\n PaperDirection,\n TableBorder,\n TdBorder,\n TdSlash,\n MaxHeightRatio,\n NumberType,\n TitleLevel,\n ListType,\n ListStyle,\n OlPreset,\n UlPreset,\n WordBreak,\n ControlIndentation,\n ControlComponent,\n BackgroundRepeat,\n BackgroundSize,\n TextDecorationStyle,\n LineNumberType,\n LocationPosition,\n AreaMode,\n ControlState,\n FlexDirection,\n WatermarkType\n}\n\n// Public types\nexport type {\n IElement,\n IEditorData,\n IEditorOption,\n IEditorResult,\n IContextMenuContext,\n IRegisterContextMenu,\n IWatermark,\n INavigateInfo,\n IBlock,\n ILang,\n ICatalog,\n ICatalogItem,\n IRange,\n IRangeStyle,\n IBadge,\n IGetElementListByHTMLOption\n}\n"],"mappings":"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AAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;A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","names":["MaxHeightRatio","NumberType","ImageDisplay","LocationPosition","FlexDirection","RowFlex","data","input","nextTick","ElementType","expr","f","ListType","ListStyle","OlPreset","UlPreset","TitleLevel","BlockType","ControlType","ControlComponent","ControlIndentation","ControlState","EditorComponent","EditorMode","EditorZone","PageMode","PaperDirection","WordBreak","RenderMode","TableBorder","TdBorder","TdSlash","BackgroundSize","BackgroundRepeat","VerticalAlign","WatermarkType","LineNumberType","value","formatElementList","cloneAttr","clipboardDom","tab","data","pasteElement","type","data","nextTick","left","right","KeyMap","data","cacheStartElement","cacheEndElement","elementList","startIndex","endIndex","element","data","value","position","copy","drop","data","isNumber","value","threeClick","data","rowList","left","curPositionIndex","hitLineStartIndex","index","element","isTable","trIndex","tdIndex","payload","i","index","group","TextDecorationStyle","textMetrics","data","td","td","colBorder","evt","group","left","data","data","restArgs","highlight","element","data","prefixIndex","left","data","i","left","data","left","data","data","elementList","context","left","left","left","titleOrderNumberMapping","TEXTLIKE_ELEMENT_TYPE","ZERO","WRAP","isTextLikeElement","element","data","left","left","data","input","left","left","data","left","data","right","row","group","d","AreaMode","left","data","data","group","preElement","nextElement","rowList","i","height","trList","defaultSize","surroundPosition","offsetY","startIndex","positionList","data","elementList","titleId","pageNo","DELETE","left","menu","top","span","data"]}
|