@talrace/ngx-noder 0.0.2

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.
Files changed (515) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -0
  3. package/esm2022/lib/+shared/abstract/base-api.service.mjs +99 -0
  4. package/esm2022/lib/+shared/abstract/observer.component.mjs +24 -0
  5. package/esm2022/lib/+shared/confirm-dialog/confirm-dialog.component.mjs +28 -0
  6. package/esm2022/lib/+shared/constants/default-file-name.const.mjs +2 -0
  7. package/esm2022/lib/+shared/constants/paginator-sizes.const.mjs +3 -0
  8. package/esm2022/lib/+shared/editor/core/base/event-emitting.mjs +71 -0
  9. package/esm2022/lib/+shared/editor/core/components/edges/edge-type.enum.mjs +6 -0
  10. package/esm2022/lib/+shared/editor/core/components/edges/edge.component.mjs +100 -0
  11. package/esm2022/lib/+shared/editor/core/components/edges/edges.mjs +104 -0
  12. package/esm2022/lib/+shared/editor/core/constants/alignments.const.mjs +8 -0
  13. package/esm2022/lib/+shared/editor/core/constants/clipboardEventTypes.const.mjs +6 -0
  14. package/esm2022/lib/+shared/editor/core/constants/content-style-change.const.mjs +15 -0
  15. package/esm2022/lib/+shared/editor/core/constants/display-values.const.mjs +8 -0
  16. package/esm2022/lib/+shared/editor/core/constants/document-info.const.mjs +13 -0
  17. package/esm2022/lib/+shared/editor/core/constants/editor-version.const.mjs +2 -0
  18. package/esm2022/lib/+shared/editor/core/constants/editor.const.mjs +62 -0
  19. package/esm2022/lib/+shared/editor/core/constants/unicode-chars.const.mjs +5 -0
  20. package/esm2022/lib/+shared/editor/core/document.mjs +134 -0
  21. package/esm2022/lib/+shared/editor/core/edit.session.mjs +1102 -0
  22. package/esm2022/lib/+shared/editor/core/editor.mjs +1279 -0
  23. package/esm2022/lib/+shared/editor/core/enums/break-types.enum.mjs +7 -0
  24. package/esm2022/lib/+shared/editor/core/enums/hrule.enum.mjs +7 -0
  25. package/esm2022/lib/+shared/editor/core/enums/mouse-button.enum.mjs +7 -0
  26. package/esm2022/lib/+shared/editor/core/enums/numbering-marker-type.enum.mjs +12 -0
  27. package/esm2022/lib/+shared/editor/core/enums/page-type.enum.mjs +7 -0
  28. package/esm2022/lib/+shared/editor/core/enums/vertical-alignment.enum.mjs +11 -0
  29. package/esm2022/lib/+shared/editor/core/helpers/content-style.helper.mjs +156 -0
  30. package/esm2022/lib/+shared/editor/core/helpers/delta.helper.mjs +18 -0
  31. package/esm2022/lib/+shared/editor/core/helpers/dom.helper.mjs +42 -0
  32. package/esm2022/lib/+shared/editor/core/helpers/event.helper.mjs +18 -0
  33. package/esm2022/lib/+shared/editor/core/helpers/font-metrics.helper.mjs +88 -0
  34. package/esm2022/lib/+shared/editor/core/helpers/format-style.helper.mjs +72 -0
  35. package/esm2022/lib/+shared/editor/core/helpers/line-width.helper.mjs +13 -0
  36. package/esm2022/lib/+shared/editor/core/helpers/numbering.helper.mjs +83 -0
  37. package/esm2022/lib/+shared/editor/core/helpers/page.helper.mjs +12 -0
  38. package/esm2022/lib/+shared/editor/core/helpers/paragraph-style.helper.mjs +41 -0
  39. package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +132 -0
  40. package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +191 -0
  41. package/esm2022/lib/+shared/editor/core/helpers/print.rendering.helper.mjs +7 -0
  42. package/esm2022/lib/+shared/editor/core/helpers/rendering.helper.mjs +186 -0
  43. package/esm2022/lib/+shared/editor/core/helpers/unicode.helper.mjs +20 -0
  44. package/esm2022/lib/+shared/editor/core/interfaces/cell.interface.mjs +2 -0
  45. package/esm2022/lib/+shared/editor/core/interfaces/cursor-position.interface.mjs +2 -0
  46. package/esm2022/lib/+shared/editor/core/interfaces/font-metric-size.interface.mjs +2 -0
  47. package/esm2022/lib/+shared/editor/core/interfaces/layer.config.mjs +2 -0
  48. package/esm2022/lib/+shared/editor/core/interfaces/paragraph-info.interface.mjs +2 -0
  49. package/esm2022/lib/+shared/editor/core/interfaces/render-changes.interface.mjs +2 -0
  50. package/esm2022/lib/+shared/editor/core/interfaces/replace.interface.mjs +2 -0
  51. package/esm2022/lib/+shared/editor/core/interfaces/search-iteration.interface.mjs +2 -0
  52. package/esm2022/lib/+shared/editor/core/interfaces/toolbar-styles.interface.mjs +2 -0
  53. package/esm2022/lib/+shared/editor/core/interfaces/visible-line-info.interface.mjs +2 -0
  54. package/esm2022/lib/+shared/editor/core/interfaces/visible-range.interface.mjs +2 -0
  55. package/esm2022/lib/+shared/editor/core/keyboard/text-input.mjs +53 -0
  56. package/esm2022/lib/+shared/editor/core/layers/cursor.layer.mjs +103 -0
  57. package/esm2022/lib/+shared/editor/core/layers/edges.layer.mjs +99 -0
  58. package/esm2022/lib/+shared/editor/core/layers/lines.mjs +96 -0
  59. package/esm2022/lib/+shared/editor/core/layers/pages.layer.mjs +106 -0
  60. package/esm2022/lib/+shared/editor/core/layers/print.edges.layer.mjs +7 -0
  61. package/esm2022/lib/+shared/editor/core/layers/print.pages.layer.mjs +7 -0
  62. package/esm2022/lib/+shared/editor/core/layers/print.text.layer.mjs +7 -0
  63. package/esm2022/lib/+shared/editor/core/layers/renderloop.mjs +26 -0
  64. package/esm2022/lib/+shared/editor/core/layers/scrollbar.mjs +100 -0
  65. package/esm2022/lib/+shared/editor/core/layers/selection.layer.mjs +115 -0
  66. package/esm2022/lib/+shared/editor/core/layers/text.layer.mjs +124 -0
  67. package/esm2022/lib/+shared/editor/core/models/display-token.model.mjs +12 -0
  68. package/esm2022/lib/+shared/editor/core/models/distance.model.mjs +10 -0
  69. package/esm2022/lib/+shared/editor/core/models/edge-element.model.mjs +9 -0
  70. package/esm2022/lib/+shared/editor/core/models/format-ext.model.mjs +10 -0
  71. package/esm2022/lib/+shared/editor/core/models/indent.model.mjs +9 -0
  72. package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +9 -0
  73. package/esm2022/lib/+shared/editor/core/models/margin.model.mjs +16 -0
  74. package/esm2022/lib/+shared/editor/core/models/numbering-data.model.mjs +9 -0
  75. package/esm2022/lib/+shared/editor/core/models/render-changes.model.mjs +25 -0
  76. package/esm2022/lib/+shared/editor/core/paging/page-vertical-data.model.mjs +9 -0
  77. package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +219 -0
  78. package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +52 -0
  79. package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +34 -0
  80. package/esm2022/lib/+shared/editor/core/point.mjs +13 -0
  81. package/esm2022/lib/+shared/editor/core/print.renderer.mjs +72 -0
  82. package/esm2022/lib/+shared/editor/core/range.mjs +94 -0
  83. package/esm2022/lib/+shared/editor/core/renderer.mjs +217 -0
  84. package/esm2022/lib/+shared/editor/core/search.mjs +231 -0
  85. package/esm2022/lib/+shared/editor/core/virtual.renderer.mjs +356 -0
  86. package/esm2022/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.mjs +35 -0
  87. package/esm2022/lib/+shared/editor/custom-components/external-element/external-element.service.mjs +6 -0
  88. package/esm2022/lib/+shared/editor/custom-components/external-element/external-elements.const.mjs +4 -0
  89. package/esm2022/lib/+shared/editor/custom-components/external-element/external-sidenav.interface.mjs +2 -0
  90. package/esm2022/lib/+shared/editor/custom-components/external-element/external.component.mjs +41 -0
  91. package/esm2022/lib/+shared/editor/custom-components/external-element/models/element-data.model.mjs +9 -0
  92. package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +10 -0
  93. package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-sidenav.model.mjs +15 -0
  94. package/esm2022/lib/+shared/editor/custom-components/image/components/image.component.mjs +87 -0
  95. package/esm2022/lib/+shared/editor/custom-components/image/input-handler/image-input.handler.mjs +38 -0
  96. package/esm2022/lib/+shared/editor/custom-components/image/interfaces/size.mjs +2 -0
  97. package/esm2022/lib/+shared/editor/custom-components/image/resizer/coordinate.mjs +2 -0
  98. package/esm2022/lib/+shared/editor/custom-components/image/resizer/direction-wrapper.mjs +19 -0
  99. package/esm2022/lib/+shared/editor/custom-components/image/resizer/direction.enum.mjs +12 -0
  100. package/esm2022/lib/+shared/editor/custom-components/image/resizer/resizer.component.mjs +106 -0
  101. package/esm2022/lib/+shared/editor/custom-components/image/resizer/size-delta.mjs +2 -0
  102. package/esm2022/lib/+shared/editor/custom-components/image/resizer/size-wrapper.mjs +52 -0
  103. package/esm2022/lib/+shared/editor/custom-components/image/services/image-api.service.mjs +14 -0
  104. package/esm2022/lib/+shared/editor/custom-components/shared/abstract/base.component.mjs +57 -0
  105. package/esm2022/lib/+shared/editor/custom-components/shared/constants/custom-content-markers.const.mjs +3 -0
  106. package/esm2022/lib/+shared/editor/custom-components/shared/helpers/custom-component.hepler.mjs +43 -0
  107. package/esm2022/lib/+shared/editor/custom-components/shared/interfaces/custom-components.interface.mjs +2 -0
  108. package/esm2022/lib/+shared/editor/custom-components/shared/services/component/component.service.mjs +64 -0
  109. package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +120 -0
  110. package/esm2022/lib/+shared/editor/custom-components/shared/services/overlay/overlay.service.mjs +55 -0
  111. package/esm2022/lib/+shared/editor/custom-components/shared/types/custom-content.mjs +2 -0
  112. package/esm2022/lib/+shared/editor/custom-components/tab/tab.component.mjs +43 -0
  113. package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +118 -0
  114. package/esm2022/lib/+shared/editor/custom-components/table/components/table-cell.component.mjs +95 -0
  115. package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +293 -0
  116. package/esm2022/lib/+shared/editor/custom-components/table/enums/reisizer-side.enum.mjs +8 -0
  117. package/esm2022/lib/+shared/editor/custom-components/table/enums/vertical-merge.enum.mjs +6 -0
  118. package/esm2022/lib/+shared/editor/custom-components/table/models/cell-data.model.mjs +18 -0
  119. package/esm2022/lib/+shared/editor/custom-components/table/models/cell-resizer-parameters.model.mjs +9 -0
  120. package/esm2022/lib/+shared/editor/custom-components/table/models/row-data.model.mjs +8 -0
  121. package/esm2022/lib/+shared/editor/custom-components/table/models/selection-range.model.mjs +7 -0
  122. package/esm2022/lib/+shared/editor/custom-components/table/overlay-menu/overlay-menu.component.mjs +74 -0
  123. package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +358 -0
  124. package/esm2022/lib/+shared/editor/editor.component.mjs +103 -0
  125. package/esm2022/lib/+shared/editor/editor.module.mjs +85 -0
  126. package/esm2022/lib/+shared/editor/execution/models/cell-session-source.model.mjs +19 -0
  127. package/esm2022/lib/+shared/editor/execution/models/edge-session-source.model.mjs +15 -0
  128. package/esm2022/lib/+shared/editor/execution/models/general-properties.model.mjs +11 -0
  129. package/esm2022/lib/+shared/editor/execution/models/main-session-source.model.mjs +8 -0
  130. package/esm2022/lib/+shared/editor/execution/models/session-source.model.mjs +3 -0
  131. package/esm2022/lib/+shared/editor/execution/models/session.model.mjs +10 -0
  132. package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +193 -0
  133. package/esm2022/lib/+shared/editor/helpers/break.helper.mjs +18 -0
  134. package/esm2022/lib/+shared/editor/helpers/content.helper.mjs +30 -0
  135. package/esm2022/lib/+shared/editor/helpers/format.helper.mjs +23 -0
  136. package/esm2022/lib/+shared/editor/helpers/indexed-element.helper.mjs +6 -0
  137. package/esm2022/lib/+shared/editor/helpers/tab.helper.mjs +6 -0
  138. package/esm2022/lib/+shared/editor/interaction/editor.service.mjs +309 -0
  139. package/esm2022/lib/+shared/editor/interaction/input.handler.mjs +160 -0
  140. package/esm2022/lib/+shared/editor/interaction/mouse.handler.mjs +49 -0
  141. package/esm2022/lib/+shared/editor/interfaces/contents.interface.mjs +2 -0
  142. package/esm2022/lib/+shared/editor/interfaces/insert-index.interface.mjs +2 -0
  143. package/esm2022/lib/+shared/editor/operation-history/operation-history.mjs +184 -0
  144. package/esm2022/lib/+shared/editor/operation-history/operation.type.mjs +2 -0
  145. package/esm2022/lib/+shared/editor/operation-history/operations-history-info.model.mjs +7 -0
  146. package/esm2022/lib/+shared/editor/operations/enums/command-type.enum.mjs +31 -0
  147. package/esm2022/lib/+shared/editor/operations/enums/target-type.enum.mjs +7 -0
  148. package/esm2022/lib/+shared/editor/operations/helpers/break-operations.helper.mjs +9 -0
  149. package/esm2022/lib/+shared/editor/operations/helpers/content-operations.helper.mjs +15 -0
  150. package/esm2022/lib/+shared/editor/operations/helpers/format-operations.helper.mjs +56 -0
  151. package/esm2022/lib/+shared/editor/operations/helpers/image-operations.helper.mjs +19 -0
  152. package/esm2022/lib/+shared/editor/operations/helpers/indexed-element-operations.helper.mjs +43 -0
  153. package/esm2022/lib/+shared/editor/operations/helpers/link-operations.helper.mjs +28 -0
  154. package/esm2022/lib/+shared/editor/operations/helpers/numbering-operations.helper.mjs +55 -0
  155. package/esm2022/lib/+shared/editor/operations/helpers/operations-helper.helper.mjs +394 -0
  156. package/esm2022/lib/+shared/editor/operations/helpers/paragraph-operations.helper.mjs +83 -0
  157. package/esm2022/lib/+shared/editor/operations/helpers/save-commands.helper.mjs +118 -0
  158. package/esm2022/lib/+shared/editor/operations/helpers/tab-operations.helper.mjs +16 -0
  159. package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +371 -0
  160. package/esm2022/lib/+shared/editor/operations/helpers/target-operations.helper.mjs +23 -0
  161. package/esm2022/lib/+shared/editor/positioning/selection.mjs +307 -0
  162. package/esm2022/lib/+shared/editor/store/editor.actions.mjs +13 -0
  163. package/esm2022/lib/+shared/editor-header/editor-header.component.mjs +314 -0
  164. package/esm2022/lib/+shared/editor-search/editor-search-dialog.component.mjs +71 -0
  165. package/esm2022/lib/+shared/editor-toolbar/color-picker/color-picker.component.mjs +32 -0
  166. package/esm2022/lib/+shared/editor-toolbar/constants/numbering-templates.const.mjs +1148 -0
  167. package/esm2022/lib/+shared/editor-toolbar/constants/svg-icons.const.mjs +157 -0
  168. package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.component.mjs +115 -0
  169. package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.module.mjs +107 -0
  170. package/esm2022/lib/+shared/editor-toolbar/enums/alignment.enum.mjs +8 -0
  171. package/esm2022/lib/+shared/editor-toolbar/enums/numbering-template-type.enum.mjs +16 -0
  172. package/esm2022/lib/+shared/editor-toolbar/enums/numbering-type.enum.mjs +6 -0
  173. package/esm2022/lib/+shared/editor-toolbar/font/font.component.mjs +45 -0
  174. package/esm2022/lib/+shared/editor-toolbar/font-size/font-size.component.mjs +85 -0
  175. package/esm2022/lib/+shared/editor-toolbar/font-style/font-style.component.mjs +80 -0
  176. package/esm2022/lib/+shared/editor-toolbar/format/format.component.mjs +28 -0
  177. package/esm2022/lib/+shared/editor-toolbar/heading/heading.component.mjs +23 -0
  178. package/esm2022/lib/+shared/editor-toolbar/helpers/toolbar-styles.helper.mjs +55 -0
  179. package/esm2022/lib/+shared/editor-toolbar/numbering/numbering.component.mjs +53 -0
  180. package/esm2022/lib/+shared/editor-toolbar/print/print.component.mjs +18 -0
  181. package/esm2022/lib/+shared/editor-toolbar/undo-redo/undo-redo.component.mjs +27 -0
  182. package/esm2022/lib/+shared/editor-toolbar/zoom/zoom.component.mjs +74 -0
  183. package/esm2022/lib/+shared/enums/mode.enum.mjs +7 -0
  184. package/esm2022/lib/+shared/helpers/print.helper.mjs +40 -0
  185. package/esm2022/lib/+shared/insert-table/insert-table.component.mjs +54 -0
  186. package/esm2022/lib/+shared/services/commands.service.mjs +20 -0
  187. package/esm2022/lib/+shared/services/custom-icon.service.mjs +34 -0
  188. package/esm2022/lib/models/generated/add-numbering.model.mjs +8 -0
  189. package/esm2022/lib/models/generated/apply-element-style.model.mjs +8 -0
  190. package/esm2022/lib/models/generated/apply-image-style.model.mjs +8 -0
  191. package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +12 -0
  192. package/esm2022/lib/models/generated/apply-text-style.model.mjs +12 -0
  193. package/esm2022/lib/models/generated/borders-style.model.mjs +8 -0
  194. package/esm2022/lib/models/generated/break.model.mjs +8 -0
  195. package/esm2022/lib/models/generated/cell.model.mjs +12 -0
  196. package/esm2022/lib/models/generated/column-section.model.mjs +8 -0
  197. package/esm2022/lib/models/generated/column.model.mjs +8 -0
  198. package/esm2022/lib/models/generated/command.model.mjs +116 -0
  199. package/esm2022/lib/models/generated/delete.model.mjs +8 -0
  200. package/esm2022/lib/models/generated/document-name.model.mjs +8 -0
  201. package/esm2022/lib/models/generated/document.model.mjs +8 -0
  202. package/esm2022/lib/models/generated/docx.model.mjs +12 -0
  203. package/esm2022/lib/models/generated/edge-target.model.mjs +8 -0
  204. package/esm2022/lib/models/generated/edge.model.mjs +8 -0
  205. package/esm2022/lib/models/generated/element.model.mjs +8 -0
  206. package/esm2022/lib/models/generated/file-source.model.mjs +8 -0
  207. package/esm2022/lib/models/generated/format.model.mjs +12 -0
  208. package/esm2022/lib/models/generated/heading.model.mjs +16 -0
  209. package/esm2022/lib/models/generated/image-data.model.mjs +8 -0
  210. package/esm2022/lib/models/generated/image.model.mjs +12 -0
  211. package/esm2022/lib/models/generated/insert-break.model.mjs +8 -0
  212. package/esm2022/lib/models/generated/insert-element.model.mjs +12 -0
  213. package/esm2022/lib/models/generated/insert-image.model.mjs +12 -0
  214. package/esm2022/lib/models/generated/insert-link.model.mjs +12 -0
  215. package/esm2022/lib/models/generated/insert-styled-text.model.mjs +12 -0
  216. package/esm2022/lib/models/generated/insert-tab.model.mjs +8 -0
  217. package/esm2022/lib/models/generated/insert-table-columns.model.mjs +8 -0
  218. package/esm2022/lib/models/generated/insert-table-rows.model.mjs +8 -0
  219. package/esm2022/lib/models/generated/insert-table.model.mjs +8 -0
  220. package/esm2022/lib/models/generated/insert-text.model.mjs +8 -0
  221. package/esm2022/lib/models/generated/last-document-revision.model.mjs +12 -0
  222. package/esm2022/lib/models/generated/link-data.model.mjs +8 -0
  223. package/esm2022/lib/models/generated/link.model.mjs +8 -0
  224. package/esm2022/lib/models/generated/margins.model.mjs +8 -0
  225. package/esm2022/lib/models/generated/numbering-level.model.mjs +12 -0
  226. package/esm2022/lib/models/generated/numbering.model.mjs +8 -0
  227. package/esm2022/lib/models/generated/operation.model.mjs +12 -0
  228. package/esm2022/lib/models/generated/page-numbers.model.mjs +8 -0
  229. package/esm2022/lib/models/generated/paragraph-style.model.mjs +8 -0
  230. package/esm2022/lib/models/generated/paragraph.model.mjs +12 -0
  231. package/esm2022/lib/models/generated/remove-numberings.model.mjs +8 -0
  232. package/esm2022/lib/models/generated/remove-table-columns.model.mjs +8 -0
  233. package/esm2022/lib/models/generated/remove-table-rows.model.mjs +8 -0
  234. package/esm2022/lib/models/generated/replace-by-text.model.mjs +8 -0
  235. package/esm2022/lib/models/generated/replace.model.mjs +40 -0
  236. package/esm2022/lib/models/generated/resize-table-columns.model.mjs +8 -0
  237. package/esm2022/lib/models/generated/restore-numberings.model.mjs +8 -0
  238. package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +8 -0
  239. package/esm2022/lib/models/generated/restore-table.model.mjs +12 -0
  240. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +8 -0
  241. package/esm2022/lib/models/generated/restore.model.mjs +8 -0
  242. package/esm2022/lib/models/generated/revision.model.mjs +12 -0
  243. package/esm2022/lib/models/generated/row.model.mjs +8 -0
  244. package/esm2022/lib/models/generated/tab.model.mjs +8 -0
  245. package/esm2022/lib/models/generated/table-cell.model.mjs +8 -0
  246. package/esm2022/lib/models/generated/table.model.mjs +12 -0
  247. package/esm2022/lib/models/generated/target.model.mjs +16 -0
  248. package/esm2022/lib/models/generated/text-style.model.mjs +8 -0
  249. package/esm2022/public-api.mjs +43 -0
  250. package/esm2022/talrace-ngx-noder.mjs +5 -0
  251. package/fesm2022/talrace-ngx-noder.mjs +13736 -0
  252. package/fesm2022/talrace-ngx-noder.mjs.map +1 -0
  253. package/index.d.ts +5 -0
  254. package/lib/+shared/abstract/base-api.service.d.ts +23 -0
  255. package/lib/+shared/abstract/observer.component.d.ts +10 -0
  256. package/lib/+shared/confirm-dialog/confirm-dialog.component.d.ts +16 -0
  257. package/lib/+shared/constants/default-file-name.const.d.ts +1 -0
  258. package/lib/+shared/constants/paginator-sizes.const.d.ts +2 -0
  259. package/lib/+shared/editor/core/base/event-emitting.d.ts +17 -0
  260. package/lib/+shared/editor/core/components/edges/edge-type.enum.d.ts +4 -0
  261. package/lib/+shared/editor/core/components/edges/edge.component.d.ts +45 -0
  262. package/lib/+shared/editor/core/components/edges/edges.d.ts +26 -0
  263. package/lib/+shared/editor/core/constants/alignments.const.d.ts +7 -0
  264. package/lib/+shared/editor/core/constants/clipboardEventTypes.const.d.ts +5 -0
  265. package/lib/+shared/editor/core/constants/content-style-change.const.d.ts +14 -0
  266. package/lib/+shared/editor/core/constants/display-values.const.d.ts +7 -0
  267. package/lib/+shared/editor/core/constants/document-info.const.d.ts +12 -0
  268. package/lib/+shared/editor/core/constants/editor-version.const.d.ts +1 -0
  269. package/lib/+shared/editor/core/constants/editor.const.d.ts +16 -0
  270. package/lib/+shared/editor/core/constants/unicode-chars.const.d.ts +1 -0
  271. package/lib/+shared/editor/core/document.d.ts +56 -0
  272. package/lib/+shared/editor/core/edit.session.d.ts +159 -0
  273. package/lib/+shared/editor/core/editor.d.ts +206 -0
  274. package/lib/+shared/editor/core/enums/break-types.enum.d.ts +5 -0
  275. package/lib/+shared/editor/core/enums/hrule.enum.d.ts +5 -0
  276. package/lib/+shared/editor/core/enums/mouse-button.enum.d.ts +5 -0
  277. package/lib/+shared/editor/core/enums/numbering-marker-type.enum.d.ts +10 -0
  278. package/lib/+shared/editor/core/enums/page-type.enum.d.ts +5 -0
  279. package/lib/+shared/editor/core/enums/vertical-alignment.enum.d.ts +9 -0
  280. package/lib/+shared/editor/core/helpers/content-style.helper.d.ts +16 -0
  281. package/lib/+shared/editor/core/helpers/delta.helper.d.ts +6 -0
  282. package/lib/+shared/editor/core/helpers/dom.helper.d.ts +10 -0
  283. package/lib/+shared/editor/core/helpers/event.helper.d.ts +4 -0
  284. package/lib/+shared/editor/core/helpers/font-metrics.helper.d.ts +32 -0
  285. package/lib/+shared/editor/core/helpers/format-style.helper.d.ts +11 -0
  286. package/lib/+shared/editor/core/helpers/line-width.helper.d.ts +5 -0
  287. package/lib/+shared/editor/core/helpers/numbering.helper.d.ts +19 -0
  288. package/lib/+shared/editor/core/helpers/page.helper.d.ts +4 -0
  289. package/lib/+shared/editor/core/helpers/paragraph-style.helper.d.ts +6 -0
  290. package/lib/+shared/editor/core/helpers/paragraph.helper.d.ts +27 -0
  291. package/lib/+shared/editor/core/helpers/position.helper.d.ts +34 -0
  292. package/lib/+shared/editor/core/helpers/print.rendering.helper.d.ts +6 -0
  293. package/lib/+shared/editor/core/helpers/rendering.helper.d.ts +26 -0
  294. package/lib/+shared/editor/core/helpers/unicode.helper.d.ts +4 -0
  295. package/lib/+shared/editor/core/interfaces/cell.interface.d.ts +5 -0
  296. package/lib/+shared/editor/core/interfaces/cursor-position.interface.d.ts +11 -0
  297. package/lib/+shared/editor/core/interfaces/font-metric-size.interface.d.ts +11 -0
  298. package/lib/+shared/editor/core/interfaces/layer.config.d.ts +13 -0
  299. package/lib/+shared/editor/core/interfaces/paragraph-info.interface.d.ts +7 -0
  300. package/lib/+shared/editor/core/interfaces/render-changes.interface.d.ts +10 -0
  301. package/lib/+shared/editor/core/interfaces/replace.interface.d.ts +4 -0
  302. package/lib/+shared/editor/core/interfaces/search-iteration.interface.d.ts +4 -0
  303. package/lib/+shared/editor/core/interfaces/toolbar-styles.interface.d.ts +18 -0
  304. package/lib/+shared/editor/core/interfaces/visible-line-info.interface.d.ts +5 -0
  305. package/lib/+shared/editor/core/interfaces/visible-range.interface.d.ts +11 -0
  306. package/lib/+shared/editor/core/keyboard/text-input.d.ts +10 -0
  307. package/lib/+shared/editor/core/layers/cursor.layer.d.ts +24 -0
  308. package/lib/+shared/editor/core/layers/edges.layer.d.ts +24 -0
  309. package/lib/+shared/editor/core/layers/lines.d.ts +21 -0
  310. package/lib/+shared/editor/core/layers/pages.layer.d.ts +27 -0
  311. package/lib/+shared/editor/core/layers/print.edges.layer.d.ts +4 -0
  312. package/lib/+shared/editor/core/layers/print.pages.layer.d.ts +4 -0
  313. package/lib/+shared/editor/core/layers/print.text.layer.d.ts +5 -0
  314. package/lib/+shared/editor/core/layers/renderloop.d.ts +8 -0
  315. package/lib/+shared/editor/core/layers/scrollbar.d.ts +41 -0
  316. package/lib/+shared/editor/core/layers/selection.layer.d.ts +19 -0
  317. package/lib/+shared/editor/core/layers/text.layer.d.ts +22 -0
  318. package/lib/+shared/editor/core/models/display-token.model.d.ts +27 -0
  319. package/lib/+shared/editor/core/models/distance.model.d.ts +6 -0
  320. package/lib/+shared/editor/core/models/edge-element.model.d.ts +7 -0
  321. package/lib/+shared/editor/core/models/format-ext.model.d.ts +5 -0
  322. package/lib/+shared/editor/core/models/indent.model.d.ts +7 -0
  323. package/lib/+shared/editor/core/models/line-info.model.d.ts +14 -0
  324. package/lib/+shared/editor/core/models/margin.model.d.ts +9 -0
  325. package/lib/+shared/editor/core/models/numbering-data.model.d.ts +11 -0
  326. package/lib/+shared/editor/core/models/render-changes.model.d.ts +14 -0
  327. package/lib/+shared/editor/core/paging/page-vertical-data.model.d.ts +8 -0
  328. package/lib/+shared/editor/core/paging/pages.wrap.d.ts +41 -0
  329. package/lib/+shared/editor/core/paging/paragraph.d.ts +44 -0
  330. package/lib/+shared/editor/core/paging/text-line-info.d.ts +17 -0
  331. package/lib/+shared/editor/core/point.d.ts +7 -0
  332. package/lib/+shared/editor/core/print.renderer.d.ts +25 -0
  333. package/lib/+shared/editor/core/range.d.ts +32 -0
  334. package/lib/+shared/editor/core/renderer.d.ts +60 -0
  335. package/lib/+shared/editor/core/search.d.ts +32 -0
  336. package/lib/+shared/editor/core/virtual.renderer.d.ts +93 -0
  337. package/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.d.ts +14 -0
  338. package/lib/+shared/editor/custom-components/external-element/external-element.service.d.ts +7 -0
  339. package/lib/+shared/editor/custom-components/external-element/external-elements.const.d.ts +5 -0
  340. package/lib/+shared/editor/custom-components/external-element/external-sidenav.interface.d.ts +5 -0
  341. package/lib/+shared/editor/custom-components/external-element/external.component.d.ts +17 -0
  342. package/lib/+shared/editor/custom-components/external-element/models/element-data.model.d.ts +7 -0
  343. package/lib/+shared/editor/custom-components/external-element/models/external-element.model.d.ts +20 -0
  344. package/lib/+shared/editor/custom-components/external-element/models/external-sidenav.model.d.ts +7 -0
  345. package/lib/+shared/editor/custom-components/image/components/image.component.d.ts +31 -0
  346. package/lib/+shared/editor/custom-components/image/input-handler/image-input.handler.d.ts +13 -0
  347. package/lib/+shared/editor/custom-components/image/interfaces/size.d.ts +4 -0
  348. package/lib/+shared/editor/custom-components/image/resizer/coordinate.d.ts +4 -0
  349. package/lib/+shared/editor/custom-components/image/resizer/direction-wrapper.d.ts +9 -0
  350. package/lib/+shared/editor/custom-components/image/resizer/direction.enum.d.ts +10 -0
  351. package/lib/+shared/editor/custom-components/image/resizer/resizer.component.d.ts +26 -0
  352. package/lib/+shared/editor/custom-components/image/resizer/size-delta.d.ts +4 -0
  353. package/lib/+shared/editor/custom-components/image/resizer/size-wrapper.d.ts +19 -0
  354. package/lib/+shared/editor/custom-components/image/services/image-api.service.d.ts +8 -0
  355. package/lib/+shared/editor/custom-components/shared/abstract/base.component.d.ts +24 -0
  356. package/lib/+shared/editor/custom-components/shared/constants/custom-content-markers.const.d.ts +2 -0
  357. package/lib/+shared/editor/custom-components/shared/helpers/custom-component.hepler.d.ts +8 -0
  358. package/lib/+shared/editor/custom-components/shared/interfaces/custom-components.interface.d.ts +13 -0
  359. package/lib/+shared/editor/custom-components/shared/services/component/component.service.d.ts +21 -0
  360. package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +30 -0
  361. package/lib/+shared/editor/custom-components/shared/services/overlay/overlay.service.d.ts +18 -0
  362. package/lib/+shared/editor/custom-components/shared/types/custom-content.d.ts +5 -0
  363. package/lib/+shared/editor/custom-components/tab/tab.component.d.ts +15 -0
  364. package/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.d.ts +31 -0
  365. package/lib/+shared/editor/custom-components/table/components/table-cell.component.d.ts +45 -0
  366. package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +55 -0
  367. package/lib/+shared/editor/custom-components/table/enums/reisizer-side.enum.d.ts +6 -0
  368. package/lib/+shared/editor/custom-components/table/enums/vertical-merge.enum.d.ts +4 -0
  369. package/lib/+shared/editor/custom-components/table/models/cell-data.model.d.ts +11 -0
  370. package/lib/+shared/editor/custom-components/table/models/cell-resizer-parameters.model.d.ts +9 -0
  371. package/lib/+shared/editor/custom-components/table/models/row-data.model.d.ts +7 -0
  372. package/lib/+shared/editor/custom-components/table/models/selection-range.model.d.ts +17 -0
  373. package/lib/+shared/editor/custom-components/table/overlay-menu/overlay-menu.component.d.ts +37 -0
  374. package/lib/+shared/editor/custom-components/table/selection/table-selection.d.ts +74 -0
  375. package/lib/+shared/editor/editor.component.d.ts +43 -0
  376. package/lib/+shared/editor/editor.module.d.ts +30 -0
  377. package/lib/+shared/editor/execution/models/cell-session-source.model.d.ts +11 -0
  378. package/lib/+shared/editor/execution/models/edge-session-source.model.d.ts +11 -0
  379. package/lib/+shared/editor/execution/models/general-properties.model.d.ts +7 -0
  380. package/lib/+shared/editor/execution/models/main-session-source.model.d.ts +5 -0
  381. package/lib/+shared/editor/execution/models/session-source.model.d.ts +5 -0
  382. package/lib/+shared/editor/execution/models/session.model.d.ts +12 -0
  383. package/lib/+shared/editor/execution/regulator.service.d.ts +45 -0
  384. package/lib/+shared/editor/helpers/break.helper.d.ts +7 -0
  385. package/lib/+shared/editor/helpers/content.helper.d.ts +9 -0
  386. package/lib/+shared/editor/helpers/format.helper.d.ts +4 -0
  387. package/lib/+shared/editor/helpers/indexed-element.helper.d.ts +4 -0
  388. package/lib/+shared/editor/helpers/tab.helper.d.ts +3 -0
  389. package/lib/+shared/editor/interaction/editor.service.d.ts +194 -0
  390. package/lib/+shared/editor/interaction/input.handler.d.ts +25 -0
  391. package/lib/+shared/editor/interaction/mouse.handler.d.ts +14 -0
  392. package/lib/+shared/editor/interfaces/contents.interface.d.ts +22 -0
  393. package/lib/+shared/editor/interfaces/insert-index.interface.d.ts +3 -0
  394. package/lib/+shared/editor/operation-history/operation-history.d.ts +65 -0
  395. package/lib/+shared/editor/operation-history/operation.type.d.ts +24 -0
  396. package/lib/+shared/editor/operation-history/operations-history-info.model.d.ts +5 -0
  397. package/lib/+shared/editor/operations/enums/command-type.enum.d.ts +29 -0
  398. package/lib/+shared/editor/operations/enums/target-type.enum.d.ts +5 -0
  399. package/lib/+shared/editor/operations/helpers/break-operations.helper.d.ts +5 -0
  400. package/lib/+shared/editor/operations/helpers/content-operations.helper.d.ts +5 -0
  401. package/lib/+shared/editor/operations/helpers/format-operations.helper.d.ts +11 -0
  402. package/lib/+shared/editor/operations/helpers/image-operations.helper.d.ts +7 -0
  403. package/lib/+shared/editor/operations/helpers/indexed-element-operations.helper.d.ts +8 -0
  404. package/lib/+shared/editor/operations/helpers/link-operations.helper.d.ts +6 -0
  405. package/lib/+shared/editor/operations/helpers/numbering-operations.helper.d.ts +11 -0
  406. package/lib/+shared/editor/operations/helpers/operations-helper.helper.d.ts +52 -0
  407. package/lib/+shared/editor/operations/helpers/paragraph-operations.helper.d.ts +13 -0
  408. package/lib/+shared/editor/operations/helpers/save-commands.helper.d.ts +43 -0
  409. package/lib/+shared/editor/operations/helpers/tab-operations.helper.d.ts +4 -0
  410. package/lib/+shared/editor/operations/helpers/table-operations.helper.d.ts +30 -0
  411. package/lib/+shared/editor/operations/helpers/target-operations.helper.d.ts +6 -0
  412. package/lib/+shared/editor/positioning/selection.d.ts +50 -0
  413. package/lib/+shared/editor/store/editor.actions.d.ts +11 -0
  414. package/lib/+shared/editor-header/editor-header.component.d.ts +101 -0
  415. package/lib/+shared/editor-search/editor-search-dialog.component.d.ts +24 -0
  416. package/lib/+shared/editor-toolbar/color-picker/color-picker.component.d.ts +12 -0
  417. package/lib/+shared/editor-toolbar/constants/numbering-templates.const.d.ts +6 -0
  418. package/lib/+shared/editor-toolbar/constants/svg-icons.const.d.ts +12 -0
  419. package/lib/+shared/editor-toolbar/editor-toolbar.component.d.ts +44 -0
  420. package/lib/+shared/editor-toolbar/editor-toolbar.module.d.ts +28 -0
  421. package/lib/+shared/editor-toolbar/enums/alignment.enum.d.ts +6 -0
  422. package/lib/+shared/editor-toolbar/enums/numbering-template-type.enum.d.ts +14 -0
  423. package/lib/+shared/editor-toolbar/enums/numbering-type.enum.d.ts +4 -0
  424. package/lib/+shared/editor-toolbar/font/font.component.d.ts +13 -0
  425. package/lib/+shared/editor-toolbar/font-size/font-size.component.d.ts +24 -0
  426. package/lib/+shared/editor-toolbar/font-style/font-style.component.d.ts +24 -0
  427. package/lib/+shared/editor-toolbar/format/format.component.d.ts +12 -0
  428. package/lib/+shared/editor-toolbar/heading/heading.component.d.ts +8 -0
  429. package/lib/+shared/editor-toolbar/helpers/toolbar-styles.helper.d.ts +6 -0
  430. package/lib/+shared/editor-toolbar/numbering/numbering.component.d.ts +18 -0
  431. package/lib/+shared/editor-toolbar/print/print.component.d.ts +7 -0
  432. package/lib/+shared/editor-toolbar/undo-redo/undo-redo.component.d.ts +10 -0
  433. package/lib/+shared/editor-toolbar/zoom/zoom.component.d.ts +22 -0
  434. package/lib/+shared/enums/mode.enum.d.ts +5 -0
  435. package/lib/+shared/helpers/print.helper.d.ts +9 -0
  436. package/lib/+shared/insert-table/insert-table.component.d.ts +21 -0
  437. package/lib/+shared/services/commands.service.d.ts +10 -0
  438. package/lib/+shared/services/custom-icon.service.d.ts +11 -0
  439. package/lib/models/generated/add-numbering.model.d.ts +7 -0
  440. package/lib/models/generated/apply-element-style.model.d.ts +6 -0
  441. package/lib/models/generated/apply-image-style.model.d.ts +6 -0
  442. package/lib/models/generated/apply-paragraph-style.model.d.ts +7 -0
  443. package/lib/models/generated/apply-text-style.model.d.ts +7 -0
  444. package/lib/models/generated/borders-style.model.d.ts +8 -0
  445. package/lib/models/generated/break.model.d.ts +5 -0
  446. package/lib/models/generated/cell.model.d.ts +32 -0
  447. package/lib/models/generated/column-section.model.d.ts +7 -0
  448. package/lib/models/generated/column.model.d.ts +5 -0
  449. package/lib/models/generated/command.model.d.ts +60 -0
  450. package/lib/models/generated/delete.model.d.ts +5 -0
  451. package/lib/models/generated/document-name.model.d.ts +5 -0
  452. package/lib/models/generated/document.model.d.ts +7 -0
  453. package/lib/models/generated/docx.model.d.ts +43 -0
  454. package/lib/models/generated/edge-target.model.d.ts +5 -0
  455. package/lib/models/generated/edge.model.d.ts +24 -0
  456. package/lib/models/generated/element.model.d.ts +9 -0
  457. package/lib/models/generated/file-source.model.d.ts +4 -0
  458. package/lib/models/generated/format.model.d.ts +7 -0
  459. package/lib/models/generated/heading.model.d.ts +12 -0
  460. package/lib/models/generated/image-data.model.d.ts +6 -0
  461. package/lib/models/generated/image.model.d.ts +31 -0
  462. package/lib/models/generated/insert-break.model.d.ts +6 -0
  463. package/lib/models/generated/insert-element.model.d.ts +5 -0
  464. package/lib/models/generated/insert-image.model.d.ts +6 -0
  465. package/lib/models/generated/insert-link.model.d.ts +7 -0
  466. package/lib/models/generated/insert-styled-text.model.d.ts +7 -0
  467. package/lib/models/generated/insert-tab.model.d.ts +4 -0
  468. package/lib/models/generated/insert-table-columns.model.d.ts +7 -0
  469. package/lib/models/generated/insert-table-rows.model.d.ts +7 -0
  470. package/lib/models/generated/insert-table.model.d.ts +8 -0
  471. package/lib/models/generated/insert-text.model.d.ts +5 -0
  472. package/lib/models/generated/last-document-revision.model.d.ts +9 -0
  473. package/lib/models/generated/link-data.model.d.ts +5 -0
  474. package/lib/models/generated/link.model.d.ts +7 -0
  475. package/lib/models/generated/margins.model.d.ts +7 -0
  476. package/lib/models/generated/numbering-level.model.d.ts +14 -0
  477. package/lib/models/generated/numbering.model.d.ts +7 -0
  478. package/lib/models/generated/operation.model.d.ts +8 -0
  479. package/lib/models/generated/page-numbers.model.d.ts +8 -0
  480. package/lib/models/generated/paragraph-style.model.d.ts +18 -0
  481. package/lib/models/generated/paragraph.model.d.ts +6 -0
  482. package/lib/models/generated/remove-numberings.model.d.ts +5 -0
  483. package/lib/models/generated/remove-table-columns.model.d.ts +6 -0
  484. package/lib/models/generated/remove-table-rows.model.d.ts +6 -0
  485. package/lib/models/generated/replace-by-text.model.d.ts +6 -0
  486. package/lib/models/generated/replace.model.d.ts +19 -0
  487. package/lib/models/generated/resize-table-columns.model.d.ts +9 -0
  488. package/lib/models/generated/restore-numberings.model.d.ts +7 -0
  489. package/lib/models/generated/restore-paragraph-styles.model.d.ts +5 -0
  490. package/lib/models/generated/restore-table.model.d.ts +6 -0
  491. package/lib/models/generated/restore-text-styles.model.d.ts +5 -0
  492. package/lib/models/generated/restore.model.d.ts +22 -0
  493. package/lib/models/generated/revision.model.d.ts +9 -0
  494. package/lib/models/generated/row.model.d.ts +9 -0
  495. package/lib/models/generated/tab.model.d.ts +6 -0
  496. package/lib/models/generated/table-cell.model.d.ts +6 -0
  497. package/lib/models/generated/table.model.d.ts +18 -0
  498. package/lib/models/generated/target.model.d.ts +9 -0
  499. package/lib/models/generated/text-style.model.d.ts +14 -0
  500. package/package.json +35 -0
  501. package/public-api.d.ts +42 -0
  502. package/src/_ngx-noder.theme.scss +22 -0
  503. package/src/assets/fonts/nc-iconfont.css +333 -0
  504. package/src/assets/fonts/nc-iconfont.eot +0 -0
  505. package/src/assets/fonts/nc-iconfont.svg +110 -0
  506. package/src/assets/fonts/nc-iconfont.ttf +0 -0
  507. package/src/assets/fonts/nc-iconfont.woff +0 -0
  508. package/src/lib/+shared/add-link-dialog/_add-link-dialog.theme.scss +21 -0
  509. package/src/lib/+shared/editor/_editor.theme.scss +35 -0
  510. package/src/lib/+shared/editor/custom-components/external-element/element-toolbar/_element-toolbar.theme.scss +10 -0
  511. package/src/lib/+shared/editor-header/_editor-header.theme.scss +106 -0
  512. package/src/lib/+shared/editor-toolbar/_editor-toolbar.theme.scss +33 -0
  513. package/src/lib/+shared/editor-toolbar/numbering/_numbering.theme.scss +29 -0
  514. package/src/lib/+shared/insert-table/_insert-table.theme.scss +22 -0
  515. package/src/styles.scss +58 -0
@@ -0,0 +1,219 @@
1
+ import { EdgeType } from '../components/edges/edge-type.enum';
2
+ import { EventEmitting } from '../base/event-emitting';
3
+ import { NumberingHelper } from '../helpers/numbering.helper';
4
+ import { PageHelper } from '../helpers/page.helper';
5
+ import { PageType } from '../enums/page-type.enum';
6
+ import { PageVerticalDataModel } from './page-vertical-data.model';
7
+ import { Paragraph } from './paragraph';
8
+ import { ParagraphHelper } from '../helpers/paragraph.helper';
9
+ export class PagesWrap extends EventEmitting {
10
+ get defaultVerticalData() {
11
+ return this.pagesVerticalData.find(x => x.pageType === PageType.Default);
12
+ }
13
+ constructor(pagesSpace, documentMargin, pageWidth, pageHeight = 0, edges = null) {
14
+ super();
15
+ this.pagesSpace = pagesSpace;
16
+ this.documentMargin = documentMargin;
17
+ this.pageWidth = pageWidth;
18
+ this.pageHeight = pageHeight;
19
+ this.edges = edges;
20
+ this.allPagesHeight = 0;
21
+ this.minHeight = 0;
22
+ this.paragraphs = [];
23
+ this.tabTokens = [];
24
+ this.minHeight = this.pageHeight + 2 * this.pagesSpace;
25
+ this.contentWidth = this.pageWidth - this.documentMargin.left - this.documentMargin.right;
26
+ this.initPagesVerticalData();
27
+ this.processTextLinesProperties = !this.pageHeight
28
+ ? ParagraphHelper.processTextLinesPropertiesForSinglePage
29
+ : ParagraphHelper.processTextLinesProperties;
30
+ }
31
+ getParagraphTop(paragraphs, index) {
32
+ return paragraphs[index] ? paragraphs[index].distanceFromTop : 0;
33
+ }
34
+ getParagraphTopForPrint(paragraphs, index, pagesSpace) {
35
+ if (!paragraphs[index]) {
36
+ return 0;
37
+ }
38
+ const paragraph = paragraphs[index];
39
+ const pageNumber = paragraph.pageNumbers[0];
40
+ let pageBreakHeight = 0;
41
+ paragraph.textLinesInfo.forEach(linesInfo => {
42
+ if (linesInfo.isAfterPageBreak) {
43
+ pageBreakHeight = linesInfo.height;
44
+ }
45
+ });
46
+ return paragraph.distanceFromTop - pageNumber * pagesSpace - pageBreakHeight;
47
+ }
48
+ getParagraphHeight(paragraphs, index) {
49
+ return paragraphs[index] ? paragraphs[index].height : 0;
50
+ }
51
+ remove(index, length) {
52
+ this.paragraphs.splice(index, length);
53
+ }
54
+ reset(paragraphsLength) {
55
+ this.paragraphs.length = paragraphsLength;
56
+ }
57
+ set(row, lineInfos, numberings, docParagraphs) {
58
+ if (!this.paragraphs[row]) {
59
+ const numberingData = NumberingHelper.createDataModel(numberings, docParagraphs, row);
60
+ this.paragraphs[row] = new Paragraph(numberingData, lineInfos[0].offsetBefore, this.processTextLinesProperties);
61
+ }
62
+ this.paragraphs[row].width = this.contentWidth;
63
+ this.paragraphs[row].setTextLinesInfo(lineInfos);
64
+ }
65
+ getVisibleRange(offsetTop, scrollerHeight) {
66
+ let start = this.paragraphs.findIndex(x => offsetTop <= x.distanceFromTop + x.height);
67
+ if (start < 0) {
68
+ start = 0;
69
+ }
70
+ let startLineInfo = null;
71
+ const startParagraph = this.paragraphs[start];
72
+ if (startParagraph) {
73
+ const startParagraphOffsetTop = offsetTop - startParagraph.distanceFromTop;
74
+ startLineInfo = ParagraphHelper.getVisibleLineInfo(startParagraph?.textLinesInfo, startParagraphOffsetTop, 1);
75
+ }
76
+ if (!startLineInfo) {
77
+ return {
78
+ startParagraph: 0,
79
+ startLine: 0,
80
+ startScreenLine: 0,
81
+ startScreenFullLine: 0,
82
+ endParagraph: 0,
83
+ endLine: 0,
84
+ endScreenLine: 0,
85
+ endScreenFullLine: 0,
86
+ pages: [1]
87
+ };
88
+ }
89
+ let end = this.paragraphs.findIndex(x => offsetTop + scrollerHeight <= x.distanceFromTop + x.height);
90
+ if (end < 0) {
91
+ end = this.paragraphs.length - 1;
92
+ }
93
+ let endLineInfo = null;
94
+ const endParagraph = this.paragraphs[end];
95
+ if (endParagraph) {
96
+ const endParagraphOffsetTop = offsetTop + scrollerHeight - endParagraph.distanceFromTop;
97
+ endLineInfo = ParagraphHelper.getVisibleLineInfo(endParagraph?.textLinesInfo, endParagraphOffsetTop, -1);
98
+ }
99
+ const visiblePages = this.getVisiblePages(offsetTop, scrollerHeight);
100
+ return {
101
+ startParagraph: start,
102
+ startLine: startLineInfo.index,
103
+ startScreenLine: startLineInfo.screenIndex,
104
+ startScreenFullLine: startLineInfo.visibleScreenIndex,
105
+ endParagraph: end,
106
+ endLine: endLineInfo.index,
107
+ endScreenLine: endLineInfo.screenIndex,
108
+ endScreenFullLine: endLineInfo.visibleScreenIndex,
109
+ pages: visiblePages
110
+ };
111
+ }
112
+ processParagraphsProperties(startParagraphIndex) {
113
+ const pagesInfo = { pagesVerticalData: this.pagesVerticalData, pagesSpace: this.pagesSpace };
114
+ let currentPage = startParagraphIndex === 0 ? 1 : this.paragraphs[startParagraphIndex - 1].lastPageNumber;
115
+ let pageVerticalData = PageHelper.getVerticalData(currentPage, this.pagesVerticalData);
116
+ for (let i = startParagraphIndex; i < this.paragraphs.length; i++) {
117
+ const prevParagraphInfo = this.getPreviousParagraphInfo(i);
118
+ const paragraph = this.paragraphs[i];
119
+ paragraph.processParagraphProperties(prevParagraphInfo, pagesInfo);
120
+ if (paragraph.firstPageNumber !== currentPage) {
121
+ currentPage = paragraph.firstPageNumber;
122
+ pageVerticalData = PageHelper.getVerticalData(paragraph.firstPageNumber, this.pagesVerticalData);
123
+ }
124
+ paragraph.distanceFromTop =
125
+ (paragraph.firstPageNumber - 1) * this.pageHeight +
126
+ this.pagesSpace * paragraph.firstPageNumber +
127
+ pageVerticalData.marginTop +
128
+ paragraph.pagePreviousContentHeight;
129
+ }
130
+ let pageHeight = this.pageHeight;
131
+ if (!pageHeight) {
132
+ pageHeight = this.getAllParagraphsHeight() + this.documentMargin.top + this.documentMargin.bottom;
133
+ this.minHeight = pageHeight + 2 * this.pagesSpace;
134
+ this.defaultVerticalData.contentHeight = pageHeight;
135
+ }
136
+ const lastPageNumber = this.paragraphs[this.paragraphs.length - 1].lastPageNumber;
137
+ this.allPagesHeight = lastPageNumber * (pageHeight + this.pagesSpace) + this.pagesSpace;
138
+ this.emit('pagesCountChanged', { pagesCount: lastPageNumber, pageHeight: pageHeight + 2 * this.pagesSpace });
139
+ }
140
+ getAllParagraphsHeight() {
141
+ return this.paragraphs.reduce((sum, x) => sum + x.height, 0);
142
+ }
143
+ destroy() {
144
+ this.removeAllListeners('pagesCountChanged');
145
+ }
146
+ updatePageVerticalData(edgeType, page) {
147
+ const pageVerticalData = PageHelper.getVerticalData(page, this.pagesVerticalData);
148
+ const componentHeight = this.edges.getComponentHeight(page, edgeType);
149
+ if (edgeType === EdgeType.Header) {
150
+ pageVerticalData.marginTop = componentHeight > this.documentMargin.top ? componentHeight : this.documentMargin.top;
151
+ }
152
+ else {
153
+ pageVerticalData.marginBottom = componentHeight > this.documentMargin.bottom ? componentHeight : this.documentMargin.bottom;
154
+ }
155
+ const newContentHeight = this.pageHeight - pageVerticalData.marginTop - pageVerticalData.marginBottom;
156
+ if (newContentHeight === pageVerticalData.contentHeight) {
157
+ return;
158
+ }
159
+ pageVerticalData.contentHeight = newContentHeight;
160
+ this.processParagraphsProperties(0);
161
+ }
162
+ getPreviousParagraphInfo(row) {
163
+ if (!row || !this.paragraphs.length) {
164
+ return { lastPage: 1, paragraphHeight: 0, paragraphLastLine: -1 };
165
+ }
166
+ const prevParagraph = this.paragraphs[row - 1];
167
+ return prevParagraph.getParagraphData();
168
+ }
169
+ getVisiblePages(offsetTop, containerHeight) {
170
+ const visiblePages = [];
171
+ let firstVisiblePage = offsetTop / (this.pageHeight + this.pagesSpace);
172
+ if (firstVisiblePage % 1 === 0) {
173
+ firstVisiblePage++;
174
+ }
175
+ let visiblePagesCount = containerHeight / (this.pageHeight + this.pagesSpace);
176
+ const partialPageOnScreenPercent = Math.trunc(((visiblePagesCount % 1) + (firstVisiblePage % 1)) * 100);
177
+ const pageSpaceHeightPercent = Math.trunc((this.pagesSpace / containerHeight) * 100);
178
+ if (partialPageOnScreenPercent - pageSpaceHeightPercent > 100) {
179
+ visiblePagesCount++;
180
+ }
181
+ visiblePagesCount = Math.ceil(visiblePagesCount);
182
+ firstVisiblePage = Math.ceil(firstVisiblePage);
183
+ const documentPagesCount = this.paragraphs[this.paragraphs.length - 1].lastPageNumber;
184
+ if (firstVisiblePage + visiblePagesCount - 1 > documentPagesCount) {
185
+ visiblePagesCount = documentPagesCount - firstVisiblePage + 1;
186
+ }
187
+ for (let i = 0; i < visiblePagesCount; i++) {
188
+ visiblePages.push(firstVisiblePage + i);
189
+ }
190
+ return visiblePages;
191
+ }
192
+ initPagesVerticalData() {
193
+ if (!this.edges || (!this.edges.headersComponents.length && !this.edges.footersComponents.length)) {
194
+ this.pagesVerticalData = [
195
+ new PageVerticalDataModel({
196
+ marginTop: this.documentMargin.top,
197
+ marginBottom: this.documentMargin.bottom,
198
+ contentHeight: this.pageHeight - this.documentMargin.top - this.documentMargin.bottom,
199
+ pageType: PageType.Default
200
+ })
201
+ ];
202
+ return;
203
+ }
204
+ const pageTypes = this.edges.getUniquePageTypes();
205
+ this.pagesVerticalData = pageTypes.map(pageType => {
206
+ const headerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Header);
207
+ const footerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Footer);
208
+ const marginTop = Math.max(headerHeight, this.documentMargin.top);
209
+ const marginBottom = Math.max(footerHeight, this.documentMargin.bottom);
210
+ return new PageVerticalDataModel({
211
+ marginTop,
212
+ marginBottom,
213
+ contentHeight: this.pageHeight - marginTop - marginBottom,
214
+ pageType
215
+ });
216
+ });
217
+ }
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXMud3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvZWRpdG9yL2NvcmUvcGFnaW5nL3BhZ2VzLndyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk5RCxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFheEMsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQVFELFlBQ1csVUFBa0IsRUFDbEIsY0FBMkIsRUFDM0IsU0FBaUIsRUFDakIsYUFBYSxDQUFDLEVBQ2QsUUFBc0IsSUFBSTtRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQU5ELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWE7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFJO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBcUI7UUF6QnJDLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFFZCxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUU3QixjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQXNCM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUMxRixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUM5QyxDQUFDLENBQUMsZUFBZSxDQUFDLHVDQUF1QztZQUN6RCxDQUFDLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDO0lBQ3JELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBdUIsRUFBRSxLQUFhO1FBQ2xELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQXVCLEVBQUUsS0FBYSxFQUFFLFVBQWtCO1FBQzlFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN4QixTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDNUIsZUFBZSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLGVBQWUsQ0FBQztJQUNqRixDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBdUIsRUFBRSxLQUFhO1FBQ3JELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBd0I7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7SUFDOUMsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXLEVBQUUsU0FBMEIsRUFBRSxVQUE0QixFQUFFLGFBQStCO1FBQ3RHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ25IO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxlQUFlLENBQUMsU0FBaUIsRUFBRSxjQUFzQjtRQUNyRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDWCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFFRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLGNBQWMsRUFBRTtZQUNoQixNQUFNLHVCQUF1QixHQUFHLFNBQVMsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQzNFLGFBQWEsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqSDtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsT0FBTztnQkFDSCxjQUFjLEVBQUUsQ0FBQztnQkFDakIsU0FBUyxFQUFFLENBQUM7Z0JBQ1osZUFBZSxFQUFFLENBQUM7Z0JBQ2xCLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLFlBQVksRUFBRSxDQUFDO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixpQkFBaUIsRUFBRSxDQUFDO2dCQUNwQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDYixDQUFDO1NBQ0w7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyxjQUFjLElBQUksQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksWUFBWSxFQUFFO1lBQ2QsTUFBTSxxQkFBcUIsR0FBRyxTQUFTLEdBQUcsY0FBYyxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7WUFDeEYsV0FBVyxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUc7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVyRSxPQUFPO1lBQ0gsY0FBYyxFQUFFLEtBQUs7WUFDckIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLO1lBQzlCLGVBQWUsRUFBRSxhQUFhLENBQUMsV0FBVztZQUMxQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsa0JBQWtCO1lBQ3JELFlBQVksRUFBRSxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSztZQUMxQixhQUFhLEVBQUUsV0FBVyxDQUFDLFdBQVc7WUFDdEMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGtCQUFrQjtZQUNqRCxLQUFLLEVBQUUsWUFBWTtTQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVELDJCQUEyQixDQUFDLG1CQUEyQjtRQUNuRCxNQUFNLFNBQVMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdGLElBQUksV0FBVyxHQUFHLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUMxRyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZGLEtBQUssSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9ELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ25FLElBQUksU0FBUyxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7Z0JBQzNDLFdBQVcsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO2dCQUN4QyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDcEc7WUFFRCxTQUFTLENBQUMsZUFBZTtnQkFDckIsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVO29CQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxlQUFlO29CQUMzQyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUMxQixTQUFTLENBQUMseUJBQXlCLENBQUM7U0FDM0M7UUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDbEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUM7U0FDdkQ7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUNsRixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4RixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFrQixFQUFFLElBQVk7UUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RSxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQzlCLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7U0FDdEg7YUFBTTtZQUNILGdCQUFnQixDQUFDLFlBQVksR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7U0FDL0g7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQztRQUN0RyxJQUFJLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLGFBQWEsRUFBRTtZQUNyRCxPQUFPO1NBQ1Y7UUFFRCxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7UUFDbEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxHQUFXO1FBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDckU7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxPQUFPLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTyxlQUFlLENBQUMsU0FBaUIsRUFBRSxlQUF1QjtRQUM5RCxNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFFbEMsSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RSxJQUFJLGdCQUFnQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsZ0JBQWdCLEVBQUUsQ0FBQztTQUN0QjtRQUVELElBQUksaUJBQWlCLEdBQUcsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUUsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDeEcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNyRixJQUFJLDBCQUEwQixHQUFHLHNCQUFzQixHQUFHLEdBQUcsRUFBRTtZQUMzRCxpQkFBaUIsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3RGLElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixFQUFFO1lBQy9ELGlCQUFpQixHQUFHLGtCQUFrQixHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQztTQUNqRTtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9GLElBQUksQ0FBQyxpQkFBaUIsR0FBRztnQkFDckIsSUFBSSxxQkFBcUIsQ0FBQztvQkFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRztvQkFDbEMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtvQkFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO29CQUNyRixRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU87aUJBQzdCLENBQUM7YUFDTCxDQUFDO1lBQ0YsT0FBTztTQUNWO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXhFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQztnQkFDN0IsU0FBUztnQkFDVCxZQUFZO2dCQUNaLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxZQUFZO2dCQUN6RCxRQUFRO2FBQ1gsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5VG9rZW4gfSBmcm9tICcuLi9tb2RlbHMvZGlzcGxheS10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZXMnO1xuaW1wb3J0IHsgRWRnZVR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEV2ZW50RW1pdHRpbmcgfSBmcm9tICcuLi9iYXNlL2V2ZW50LWVtaXR0aW5nJztcbmltcG9ydCB7IExpbmVJbmZvTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbGluZS1pbmZvLm1vZGVsJztcbmltcG9ydCB7IE1hcmdpbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL21hcmdpbi5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL251bWJlcmluZy5oZWxwZXInO1xuaW1wb3J0IHsgTnVtYmVyaW5nTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9wYWdlLmhlbHBlcic7XG5pbXBvcnQgeyBQYWdlVHlwZSB9IGZyb20gJy4uL2VudW1zL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCB9IGZyb20gJy4vcGFnZS12ZXJ0aWNhbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJy4vcGFyYWdyYXBoJztcbmltcG9ydCB7IFBhcmFncmFwaEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvcGFyYWdyYXBoLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFZpc2libGVSYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlzaWJsZS1yYW5nZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgUGFnZXNXcmFwIGV4dGVuZHMgRXZlbnRFbWl0dGluZyB7XG4gICAgY29udGVudFdpZHRoOiBudW1iZXI7XG5cbiAgICBhbGxQYWdlc0hlaWdodCA9IDA7XG5cbiAgICBtaW5IZWlnaHQgPSAwO1xuXG4gICAgcGFyYWdyYXBoczogUGFyYWdyYXBoW10gPSBbXTtcblxuICAgIHRhYlRva2VuczogRGlzcGxheVRva2VuW10gPSBbXTtcblxuICAgIHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTtcblxuICAgIGdldCBkZWZhdWx0VmVydGljYWxEYXRhKCk6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzVmVydGljYWxEYXRhLmZpbmQoeCA9PiB4LnBhZ2VUeXBlID09PSBQYWdlVHlwZS5EZWZhdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzOiAoXG4gICAgICAgIGN1cnJlbnRQYXJhZ3JhcGg6IFBhcmFncmFwaCxcbiAgICAgICAgcHJldlBhcmFncmFwaEluZm86IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSxcbiAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICApID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhZ2VzU3BhY2U6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRvY3VtZW50TWFyZ2luOiBNYXJnaW5Nb2RlbCxcbiAgICAgICAgcHVibGljIHBhZ2VXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcGFnZUhlaWdodCA9IDAsXG4gICAgICAgIHB1YmxpYyBlZGdlczogRWRnZXMgfCBudWxsID0gbnVsbFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMucGFnZUhlaWdodCArIDIgKiB0aGlzLnBhZ2VzU3BhY2U7XG4gICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gdGhpcy5wYWdlV2lkdGggLSB0aGlzLmRvY3VtZW50TWFyZ2luLmxlZnQgLSB0aGlzLmRvY3VtZW50TWFyZ2luLnJpZ2h0O1xuICAgICAgICB0aGlzLmluaXRQYWdlc1ZlcnRpY2FsRGF0YSgpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXMgPSAhdGhpcy5wYWdlSGVpZ2h0XG4gICAgICAgICAgICA/IFBhcmFncmFwaEhlbHBlci5wcm9jZXNzVGV4dExpbmVzUHJvcGVydGllc0ZvclNpbmdsZVBhZ2VcbiAgICAgICAgICAgIDogUGFyYWdyYXBoSGVscGVyLnByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGdldFBhcmFncmFwaFRvcChwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhzW2luZGV4XSA/IHBhcmFncmFwaHNbaW5kZXhdLmRpc3RhbmNlRnJvbVRvcCA6IDA7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoVG9wRm9yUHJpbnQocGFyYWdyYXBoczogUGFyYWdyYXBoW10sIGluZGV4OiBudW1iZXIsIHBhZ2VzU3BhY2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICghcGFyYWdyYXBoc1tpbmRleF0pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHBhcmFncmFwaHNbaW5kZXhdO1xuICAgICAgICBjb25zdCBwYWdlTnVtYmVyID0gcGFyYWdyYXBoLnBhZ2VOdW1iZXJzWzBdO1xuICAgICAgICBsZXQgcGFnZUJyZWFrSGVpZ2h0ID0gMDtcbiAgICAgICAgcGFyYWdyYXBoLnRleHRMaW5lc0luZm8uZm9yRWFjaChsaW5lc0luZm8gPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmVzSW5mby5pc0FmdGVyUGFnZUJyZWFrKSB7XG4gICAgICAgICAgICAgICAgcGFnZUJyZWFrSGVpZ2h0ID0gbGluZXNJbmZvLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wIC0gcGFnZU51bWJlciAqIHBhZ2VzU3BhY2UgLSBwYWdlQnJlYWtIZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaHM6IFBhcmFncmFwaFtdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaHNbaW5kZXhdID8gcGFyYWdyYXBoc1tpbmRleF0uaGVpZ2h0IDogMDtcbiAgICB9XG5cbiAgICByZW1vdmUoaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzLnNwbGljZShpbmRleCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXNldChwYXJhZ3JhcGhzTGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCA9IHBhcmFncmFwaHNMZW5ndGg7XG4gICAgfVxuXG4gICAgc2V0KHJvdzogbnVtYmVyLCBsaW5lSW5mb3M6IExpbmVJbmZvTW9kZWxbXSwgbnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSwgZG9jUGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGFyYWdyYXBoc1tyb3ddKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdEYXRhID0gTnVtYmVyaW5nSGVscGVyLmNyZWF0ZURhdGFNb2RlbChudW1iZXJpbmdzLCBkb2NQYXJhZ3JhcGhzLCByb3cpO1xuICAgICAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10gPSBuZXcgUGFyYWdyYXBoKG51bWJlcmluZ0RhdGEsIGxpbmVJbmZvc1swXS5vZmZzZXRCZWZvcmUsIHRoaXMucHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10ud2lkdGggPSB0aGlzLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10uc2V0VGV4dExpbmVzSW5mbyhsaW5lSW5mb3MpO1xuICAgIH1cblxuICAgIGdldFZpc2libGVSYW5nZShvZmZzZXRUb3A6IG51bWJlciwgc2Nyb2xsZXJIZWlnaHQ6IG51bWJlcik6IFZpc2libGVSYW5nZSB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMucGFyYWdyYXBocy5maW5kSW5kZXgoeCA9PiBvZmZzZXRUb3AgPD0geC5kaXN0YW5jZUZyb21Ub3AgKyB4LmhlaWdodCk7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydExpbmVJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSB0aGlzLnBhcmFncmFwaHNbc3RhcnRdO1xuICAgICAgICBpZiAoc3RhcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UGFyYWdyYXBoT2Zmc2V0VG9wID0gb2Zmc2V0VG9wIC0gc3RhcnRQYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wO1xuICAgICAgICAgICAgc3RhcnRMaW5lSW5mbyA9IFBhcmFncmFwaEhlbHBlci5nZXRWaXNpYmxlTGluZUluZm8oc3RhcnRQYXJhZ3JhcGg/LnRleHRMaW5lc0luZm8sIHN0YXJ0UGFyYWdyYXBoT2Zmc2V0VG9wLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhcnRMaW5lSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGFydFBhcmFncmFwaDogMCxcbiAgICAgICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JlZW5MaW5lOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgICAgIGVuZExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kU2NyZWVuTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogMCxcbiAgICAgICAgICAgICAgICBwYWdlczogWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVuZCA9IHRoaXMucGFyYWdyYXBocy5maW5kSW5kZXgoeCA9PiBvZmZzZXRUb3AgKyBzY3JvbGxlckhlaWdodCA8PSB4LmRpc3RhbmNlRnJvbVRvcCArIHguaGVpZ2h0KTtcbiAgICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgICAgIGVuZCA9IHRoaXMucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVuZExpbmVJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoID0gdGhpcy5wYXJhZ3JhcGhzW2VuZF07XG4gICAgICAgIGlmIChlbmRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBhcmFncmFwaE9mZnNldFRvcCA9IG9mZnNldFRvcCArIHNjcm9sbGVySGVpZ2h0IC0gZW5kUGFyYWdyYXBoLmRpc3RhbmNlRnJvbVRvcDtcbiAgICAgICAgICAgIGVuZExpbmVJbmZvID0gUGFyYWdyYXBoSGVscGVyLmdldFZpc2libGVMaW5lSW5mbyhlbmRQYXJhZ3JhcGg/LnRleHRMaW5lc0luZm8sIGVuZFBhcmFncmFwaE9mZnNldFRvcCwgLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZVBhZ2VzID0gdGhpcy5nZXRWaXNpYmxlUGFnZXMob2Zmc2V0VG9wLCBzY3JvbGxlckhlaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0UGFyYWdyYXBoOiBzdGFydCxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogc3RhcnRMaW5lSW5mby5pbmRleCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuTGluZTogc3RhcnRMaW5lSW5mby5zY3JlZW5JbmRleCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IHN0YXJ0TGluZUluZm8udmlzaWJsZVNjcmVlbkluZGV4LFxuICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiBlbmQsXG4gICAgICAgICAgICBlbmRMaW5lOiBlbmRMaW5lSW5mby5pbmRleCxcbiAgICAgICAgICAgIGVuZFNjcmVlbkxpbmU6IGVuZExpbmVJbmZvLnNjcmVlbkluZGV4LFxuICAgICAgICAgICAgZW5kU2NyZWVuRnVsbExpbmU6IGVuZExpbmVJbmZvLnZpc2libGVTY3JlZW5JbmRleCxcbiAgICAgICAgICAgIHBhZ2VzOiB2aXNpYmxlUGFnZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGFyYWdyYXBoc1Byb3BlcnRpZXMoc3RhcnRQYXJhZ3JhcGhJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VzSW5mbyA9IHsgcGFnZXNWZXJ0aWNhbERhdGE6IHRoaXMucGFnZXNWZXJ0aWNhbERhdGEsIHBhZ2VzU3BhY2U6IHRoaXMucGFnZXNTcGFjZSB9O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBzdGFydFBhcmFncmFwaEluZGV4ID09PSAwID8gMSA6IHRoaXMucGFyYWdyYXBoc1tzdGFydFBhcmFncmFwaEluZGV4IC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UsIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYXJhZ3JhcGhJbmRleDsgaSA8IHRoaXMucGFyYWdyYXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcHJldlBhcmFncmFwaEluZm8gPSB0aGlzLmdldFByZXZpb3VzUGFyYWdyYXBoSW5mbyhpKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tpXTtcbiAgICAgICAgICAgIHBhcmFncmFwaC5wcm9jZXNzUGFyYWdyYXBoUHJvcGVydGllcyhwcmV2UGFyYWdyYXBoSW5mbywgcGFnZXNJbmZvKTtcbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyICE9PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gcGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlcjtcbiAgICAgICAgICAgICAgICBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEocGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlciwgdGhpcy5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgPVxuICAgICAgICAgICAgICAgIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyIC0gMSkgKiB0aGlzLnBhZ2VIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNTcGFjZSAqIHBhcmFncmFwaC5maXJzdFBhZ2VOdW1iZXIgK1xuICAgICAgICAgICAgICAgIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wICtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGgucGFnZVByZXZpb3VzQ29udGVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdlSGVpZ2h0ID0gdGhpcy5wYWdlSGVpZ2h0O1xuICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmdldEFsbFBhcmFncmFwaHNIZWlnaHQoKSArIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wICsgdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHBhZ2VIZWlnaHQgKyAyICogdGhpcy5wYWdlc1NwYWNlO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQgPSBwYWdlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFBhZ2VOdW1iZXIgPSB0aGlzLnBhcmFncmFwaHNbdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFdLmxhc3RQYWdlTnVtYmVyO1xuICAgICAgICB0aGlzLmFsbFBhZ2VzSGVpZ2h0ID0gbGFzdFBhZ2VOdW1iZXIgKiAocGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSkgKyB0aGlzLnBhZ2VzU3BhY2U7XG4gICAgICAgIHRoaXMuZW1pdCgncGFnZXNDb3VudENoYW5nZWQnLCB7IHBhZ2VzQ291bnQ6IGxhc3RQYWdlTnVtYmVyLCBwYWdlSGVpZ2h0OiBwYWdlSGVpZ2h0ICsgMiAqIHRoaXMucGFnZXNTcGFjZSB9KTtcbiAgICB9XG5cbiAgICBnZXRBbGxQYXJhZ3JhcGhzSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFncmFwaHMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaGVpZ2h0LCAwKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncGFnZXNDb3VudENoYW5nZWQnKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWdlVmVydGljYWxEYXRhKGVkZ2VUeXBlOiBFZGdlVHlwZSwgcGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VWZXJ0aWNhbERhdGEgPSBQYWdlSGVscGVyLmdldFZlcnRpY2FsRGF0YShwYWdlLCB0aGlzLnBhZ2VzVmVydGljYWxEYXRhKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQocGFnZSwgZWRnZVR5cGUpO1xuICAgICAgICBpZiAoZWRnZVR5cGUgPT09IEVkZ2VUeXBlLkhlYWRlcikge1xuICAgICAgICAgICAgcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3AgPSBjb21wb25lbnRIZWlnaHQgPiB0aGlzLmRvY3VtZW50TWFyZ2luLnRvcCA/IGNvbXBvbmVudEhlaWdodCA6IHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b20gPSBjb21wb25lbnRIZWlnaHQgPiB0aGlzLmRvY3VtZW50TWFyZ2luLmJvdHRvbSA/IGNvbXBvbmVudEhlaWdodCA6IHRoaXMuZG9jdW1lbnRNYXJnaW4uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3Q29udGVudEhlaWdodCA9IHRoaXMucGFnZUhlaWdodCAtIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wIC0gcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b207XG4gICAgICAgIGlmIChuZXdDb250ZW50SGVpZ2h0ID09PSBwYWdlVmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCA9IG5ld0NvbnRlbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc1BhcmFncmFwaHNQcm9wZXJ0aWVzKDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJldmlvdXNQYXJhZ3JhcGhJbmZvKHJvdzogbnVtYmVyKTogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXRoaXMucGFyYWdyYXBocy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGxhc3RQYWdlOiAxLCBwYXJhZ3JhcGhIZWlnaHQ6IDAsIHBhcmFncmFwaExhc3RMaW5lOiAtMSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldlBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tyb3cgLSAxXTtcbiAgICAgICAgcmV0dXJuIHByZXZQYXJhZ3JhcGguZ2V0UGFyYWdyYXBoRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmlzaWJsZVBhZ2VzKG9mZnNldFRvcDogbnVtYmVyLCBjb250YWluZXJIZWlnaHQ6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVBhZ2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgIGxldCBmaXJzdFZpc2libGVQYWdlID0gb2Zmc2V0VG9wIC8gKHRoaXMucGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSk7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGVQYWdlICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgZmlyc3RWaXNpYmxlUGFnZSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZpc2libGVQYWdlc0NvdW50ID0gY29udGFpbmVySGVpZ2h0IC8gKHRoaXMucGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSk7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxQYWdlT25TY3JlZW5QZXJjZW50ID0gTWF0aC50cnVuYygoKHZpc2libGVQYWdlc0NvdW50ICUgMSkgKyAoZmlyc3RWaXNpYmxlUGFnZSAlIDEpKSAqIDEwMCk7XG4gICAgICAgIGNvbnN0IHBhZ2VTcGFjZUhlaWdodFBlcmNlbnQgPSBNYXRoLnRydW5jKCh0aGlzLnBhZ2VzU3BhY2UgLyBjb250YWluZXJIZWlnaHQpICogMTAwKTtcbiAgICAgICAgaWYgKHBhcnRpYWxQYWdlT25TY3JlZW5QZXJjZW50IC0gcGFnZVNwYWNlSGVpZ2h0UGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgICAgdmlzaWJsZVBhZ2VzQ291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2libGVQYWdlc0NvdW50ID0gTWF0aC5jZWlsKHZpc2libGVQYWdlc0NvdW50KTtcbiAgICAgICAgZmlyc3RWaXNpYmxlUGFnZSA9IE1hdGguY2VpbChmaXJzdFZpc2libGVQYWdlKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRQYWdlc0NvdW50ID0gdGhpcy5wYXJhZ3JhcGhzW3RoaXMucGFyYWdyYXBocy5sZW5ndGggLSAxXS5sYXN0UGFnZU51bWJlcjtcbiAgICAgICAgaWYgKGZpcnN0VmlzaWJsZVBhZ2UgKyB2aXNpYmxlUGFnZXNDb3VudCAtIDEgPiBkb2N1bWVudFBhZ2VzQ291bnQpIHtcbiAgICAgICAgICAgIHZpc2libGVQYWdlc0NvdW50ID0gZG9jdW1lbnRQYWdlc0NvdW50IC0gZmlyc3RWaXNpYmxlUGFnZSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpc2libGVQYWdlc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZpc2libGVQYWdlcy5wdXNoKGZpcnN0VmlzaWJsZVBhZ2UgKyBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aXNpYmxlUGFnZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0UGFnZXNWZXJ0aWNhbERhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlcyB8fCAoIXRoaXMuZWRnZXMuaGVhZGVyc0NvbXBvbmVudHMubGVuZ3RoICYmICF0aGlzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEgPSBbXG4gICAgICAgICAgICAgICAgbmV3IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCh7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogdGhpcy5kb2N1bWVudE1hcmdpbi50b3AsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQ6IHRoaXMucGFnZUhlaWdodCAtIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wIC0gdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20sXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUeXBlOiBQYWdlVHlwZS5EZWZhdWx0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlVHlwZXMgPSB0aGlzLmVkZ2VzLmdldFVuaXF1ZVBhZ2VUeXBlcygpO1xuICAgICAgICB0aGlzLnBhZ2VzVmVydGljYWxEYXRhID0gcGFnZVR5cGVzLm1hcChwYWdlVHlwZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodEJ5UGFnZVR5cGUocGFnZVR5cGUsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodEJ5UGFnZVR5cGUocGFnZVR5cGUsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW5Ub3AgPSBNYXRoLm1heChoZWFkZXJIZWlnaHQsIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wKTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IE1hdGgubWF4KGZvb3RlckhlaWdodCwgdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCh7XG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wLFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLnBhZ2VIZWlnaHQgLSBtYXJnaW5Ub3AgLSBtYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICAgICAgcGFnZVR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,52 @@
1
+ import { ParagraphHelper } from '../helpers/paragraph.helper';
2
+ import { TextLineInfo } from './text-line-info';
3
+ export class Paragraph {
4
+ get firstPageNumber() {
5
+ return this.pageNumbers[0] || 1;
6
+ }
7
+ get lastPageNumber() {
8
+ return this.pageNumbers[this.pageNumbers.length - 1] || 1;
9
+ }
10
+ get firstScreenLine() {
11
+ return this.textLinesInfo[0].screenLine;
12
+ }
13
+ get lastScreenLine() {
14
+ return this.textLinesInfo[this.textLinesInfo.length - 1].screenLine;
15
+ }
16
+ get isEndedByPageBreak() {
17
+ return this.textLinesInfo[this.textLinesInfo.length - 1].isEndedByPageBreak;
18
+ }
19
+ get backgroundColor() {
20
+ return this.textLinesInfo[0].backgroundColor;
21
+ }
22
+ constructor(numberingData, offsetBefore, processTextLinesProperties) {
23
+ this.numberingData = numberingData;
24
+ this.offsetBefore = offsetBefore;
25
+ this.processTextLinesProperties = processTextLinesProperties;
26
+ this.textLinesInfo = [];
27
+ this.pagePreviousContentHeight = 0;
28
+ this.width = 0;
29
+ this.height = 0;
30
+ this.pageNumbers = [];
31
+ }
32
+ setTextLinesInfo(linesInfos) {
33
+ this.textLinesInfo = linesInfos.map(lineInfo => new TextLineInfo(this.width, lineInfo.align, lineInfo.indent, lineInfo));
34
+ }
35
+ setIsAfterPageBreak(value) {
36
+ this.textLinesInfo[0].isAfterPageBreak = value;
37
+ }
38
+ getParagraphData() {
39
+ const pageContentHeight = this.pageNumbers.length === 1
40
+ ? this.height + this.pagePreviousContentHeight
41
+ : ParagraphHelper.getPageLinesHeight(this.textLinesInfo, this.lastPageNumber);
42
+ return { lastPage: this.lastPageNumber, paragraphHeight: pageContentHeight, paragraphLastLine: this.lastScreenLine };
43
+ }
44
+ processParagraphProperties(prevParagraphInfo, pagesInfo) {
45
+ this.pagePreviousContentHeight = prevParagraphInfo.paragraphHeight;
46
+ this.processTextLinesProperties(this, prevParagraphInfo, pagesInfo);
47
+ ParagraphHelper.processOffsetLineWithNumberingMarker(this.textLinesInfo[0], this.numberingData.height, this.offsetBefore);
48
+ this.pageNumbers = ParagraphHelper.getParagraphPages(this.textLinesInfo);
49
+ this.height = ParagraphHelper.getParagraphHeight(this.textLinesInfo);
50
+ }
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9wYWdpbmcvcGFyYWdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFNBQVM7SUFhbEIsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUNXLGFBQWlDLEVBQ2hDLFlBQW9CLEVBQ3BCLDBCQUlDO1FBTkYsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FJekI7UUEzQ2Isa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRW5DLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQUU5QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRVYsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUlYLGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBa0N4QixDQUFDO0lBRUosZ0JBQWdCLENBQUMsVUFBMkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3SCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osTUFBTSxpQkFBaUIsR0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMseUJBQXlCO1lBQzlDLENBQUMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekgsQ0FBQztJQUVELDBCQUEwQixDQUN0QixpQkFBMkYsRUFDM0YsU0FBNkU7UUFFN0UsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUNuRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLGVBQWUsQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxSCxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmVJbmZvTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbGluZS1pbmZvLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9udW1iZXJpbmctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlVmVydGljYWxEYXRhTW9kZWwgfSBmcm9tICcuL3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3BhcmFncmFwaC5oZWxwZXInO1xuaW1wb3J0IHsgVGV4dExpbmVJbmZvIH0gZnJvbSAnLi90ZXh0LWxpbmUtaW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGgge1xuICAgIHRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdID0gW107XG5cbiAgICBwYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcblxuICAgIHdpZHRoID0gMDtcblxuICAgIGhlaWdodCA9IDA7XG5cbiAgICBkaXN0YW5jZUZyb21Ub3A6IG51bWJlcjtcblxuICAgIHBhZ2VOdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZ2V0IGZpcnN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1swXSB8fCAxO1xuICAgIH1cblxuICAgIGdldCBsYXN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1t0aGlzLnBhZ2VOdW1iZXJzLmxlbmd0aCAtIDFdIHx8IDE7XG4gICAgfVxuXG4gICAgZ2V0IGZpcnN0U2NyZWVuTGluZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0TGluZXNJbmZvWzBdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGxhc3RTY3JlZW5MaW5lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRMaW5lc0luZm9bdGhpcy50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDFdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW5kZWRCeVBhZ2VCcmVhaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1t0aGlzLnRleHRMaW5lc0luZm8ubGVuZ3RoIC0gMV0uaXNFbmRlZEJ5UGFnZUJyZWFrO1xuICAgIH1cblxuICAgIGdldCBiYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1swXS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgbnVtYmVyaW5nRGF0YTogTnVtYmVyaW5nRGF0YU1vZGVsLFxuICAgICAgICBwcml2YXRlIG9mZnNldEJlZm9yZTogbnVtYmVyLFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzOiAoXG4gICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICAgICAgKSA9PiB2b2lkXG4gICAgKSB7fVxuXG4gICAgc2V0VGV4dExpbmVzSW5mbyhsaW5lc0luZm9zOiBMaW5lSW5mb01vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGluZXNJbmZvID0gbGluZXNJbmZvcy5tYXAobGluZUluZm8gPT4gbmV3IFRleHRMaW5lSW5mbyh0aGlzLndpZHRoLCBsaW5lSW5mby5hbGlnbiwgbGluZUluZm8uaW5kZW50LCBsaW5lSW5mbykpO1xuICAgIH1cblxuICAgIHNldElzQWZ0ZXJQYWdlQnJlYWsodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGluZXNJbmZvWzBdLmlzQWZ0ZXJQYWdlQnJlYWsgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRQYXJhZ3JhcGhEYXRhKCk6IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHBhZ2VDb250ZW50SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMucGFnZU51bWJlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhlaWdodCArIHRoaXMucGFnZVByZXZpb3VzQ29udGVudEhlaWdodFxuICAgICAgICAgICAgICAgIDogUGFyYWdyYXBoSGVscGVyLmdldFBhZ2VMaW5lc0hlaWdodCh0aGlzLnRleHRMaW5lc0luZm8sIHRoaXMubGFzdFBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4geyBsYXN0UGFnZTogdGhpcy5sYXN0UGFnZU51bWJlciwgcGFyYWdyYXBoSGVpZ2h0OiBwYWdlQ29udGVudEhlaWdodCwgcGFyYWdyYXBoTGFzdExpbmU6IHRoaXMubGFzdFNjcmVlbkxpbmUgfTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGFyYWdyYXBoUHJvcGVydGllcyhcbiAgICAgICAgcHJldlBhcmFncmFwaEluZm86IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSxcbiAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoSGVpZ2h0O1xuICAgICAgICB0aGlzLnByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzKHRoaXMsIHByZXZQYXJhZ3JhcGhJbmZvLCBwYWdlc0luZm8pO1xuICAgICAgICBQYXJhZ3JhcGhIZWxwZXIucHJvY2Vzc09mZnNldExpbmVXaXRoTnVtYmVyaW5nTWFya2VyKHRoaXMudGV4dExpbmVzSW5mb1swXSwgdGhpcy5udW1iZXJpbmdEYXRhLmhlaWdodCwgdGhpcy5vZmZzZXRCZWZvcmUpO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaFBhZ2VzKHRoaXMudGV4dExpbmVzSW5mbyk7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodCh0aGlzLnRleHRMaW5lc0luZm8pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Alignment } from '../constants/alignments.const';
2
+ export class TextLineInfo {
3
+ constructor(contentWidth, align, indent, fields) {
4
+ this.paddingLeft = 0;
5
+ this.offsetBefore = 0;
6
+ this.offsetAfter = 0;
7
+ this.firstLinePageOffset = 0;
8
+ this.endPageOffset = 0;
9
+ this.screenLine = 0;
10
+ this.isAfterPageBreak = false;
11
+ this.isEndedByPageBreak = false;
12
+ if (fields) {
13
+ Object.assign(this, fields);
14
+ }
15
+ const diff = contentWidth - this.width;
16
+ if (this.width === undefined || diff === 0) {
17
+ return;
18
+ }
19
+ switch (align) {
20
+ case Alignment.center:
21
+ this.paddingLeft = indent.left + (diff - indent.left - indent.right) / 2;
22
+ break;
23
+ case Alignment.right:
24
+ this.paddingLeft = diff - indent.right;
25
+ break;
26
+ default:
27
+ this.paddingLeft = indent.left;
28
+ break;
29
+ }
30
+ this.paddingLeft += indent.firstLine;
31
+ this.paddingLeft -= indent.hanging;
32
+ }
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1saW5lLWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi8rc2hhcmVkL2VkaXRvci9jb3JlL3BhZ2luZy90ZXh0LWxpbmUtaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJMUQsTUFBTSxPQUFPLFlBQVk7SUF5QnJCLFlBQVksWUFBb0IsRUFBRSxLQUFhLEVBQUUsTUFBbUIsRUFBRSxNQUErQjtRQWxCckcsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEIsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFZixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBS3ZCLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0I7UUFFRCxNQUFNLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDeEMsT0FBTztTQUNWO1FBRUQsUUFBUSxLQUFLLEVBQUU7WUFDWCxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNO1lBQ1YsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDdkMsTUFBTTtZQUNWO2dCQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDL0IsTUFBTTtTQUNiO1FBRUQsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGlnbm1lbnQgfSBmcm9tICcuLi9jb25zdGFudHMvYWxpZ25tZW50cy5jb25zdCc7XG5pbXBvcnQgeyBJbmRlbnRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9pbmRlbnQubW9kZWwnO1xuaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9saW5lLWluZm8ubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgVGV4dExpbmVJbmZvIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuXG4gICAgaGVpZ2h0OiBudW1iZXI7XG5cbiAgICBwYWdlPzogbnVtYmVyO1xuXG4gICAgcGFkZGluZ0xlZnQgPSAwO1xuXG4gICAgb2Zmc2V0QmVmb3JlID0gMDtcblxuICAgIG9mZnNldEFmdGVyID0gMDtcblxuICAgIGZpcnN0TGluZVBhZ2VPZmZzZXQgPSAwO1xuXG4gICAgZW5kUGFnZU9mZnNldCA9IDA7XG5cbiAgICBzY3JlZW5MaW5lID0gMDtcblxuICAgIGlzQWZ0ZXJQYWdlQnJlYWsgPSBmYWxzZTtcblxuICAgIGlzRW5kZWRCeVBhZ2VCcmVhayA9IGZhbHNlO1xuXG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZW50V2lkdGg6IG51bWJlciwgYWxpZ246IG51bWJlciwgaW5kZW50OiBJbmRlbnRNb2RlbCwgZmllbGRzPzogUGFydGlhbDxMaW5lSW5mb01vZGVsPikge1xuICAgICAgICBpZiAoZmllbGRzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmID0gY29udGVudFdpZHRoIC0gdGhpcy53aWR0aDtcbiAgICAgICAgaWYgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCB8fCBkaWZmID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgICAgICBjYXNlIEFsaWdubWVudC5jZW50ZXI6XG4gICAgICAgICAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCA9IGluZGVudC5sZWZ0ICsgKGRpZmYgLSBpbmRlbnQubGVmdCAtIGluZGVudC5yaWdodCkgLyAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQucmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCA9IGRpZmYgLSBpbmRlbnQucmlnaHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSBpbmRlbnQubGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFkZGluZ0xlZnQgKz0gaW5kZW50LmZpcnN0TGluZTtcbiAgICAgICAgdGhpcy5wYWRkaW5nTGVmdCAtPSBpbmRlbnQuaGFuZ2luZztcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ export class Point {
2
+ constructor(row, column) {
3
+ this.row = row;
4
+ this.column = column;
5
+ }
6
+ static comparePoints(first, second) {
7
+ return first.row - second.row || first.column - second.column;
8
+ }
9
+ static clone(point) {
10
+ return new Point(point.row, point.column);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi8rc2hhcmVkL2VkaXRvci9jb3JlL3BvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxLQUFLO0lBS2QsWUFBWSxHQUFXLEVBQUUsTUFBYztRQUNuQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVksRUFBRSxNQUFhO1FBQzVDLE9BQU8sS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFZO1FBQ3JCLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFBvaW50IHtcbiAgICByb3c6IG51bWJlcjtcblxuICAgIGNvbHVtbjogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Iocm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucm93ID0gcm93O1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tcGFyZVBvaW50cyhmaXJzdDogUG9pbnQsIHNlY29uZDogUG9pbnQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZmlyc3Qucm93IC0gc2Vjb25kLnJvdyB8fCBmaXJzdC5jb2x1bW4gLSBzZWNvbmQuY29sdW1uO1xuICAgIH1cblxuICAgIHN0YXRpYyBjbG9uZShwb2ludDogUG9pbnQpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQocG9pbnQucm93LCBwb2ludC5jb2x1bW4pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,72 @@
1
+ import { DistanceModel } from './models/distance.model';
2
+ import { PrintEdgesLayer } from './layers/print.edges.layer';
3
+ import { PrintPagesLayer } from './layers/print.pages.layer';
4
+ import { PrintRenderingHelper } from './helpers/print.rendering.helper';
5
+ import { PrintTextLayer } from './layers/print.text.layer';
6
+ export class PrintRenderer {
7
+ constructor(session, editorService) {
8
+ this.session = session;
9
+ this.pagesCount = Math.round((session.pagesWrap.pagesSpace * 2 + session.pagesWrap.allPagesHeight) / session.pagesWrap.minHeight);
10
+ this.createContent();
11
+ this.createLayers(editorService);
12
+ }
13
+ renderPrintDocument() {
14
+ const layerConfig = this.computeLayerConfig();
15
+ this.pagesLayer.update(layerConfig);
16
+ this.textLayer.update(layerConfig);
17
+ this.edgesLayer.update(layerConfig);
18
+ this.createDocumentHtml(layerConfig);
19
+ }
20
+ computeLayerConfig() {
21
+ const pages = Array.from(Array(this.pagesCount).keys()).map(x => x + 1);
22
+ const pagesWrap = this.session.pagesWrap;
23
+ const maxHeight = pagesWrap.pageHeight * this.pagesCount;
24
+ const minHeight = pagesWrap.pageHeight;
25
+ return {
26
+ width: this.textLayer.element.clientWidth + pagesWrap.documentMargin.left + pagesWrap.documentMargin.right,
27
+ height: pagesWrap.defaultVerticalData.contentHeight,
28
+ contentRange: new DistanceModel({ start: 0, end: this.session.pagesWrap.paragraphs.length - 1 }),
29
+ minHeight,
30
+ maxHeight,
31
+ offset: 0,
32
+ pages,
33
+ scrollTop: 0
34
+ };
35
+ }
36
+ createContent() {
37
+ this.content = document.createElement('div');
38
+ this.content.className = 'ace-content print';
39
+ }
40
+ createLayers(editorService) {
41
+ this.textLayer = new PrintTextLayer(this.content, PrintRenderingHelper);
42
+ this.textLayer.setSession(this.session);
43
+ this.edgesLayer = new PrintEdgesLayer(this.content, editorService);
44
+ this.edgesLayer.setSession(this.session);
45
+ this.pagesLayer = new PrintPagesLayer(this.content);
46
+ this.pagesLayer.setSession(this.session);
47
+ }
48
+ createDocumentHtml(layerConfig) {
49
+ const head = this.createHeadWithStyles();
50
+ let body = `<div class="ace-scroller print" style="width: 100%;">${this.content.innerHTML}</div>`;
51
+ body = `<div class="edit-container ace-editor print">${body}</div>`;
52
+ body = `<div class="container print" style="height: ${layerConfig.maxHeight}px;">${body}</div>`;
53
+ body = `<div class="mat-drawer-content print">${body}</div>`;
54
+ body = `<div class="mat-drawer-container sidenav-container print">${body}</div>`;
55
+ body = `<div class="base-editor print">${body}</div>`;
56
+ this.documentHtml = `<!DOCTYPE html><html>${head}${body}</html>`;
57
+ }
58
+ createHeadWithStyles() {
59
+ let styles = '';
60
+ for (let i = 0; i < document.styleSheets.length; i++) {
61
+ const cssRules = Array.from(document.styleSheets[i].cssRules);
62
+ cssRules.forEach(rule => (styles += `<style>${rule.cssText}</style>`));
63
+ }
64
+ return `<head><title>Print</title>${styles}${this.getPrintPageStyle()}</head>`;
65
+ }
66
+ getPrintPageStyle() {
67
+ const pageStyle = '@page { margin: 0; }';
68
+ const contentStyle = `@media print { html, body { width: 100%; height: 100%; } }`;
69
+ return `<style>${pageStyle} ${contentStyle}</style>`;
70
+ }
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQucmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi8rc2hhcmVkL2VkaXRvci9jb3JlL3ByaW50LnJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU94RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUczRCxNQUFNLE9BQU8sYUFBYTtJQWlCdEIsWUFBb0IsT0FBb0IsRUFBRSxhQUE0QjtRQUFsRCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG1CQUFtQjtRQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTlDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUV2QyxPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUs7WUFDMUcsTUFBTSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ25ELFlBQVksRUFBRSxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEcsU0FBUztZQUNULFNBQVM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULEtBQUs7WUFDTCxTQUFTLEVBQUUsQ0FBQztTQUNmLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVPLFlBQVksQ0FBQyxhQUE0QjtRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFdBQXlCO1FBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxHQUFHLHdEQUF3RCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsUUFBUSxDQUFDO1FBQ2xHLElBQUksR0FBRyxnREFBZ0QsSUFBSSxRQUFRLENBQUM7UUFDcEUsSUFBSSxHQUFHLCtDQUErQyxXQUFXLENBQUMsU0FBUyxRQUFRLElBQUksUUFBUSxDQUFDO1FBQ2hHLElBQUksR0FBRyx5Q0FBeUMsSUFBSSxRQUFRLENBQUM7UUFDN0QsSUFBSSxHQUFHLDZEQUE2RCxJQUFJLFFBQVEsQ0FBQztRQUNqRixJQUFJLEdBQUcsa0NBQWtDLElBQUksUUFBUSxDQUFDO1FBRXRELElBQUksQ0FBQyxZQUFZLEdBQUcsd0JBQXdCLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQztJQUNyRSxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlELFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxPQUFPLDZCQUE2QixNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztJQUNuRixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLDREQUE0RCxDQUFDO1FBQ2xGLE9BQU8sVUFBVSxTQUFTLElBQUksWUFBWSxVQUFVLENBQUM7SUFDekQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4vbW9kZWxzL2Rpc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7IEVkZ2VzTGF5ZXIgfSBmcm9tICcuL2xheWVycy9lZGdlcy5sYXllcic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBJTGF5ZXJDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBhZ2VzTGF5ZXIgfSBmcm9tICcuL2xheWVycy9wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBQYWdlc1dyYXAgfSBmcm9tICcuL3BhZ2luZy9wYWdlcy53cmFwJztcbmltcG9ydCB7IFByaW50RWRnZXNMYXllciB9IGZyb20gJy4vbGF5ZXJzL3ByaW50LmVkZ2VzLmxheWVyJztcbmltcG9ydCB7IFByaW50UGFnZXNMYXllciB9IGZyb20gJy4vbGF5ZXJzL3ByaW50LnBhZ2VzLmxheWVyJztcbmltcG9ydCB7IFByaW50UmVuZGVyaW5nSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL3ByaW50LnJlbmRlcmluZy5oZWxwZXInO1xuaW1wb3J0IHsgUHJpbnRUZXh0TGF5ZXIgfSBmcm9tICcuL2xheWVycy9wcmludC50ZXh0LmxheWVyJztcbmltcG9ydCB7IFRleHRMYXllciB9IGZyb20gJy4vbGF5ZXJzL3RleHQubGF5ZXInO1xuXG5leHBvcnQgY2xhc3MgUHJpbnRSZW5kZXJlciB7XG4gICAgY29udGVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBlZGdlc0xheWVyOiBFZGdlc0xheWVyO1xuXG4gICAgdGV4dExheWVyOiBUZXh0TGF5ZXI7XG5cbiAgICBwYWdlc0xheWVyOiBQYWdlc0xheWVyO1xuXG4gICAgb3JpZ2luYWxQYWdlc1dyYXA6IFBhZ2VzV3JhcDtcblxuICAgIGRvY3VtZW50SHRtbDogc3RyaW5nO1xuXG4gICAgaGVhZEh0bWw6IHN0cmluZztcblxuICAgIHBhZ2VzQ291bnQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2Vzc2lvbjogRWRpdFNlc3Npb24sIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5wYWdlc0NvdW50ID0gTWF0aC5yb3VuZCgoc2Vzc2lvbi5wYWdlc1dyYXAucGFnZXNTcGFjZSAqIDIgKyBzZXNzaW9uLnBhZ2VzV3JhcC5hbGxQYWdlc0hlaWdodCkgLyBzZXNzaW9uLnBhZ2VzV3JhcC5taW5IZWlnaHQpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVMYXllcnMoZWRpdG9yU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyUHJpbnREb2N1bWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGF5ZXJDb25maWcgPSB0aGlzLmNvbXB1dGVMYXllckNvbmZpZygpO1xuXG4gICAgICAgIHRoaXMucGFnZXNMYXllci51cGRhdGUobGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLmVkZ2VzTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTtcblxuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJDb25maWcoKTogSUxheWVyQ29uZmlnIHtcbiAgICAgICAgY29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKEFycmF5KHRoaXMucGFnZXNDb3VudCkua2V5cygpKS5tYXAoeCA9PiB4ICsgMSk7XG4gICAgICAgIGNvbnN0IHBhZ2VzV3JhcCA9IHRoaXMuc2Vzc2lvbi5wYWdlc1dyYXA7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHBhZ2VzV3JhcC5wYWdlSGVpZ2h0ICogdGhpcy5wYWdlc0NvdW50O1xuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSBwYWdlc1dyYXAucGFnZUhlaWdodDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMudGV4dExheWVyLmVsZW1lbnQuY2xpZW50V2lkdGggKyBwYWdlc1dyYXAuZG9jdW1lbnRNYXJnaW4ubGVmdCArIHBhZ2VzV3JhcC5kb2N1bWVudE1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogcGFnZXNXcmFwLmRlZmF1bHRWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZTogbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogMCwgZW5kOiB0aGlzLnNlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMSB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jb250ZW50LmNsYXNzTmFtZSA9ICdhY2UtY29udGVudCBwcmludCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVMYXllcnMoZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRMYXllciA9IG5ldyBQcmludFRleHRMYXllcih0aGlzLmNvbnRlbnQsIFByaW50UmVuZGVyaW5nSGVscGVyKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIuc2V0U2Vzc2lvbih0aGlzLnNlc3Npb24pO1xuICAgICAgICB0aGlzLmVkZ2VzTGF5ZXIgPSBuZXcgUHJpbnRFZGdlc0xheWVyKHRoaXMuY29udGVudCwgZWRpdG9yU2VydmljZSk7XG4gICAgICAgIHRoaXMuZWRnZXNMYXllci5zZXRTZXNzaW9uKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHRoaXMucGFnZXNMYXllciA9IG5ldyBQcmludFBhZ2VzTGF5ZXIodGhpcy5jb250ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlc0xheWVyLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLmNyZWF0ZUhlYWRXaXRoU3R5bGVzKCk7XG4gICAgICAgIGxldCBib2R5ID0gYDxkaXYgY2xhc3M9XCJhY2Utc2Nyb2xsZXIgcHJpbnRcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPiR7dGhpcy5jb250ZW50LmlubmVySFRNTH08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJlZGl0LWNvbnRhaW5lciBhY2UtZWRpdG9yIHByaW50XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBwcmludFwiIHN0eWxlPVwiaGVpZ2h0OiAke2xheWVyQ29uZmlnLm1heEhlaWdodH1weDtcIj4ke2JvZHl9PC9kaXY+YDtcbiAgICAgICAgYm9keSA9IGA8ZGl2IGNsYXNzPVwibWF0LWRyYXdlci1jb250ZW50IHByaW50XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cIm1hdC1kcmF3ZXItY29udGFpbmVyIHNpZGVuYXYtY29udGFpbmVyIHByaW50XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cImJhc2UtZWRpdG9yIHByaW50XCI+JHtib2R5fTwvZGl2PmA7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudEh0bWwgPSBgPCFET0NUWVBFIGh0bWw+PGh0bWw+JHtoZWFkfSR7Ym9keX08L2h0bWw+YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhlYWRXaXRoU3R5bGVzKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzdHlsZXMgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3NzUnVsZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmNzc1J1bGVzKTtcbiAgICAgICAgICAgIGNzc1J1bGVzLmZvckVhY2gocnVsZSA9PiAoc3R5bGVzICs9IGA8c3R5bGU+JHtydWxlLmNzc1RleHR9PC9zdHlsZT5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYDxoZWFkPjx0aXRsZT5QcmludDwvdGl0bGU+JHtzdHlsZXN9JHt0aGlzLmdldFByaW50UGFnZVN0eWxlKCl9PC9oZWFkPmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcmludFBhZ2VTdHlsZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYWdlU3R5bGUgPSAnQHBhZ2UgeyBtYXJnaW46IDA7IH0nO1xuICAgICAgICBjb25zdCBjb250ZW50U3R5bGUgPSBgQG1lZGlhIHByaW50IHsgaHRtbCwgYm9keSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IH0gfWA7XG4gICAgICAgIHJldHVybiBgPHN0eWxlPiR7cGFnZVN0eWxlfSAke2NvbnRlbnRTdHlsZX08L3N0eWxlPmA7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,94 @@
1
+ import { Point } from './point';
2
+ import { PositionHelper } from './helpers/position.helper';
3
+ export class Range {
4
+ get isEmpty() {
5
+ return this.isSingleLine && this.start.column === this.end.column;
6
+ }
7
+ get isSingleLine() {
8
+ return this.start.row === this.end.row;
9
+ }
10
+ constructor(start, end) {
11
+ this.start = start;
12
+ this.end = end;
13
+ }
14
+ isEqual(range) {
15
+ return (this.start.row === range.start.row &&
16
+ this.end.row === range.end.row &&
17
+ this.start.column === range.start.column &&
18
+ this.end.column === range.end.column);
19
+ }
20
+ contains(point) {
21
+ return this.comparePoint(point) === 0;
22
+ }
23
+ comparePoint(point) {
24
+ const compare = this.compareSingleLine(point);
25
+ return compare ?? this.compareMultiLine(point);
26
+ }
27
+ /**
28
+ * Given the current `Range`,
29
+ * this function converts those starting and ending points into screen positions, and then returns a new `Range` object.
30
+ * @param {EditSession} session The `EditSession` to retrieve coordinates from
31
+ * @returns {Range}
32
+ **/
33
+ toScreenRange(session) {
34
+ const screenPosStart = PositionHelper.documentToScreen(session, this.start.row, this.start.column);
35
+ const screenPosEnd = PositionHelper.documentToScreen(session, this.end.row, this.end.column);
36
+ return new Range(screenPosStart, screenPosEnd);
37
+ }
38
+ /**
39
+ * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object.
40
+ * @param {Number} firstRow The starting row
41
+ * @param {Number} lastRow The ending row
42
+ * @returns {Range}
43
+ **/
44
+ clipRows(firstRow, lastRow) {
45
+ let end;
46
+ if (this.end.row > lastRow) {
47
+ end = new Point(lastRow + 1, 0);
48
+ }
49
+ else if (this.end.row < firstRow) {
50
+ end = new Point(firstRow, 0);
51
+ }
52
+ let start;
53
+ if (this.start.row > lastRow) {
54
+ start = new Point(lastRow + 1, 0);
55
+ }
56
+ else if (this.start.row < firstRow) {
57
+ start = new Point(firstRow, 0);
58
+ }
59
+ return new Range(start || this.start, end || this.end);
60
+ }
61
+ compareSingleLine(point) {
62
+ if (!this.isSingleLine) {
63
+ return null;
64
+ }
65
+ if (point.row === this.start.row) {
66
+ if (point.column < this.start.column) {
67
+ return -1;
68
+ }
69
+ else if (point.column > this.end.column) {
70
+ return 1;
71
+ }
72
+ else {
73
+ return 0;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ compareMultiLine(point) {
79
+ if (this.start.row === point.row) {
80
+ return point.column >= this.start.column ? 0 : -1;
81
+ }
82
+ if (this.end.row === point.row) {
83
+ return point.column <= this.end.column ? 0 : 1;
84
+ }
85
+ if (point.row < this.start.row) {
86
+ return -1;
87
+ }
88
+ if (point.row > this.end.row) {
89
+ return 1;
90
+ }
91
+ return 0;
92
+ }
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi8rc2hhcmVkL2VkaXRvci9jb3JlL3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE1BQU0sT0FBTyxLQUFLO0lBT2QsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLEtBQVksRUFBRSxHQUFVO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBMkM7UUFDdEQsT0FBTyxDQUNILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUN2QyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFZ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SSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNiO1FBRUQsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Bvc2l0aW9uLmhlbHBlcic7XG5cbmV4cG9ydCBjbGFzcyBSYW5nZSB7XG4gICAgc3RhcnQ6IFBvaW50O1xuXG4gICAgZW5kOiBQb2ludDtcblxuICAgIGN1cnNvcjogUG9pbnQ7XG5cbiAgICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVMaW5lICYmIHRoaXMuc3RhcnQuY29sdW1uID09PSB0aGlzLmVuZC5jb2x1bW47XG4gICAgfVxuXG4gICAgZ2V0IGlzU2luZ2xlTGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3c7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioc3RhcnQ6IFBvaW50LCBlbmQ6IFBvaW50KSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXF1YWwocmFuZ2U6IFJhbmdlIHwgeyBzdGFydDogUG9pbnQ7IGVuZDogUG9pbnQgfSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmXG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb250YWlucyhwb2ludDogUG9pbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVBvaW50KHBvaW50KSA9PT0gMDtcbiAgICB9XG5cbiAgICBjb21wYXJlUG9pbnQocG9pbnQ6IFBvaW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY29tcGFyZSA9IHRoaXMuY29tcGFyZVNpbmdsZUxpbmUocG9pbnQpO1xuXG4gICAgICAgIHJldHVybiBjb21wYXJlID8/IHRoaXMuY29tcGFyZU11bHRpTGluZShwb2ludCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gdGhlIGN1cnJlbnQgYFJhbmdlYCxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRob3NlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9pbnRzIGludG8gc2NyZWVuIHBvc2l0aW9ucywgYW5kIHRoZW4gcmV0dXJucyBhIG5ldyBgUmFuZ2VgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0VkaXRTZXNzaW9ufSBzZXNzaW9uIFRoZSBgRWRpdFNlc3Npb25gIHRvIHJldHJpZXZlIGNvb3JkaW5hdGVzIGZyb21cbiAgICAgKiBAcmV0dXJucyB7UmFuZ2V9XG4gICAgICoqL1xuICAgIHRvU2NyZWVuUmFuZ2Uoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiBSYW5nZSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblBvc1N0YXJ0ID0gUG9zaXRpb25IZWxwZXIuZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uLCB0aGlzLnN0YXJ0LnJvdywgdGhpcy5zdGFydC5jb2x1bW4pO1xuICAgICAgICBjb25zdCBzY3JlZW5Qb3NFbmQgPSBQb3NpdGlvbkhlbHBlci5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIHRoaXMuZW5kLnJvdywgdGhpcy5lbmQuY29sdW1uKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHNjcmVlblBvc1N0YXJ0LCBzY3JlZW5Qb3NFbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBhcnQgb2YgdGhlIGN1cnJlbnQgYFJhbmdlYCB0aGF0IG9jY3VycyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgYGZpcnN0Um93YCBhbmQgYGxhc3RSb3dgIGFzIGEgbmV3IGBSYW5nZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBmaXJzdFJvdyBUaGUgc3RhcnRpbmcgcm93XG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGxhc3RSb3cgVGhlIGVuZGluZyByb3dcbiAgICAgKiBAcmV0dXJucyB7UmFuZ2V9XG4gICAgICoqL1xuICAgIGNsaXBSb3dzKGZpcnN0Um93OiBudW1iZXIsIGxhc3RSb3c6IG51bWJlcik6IFJhbmdlIHtcbiAgICAgICAgbGV0IGVuZDogUG9pbnQ7XG4gICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPiBsYXN0Um93KSB7XG4gICAgICAgICAgICBlbmQgPSBuZXcgUG9pbnQobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KSB7XG4gICAgICAgICAgICBlbmQgPSBuZXcgUG9pbnQoZmlyc3RSb3csIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXJ0OiBQb2ludDtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykge1xuICAgICAgICAgICAgc3RhcnQgPSBuZXcgUG9pbnQobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbmV3IFBvaW50KGZpcnN0Um93LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQgfHwgdGhpcy5zdGFydCwgZW5kIHx8IHRoaXMuZW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVTaW5nbGVMaW5lKHBvaW50OiBQb2ludCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5pc1NpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvaW50LnJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHtcbiAgICAgICAgICAgIGlmIChwb2ludC5jb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9pbnQuY29sdW1uID4gdGhpcy5lbmQuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlTXVsdGlMaW5lKHBvaW50OiBQb2ludCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcG9pbnQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9pbnQuY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcG9pbnQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9pbnQuY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvaW50LnJvdyA8IHRoaXMuc3RhcnQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9pbnQucm93ID4gdGhpcy5lbmQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbn1cbiJdfQ==