@talrace/ngx-noder 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/fesm2022/talrace-ngx-noder.mjs +181 -181
  2. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  3. package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
  4. package/lib/editor/components/external-element/external.component.d.ts +1 -1
  5. package/lib/editor/components/shared/abstract/base.component.d.ts +1 -1
  6. package/lib/editor/components/shared/abstract/destroy.component.d.ts +1 -1
  7. package/package.json +1 -3
  8. package/src/lib/apart-components/add-link-dialog/_add-link-dialog.theme.scss +3 -6
  9. package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +4 -7
  10. package/src/lib/apart-components/confirm-dialog/_theme.scss +6 -9
  11. package/src/lib/apart-components/editor-title/_editor-title.theme.scss +6 -9
  12. package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +9 -12
  13. package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +5 -8
  14. package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +1 -3
  15. package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +1 -3
  16. package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +2 -5
  17. package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +3 -6
  18. package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +3 -6
  19. package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +15 -18
  20. package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +2 -4
  21. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +5 -8
  22. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +6 -9
  23. package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +3 -6
  24. package/src/lib/apart-components/insert-table/_insert-table.theme.scss +6 -9
  25. package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +12 -15
  26. package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +22 -25
  27. package/src/lib/editor/components/_editor.theme.scss +25 -28
  28. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +0 -73
  29. package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +0 -7
  30. package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +0 -49
  31. package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -34
  32. package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -75
  33. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -95
  34. package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -24
  35. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +0 -117
  36. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +0 -37
  37. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +0 -49
  38. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +0 -90
  39. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +0 -81
  40. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +0 -28
  41. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +0 -53
  42. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +0 -18
  43. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +0 -27
  44. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +0 -71
  45. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +0 -107
  46. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -25
  47. package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +0 -65
  48. package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +0 -86
  49. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +0 -90
  50. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +0 -122
  51. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +0 -8
  52. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.mjs +0 -1148
  53. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +0 -157
  54. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +0 -8
  55. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +0 -11
  56. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-template-type.enum.mjs +0 -16
  57. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +0 -6
  58. package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +0 -34
  59. package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +0 -26
  60. package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +0 -60
  61. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +0 -48
  62. package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +0 -54
  63. package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +0 -86
  64. package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -134
  65. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +0 -38
  66. package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +0 -6
  67. package/esm2022/lib/editor/components/edges/edge.component.mjs +0 -141
  68. package/esm2022/lib/editor/components/edges/edges.mjs +0 -120
  69. package/esm2022/lib/editor/components/edges/page-type.enum.mjs +0 -7
  70. package/esm2022/lib/editor/components/editor.component.mjs +0 -112
  71. package/esm2022/lib/editor/components/external-element/external-element.service.mjs +0 -6
  72. package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +0 -4
  73. package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +0 -2
  74. package/esm2022/lib/editor/components/external-element/external.component.mjs +0 -41
  75. package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +0 -9
  76. package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +0 -11
  77. package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +0 -15
  78. package/esm2022/lib/editor/components/image/components/image.component.mjs +0 -88
  79. package/esm2022/lib/editor/components/image/image-api.service.mjs +0 -36
  80. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +0 -46
  81. package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +0 -2
  82. package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +0 -19
  83. package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +0 -12
  84. package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +0 -106
  85. package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +0 -2
  86. package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +0 -52
  87. package/esm2022/lib/editor/components/image/size.mjs +0 -2
  88. package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +0 -60
  89. package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +0 -18
  90. package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +0 -43
  91. package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +0 -2
  92. package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +0 -3
  93. package/esm2022/lib/editor/components/shared/custom-content.mjs +0 -2
  94. package/esm2022/lib/editor/components/shared/services/component.service.mjs +0 -52
  95. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +0 -123
  96. package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +0 -55
  97. package/esm2022/lib/editor/components/tab/tab.component.mjs +0 -44
  98. package/esm2022/lib/editor/components/tab/tab.helper.mjs +0 -6
  99. package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +0 -118
  100. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +0 -99
  101. package/esm2022/lib/editor/components/table/components/table.component.mjs +0 -412
  102. package/esm2022/lib/editor/components/table/enums/hrule.enum.mjs +0 -7
  103. package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +0 -8
  104. package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +0 -6
  105. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +0 -17
  106. package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +0 -9
  107. package/esm2022/lib/editor/components/table/models/row-data.model.mjs +0 -8
  108. package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +0 -7
  109. package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +0 -84
  110. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +0 -383
  111. package/esm2022/lib/editor/content/constants/display-values.const.mjs +0 -8
  112. package/esm2022/lib/editor/content/constants/document-info.const.mjs +0 -13
  113. package/esm2022/lib/editor/content/constants/editor.const.mjs +0 -70
  114. package/esm2022/lib/editor/content/contents.interface.mjs +0 -2
  115. package/esm2022/lib/editor/content/display-data/display-data.mjs +0 -839
  116. package/esm2022/lib/editor/content/display-data/display-token.model.mjs +0 -12
  117. package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +0 -10
  118. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +0 -11
  119. package/esm2022/lib/editor/content/display-data/indent.model.mjs +0 -9
  120. package/esm2022/lib/editor/content/display-data/line-info.model.mjs +0 -9
  121. package/esm2022/lib/editor/content/display-data/lines.mjs +0 -96
  122. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +0 -8
  123. package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +0 -2
  124. package/esm2022/lib/editor/content/display-data/paragraph.mjs +0 -56
  125. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +0 -35
  126. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +0 -2
  127. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +0 -78
  128. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +0 -62
  129. package/esm2022/lib/editor/content/helpers/format.helper.mjs +0 -23
  130. package/esm2022/lib/editor/content/helpers/indexed-element.helper.mjs +0 -6
  131. package/esm2022/lib/editor/content/helpers/link.helper.mjs +0 -42
  132. package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +0 -9
  133. package/esm2022/lib/editor/content/margin.model.mjs +0 -16
  134. package/esm2022/lib/editor/content/page-vertical-data.model.mjs +0 -9
  135. package/esm2022/lib/editor/content/vertical-alignment.enum.mjs +0 -11
  136. package/esm2022/lib/editor/core/event-emitting.mjs +0 -56
  137. package/esm2022/lib/editor/display/cell.interface.mjs +0 -2
  138. package/esm2022/lib/editor/display/event.helper.mjs +0 -18
  139. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +0 -102
  140. package/esm2022/lib/editor/display/layers/layer.config.mjs +0 -2
  141. package/esm2022/lib/editor/display/layers/pages.layer.mjs +0 -109
  142. package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +0 -7
  143. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +0 -7
  144. package/esm2022/lib/editor/display/layers/selection.layer.mjs +0 -119
  145. package/esm2022/lib/editor/display/layers/text.layer.mjs +0 -226
  146. package/esm2022/lib/editor/display/print/print.helper.mjs +0 -40
  147. package/esm2022/lib/editor/display/print/print.renderer.mjs +0 -67
  148. package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +0 -7
  149. package/esm2022/lib/editor/display/render-changes.interface.mjs +0 -2
  150. package/esm2022/lib/editor/display/render-changes.model.mjs +0 -25
  151. package/esm2022/lib/editor/display/renderer.mjs +0 -204
  152. package/esm2022/lib/editor/display/rendering.helper.mjs +0 -185
  153. package/esm2022/lib/editor/display/renderloop.mjs +0 -26
  154. package/esm2022/lib/editor/display/virtual.renderer.mjs +0 -284
  155. package/esm2022/lib/editor/display/visible-range.interface.mjs +0 -2
  156. package/esm2022/lib/editor/editor.module.mjs +0 -91
  157. package/esm2022/lib/editor/execution/distance.model.mjs +0 -10
  158. package/esm2022/lib/editor/execution/edit.session.mjs +0 -602
  159. package/esm2022/lib/editor/execution/editor.mjs +0 -1368
  160. package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +0 -42
  161. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +0 -73
  162. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +0 -12
  163. package/esm2022/lib/editor/execution/helpers/page.helper.mjs +0 -12
  164. package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +0 -41
  165. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +0 -177
  166. package/esm2022/lib/editor/execution/regulator.service.mjs +0 -212
  167. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +0 -18
  168. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +0 -14
  169. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +0 -8
  170. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +0 -3
  171. package/esm2022/lib/editor/execution/targeting/session.model.mjs +0 -10
  172. package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +0 -2
  173. package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +0 -2
  174. package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +0 -88
  175. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +0 -208
  176. package/esm2022/lib/editor/gadgets/history/operation.type.mjs +0 -2
  177. package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +0 -7
  178. package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +0 -9
  179. package/esm2022/lib/editor/gadgets/numbering/numbering-marker-type.enum.mjs +0 -12
  180. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +0 -13
  181. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +0 -149
  182. package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +0 -7
  183. package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +0 -18
  184. package/esm2022/lib/editor/gadgets/scrollbar.mjs +0 -86
  185. package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +0 -2
  186. package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +0 -2
  187. package/esm2022/lib/editor/gadgets/search/search.mjs +0 -231
  188. package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +0 -5
  189. package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +0 -20
  190. package/esm2022/lib/editor/interaction/base.handler.mjs +0 -19
  191. package/esm2022/lib/editor/interaction/document.handler.mjs +0 -27
  192. package/esm2022/lib/editor/interaction/editor.service.mjs +0 -386
  193. package/esm2022/lib/editor/interaction/input.handler.mjs +0 -152
  194. package/esm2022/lib/editor/interaction/mode.enum.mjs +0 -7
  195. package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +0 -7
  196. package/esm2022/lib/editor/interaction/mouse.handler.mjs +0 -50
  197. package/esm2022/lib/editor/interaction/text-input.mjs +0 -53
  198. package/esm2022/lib/editor/operations/commands.service.mjs +0 -20
  199. package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +0 -32
  200. package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +0 -7
  201. package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +0 -9
  202. package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +0 -15
  203. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +0 -85
  204. package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +0 -19
  205. package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
  206. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +0 -136
  207. package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
  208. package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +0 -114
  209. package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +0 -16
  210. package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +0 -374
  211. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +0 -438
  212. package/esm2022/lib/editor/operations/save-commands.helper.mjs +0 -128
  213. package/esm2022/lib/editor/operations/target-operations.helper.mjs +0 -23
  214. package/esm2022/lib/editor/positioning/alignments.const.mjs +0 -8
  215. package/esm2022/lib/editor/positioning/content.helper.mjs +0 -45
  216. package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +0 -13
  217. package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +0 -2
  218. package/esm2022/lib/editor/positioning/insert-index.interface.mjs +0 -2
  219. package/esm2022/lib/editor/positioning/line-width.helper.mjs +0 -13
  220. package/esm2022/lib/editor/positioning/position.helper.mjs +0 -210
  221. package/esm2022/lib/editor/positioning/range.mjs +0 -94
  222. package/esm2022/lib/editor/positioning/selection.mjs +0 -351
  223. package/esm2022/lib/editor/revision.helper.mjs +0 -94
  224. package/esm2022/lib/models/generated/add-numbering.model.mjs +0 -8
  225. package/esm2022/lib/models/generated/apply-element-style.model.mjs +0 -8
  226. package/esm2022/lib/models/generated/apply-image-style.model.mjs +0 -8
  227. package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +0 -12
  228. package/esm2022/lib/models/generated/apply-text-style.model.mjs +0 -12
  229. package/esm2022/lib/models/generated/borders-style.model.mjs +0 -8
  230. package/esm2022/lib/models/generated/break.model.mjs +0 -8
  231. package/esm2022/lib/models/generated/cell.model.mjs +0 -12
  232. package/esm2022/lib/models/generated/column-section.model.mjs +0 -8
  233. package/esm2022/lib/models/generated/column.model.mjs +0 -8
  234. package/esm2022/lib/models/generated/command.model.mjs +0 -120
  235. package/esm2022/lib/models/generated/delete.model.mjs +0 -8
  236. package/esm2022/lib/models/generated/document-name.model.mjs +0 -8
  237. package/esm2022/lib/models/generated/document.model.mjs +0 -8
  238. package/esm2022/lib/models/generated/docx.model.mjs +0 -12
  239. package/esm2022/lib/models/generated/edge-target.model.mjs +0 -8
  240. package/esm2022/lib/models/generated/edge.model.mjs +0 -8
  241. package/esm2022/lib/models/generated/element.model.mjs +0 -8
  242. package/esm2022/lib/models/generated/file-source.model.mjs +0 -8
  243. package/esm2022/lib/models/generated/format.model.mjs +0 -12
  244. package/esm2022/lib/models/generated/heading.model.mjs +0 -16
  245. package/esm2022/lib/models/generated/image-data.model.mjs +0 -8
  246. package/esm2022/lib/models/generated/image.model.mjs +0 -12
  247. package/esm2022/lib/models/generated/insert-break.model.mjs +0 -8
  248. package/esm2022/lib/models/generated/insert-element.model.mjs +0 -12
  249. package/esm2022/lib/models/generated/insert-image.model.mjs +0 -12
  250. package/esm2022/lib/models/generated/insert-link.model.mjs +0 -12
  251. package/esm2022/lib/models/generated/insert-paragraph.model.mjs +0 -20
  252. package/esm2022/lib/models/generated/insert-styled-text.model.mjs +0 -12
  253. package/esm2022/lib/models/generated/insert-tab.model.mjs +0 -8
  254. package/esm2022/lib/models/generated/insert-table-columns.model.mjs +0 -8
  255. package/esm2022/lib/models/generated/insert-table-rows.model.mjs +0 -8
  256. package/esm2022/lib/models/generated/insert-table.model.mjs +0 -8
  257. package/esm2022/lib/models/generated/insert-text.model.mjs +0 -8
  258. package/esm2022/lib/models/generated/last-document-revision.model.mjs +0 -12
  259. package/esm2022/lib/models/generated/link-data.model.mjs +0 -8
  260. package/esm2022/lib/models/generated/link.model.mjs +0 -8
  261. package/esm2022/lib/models/generated/margins.model.mjs +0 -8
  262. package/esm2022/lib/models/generated/numbering-level.model.mjs +0 -12
  263. package/esm2022/lib/models/generated/numbering.model.mjs +0 -8
  264. package/esm2022/lib/models/generated/operation.model.mjs +0 -12
  265. package/esm2022/lib/models/generated/page-numbers.model.mjs +0 -8
  266. package/esm2022/lib/models/generated/paragraph-style.model.mjs +0 -8
  267. package/esm2022/lib/models/generated/paragraph.model.mjs +0 -12
  268. package/esm2022/lib/models/generated/remove-numberings.model.mjs +0 -8
  269. package/esm2022/lib/models/generated/remove-table-columns.model.mjs +0 -8
  270. package/esm2022/lib/models/generated/remove-table-rows.model.mjs +0 -8
  271. package/esm2022/lib/models/generated/replace-by-text.model.mjs +0 -8
  272. package/esm2022/lib/models/generated/replace.model.mjs +0 -44
  273. package/esm2022/lib/models/generated/resize-table-columns.model.mjs +0 -8
  274. package/esm2022/lib/models/generated/restore-numberings.model.mjs +0 -8
  275. package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +0 -8
  276. package/esm2022/lib/models/generated/restore-table.model.mjs +0 -12
  277. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +0 -8
  278. package/esm2022/lib/models/generated/restore.model.mjs +0 -8
  279. package/esm2022/lib/models/generated/revision.model.mjs +0 -12
  280. package/esm2022/lib/models/generated/row.model.mjs +0 -8
  281. package/esm2022/lib/models/generated/tab.model.mjs +0 -8
  282. package/esm2022/lib/models/generated/table-cell.model.mjs +0 -8
  283. package/esm2022/lib/models/generated/table.model.mjs +0 -12
  284. package/esm2022/lib/models/generated/target.model.mjs +0 -16
  285. package/esm2022/lib/models/generated/text-style.model.mjs +0 -8
  286. package/esm2022/lib/translate/noder-translate.loader.mjs +0 -22
  287. package/esm2022/public-api.mjs +0 -54
  288. package/esm2022/talrace-ngx-noder.mjs +0 -5
@@ -1,94 +0,0 @@
1
- import { CursorParagraph } from './cursor-paragraph';
2
- import { PositionHelper } from './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(position) {
21
- return this.comparePosition(position) === 0;
22
- }
23
- comparePosition(position) {
24
- const compare = this.compareSingleLine(position);
25
- return compare ?? this.compareMultiLine(position);
26
- }
27
- /**
28
- * Given the current `Range`,
29
- * this function converts those starting and ending cursor positions 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 {CursorParagraph}
43
- **/
44
- clipRows(firstRow, lastRow) {
45
- let end;
46
- if (this.end.row > lastRow) {
47
- end = new CursorParagraph(lastRow + 1, 0);
48
- }
49
- else if (this.end.row < firstRow) {
50
- end = new CursorParagraph(firstRow, 0);
51
- }
52
- let start;
53
- if (this.start.row > lastRow) {
54
- start = new CursorParagraph(lastRow + 1, 0);
55
- }
56
- else if (this.start.row < firstRow) {
57
- start = new CursorParagraph(firstRow, 0);
58
- }
59
- return new Range(start || this.start, end || this.end);
60
- }
61
- compareSingleLine(position) {
62
- if (!this.isSingleLine) {
63
- return null;
64
- }
65
- if (position.row === this.start.row) {
66
- if (position.column < this.start.column) {
67
- return -1;
68
- }
69
- else if (position.column > this.end.column) {
70
- return 1;
71
- }
72
- else {
73
- return 0;
74
- }
75
- }
76
- return null;
77
- }
78
- compareMultiLine(position) {
79
- if (this.start.row === position.row) {
80
- return position.column >= this.start.column ? 0 : -1;
81
- }
82
- if (this.end.row === position.row) {
83
- return position.column <= this.end.column ? 0 : 1;
84
- }
85
- if (position.row < this.start.row) {
86
- return -1;
87
- }
88
- if (position.row > this.end.row) {
89
- return 1;
90
- }
91
- return 0;
92
- }
93
- }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sS0FBSztJQU1kLElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWSxLQUFzQixFQUFFLEdBQW9CO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBK0Q7UUFDMUUsT0FBTyxDQUNILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUN2QyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUF5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QUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDYjtRQUVELElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUM3QixPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9wb3NpdGlvbi5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgUmFuZ2Uge1xuICAgIHN0YXJ0OiBDdXJzb3JQYXJhZ3JhcGg7XG4gICAgZW5kOiBDdXJzb3JQYXJhZ3JhcGg7XG5cbiAgICBjdXJzb3I6IEN1cnNvclBhcmFncmFwaDtcblxuICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUxpbmUgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbjtcbiAgICB9XG5cbiAgICBnZXQgaXNTaW5nbGVMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT09IHRoaXMuZW5kLnJvdztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFydDogQ3Vyc29yUGFyYWdyYXBoLCBlbmQ6IEN1cnNvclBhcmFncmFwaCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFsKHJhbmdlOiBSYW5nZSB8IHsgc3RhcnQ6IEN1cnNvclBhcmFncmFwaDsgZW5kOiBDdXJzb3JQYXJhZ3JhcGggfSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmXG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb250YWlucyhwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb3NpdGlvbihwb3NpdGlvbikgPT09IDA7XG4gICAgfVxuXG4gICAgY29tcGFyZVBvc2l0aW9uKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjb21wYXJlID0gdGhpcy5jb21wYXJlU2luZ2xlTGluZShwb3NpdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBhcmUgPz8gdGhpcy5jb21wYXJlTXVsdGlMaW5lKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiB0aGUgY3VycmVudCBgUmFuZ2VgLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhvc2Ugc3RhcnRpbmcgYW5kIGVuZGluZyBjdXJzb3IgcG9zaXRpb25zIGludG8gc2NyZWVuIHBvc2l0aW9ucywgYW5kIHRoZW4gcmV0dXJucyBhIG5ldyBgUmFuZ2VgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0VkaXRTZXNzaW9ufSBzZXNzaW9uIFRoZSBgRWRpdFNlc3Npb25gIHRvIHJldHJpZXZlIGNvb3JkaW5hdGVzIGZyb21cbiAgICAgKiBAcmV0dXJucyB7UmFuZ2V9XG4gICAgICoqL1xuICAgIHRvU2NyZWVuUmFuZ2Uoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiBSYW5nZSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblBvc1N0YXJ0ID0gUG9zaXRpb25IZWxwZXIuZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uLCB0aGlzLnN0YXJ0LnJvdywgdGhpcy5zdGFydC5jb2x1bW4pO1xuICAgICAgICBjb25zdCBzY3JlZW5Qb3NFbmQgPSBQb3NpdGlvbkhlbHBlci5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIHRoaXMuZW5kLnJvdywgdGhpcy5lbmQuY29sdW1uKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHNjcmVlblBvc1N0YXJ0LCBzY3JlZW5Qb3NFbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBhcnQgb2YgdGhlIGN1cnJlbnQgYFJhbmdlYCB0aGF0IG9jY3VycyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgYGZpcnN0Um93YCBhbmQgYGxhc3RSb3dgIGFzIGEgbmV3IGBSYW5nZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBmaXJzdFJvdyBUaGUgc3RhcnRpbmcgcm93XG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGxhc3RSb3cgVGhlIGVuZGluZyByb3dcbiAgICAgKiBAcmV0dXJucyB7Q3Vyc29yUGFyYWdyYXBofVxuICAgICAqKi9cbiAgICBjbGlwUm93cyhmaXJzdFJvdzogbnVtYmVyLCBsYXN0Um93OiBudW1iZXIpOiBSYW5nZSB7XG4gICAgICAgIGxldCBlbmQ6IEN1cnNvclBhcmFncmFwaDtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA+IGxhc3RSb3cpIHtcbiAgICAgICAgICAgIGVuZCA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KSB7XG4gICAgICAgICAgICBlbmQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKGZpcnN0Um93LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydDogQ3Vyc29yUGFyYWdyYXBoO1xuICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPiBsYXN0Um93KSB7XG4gICAgICAgICAgICBzdGFydCA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbmV3IEN1cnNvclBhcmFncmFwaChmaXJzdFJvdywgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlU2luZ2xlTGluZShwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24ucm93ID09PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbi5jb2x1bW4gPiB0aGlzLmVuZC5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVNdWx0aUxpbmUocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24uY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24uY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA8IHRoaXMuc3RhcnQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24ucm93ID4gdGhpcy5lbmQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,351 +0,0 @@
1
- import { ContentHelper } from './content.helper';
2
- import { CursorParagraph } from './cursor-paragraph';
3
- import { PositionHelper } from './position.helper';
4
- import { Range } from './range';
5
- export class Selection {
6
- constructor() {
7
- this.anchor = null;
8
- this.cursor = new CursorParagraph(0, 0);
9
- this.isDisabled = false;
10
- this.focusedComponent = null;
11
- this.keepLinePositionX = null;
12
- }
13
- get isFocused() {
14
- return !!this.focusedComponent;
15
- }
16
- get isEmpty() {
17
- return this.anchor === null || (this.anchor.row === this.cursor.row && this.anchor.column === this.cursor.column);
18
- }
19
- get isBackwards() {
20
- return this.anchor.row > this.cursor.row || (this.anchor.row === this.cursor.row && this.anchor.column > this.cursor.column);
21
- }
22
- get selectedRange() {
23
- if (!this.focusedComponent) {
24
- return this.range;
25
- }
26
- const cursor = new CursorParagraph(this.cursor.row, this.cursor.column);
27
- return new Range(cursor, cursor);
28
- }
29
- get range() {
30
- const cursor = new CursorParagraph(this.cursor.row, this.cursor.column);
31
- if (this.isEmpty) {
32
- return new Range(cursor, cursor);
33
- }
34
- const anchor = new CursorParagraph(this.anchor.row, this.anchor.column);
35
- return this.isBackwards ? new Range(cursor, anchor) : new Range(anchor, cursor);
36
- }
37
- focus(component, position) {
38
- if (component === this.focusedComponent) {
39
- return;
40
- }
41
- this.focusedComponent?.instance.blur();
42
- component.instance.focus();
43
- this.focusedComponent = component;
44
- this.cursor = position;
45
- this.anchor = new CursorParagraph(position.row, position.column + 1);
46
- this.keepLinePositionX = null;
47
- }
48
- blur() {
49
- this.focusedComponent?.instance.blur();
50
- this.focusedComponent = null;
51
- }
52
- placeCursor(cursor) {
53
- this.cursor = cursor;
54
- this.anchor = null;
55
- this.keepLinePositionX = null;
56
- this.focusedComponent?.instance.blur();
57
- this.focusedComponent = null;
58
- }
59
- moveCursor(cursor) {
60
- this.cursor = cursor;
61
- this.keepLinePositionX = null;
62
- this.focusedComponent?.instance.blur();
63
- this.focusedComponent = null;
64
- }
65
- placeSelection(cursor, anchor) {
66
- this.cursor = cursor;
67
- this.anchor = anchor;
68
- this.keepLinePositionX = null;
69
- this.focusedComponent?.instance.blur();
70
- this.focusedComponent = null;
71
- }
72
- moveSelection(position) {
73
- if (!this.anchor) {
74
- this.anchor = this.cursor;
75
- }
76
- this.moveCursor(position);
77
- }
78
- clearSelection() {
79
- this.anchor = null;
80
- this.keepLinePositionX = null;
81
- this.focusedComponent?.instance.blur();
82
- this.focusedComponent = null;
83
- }
84
- disableSelection() {
85
- this.isDisabled = true;
86
- this.clearSelection();
87
- }
88
- enableSelection() {
89
- this.isDisabled = false;
90
- }
91
- selectAll(model) {
92
- const last = model.paragraphs.length - 1;
93
- const length = last > 0 ? model.contentLength - model.paragraphs[last - 1].insertIndex - 1 : model.contentLength;
94
- this.placeSelection(new CursorParagraph(0, 0), new CursorParagraph(last, length));
95
- }
96
- selectUp(session) {
97
- if (!this.anchor) {
98
- this.anchor = this.cursor;
99
- }
100
- this.moveCursorUp(session, this.cursor);
101
- }
102
- navigateUp(session) {
103
- const position = this.isEmpty || this.isBackwards ? this.cursor : this.anchor;
104
- this.moveCursorUp(session, position);
105
- this.anchor = null;
106
- }
107
- selectDown(session) {
108
- if (!this.anchor) {
109
- this.anchor = this.cursor;
110
- }
111
- this.moveCursorDown(session, this.cursor);
112
- }
113
- navigateDown(session) {
114
- const position = this.isEmpty || !this.isBackwards ? this.cursor : this.anchor;
115
- this.moveCursorDown(session, position);
116
- this.anchor = null;
117
- }
118
- selectRight(session) {
119
- const position = this.getCursorRight(session);
120
- this.moveSelection(position);
121
- }
122
- navigateRight(session) {
123
- if (this.isEmpty) {
124
- const position = this.getCursorRight(session);
125
- this.placeCursor(position);
126
- }
127
- else {
128
- const position = !this.isBackwards ? this.cursor : this.anchor;
129
- this.placeCursor(position);
130
- }
131
- }
132
- selectLeft(session) {
133
- const position = this.getCursorLeft(session);
134
- this.moveSelection(position);
135
- }
136
- navigateLeft(session) {
137
- if (this.isEmpty) {
138
- const position = this.getCursorLeft(session);
139
- this.placeCursor(position);
140
- }
141
- else {
142
- const position = this.isBackwards ? this.cursor : this.anchor;
143
- this.placeCursor(position);
144
- }
145
- }
146
- selectLineStart(session) {
147
- const position = this.getLineStart(session, this.cursor);
148
- this.moveSelection(position);
149
- }
150
- navigateLineStart(session) {
151
- const position = this.getLineStart(session, this.cursor);
152
- this.placeCursor(position);
153
- }
154
- selectLineEnd(session) {
155
- const position = this.getLineEnd(session, this.cursor);
156
- this.moveSelection(position);
157
- }
158
- navigateLineEnd(session) {
159
- const position = this.getLineEnd(session, this.cursor);
160
- this.placeCursor(position);
161
- }
162
- selectFileEnd(session) {
163
- const paragraph = session.displayData.paragraphs.length - 1;
164
- const paragraphIndex = session.displayData.getParagraphContent(paragraph).length;
165
- this.moveSelection(new CursorParagraph(paragraph, paragraphIndex));
166
- }
167
- navigateFileEnd(session) {
168
- const paragraph = session.displayData.paragraphs.length - 1;
169
- const paragraphIndex = session.displayData.getParagraphContent(paragraph).length;
170
- this.placeCursor(new CursorParagraph(paragraph, paragraphIndex));
171
- }
172
- selectFileStart() {
173
- this.moveSelection(new CursorParagraph(0, 0));
174
- }
175
- navigateFileStart() {
176
- this.placeCursor(new CursorParagraph(0, 0));
177
- }
178
- selectWordRight(session) {
179
- const position = this.getWordRight(session, this.cursor);
180
- this.moveSelection(position);
181
- }
182
- navigateWordRight(session) {
183
- const position = this.getWordRight(session, this.cursor);
184
- this.placeCursor(position);
185
- }
186
- selectWordLeft(session) {
187
- const position = this.getWordLeft(session, this.cursor);
188
- this.moveSelection(position);
189
- }
190
- navigateWordLeft(session) {
191
- const position = this.getWordLeft(session, this.cursor);
192
- this.placeCursor(position);
193
- }
194
- moveCursorUp(session, position) {
195
- const line = PositionHelper.documentToScreen(session, position.row, position.column);
196
- if (line.row === 0) {
197
- this.selectLineStart(session);
198
- }
199
- else {
200
- this.moveToLine(session, line.row - 1, line);
201
- }
202
- }
203
- moveCursorDown(session, position) {
204
- const line = PositionHelper.documentToScreen(session, position.row, position.column);
205
- const lastParagraphsIndex = session.displayData.paragraphs.length - 1;
206
- const lastParagraph = session.displayData.getParagraphSettings(lastParagraphsIndex);
207
- const lastParagraphLine = lastParagraph.textLinesInfo[lastParagraph.textLinesInfo.length - 1].screenLine;
208
- if (line.row === lastParagraphLine) {
209
- this.selectLineEnd(session);
210
- }
211
- else {
212
- this.moveToLine(session, line.row + 1, line);
213
- }
214
- }
215
- moveToLine(session, line, fromLine) {
216
- if (!this.keepLinePositionX) {
217
- this.keepLinePositionX = PositionHelper.screenToPixel(session, fromLine.row, fromLine.column).pageX;
218
- }
219
- const column = PositionHelper.getApproximatePosition(session, line, this.keepLinePositionX);
220
- this.cursor = PositionHelper.screenToDocument(session, line, column);
221
- }
222
- getCursorLeft(session) {
223
- if (this.cursor.row === 0 && this.cursor.column === 0) {
224
- return this.cursor;
225
- }
226
- const index = ContentHelper.paragraphPositionToDocumentIndex(session.displayData.paragraphs, this.cursor);
227
- return ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, index - 1);
228
- }
229
- getCursorRight(session) {
230
- const last = session.displayData.paragraphs.length - 1;
231
- if (this.cursor.row === last && this.cursor.column === session.displayData.getParagraphContent(last).length) {
232
- return this.cursor;
233
- }
234
- const index = ContentHelper.paragraphPositionToDocumentIndex(session.displayData.paragraphs, this.cursor);
235
- return ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, index + 1);
236
- }
237
- getLineStart(session, position) {
238
- const line = PositionHelper.documentToScreen(session, position.row, position.column);
239
- return PositionHelper.screenToDocument(session, line.row, 0);
240
- }
241
- getLineEnd(session, position) {
242
- const line = PositionHelper.documentToScreen(session, position.row, position.column);
243
- const paragraphLength = session.displayData.getParagraphContent(position.row).length;
244
- const linesCount = session.displayData.getParagraphSettings(position.row).textLinesInfo.length;
245
- if (linesCount === 1) {
246
- return PositionHelper.screenToDocument(session, line.row, paragraphLength);
247
- }
248
- const paragraphLine = line.row - session.displayData.paragraphs[position.row].lineNumber;
249
- let index;
250
- if (paragraphLine === 0) {
251
- index = session.displayData.paragraphs[position.row].nextLineIndexes[0];
252
- }
253
- else if (paragraphLine === linesCount - 1) {
254
- index = paragraphLength - session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine - 1];
255
- }
256
- else {
257
- index =
258
- session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine] -
259
- session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine - 1];
260
- }
261
- return PositionHelper.screenToDocument(session, line.row, index);
262
- }
263
- getWordRight(session, position) {
264
- let row = position.row;
265
- let column = position.column;
266
- const paragraphContent = session.displayData.getParagraphContent(row);
267
- const documentLength = session.displayData.paragraphs.length;
268
- if (row + 1 >= documentLength && column === paragraphContent.length) {
269
- return position;
270
- }
271
- let rightOfCursor = paragraphContent.substring(column);
272
- if (column === paragraphContent.length) {
273
- do {
274
- row++;
275
- rightOfCursor = session.displayData.getParagraphContent(row);
276
- } while (row < documentLength && /^\s*$/.test(rightOfCursor));
277
- if (!/^\s+/.test(rightOfCursor)) {
278
- rightOfCursor = '';
279
- }
280
- column = 0;
281
- }
282
- const index = this.shortWordEndIndex(session.tokenRe, rightOfCursor);
283
- return new CursorParagraph(row, column + index);
284
- }
285
- getWordLeft(session, position) {
286
- let row = position.row;
287
- let column = position.column;
288
- if (column === 0 && row === 0) {
289
- return position;
290
- }
291
- let paragraphContent = session.displayData.getParagraphContent(row).substring(0, column);
292
- if (column === 0) {
293
- do {
294
- row--;
295
- paragraphContent = session.displayData.getParagraphContent(row);
296
- } while (row > 0 && /^\s*$/.test(paragraphContent));
297
- column = paragraphContent.length;
298
- if (!/\s+$/.test(paragraphContent)) {
299
- paragraphContent = '';
300
- }
301
- }
302
- const leftOfCursor = paragraphContent.split('').reverse().join('');
303
- const index = this.shortWordEndIndex(session.tokenRe, leftOfCursor);
304
- return new CursorParagraph(row, column - index);
305
- }
306
- shortWordEndIndex(tokenRe, rightOfCursor) {
307
- let index;
308
- tokenRe.lastIndex = 0;
309
- if (tokenRe.exec(rightOfCursor)) {
310
- index = tokenRe.lastIndex;
311
- }
312
- else {
313
- index = this.handleNoTokenFound(tokenRe, rightOfCursor);
314
- }
315
- tokenRe.lastIndex = 0;
316
- return index;
317
- }
318
- handleNoTokenFound(tokenRe, rightOfCursor) {
319
- const whitespaceRe = /\s/;
320
- let index = 0;
321
- while (rightOfCursor[index] && whitespaceRe.test(rightOfCursor[index])) {
322
- index++;
323
- }
324
- if (index < 1) {
325
- index = this.handleNoWhitespaceFound(tokenRe, rightOfCursor, whitespaceRe);
326
- }
327
- return index;
328
- }
329
- handleNoWhitespaceFound(tokenRe, rightOfCursor, whitespaceRe) {
330
- let index = 0;
331
- tokenRe.lastIndex = 0;
332
- while (rightOfCursor[index] && !tokenRe.test(rightOfCursor[index])) {
333
- tokenRe.lastIndex = 0;
334
- index++;
335
- if (whitespaceRe.test(rightOfCursor[index])) {
336
- if (index > 2) {
337
- index--;
338
- break;
339
- }
340
- while (rightOfCursor[index] && whitespaceRe.test(rightOfCursor[index])) {
341
- index++;
342
- }
343
- if (index > 2) {
344
- break;
345
- }
346
- }
347
- }
348
- return index;
349
- }
350
- }
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3Bvc2l0aW9uaW5nL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ0ksV0FBTSxHQUEyQixJQUFJLENBQUM7UUFFdEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRVgscUJBQWdCLEdBQTRDLElBQUksQ0FBQztRQUVqRSxzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBNFhwRCxDQUFDO0lBMVhHLElBQUksU0FBUztRQUNULE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENB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QUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ1gsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTTtpQkFDVDtnQkFDRCxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNwRSxLQUFLLEVBQUUsQ0FBQztpQkFDWDtnQkFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ1gsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudEhlbHBlciB9IGZyb20gJy4vY29udGVudC5oZWxwZXInO1xuaW1wb3J0IHsgQ29udGVudHNJbnRlcmZhY2UgfSBmcm9tICcuLi9jb250ZW50L2NvbnRlbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9wb3NpdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuL3JhbmdlJztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbiB7XG4gICAgYW5jaG9yOiBDdXJzb3JQYXJhZ3JhcGggfCBudWxsID0gbnVsbDtcblxuICAgIGN1cnNvciA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgoMCwgMCk7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGZvY3VzZWRDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlTm9kZXJDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGtlZXBMaW5lUG9zaXRpb25YOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGdldCBpc0ZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZm9jdXNlZENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jaG9yID09PSBudWxsIHx8ICh0aGlzLmFuY2hvci5yb3cgPT09IHRoaXMuY3Vyc29yLnJvdyAmJiB0aGlzLmFuY2hvci5jb2x1bW4gPT09IHRoaXMuY3Vyc29yLmNvbHVtbik7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmFja3dhcmRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmNob3Iucm93ID4gdGhpcy5jdXJzb3Iucm93IHx8ICh0aGlzLmFuY2hvci5yb3cgPT09IHRoaXMuY3Vyc29yLnJvdyAmJiB0aGlzLmFuY2hvci5jb2x1bW4gPiB0aGlzLmN1cnNvci5jb2x1bW4pO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFJhbmdlKCk6IFJhbmdlIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgodGhpcy5jdXJzb3Iucm93LCB0aGlzLmN1cnNvci5jb2x1bW4pO1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKGN1cnNvciwgY3Vyc29yKTtcbiAgICB9XG5cbiAgICBnZXQgcmFuZ2UoKTogUmFuZ2Uge1xuICAgICAgICBjb25zdCBjdXJzb3IgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHRoaXMuY3Vyc29yLnJvdywgdGhpcy5jdXJzb3IuY29sdW1uKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShjdXJzb3IsIGN1cnNvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHRoaXMuYW5jaG9yLnJvdywgdGhpcy5hbmNob3IuY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCYWNrd2FyZHMgPyBuZXcgUmFuZ2UoY3Vyc29yLCBhbmNob3IpIDogbmV3IFJhbmdlKGFuY2hvciwgY3Vyc29yKTtcbiAgICB9XG5cbiAgICBmb2N1cyhjb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlTm9kZXJDb21wb25lbnQ+LCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogdm9pZCB7XG4gICAgICAgIGlmIChjb21wb25lbnQgPT09IHRoaXMuZm9jdXNlZENvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Py5pbnN0YW5jZS5ibHVyKCk7XG4gICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbmV3IEN1cnNvclBhcmFncmFwaChwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiArIDEpO1xuICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gbnVsbDtcbiAgICB9XG5cbiAgICBibHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBwbGFjZUN1cnNvcihjdXJzb3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBudWxsO1xuICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Py5pbnN0YW5jZS5ibHVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgbW92ZUN1cnNvcihjdXJzb3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5rZWVwTGluZVBvc2l0aW9uWCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudD8uaW5zdGFuY2UuYmx1cigpO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHBsYWNlU2VsZWN0aW9uKGN1cnNvcjogQ3Vyc29yUGFyYWdyYXBoLCBhbmNob3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgIHRoaXMua2VlcExpbmVQb3NpdGlvblggPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBtb3ZlU2VsZWN0aW9uKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFuY2hvcikge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdmVDdXJzb3IocG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFuY2hvciA9IG51bGw7XG4gICAgICAgIHRoaXMua2VlcExpbmVQb3NpdGlvblggPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBkaXNhYmxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgZW5hYmxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZWxlY3RBbGwobW9kZWw6IENvbnRlbnRzSW50ZXJmYWNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBtb2RlbC5wYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGxhc3QgPiAwID8gbW9kZWwuY29udGVudExlbmd0aCAtIG1vZGVsLnBhcmFncmFwaHNbbGFzdCAtIDFdLmluc2VydEluZGV4IC0gMSA6IG1vZGVsLmNvbnRlbnRMZW5ndGg7XG4gICAgICAgIHRoaXMucGxhY2VTZWxlY3Rpb24obmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSwgbmV3IEN1cnNvclBhcmFncmFwaChsYXN0LCBsZW5ndGgpKTtcbiAgICB9XG5cbiAgICBzZWxlY3RVcChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYW5jaG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvciA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclVwKHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVVwKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5pc0VtcHR5IHx8IHRoaXMuaXNCYWNrd2FyZHMgPyB0aGlzLmN1cnNvciA6IHRoaXMuYW5jaG9yO1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JVcChzZXNzaW9uLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZWxlY3REb3duKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yRG93bihzZXNzaW9uLCB0aGlzLmN1cnNvcik7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVEb3duKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5pc0VtcHR5IHx8ICF0aGlzLmlzQmFja3dhcmRzID8gdGhpcy5jdXJzb3IgOiB0aGlzLmFuY2hvcjtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yRG93bihzZXNzaW9uLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZWxlY3RSaWdodChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUmlnaHQoc2Vzc2lvbik7XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVSaWdodChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUmlnaHQoc2Vzc2lvbik7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaXNCYWNrd2FyZHMgPyB0aGlzLmN1cnNvciA6IHRoaXMuYW5jaG9yO1xuICAgICAgICAgICAgdGhpcy5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RMZWZ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRDdXJzb3JMZWZ0KHNlc3Npb24pO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yTGVmdChzZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmlzQmFja3dhcmRzID8gdGhpcy5jdXJzb3IgOiB0aGlzLmFuY2hvcjtcbiAgICAgICAgICAgIHRoaXMucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0TGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lU3RhcnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlTGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lU3RhcnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RMaW5lRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lRW5kKHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZUxpbmVFbmQoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldExpbmVFbmQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RGaWxlRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhJbmRleCA9IHNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChwYXJhZ3JhcGgpLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uKG5ldyBDdXJzb3JQYXJhZ3JhcGgocGFyYWdyYXBoLCBwYXJhZ3JhcGhJbmRleCkpO1xuICAgIH1cblxuICAgIG5hdmlnYXRlRmlsZUVuZChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSW5kZXggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoKS5sZW5ndGg7XG4gICAgICAgIHRoaXMucGxhY2VDdXJzb3IobmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGgsIHBhcmFncmFwaEluZGV4KSk7XG4gICAgfVxuXG4gICAgc2VsZWN0RmlsZVN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24obmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSk7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVGaWxlU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxhY2VDdXJzb3IobmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSk7XG4gICAgfVxuXG4gICAgc2VsZWN0V29yZFJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRXb3JkUmlnaHQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlV29yZFJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRXb3JkUmlnaHQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RXb3JkTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0V29yZExlZnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlV29yZExlZnQoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldFdvcmRMZWZ0KHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgdGhpcy5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlQ3Vyc29yVXAoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICBpZiAobGluZS5yb3cgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TGluZVN0YXJ0KHNlc3Npb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVG9MaW5lKHNlc3Npb24sIGxpbmUucm93IC0gMSwgbGluZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVDdXJzb3JEb3duKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBQb3NpdGlvbkhlbHBlci5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgY29uc3QgbGFzdFBhcmFncmFwaHNJbmRleCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBsYXN0UGFyYWdyYXBoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhsYXN0UGFyYWdyYXBoc0luZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdFBhcmFncmFwaExpbmUgPSBsYXN0UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bbGFzdFBhcmFncmFwaC50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDFdLnNjcmVlbkxpbmU7XG4gICAgICAgIGlmIChsaW5lLnJvdyA9PT0gbGFzdFBhcmFncmFwaExpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TGluZUVuZChzZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVRvTGluZShzZXNzaW9uLCBsaW5lLnJvdyArIDEsIGxpbmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlVG9MaW5lKHNlc3Npb246IEVkaXRTZXNzaW9uLCBsaW5lOiBudW1iZXIsIGZyb21MaW5lOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmtlZXBMaW5lUG9zaXRpb25YKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9QaXhlbChzZXNzaW9uLCBmcm9tTGluZS5yb3csIGZyb21MaW5lLmNvbHVtbikucGFnZVg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sdW1uID0gUG9zaXRpb25IZWxwZXIuZ2V0QXBwcm94aW1hdGVQb3NpdGlvbihzZXNzaW9uLCBsaW5lLCB0aGlzLmtlZXBMaW5lUG9zaXRpb25YKTtcbiAgICAgICAgdGhpcy5jdXJzb3IgPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHNlc3Npb24sIGxpbmUsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJzb3JMZWZ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yLnJvdyA9PT0gMCAmJiB0aGlzLmN1cnNvci5jb2x1bW4gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCB0aGlzLmN1cnNvcik7XG4gICAgICAgIHJldHVybiBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnNvclJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3Iucm93ID09PSBsYXN0ICYmIHRoaXMuY3Vyc29yLmNvbHVtbiA9PT0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KGxhc3QpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc29yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleChzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudChzZXNzaW9uLCBsaW5lLnJvdywgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMZW5ndGggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocG9zaXRpb24ucm93KS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxpbmVzQ291bnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKHBvc2l0aW9uLnJvdykudGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgIGlmIChsaW5lc0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudChzZXNzaW9uLCBsaW5lLnJvdywgcGFyYWdyYXBoTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaW5lID0gbGluZS5yb3cgLSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcG9zaXRpb24ucm93XS5saW5lTnVtYmVyO1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHBhcmFncmFwaExpbmUgPT09IDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Bvc2l0aW9uLnJvd10ubmV4dExpbmVJbmRleGVzWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaExpbmUgPT09IGxpbmVzQ291bnQgLSAxKSB7XG4gICAgICAgICAgICBpbmRleCA9IHBhcmFncmFwaExlbmd0aCAtIHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1twb3NpdGlvbi5yb3ddLm5leHRMaW5lSW5kZXhlc1twYXJhZ3JhcGhMaW5lIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Bvc2l0aW9uLnJvd10ubmV4dExpbmVJbmRleGVzW3BhcmFncmFwaExpbmVdIC1cbiAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcG9zaXRpb24ucm93XS5uZXh0TGluZUluZGV4ZXNbcGFyYWdyYXBoTGluZSAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHNlc3Npb24sIGxpbmUucm93LCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXb3JkUmlnaHQoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBsZXQgcm93ID0gcG9zaXRpb24ucm93O1xuICAgICAgICBsZXQgY29sdW1uID0gcG9zaXRpb24uY29sdW1uO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhDb250ZW50ID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHJvdyk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50TGVuZ3RoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aDtcbiAgICAgICAgaWYgKHJvdyArIDEgPj0gZG9jdW1lbnRMZW5ndGggJiYgY29sdW1uID09PSBwYXJhZ3JhcGhDb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCByaWdodE9mQ3Vyc29yID0gcGFyYWdyYXBoQ29udGVudC5zdWJzdHJpbmcoY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PT0gcGFyYWdyYXBoQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHJvdyk7XG4gICAgICAgICAgICB9IHdoaWxlIChyb3cgPCBkb2N1bWVudExlbmd0aCAmJiAvXlxccyokLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKTtcbiAgICAgICAgICAgIGlmICghL15cXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKSB7XG4gICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2hvcnRXb3JkRW5kSW5kZXgoc2Vzc2lvbi50b2tlblJlLCByaWdodE9mQ3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBjb2x1bW4gKyBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXb3JkTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGxldCByb3cgPSBwb3NpdGlvbi5yb3c7XG4gICAgICAgIGxldCBjb2x1bW4gPSBwb3NpdGlvbi5jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDAgJiYgcm93ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFncmFwaENvbnRlbnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PT0gMCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJvdy0tO1xuICAgICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHJvdyA+IDAgJiYgL15cXHMqJC8udGVzdChwYXJhZ3JhcGhDb250ZW50KSk7XG4gICAgICAgICAgICBjb2x1bW4gPSBwYXJhZ3JhcGhDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICghL1xccyskLy50ZXN0KHBhcmFncmFwaENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnRPZkN1cnNvciA9IHBhcmFncmFwaENvbnRlbnQuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNob3J0V29yZEVuZEluZGV4KHNlc3Npb24udG9rZW5SZSwgbGVmdE9mQ3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBjb2x1bW4gLSBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG9ydFdvcmRFbmRJbmRleCh0b2tlblJlOiBSZWdFeHAsIHJpZ2h0T2ZDdXJzb3I6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyO1xuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICh0b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdG9rZW5SZS5sYXN0SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuaGFuZGxlTm9Ub2tlbkZvdW5kKHRva2VuUmUsIHJpZ2h0T2ZDdXJzb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTm9Ub2tlbkZvdW5kKHRva2VuUmU6IFJlZ0V4cCwgcmlnaHRPZkN1cnNvcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZVJlID0gL1xccy87XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChyaWdodE9mQ3Vyc29yW2luZGV4XSAmJiB3aGl0ZXNwYWNlUmUudGVzdChyaWdodE9mQ3Vyc29yW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgMSkge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmhhbmRsZU5vV2hpdGVzcGFjZUZvdW5kKHRva2VuUmUsIHJpZ2h0T2ZDdXJzb3IsIHdoaXRlc3BhY2VSZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTm9XaGl0ZXNwYWNlRm91bmQodG9rZW5SZTogUmVnRXhwLCByaWdodE9mQ3Vyc29yOiBzdHJpbmcsIHdoaXRlc3BhY2VSZTogUmVnRXhwKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocmlnaHRPZkN1cnNvcltpbmRleF0gJiYgIXRva2VuUmUudGVzdChyaWdodE9mQ3Vyc29yW2luZGV4XSkpIHtcbiAgICAgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBpZiAod2hpdGVzcGFjZVJlLnRlc3QocmlnaHRPZkN1cnNvcltpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikge1xuICAgICAgICAgICAgICAgICAgICBpbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0T2ZDdXJzb3JbaW5kZXhdICYmIHdoaXRlc3BhY2VSZS50ZXN0KHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufVxuIl19
@@ -1,94 +0,0 @@
1
- import { ContentStyleHelper } from './content/helpers/content-style.helper';
2
- import { DEFAULT_HEADINGS, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE } from './content/constants/editor.const';
3
- import { DocumentInfo } from './content/constants/document-info.const';
4
- import { DocxModel } from '../models/generated/docx.model';
5
- import { FormatModel } from '../models/generated/format.model';
6
- import { MarginModel } from './content/margin.model';
7
- import { OperationsHelper } from './operations/operations-helper.helper';
8
- import { ParagraphModel } from '../models/generated/paragraph.model';
9
- import { ParagraphStyleModel } from '../models/generated/paragraph-style.model';
10
- export class RevisionHelper {
11
- static applyOperationsToRevision(revision, operations) {
12
- operations.sort((a, b) => a.createTime - b.createTime);
13
- const actions = operations.map(x => x.command);
14
- OperationsHelper.applyOperations(revision.content, actions);
15
- }
16
- static fillTablesDefaultStyles(tables) {
17
- for (const table of tables) {
18
- for (const row of table.rows) {
19
- for (const cell of row.cells) {
20
- this.fillDefaultStyles(cell);
21
- }
22
- }
23
- }
24
- }
25
- static fillEdgesDefaultStyles(headers, footers) {
26
- for (const header of headers) {
27
- this.fillTablesDefaultStyles(header.tables);
28
- this.fillDefaultStyles(header);
29
- }
30
- for (const footer of footers) {
31
- this.fillTablesDefaultStyles(footer.tables);
32
- this.fillDefaultStyles(footer);
33
- }
34
- }
35
- static fillDefaultStyles(contents) {
36
- for (const format of contents.formats) {
37
- format.textStyle = ContentStyleHelper.combineTextStyles(format.textStyle, DEFAULT_TEXT_STYLE);
38
- }
39
- for (const paragraph of contents.paragraphs) {
40
- paragraph.paragraphStyle = this.fillParagraphStyleModel(paragraph.paragraphStyle);
41
- }
42
- }
43
- static fillParagraphStyleModel(paragraphStyle) {
44
- return new ParagraphStyleModel({
45
- alignment: paragraphStyle.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
46
- backgroundColor: paragraphStyle.backgroundColor ?? DEFAULT_PARAGRAPH_STYLE.backgroundColor,
47
- headingStyleId: paragraphStyle.headingStyleId,
48
- indentFirstLine: paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
49
- indentHanging: paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging,
50
- indentLeft: paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft,
51
- indentRight: paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight,
52
- lineSpacing: paragraphStyle.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
53
- spaceAfter: paragraphStyle.spaceAfter ?? DEFAULT_PARAGRAPH_STYLE.spaceAfter,
54
- spaceBefore: paragraphStyle.spaceBefore ?? DEFAULT_PARAGRAPH_STYLE.spaceBefore,
55
- contextualSpacing: paragraphStyle.contextualSpacing ?? DEFAULT_PARAGRAPH_STYLE.contextualSpacing,
56
- beforeAutospacing: paragraphStyle.beforeAutospacing ?? DEFAULT_PARAGRAPH_STYLE.beforeAutospacing,
57
- afterAutospacing: paragraphStyle.afterAutospacing ?? DEFAULT_PARAGRAPH_STYLE.afterAutospacing,
58
- numberingId: paragraphStyle.numberingId ?? DEFAULT_PARAGRAPH_STYLE.numberingId,
59
- numberingLevel: paragraphStyle.numberingLevel ?? DEFAULT_PARAGRAPH_STYLE.numberingLevel
60
- });
61
- }
62
- static getEmptyDocxModel() {
63
- const pageMargin = new MarginModel();
64
- return new DocxModel({
65
- content: '',
66
- contentLength: 0,
67
- headings: DEFAULT_HEADINGS,
68
- pageHeight: DocumentInfo.height,
69
- pageWidth: DocumentInfo.width,
70
- paragraphs: [
71
- new ParagraphModel({
72
- insertIndex: 0,
73
- paragraphStyle: DEFAULT_PARAGRAPH_STYLE
74
- })
75
- ],
76
- breaks: [],
77
- elements: [],
78
- formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: DEFAULT_TEXT_STYLE })],
79
- images: [],
80
- links: [],
81
- marginBottom: pageMargin.bottom,
82
- marginFooter: pageMargin.footer,
83
- marginHeader: pageMargin.header,
84
- marginLeft: pageMargin.left,
85
- marginRight: pageMargin.right,
86
- marginTop: pageMargin.top,
87
- tables: [],
88
- numberings: [],
89
- tabs: [],
90
- defaultTabWidth: DEFAULT_TAB_WIDTH
91
- });
92
- }
93
- }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aXNpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3JldmlzaW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSWhGLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxRQUF1QixFQUFFLFVBQTRCO1FBQ2xGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9B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QU0sVUFBVSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNqQixPQUFPLEVBQUUsRUFBRTtZQUNYLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsVUFBVSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQy9CLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSztZQUM3QixVQUFVLEVBQUU7Z0JBQ1IsSUFBSSxjQUFjLENBQUM7b0JBQ2YsV0FBVyxFQUFFLENBQUM7b0JBQ2QsY0FBYyxFQUFFLHVCQUF1QjtpQkFDMUMsQ0FBQzthQUNMO1lBQ0QsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDekYsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsRUFBRTtZQUNULFlBQVksRUFBRSxVQUFVLENBQUMsTUFBTTtZQUMvQixZQUFZLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDL0IsWUFBWSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQy9CLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTtZQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1lBQ3pCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLEVBQUUsRUFBRTtZQUNSLGVBQWUsRUFBRSxpQkFBaUI7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudHNJbnRlcmZhY2UgfSBmcm9tICcuL2NvbnRlbnQvY29udGVudHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbnRlbnRTdHlsZUhlbHBlciB9IGZyb20gJy4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IERFRkFVTFRfSEVBRElOR1MsIERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLCBERUZBVUxUX1RBQl9XSURUSCwgREVGQVVMVF9URVhUX1NUWUxFIH0gZnJvbSAnLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi9jb250ZW50L2NvbnN0YW50cy9kb2N1bWVudC1pbmZvLmNvbnN0JztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2Zvcm1hdC5tb2RlbCc7XG5pbXBvcnQgeyBNYXJnaW5Nb2RlbCB9IGZyb20gJy4vY29udGVudC9tYXJnaW4ubW9kZWwnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL29wZXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBPcGVyYXRpb25zSGVscGVyIH0gZnJvbSAnLi9vcGVyYXRpb25zL29wZXJhdGlvbnMtaGVscGVyLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXZpc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXZpc2lvbi5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXZpc2lvbkhlbHBlciB7XG4gICAgc3RhdGljIGFwcGx5T3BlcmF0aW9uc1RvUmV2aXNpb24ocmV2aXNpb246IFJldmlzaW9uTW9kZWwsIG9wZXJhdGlvbnM6IE9wZXJhdGlvbk1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgb3BlcmF0aW9ucy5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZVRpbWUgLSBiLmNyZWF0ZVRpbWUpO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gb3BlcmF0aW9ucy5tYXAoeCA9PiB4LmNvbW1hbmQpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFwcGx5T3BlcmF0aW9ucyhyZXZpc2lvbi5jb250ZW50LCBhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZmlsbFRhYmxlc0RlZmF1bHRTdHlsZXModGFibGVzOiBUYWJsZU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRhYmxlLnJvd3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbERlZmF1bHRTdHlsZXMoY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbGxFZGdlc0RlZmF1bHRTdHlsZXMoaGVhZGVyczogRWRnZU1vZGVsW10sIGZvb3RlcnM6IEVkZ2VNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFRhYmxlc0RlZmF1bHRTdHlsZXMoaGVhZGVyLnRhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLmZpbGxEZWZhdWx0U3R5bGVzKGhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZvb3RlciBvZiBmb290ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxUYWJsZXNEZWZhdWx0U3R5bGVzKGZvb3Rlci50YWJsZXMpO1xuICAgICAgICAgICAgdGhpcy5maWxsRGVmYXVsdFN0eWxlcyhmb290ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbGxEZWZhdWx0U3R5bGVzKGNvbnRlbnRzOiBDb250ZW50c0ludGVyZmFjZSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBjb250ZW50cy5mb3JtYXRzKSB7XG4gICAgICAgICAgICBmb3JtYXQudGV4dFN0eWxlID0gQ29udGVudFN0eWxlSGVscGVyLmNvbWJpbmVUZXh0U3R5bGVzKGZvcm1hdC50ZXh0U3R5bGUsIERFRkFVTFRfVEVYVF9TVFlMRSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFncmFwaCBvZiBjb250ZW50cy5wYXJhZ3JhcGhzKSB7XG4gICAgICAgICAgICBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUgPSB0aGlzLmZpbGxQYXJhZ3JhcGhTdHlsZU1vZGVsKHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZmlsbFBhcmFncmFwaFN0eWxlTW9kZWwocGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWwpOiBQYXJhZ3JhcGhTdHlsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHtcbiAgICAgICAgICAgIGFsaWdubWVudDogcGFyYWdyYXBoU3R5bGUuYWxpZ25tZW50ID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmFsaWdubWVudCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcGFyYWdyYXBoU3R5bGUuYmFja2dyb3VuZENvbG9yID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGhlYWRpbmdTdHlsZUlkOiBwYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCxcbiAgICAgICAgICAgIGluZGVudEZpcnN0TGluZTogcGFyYWdyYXBoU3R5bGUuaW5kZW50Rmlyc3RMaW5lID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmluZGVudEZpcnN0TGluZSxcbiAgICAgICAgICAgIGluZGVudEhhbmdpbmc6IHBhcmFncmFwaFN0eWxlLmluZGVudEhhbmdpbmcgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuaW5kZW50SGFuZ2luZyxcbiAgICAgICAgICAgIGluZGVudExlZnQ6IHBhcmFncmFwaFN0eWxlLmluZGVudExlZnQgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuaW5kZW50TGVmdCxcbiAgICAgICAgICAgIGluZGVudFJpZ2h0OiBwYXJhZ3JhcGhTdHlsZS5pbmRlbnRSaWdodCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5pbmRlbnRSaWdodCxcbiAgICAgICAgICAgIGxpbmVTcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5saW5lU3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5saW5lU3BhY2luZyxcbiAgICAgICAgICAgIHNwYWNlQWZ0ZXI6IHBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuc3BhY2VBZnRlcixcbiAgICAgICAgICAgIHNwYWNlQmVmb3JlOiBwYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5zcGFjZUJlZm9yZSxcbiAgICAgICAgICAgIGNvbnRleHR1YWxTcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5jb250ZXh0dWFsU3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5jb250ZXh0dWFsU3BhY2luZyxcbiAgICAgICAgICAgIGJlZm9yZUF1dG9zcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5iZWZvcmVBdXRvc3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5iZWZvcmVBdXRvc3BhY2luZyxcbiAgICAgICAgICAgIGFmdGVyQXV0b3NwYWNpbmc6IHBhcmFncmFwaFN0eWxlLmFmdGVyQXV0b3NwYWNpbmcgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuYWZ0ZXJBdXRvc3BhY2luZyxcbiAgICAgICAgICAgIG51bWJlcmluZ0lkOiBwYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5udW1iZXJpbmdJZCxcbiAgICAgICAgICAgIG51bWJlcmluZ0xldmVsOiBwYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdMZXZlbCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5udW1iZXJpbmdMZXZlbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW1wdHlEb2N4TW9kZWwoKTogRG9jeE1vZGVsIHtcbiAgICAgICAgY29uc3QgcGFnZU1hcmdpbiA9IG5ldyBNYXJnaW5Nb2RlbCgpO1xuICAgICAgICByZXR1cm4gbmV3IERvY3hNb2RlbCh7XG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IDAsXG4gICAgICAgICAgICBoZWFkaW5nczogREVGQVVMVF9IRUFESU5HUyxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IERvY3VtZW50SW5mby5oZWlnaHQsXG4gICAgICAgICAgICBwYWdlV2lkdGg6IERvY3VtZW50SW5mby53aWR0aCxcbiAgICAgICAgICAgIHBhcmFncmFwaHM6IFtcbiAgICAgICAgICAgICAgICBuZXcgUGFyYWdyYXBoTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGU6IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBicmVha3M6IFtdLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgZm9ybWF0czogW25ldyBGb3JtYXRNb2RlbCh7IHN0YXJ0SW5kZXg6IDAsIGVuZEluZGV4OiAwLCB0ZXh0U3R5bGU6IERFRkFVTFRfVEVYVF9TVFlMRSB9KV0sXG4gICAgICAgICAgICBpbWFnZXM6IFtdLFxuICAgICAgICAgICAgbGlua3M6IFtdLFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBwYWdlTWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICAgIG1hcmdpbkZvb3RlcjogcGFnZU1hcmdpbi5mb290ZXIsXG4gICAgICAgICAgICBtYXJnaW5IZWFkZXI6IHBhZ2VNYXJnaW4uaGVhZGVyLFxuICAgICAgICAgICAgbWFyZ2luTGVmdDogcGFnZU1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IHBhZ2VNYXJnaW4ucmlnaHQsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IHBhZ2VNYXJnaW4udG9wLFxuICAgICAgICAgICAgdGFibGVzOiBbXSxcbiAgICAgICAgICAgIG51bWJlcmluZ3M6IFtdLFxuICAgICAgICAgICAgdGFiczogW10sXG4gICAgICAgICAgICBkZWZhdWx0VGFiV2lkdGg6IERFRkFVTFRfVEFCX1dJRFRIXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==