@worktile/theia 3.0.9 → 3.1.0-next.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 (705) hide show
  1. package/README.md +11 -11
  2. package/components/color-select/color-select.component.d.ts +32 -32
  3. package/components/color-select/color-select.component.scss +107 -107
  4. package/components/column-resize/column-resize-notifier.d.ts +35 -35
  5. package/components/column-resize/column-resize.directive.d.ts +26 -26
  6. package/components/column-resize/column-resize.module.d.ts +14 -14
  7. package/components/column-resize/event-dispatcher.d.ts +31 -31
  8. package/components/column-resize/overlay-handle.component.d.ts +33 -33
  9. package/components/column-resize/resize-ref.d.ts +25 -25
  10. package/components/column-resize/resizing.store.d.ts +28 -28
  11. package/components/column-resize/selectors.d.ts +3 -3
  12. package/components/contextmenu/contextmenu.component.d.ts +22 -22
  13. package/components/conversion-hint/conversion-hint.component.d.ts +18 -18
  14. package/components/conversion-hint/conversion-hint.component.scss +11 -11
  15. package/components/element/element.component.d.ts +7 -7
  16. package/components/inline-toolbar/inline-toolbar.component.d.ts +26 -26
  17. package/components/nav-split-line/nav-split-line.component.d.ts +13 -13
  18. package/components/table-select/table-select.component.d.ts +20 -20
  19. package/components/table-select/table-select.component.scss +35 -35
  20. package/components/template/template.component.d.ts +15 -15
  21. package/components/text/text.component.d.ts +14 -14
  22. package/components/toolbar/toolbar.component.d.ts +64 -65
  23. package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +33 -33
  24. package/components/toolbar-group/toolbar-group.component.d.ts +33 -33
  25. package/components/toolbar-group/toolbar-group.component.scss +17 -17
  26. package/components/toolbar-item/toolbar-item.component.d.ts +17 -18
  27. package/constants/auto-format-rules.d.ts +2 -2
  28. package/constants/code.d.ts +9 -9
  29. package/constants/color-select.d.ts +14 -14
  30. package/constants/default.d.ts +9 -9
  31. package/constants/error.d.ts +5 -5
  32. package/constants/index.d.ts +5 -5
  33. package/constants/node-types.d.ts +99 -99
  34. package/constants/selector.d.ts +2 -2
  35. package/constants/toolbar.d.ts +17 -17
  36. package/core/create-plugin.d.ts +2 -2
  37. package/core/create-toolbar.d.ts +5 -5
  38. package/core/index.d.ts +4 -4
  39. package/core/toolbar-item/base-toolbar-item.d.ts +29 -29
  40. package/core/utils/combine-plugins.d.ts +2 -2
  41. package/core/utils/flatten-deep-plugins.d.ts +6 -6
  42. package/core/utils/get-plugin-options.d.ts +2 -2
  43. package/core/utils/get-plugin.d.ts +2 -2
  44. package/core/utils/get-plugins.d.ts +2 -2
  45. package/core/utils/index.d.ts +10 -10
  46. package/core/utils/merge-array.d.ts +1 -1
  47. package/core/utils/merge-deep-plugins.d.ts +2 -2
  48. package/core/utils/merge-options.d.ts +2 -2
  49. package/core/utils/nested-structure-by-key.d.ts +2 -2
  50. package/core/utils/plugins-by-key.d.ts +2 -2
  51. package/core/with-theia.d.ts +4 -4
  52. package/custom-types.d.ts +131 -131
  53. package/editor.component.d.ts +92 -92
  54. package/editor.module.d.ts +98 -98
  55. package/esm2020/components/color-select/color-select.component.mjs +109 -0
  56. package/esm2020/components/column-resize/column-resize-notifier.mjs +31 -0
  57. package/{esm2015/components/column-resize/column-resize.directive.js → esm2020/components/column-resize/column-resize.directive.mjs} +99 -99
  58. package/esm2020/components/column-resize/column-resize.module.mjs +33 -0
  59. package/{esm2015/components/column-resize/event-dispatcher.js → esm2020/components/column-resize/event-dispatcher.mjs} +56 -56
  60. package/{esm2015/components/column-resize/overlay-handle.component.js → esm2020/components/column-resize/overlay-handle.component.mjs} +140 -140
  61. package/{esm2015/components/column-resize/resize-ref.js → esm2020/components/column-resize/resize-ref.mjs} +25 -25
  62. package/{esm2015/components/column-resize/resizing.store.js → esm2020/components/column-resize/resizing.store.mjs} +155 -155
  63. package/{esm2015/components/column-resize/selectors.js → esm2020/components/column-resize/selectors.mjs} +4 -4
  64. package/esm2020/components/contextmenu/contextmenu.component.mjs +61 -0
  65. package/esm2020/components/conversion-hint/conversion-hint.component.mjs +54 -0
  66. package/esm2020/components/element/element.component.mjs +23 -0
  67. package/esm2020/components/inline-toolbar/inline-toolbar.component.mjs +138 -0
  68. package/{esm2015/components/nav-split-line/nav-split-line.component.js → esm2020/components/nav-split-line/nav-split-line.component.mjs} +37 -37
  69. package/esm2020/components/table-select/table-select.component.mjs +50 -0
  70. package/esm2020/components/template/template.component.mjs +62 -0
  71. package/{esm2015/components/text/text.component.js → esm2020/components/text/text.component.mjs} +58 -58
  72. package/esm2020/components/toolbar/toolbar.component.mjs +241 -0
  73. package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +129 -0
  74. package/esm2020/components/toolbar-group/toolbar-group.component.mjs +110 -0
  75. package/esm2020/components/toolbar-item/toolbar-item.component.mjs +101 -0
  76. package/{esm2015/constants/auto-format-rules.js → esm2020/constants/auto-format-rules.mjs} +166 -166
  77. package/{esm2015/constants/code.js → esm2020/constants/code.mjs} +88 -88
  78. package/{esm2015/constants/color-select.js → esm2020/constants/color-select.mjs} +61 -61
  79. package/{esm2015/constants/default.js → esm2020/constants/default.mjs} +9 -9
  80. package/{esm2015/constants/error.js → esm2020/constants/error.mjs} +7 -7
  81. package/{esm2015/constants/index.js → esm2020/constants/index.mjs} +5 -5
  82. package/{esm2015/constants/node-types.js → esm2020/constants/node-types.mjs} +132 -132
  83. package/{esm2015/constants/selector.js → esm2020/constants/selector.mjs} +3 -3
  84. package/{esm2015/constants/toolbar.js → esm2020/constants/toolbar.mjs} +69 -69
  85. package/{esm2015/core/create-plugin.js → esm2020/core/create-plugin.mjs} +4 -4
  86. package/esm2020/core/create-toolbar.mjs +56 -0
  87. package/{esm2015/core/index.js → esm2020/core/index.mjs} +4 -4
  88. package/esm2020/core/toolbar-item/base-toolbar-item.mjs +90 -0
  89. package/{esm2015/core/utils/combine-plugins.js → esm2020/core/utils/combine-plugins.mjs} +9 -9
  90. package/{esm2015/core/utils/flatten-deep-plugins.js → esm2020/core/utils/flatten-deep-plugins.mjs} +18 -18
  91. package/esm2020/core/utils/get-plugin-options.mjs +3 -0
  92. package/{esm2015/core/utils/get-plugin.js → esm2020/core/utils/get-plugin.mjs} +1 -1
  93. package/esm2020/core/utils/get-plugins.mjs +4 -0
  94. package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +10 -10
  95. package/esm2020/core/utils/merge-array.mjs +18 -0
  96. package/{esm2015/core/utils/merge-deep-plugins.js → esm2020/core/utils/merge-deep-plugins.mjs} +13 -13
  97. package/{esm2015/core/utils/merge-options.js → esm2020/core/utils/merge-options.mjs} +19 -19
  98. package/{esm2015/core/utils/nested-structure-by-key.js → esm2020/core/utils/nested-structure-by-key.mjs} +10 -10
  99. package/{esm2015/core/utils/plugins-by-key.js → esm2020/core/utils/plugins-by-key.mjs} +9 -9
  100. package/{esm2015/core/with-theia.js → esm2020/core/with-theia.mjs} +22 -22
  101. package/{esm2015/custom-types.js → esm2020/custom-types.mjs} +1 -1
  102. package/esm2020/editor.component.mjs +431 -0
  103. package/{esm2015/editor.module.js → esm2020/editor.module.mjs} +201 -202
  104. package/{esm2015/interfaces/auto-format.js → esm2020/interfaces/auto-format.mjs} +1 -1
  105. package/esm2020/interfaces/editor.mjs +25 -0
  106. package/{esm2015/interfaces/element.js → esm2020/interfaces/element.mjs} +1 -1
  107. package/{esm2015/interfaces/image.js → esm2020/interfaces/image.mjs} +2 -2
  108. package/{esm2015/interfaces/index.js → esm2020/interfaces/index.mjs} +8 -8
  109. package/{esm2015/interfaces/plugins/index.js → esm2020/interfaces/plugins/index.mjs} +4 -4
  110. package/{esm2015/interfaces/plugins/no-infer.js → esm2020/interfaces/plugins/no-infer.mjs} +1 -1
  111. package/{esm2015/interfaces/plugins/plugin-key.js → esm2020/interfaces/plugins/plugin-key.mjs} +39 -39
  112. package/{esm2015/interfaces/plugins/plugins.js → esm2020/interfaces/plugins/plugins.mjs} +1 -1
  113. package/{esm2015/interfaces/plugins/with-override.js → esm2020/interfaces/plugins/with-override.mjs} +1 -1
  114. package/esm2020/interfaces/reset-block-type-plugin-options.mjs +2 -0
  115. package/{esm2015/interfaces/toolbar.js → esm2020/interfaces/toolbar.mjs} +11 -11
  116. package/esm2020/interfaces/upload.mjs +2 -0
  117. package/{esm2015/interfaces/utility/index.js → esm2020/interfaces/utility/index.mjs} +3 -3
  118. package/{esm2015/interfaces/utility/nested-structure-by-key.js → esm2020/interfaces/utility/nested-structure-by-key.mjs} +1 -1
  119. package/{esm2015/interfaces/utility/override-by-key.js → esm2020/interfaces/utility/override-by-key.mjs} +1 -1
  120. package/{esm2015/interfaces/utility/types.js → esm2020/interfaces/utility/types.mjs} +1 -1
  121. package/{esm2015/interfaces/valid-children-types.js → esm2020/interfaces/valid-children-types.mjs} +35 -35
  122. package/{esm2015/interfaces/view-base.js → esm2020/interfaces/view-base.mjs} +21 -21
  123. package/{esm2015/pipes.js → esm2020/pipes.mjs} +42 -42
  124. package/esm2020/plugins/align/align.editor.mjs +47 -0
  125. package/{esm2015/plugins/align/align.plugin.js → esm2020/plugins/align/align.plugin.mjs} +63 -63
  126. package/esm2020/plugins/autoformat/autoformat.plugin.mjs +109 -0
  127. package/{esm2015/plugins/autoformat/transforms/auto-format-block.js → esm2020/plugins/autoformat/transforms/auto-format-block.mjs} +14 -14
  128. package/{esm2015/plugins/autoformat/transforms/auto-format-inline.js → esm2020/plugins/autoformat/transforms/auto-format-inline.mjs} +77 -77
  129. package/{esm2015/plugins/blockquote/blockquote.component.js → esm2020/plugins/blockquote/blockquote.component.mjs} +21 -21
  130. package/esm2020/plugins/blockquote/blockquote.editor.mjs +20 -0
  131. package/{esm2015/plugins/blockquote/blockquote.plugin.js → esm2020/plugins/blockquote/blockquote.plugin.mjs} +70 -70
  132. package/esm2020/plugins/code/code.component.mjs +241 -0
  133. package/{esm2015/plugins/code/code.editor.js → esm2020/plugins/code/code.editor.mjs} +47 -47
  134. package/{esm2015/plugins/code/code.plugin.js → esm2020/plugins/code/code.plugin.mjs} +41 -41
  135. package/esm2020/plugins/color/color.editor.mjs +44 -0
  136. package/{esm2015/plugins/color/color.plugin.js → esm2020/plugins/color/color.plugin.mjs} +27 -27
  137. package/esm2020/plugins/color/toolbar-item.component.mjs +123 -0
  138. package/esm2020/plugins/common/auto-insert-data..mjs +77 -0
  139. package/{esm2015/plugins/common/block-card.plugin.js → esm2020/plugins/common/block-card.plugin.mjs} +287 -287
  140. package/esm2020/plugins/common/get-fragment.plugin.mjs +24 -0
  141. package/{esm2015/plugins/common/history.plugin.js → esm2020/plugins/common/history.plugin.mjs} +30 -30
  142. package/{esm2015/plugins/common/move-selection.plugin.js → esm2020/plugins/common/move-selection.plugin.mjs} +89 -89
  143. package/{esm2015/plugins/common/remove-empty.plugin.js → esm2020/plugins/common/remove-empty.plugin.mjs} +59 -59
  144. package/{esm2015/plugins/common/remove-void.plugin.js → esm2020/plugins/common/remove-void.plugin.mjs} +56 -56
  145. package/{esm2015/plugins/common/reset-type.plugin.js → esm2020/plugins/common/reset-type.plugin.mjs} +34 -34
  146. package/{esm2015/plugins/common/transforms.plugin.js → esm2020/plugins/common/transforms.plugin.mjs} +17 -17
  147. package/{esm2015/plugins/deserializers/deserialize-html.plugin.js → esm2020/plugins/deserializers/deserialize-html.plugin.mjs} +38 -38
  148. package/{esm2015/plugins/deserializers/deserialize-md.plugin.js → esm2020/plugins/deserializers/deserialize-md.plugin.mjs} +121 -121
  149. package/esm2020/plugins/font-size/font-size.editor.mjs +98 -0
  150. package/{esm2015/plugins/heading/heading.editor.js → esm2020/plugins/heading/heading.editor.mjs} +53 -53
  151. package/{esm2015/plugins/heading/heading.plugin.js → esm2020/plugins/heading/heading.plugin.mjs} +84 -84
  152. package/{esm2015/plugins/hr/hr.component.js → esm2020/plugins/hr/hr.component.mjs} +40 -40
  153. package/{esm2015/plugins/hr/hr.editor.js → esm2020/plugins/hr/hr.editor.mjs} +7 -7
  154. package/{esm2015/plugins/hr/hr.plugin.js → esm2020/plugins/hr/hr.plugin.mjs} +41 -41
  155. package/esm2020/plugins/image/image.component.mjs +365 -0
  156. package/{esm2015/plugins/image/image.editor.js → esm2020/plugins/image/image.editor.mjs} +57 -57
  157. package/esm2020/plugins/image/image.plugin.mjs +57 -0
  158. package/esm2020/plugins/indent/indent.editor.mjs +71 -0
  159. package/esm2020/plugins/indent/indent.plugin.mjs +58 -0
  160. package/{esm2015/plugins/indent/on-keydown-indent.js → esm2020/plugins/indent/on-keydown-indent.mjs} +53 -53
  161. package/{esm2015/plugins/index.js → esm2020/plugins/index.mjs} +70 -70
  162. package/{esm2015/plugins/inline-code/inline-code.component.js → esm2020/plugins/inline-code/inline-code.component.mjs} +23 -23
  163. package/{esm2015/plugins/inline-code/inline-code.editor.js → esm2020/plugins/inline-code/inline-code.editor.mjs} +48 -49
  164. package/{esm2015/plugins/inline-code/inline-code.plugin.js → esm2020/plugins/inline-code/inline-code.plugin.mjs} +65 -65
  165. package/esm2020/plugins/link/edit/link-edit.component.mjs +105 -0
  166. package/esm2020/plugins/link/hover/link-hover.component.mjs +36 -0
  167. package/{esm2015/plugins/link/link.component.js → esm2020/plugins/link/link.component.mjs} +164 -164
  168. package/{esm2015/plugins/link/link.editor.js → esm2020/plugins/link/link.editor.mjs} +66 -66
  169. package/{esm2015/plugins/link/link.plugin.js → esm2020/plugins/link/link.plugin.mjs} +58 -58
  170. package/{esm2015/plugins/link/link.types.js → esm2020/plugins/link/link.types.mjs} +12 -12
  171. package/esm2020/plugins/list/components/bulleted-list.component.mjs +33 -0
  172. package/esm2020/plugins/list/components/list-item.component.mjs +93 -0
  173. package/esm2020/plugins/list/components/numbered-list.component.mjs +39 -0
  174. package/{esm2015/plugins/list/list.editor.js → esm2020/plugins/list/list.editor.mjs} +125 -125
  175. package/esm2020/plugins/list/list.plugin.mjs +286 -0
  176. package/{esm2015/plugins/list/normalizers/get-list-normalizer.js → esm2020/plugins/list/normalizers/get-list-normalizer.mjs} +39 -39
  177. package/esm2020/plugins/list/normalizers/normalize-list-item.mjs +18 -0
  178. package/{esm2015/plugins/list/normalizers/normalize-no.js → esm2020/plugins/list/normalizers/normalize-no.mjs} +42 -42
  179. package/{esm2015/plugins/list/on-key-down-list.js → esm2020/plugins/list/on-key-down-list.mjs} +32 -32
  180. package/{esm2015/plugins/list/queries/get-list-item-entry.js → esm2020/plugins/list/queries/get-list-item-entry.mjs} +27 -27
  181. package/{esm2015/plugins/list/queries/get-list-item-sublist.js → esm2020/plugins/list/queries/get-list-item-sublist.mjs} +12 -12
  182. package/{esm2015/plugins/list/queries/get-list-types.js → esm2020/plugins/list/queries/get-list-types.mjs} +5 -5
  183. package/{esm2015/plugins/list/queries/get-start-list-item.js → esm2020/plugins/list/queries/get-start-list-item.mjs} +26 -26
  184. package/{esm2015/plugins/list/queries/has-list-in-list-item.js → esm2020/plugins/list/queries/has-list-in-list-item.mjs} +27 -27
  185. package/{esm2015/plugins/list/queries/is-in-list.js → esm2020/plugins/list/queries/is-in-list.mjs} +5 -5
  186. package/{esm2015/plugins/list/queries/is-list-nested.js → esm2020/plugins/list/queries/is-list-nested.mjs} +10 -10
  187. package/{esm2015/plugins/list/queries/is-list.js → esm2020/plugins/list/queries/is-list.mjs} +5 -5
  188. package/{esm2015/plugins/list/queries/is-node-type-list.js → esm2020/plugins/list/queries/is-node-type-list.mjs} +4 -4
  189. package/{esm2015/plugins/list/queries/is-selection-at-list-item-start.js → esm2020/plugins/list/queries/is-selection-at-list-item-start.mjs} +12 -12
  190. package/{esm2015/plugins/list/queries/is-selection-in-same-list-item.js → esm2020/plugins/list/queries/is-selection-in-same-list-item.mjs} +16 -16
  191. package/{esm2015/plugins/list/queries/is-single-list-item.js → esm2020/plugins/list/queries/is-single-list-item.mjs} +9 -9
  192. package/{esm2015/plugins/list/transforms/insert-list-data.js → esm2020/plugins/list/transforms/insert-list-data.mjs} +71 -71
  193. package/{esm2015/plugins/list/transforms/insert-list-item.js → esm2020/plugins/list/transforms/insert-list-item.mjs} +72 -72
  194. package/{esm2015/plugins/list/transforms/move-list-item-down.js → esm2020/plugins/list/transforms/move-list-item-down.mjs} +41 -41
  195. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs} +42 -42
  196. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs} +29 -29
  197. package/{esm2015/plugins/list/transforms/move-list-item-up.js → esm2020/plugins/list/transforms/move-list-item-up.mjs} +77 -77
  198. package/{esm2015/plugins/list/transforms/unwrap-list.js → esm2020/plugins/list/transforms/unwrap-list.mjs} +9 -9
  199. package/esm2020/plugins/list/types.mjs +2 -0
  200. package/esm2020/plugins/mark/mark.editor.mjs +28 -0
  201. package/esm2020/plugins/mark/mark.plugin.mjs +105 -0
  202. package/esm2020/plugins/node-id/node-id.plugin.mjs +78 -0
  203. package/esm2020/plugins/normalizers/insert-paragraph-nodes.mjs +28 -0
  204. package/{esm2015/plugins/normalizers/remove-empty-nodes.js → esm2020/plugins/normalizers/remove-empty-nodes.mjs} +17 -17
  205. package/esm2020/plugins/normalizers/trailing-node.plugin.mjs +33 -0
  206. package/{esm2015/plugins/paint-format/paint-format.editor.js → esm2020/plugins/paint-format/paint-format.editor.mjs} +122 -122
  207. package/{esm2015/plugins/public-api.js → esm2020/plugins/public-api.mjs} +15 -15
  208. package/esm2020/plugins/quick-insert/components/quick-insert.component.mjs +96 -0
  209. package/esm2020/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.mjs +80 -0
  210. package/{esm2015/plugins/quick-insert/quick-insert.editor.js → esm2020/plugins/quick-insert/quick-insert.editor.mjs} +52 -52
  211. package/esm2020/plugins/quick-insert/quick-insert.plugin.mjs +74 -0
  212. package/esm2020/plugins/soft-break/soft-break.plugin.mjs +36 -0
  213. package/{esm2015/plugins/soft-break/soft-break.types.js → esm2020/plugins/soft-break/soft-break.types.mjs} +1 -1
  214. package/esm2020/plugins/table/components/insert-mark/insert-mark.component.mjs +100 -0
  215. package/{esm2015/plugins/table/components/row/row.component.js → esm2020/plugins/table/components/row/row.component.mjs} +47 -47
  216. package/esm2020/plugins/table/components/table.component.mjs +461 -0
  217. package/esm2020/plugins/table/components/td/td.component.mjs +696 -0
  218. package/{esm2015/plugins/table/components/toolbar/table-options.component.js → esm2020/plugins/table/components/toolbar/table-options.component.mjs} +72 -69
  219. package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +159 -0
  220. package/{esm2015/plugins/table/table.editor.js → esm2020/plugins/table/table.editor.mjs} +182 -182
  221. package/esm2020/plugins/table/table.plugin.mjs +427 -0
  222. package/{esm2015/plugins/table/table.service.js → esm2020/plugins/table/table.service.mjs} +103 -103
  223. package/esm2020/plugins/table/table.store.mjs +484 -0
  224. package/{esm2015/plugins/table/table.types.js → esm2020/plugins/table/table.types.mjs} +33 -33
  225. package/esm2020/plugins/table/toolbar-item.component.mjs +85 -0
  226. package/esm2020/plugins/table/transforms/clear-cell.mjs +14 -0
  227. package/{esm2015/plugins/table/transforms/clear-table-node.js → esm2020/plugins/table/transforms/clear-table-node.mjs} +27 -27
  228. package/{esm2015/plugins/table/transforms/insert-column.js → esm2020/plugins/table/transforms/insert-column.mjs} +57 -57
  229. package/{esm2015/plugins/table/transforms/insert-row.js → esm2020/plugins/table/transforms/insert-row.mjs} +42 -42
  230. package/esm2020/plugins/table/transforms/insert-table.mjs +15 -0
  231. package/{esm2015/plugins/table/transforms/remove-column.js → esm2020/plugins/table/transforms/remove-column.mjs} +51 -51
  232. package/{esm2015/plugins/table/transforms/remove-row.js → esm2020/plugins/table/transforms/remove-row.mjs} +50 -50
  233. package/{esm2015/plugins/table/transforms/remove-table.js → esm2020/plugins/table/transforms/remove-table.mjs} +49 -49
  234. package/{esm2015/plugins/table/utils/add-columns.js → esm2020/plugins/table/utils/add-columns.mjs} +28 -28
  235. package/{esm2015/plugins/table/utils/calc-anchor-position.js → esm2020/plugins/table/utils/calc-anchor-position.mjs} +24 -24
  236. package/{esm2015/plugins/table/utils/calc-span.js → esm2020/plugins/table/utils/calc-span.mjs} +72 -72
  237. package/{esm2015/plugins/table/utils/create-cell.js → esm2020/plugins/table/utils/create-cell.mjs} +19 -19
  238. package/{esm2015/plugins/table/utils/create-row.js → esm2020/plugins/table/utils/create-row.mjs} +12 -12
  239. package/{esm2015/plugins/table/utils/create-table.js → esm2020/plugins/table/utils/create-table.mjs} +13 -13
  240. package/{esm2015/plugins/table/utils/get-base-height.js → esm2020/plugins/table/utils/get-base-height.mjs} +22 -22
  241. package/{esm2015/plugins/table/utils/get-select-cell-node.js → esm2020/plugins/table/utils/get-select-cell-node.mjs} +19 -16
  242. package/{esm2015/plugins/table/utils/index.js → esm2020/plugins/table/utils/index.mjs} +8 -8
  243. package/{esm2015/plugins/table/utils/is-range-in-table.js → esm2020/plugins/table/utils/is-range-in-table.mjs} +16 -16
  244. package/{esm2015/plugins/table/utils/is-selection-in-table.js → esm2020/plugins/table/utils/is-selection-in-table.mjs} +11 -11
  245. package/{esm2015/plugins/table/utils/is-virtual-key.js → esm2020/plugins/table/utils/is-virtual-key.mjs} +13 -13
  246. package/{esm2015/plugins/table/utils/merge-cell.js → esm2020/plugins/table/utils/merge-cell.mjs} +90 -90
  247. package/{esm2015/plugins/table/utils/next-path.js → esm2020/plugins/table/utils/next-path.mjs} +5 -5
  248. package/{esm2015/plugins/table/utils/normalize-table.js → esm2020/plugins/table/utils/normalize-table.mjs} +30 -30
  249. package/{esm2015/plugins/table/utils/remove-columns.js → esm2020/plugins/table/utils/remove-columns.mjs} +23 -23
  250. package/{esm2015/plugins/table/utils/set-menu-cell-invisibility.js → esm2020/plugins/table/utils/set-menu-cell-invisibility.mjs} +15 -15
  251. package/{esm2015/plugins/table/utils/split-cell.js → esm2020/plugins/table/utils/split-cell.mjs} +31 -31
  252. package/{esm2015/plugins/table/utils/table-position.js → esm2020/plugins/table/utils/table-position.mjs} +242 -242
  253. package/esm2020/plugins/todo-item/todo-item.component.mjs +64 -0
  254. package/{esm2015/plugins/todo-item/todo-item.editor.js → esm2020/plugins/todo-item/todo-item.editor.mjs} +31 -31
  255. package/{esm2015/plugins/todo-item/todo-item.plugin.js → esm2020/plugins/todo-item/todo-item.plugin.mjs} +78 -78
  256. package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +83 -0
  257. package/{esm2015/plugins/vertical-align/vertical-align.editor.js → esm2020/plugins/vertical-align/vertical-align.editor.mjs} +54 -54
  258. package/{esm2015/public-api.js → esm2020/public-api.mjs} +23 -23
  259. package/{esm2015/queries/anchor-block-entry.js → esm2020/queries/anchor-block-entry.mjs} +13 -13
  260. package/{esm2015/queries/anchor-block.js → esm2020/queries/anchor-block.mjs} +6 -6
  261. package/{esm2015/queries/anchor-inline-entry.js → esm2020/queries/anchor-inline-entry.mjs} +10 -10
  262. package/{esm2015/queries/find-descendant.js → esm2020/queries/find-descendant.mjs} +47 -47
  263. package/{esm2015/queries/find-node.js → esm2020/queries/find-node.mjs} +45 -45
  264. package/{esm2015/queries/find-path.js → esm2020/queries/find-path.mjs} +28 -28
  265. package/esm2020/queries/get-above-by-type.mjs +14 -0
  266. package/{esm2015/queries/get-above.js → esm2020/queries/get-above.mjs} +9 -9
  267. package/{esm2015/queries/get-anchor-block-entry.js → esm2020/queries/get-anchor-block-entry.mjs} +8 -8
  268. package/esm2020/queries/get-block-above.mjs +10 -0
  269. package/esm2020/queries/get-block-card-above.mjs +10 -0
  270. package/{esm2015/queries/get-block-card-cursor.js → esm2020/queries/get-block-card-cursor.mjs} +5 -5
  271. package/{esm2015/queries/get-container-blocks.js → esm2020/queries/get-container-blocks.mjs} +11 -11
  272. package/{esm2015/queries/get-directly-parent.js → esm2020/queries/get-directly-parent.mjs} +11 -11
  273. package/{esm2015/queries/get-insert-elements-path.js → esm2020/queries/get-insert-elements-path.mjs} +43 -43
  274. package/{esm2015/queries/get-last-child-path.js → esm2020/queries/get-last-child-path.mjs} +9 -9
  275. package/{esm2015/queries/get-last-node.js → esm2020/queries/get-last-node.mjs} +17 -17
  276. package/{esm2015/queries/get-next-sibling-nodes.js → esm2020/queries/get-next-sibling-nodes.mjs} +17 -17
  277. package/{esm2015/queries/get-node.js → esm2020/queries/get-node.mjs} +10 -10
  278. package/esm2020/queries/get-nodes-by-type.mjs +15 -0
  279. package/{esm2015/queries/get-nodes.js → esm2020/queries/get-nodes.mjs} +7 -7
  280. package/{esm2015/queries/get-parent.js → esm2020/queries/get-parent.mjs} +12 -12
  281. package/esm2020/queries/get-plain-text.mjs +16 -0
  282. package/{esm2015/queries/get-plugin-by-toolbar.js → esm2020/queries/get-plugin-by-toolbar.mjs} +12 -12
  283. package/{esm2015/queries/get-point-before.js → esm2020/queries/get-point-before.mjs} +62 -62
  284. package/{esm2015/queries/get-point-from-location.js → esm2020/queries/get-point-from-location.mjs} +15 -15
  285. package/{esm2015/queries/get-previous-path.js → esm2020/queries/get-previous-path.mjs} +9 -9
  286. package/{esm2015/queries/get-rang-from-block-start.js → esm2020/queries/get-rang-from-block-start.mjs} +16 -16
  287. package/{esm2015/queries/get-range-before.js → esm2020/queries/get-range-before.mjs} +17 -17
  288. package/esm2020/queries/get-selection-marks.mjs +18 -0
  289. package/{esm2015/queries/get-selection-nodes-by-type.js → esm2020/queries/get-selection-nodes-by-type.mjs} +29 -29
  290. package/{esm2015/queries/get-text.js → esm2020/queries/get-text.mjs} +9 -9
  291. package/esm2020/queries/get-toolbar-disabled.mjs +13 -0
  292. package/{esm2015/queries/index.js → esm2020/queries/index.mjs} +58 -58
  293. package/{esm2015/queries/is-across-blocks.js → esm2020/queries/is-across-blocks.mjs} +7 -7
  294. package/{esm2015/queries/is-ancestor-empty.js → esm2020/queries/is-ancestor-empty.mjs} +6 -6
  295. package/{esm2015/queries/is-ancestor.js → esm2020/queries/is-ancestor.mjs} +3 -3
  296. package/{esm2015/queries/is-block-above-empty.js → esm2020/queries/is-block-above-empty.mjs} +11 -11
  297. package/{esm2015/queries/is-block-active.js → esm2020/queries/is-block-active.mjs} +7 -7
  298. package/{esm2015/queries/is-block-card-cursor.js → esm2020/queries/is-block-card-cursor.mjs} +4 -4
  299. package/{esm2015/queries/is-block-text-empty-after-selection.js → esm2020/queries/is-block-text-empty-after-selection.mjs} +31 -31
  300. package/{esm2015/queries/is-collapsed.js → esm2020/queries/is-collapsed.mjs} +7 -7
  301. package/{esm2015/queries/is-contain-nested-type.js → esm2020/queries/is-contain-nested-type.mjs} +28 -28
  302. package/{esm2015/queries/is-container-type.js → esm2020/queries/is-container-type.mjs} +2 -2
  303. package/{esm2015/queries/is-descendant.js → esm2020/queries/is-descendant.mjs} +3 -3
  304. package/{esm2015/queries/is-empty-content.js → esm2020/queries/is-empty-content.mjs} +14 -14
  305. package/{esm2015/queries/is-empty-paragraph-by-path.js → esm2020/queries/is-empty-paragraph-by-path.mjs} +7 -7
  306. package/{esm2015/queries/is-empty-paragraph.js → esm2020/queries/is-empty-paragraph.mjs} +11 -11
  307. package/{esm2015/queries/is-first-child.js → esm2020/queries/is-first-child.mjs} +5 -5
  308. package/{esm2015/queries/is-include-types.js → esm2020/queries/is-include-types.mjs} +11 -11
  309. package/{esm2015/queries/is-node-type-in.js → esm2020/queries/is-node-type-in.mjs} +9 -9
  310. package/{esm2015/queries/is-node-type.js → esm2020/queries/is-node-type.mjs} +15 -15
  311. package/{esm2015/queries/is-paragraph.js → esm2020/queries/is-paragraph.mjs} +9 -9
  312. package/{esm2015/queries/is-point-at-root.js → esm2020/queries/is-point-at-root.mjs} +2 -2
  313. package/esm2020/queries/is-range-across-blocks.mjs +22 -0
  314. package/{esm2015/queries/is-range-at-root.js → esm2020/queries/is-range-at-root.mjs} +3 -3
  315. package/{esm2015/queries/is-start.js → esm2020/queries/is-start.mjs} +6 -6
  316. package/{esm2015/queries/some-node.js → esm2020/queries/some-node.mjs} +9 -9
  317. package/{esm2015/services/color-select.service.js → esm2020/services/color-select.service.mjs} +50 -50
  318. package/esm2020/services/context.service.mjs +59 -0
  319. package/{esm2015/services/table-contextmenu.service.js → esm2020/services/table-contextmenu.service.mjs} +190 -190
  320. package/esm2020/services/toolbar.service.mjs +48 -0
  321. package/{esm2015/shortcuts/index.js → esm2020/shortcuts/index.mjs} +5 -5
  322. package/{esm2015/shortcuts/mark.js → esm2020/shortcuts/mark.mjs} +24 -24
  323. package/{esm2015/transforms/apply-deep-to-nodes.js → esm2020/transforms/apply-deep-to-nodes.mjs} +21 -21
  324. package/{esm2015/transforms/clear-marks.js → esm2020/transforms/clear-marks.mjs} +23 -23
  325. package/{esm2015/transforms/close-conversion-hint.js → esm2020/transforms/close-conversion-hint.mjs} +8 -8
  326. package/{esm2015/transforms/delete-element.js → esm2020/transforms/delete-element.mjs} +11 -11
  327. package/{esm2015/transforms/handle-continual-delete-backward.js → esm2020/transforms/handle-continual-delete-backward.mjs} +17 -17
  328. package/{esm2015/transforms/handle-continual-insert-break.js → esm2020/transforms/handle-continual-insert-break.mjs} +19 -19
  329. package/{esm2015/transforms/index.js → esm2020/transforms/index.mjs} +18 -18
  330. package/esm2020/transforms/insert-elements.mjs +34 -0
  331. package/{esm2015/transforms/insert-paragraph.js → esm2020/transforms/insert-paragraph.mjs} +6 -6
  332. package/esm2020/transforms/merge-deep-to-nodes.mjs +9 -0
  333. package/{esm2015/transforms/move-children.js → esm2020/transforms/move-children.mjs} +21 -21
  334. package/{esm2015/transforms/on-keydown-reset-block-type.js → esm2020/transforms/on-keydown-reset-block-type.mjs} +22 -22
  335. package/{esm2015/transforms/set-end-selection.js → esm2020/transforms/set-end-selection.mjs} +10 -10
  336. package/{esm2015/transforms/set-marks.js → esm2020/transforms/set-marks.mjs} +9 -9
  337. package/{esm2015/transforms/set-node.js → esm2020/transforms/set-node.mjs} +5 -5
  338. package/{esm2015/transforms/split-node.js → esm2020/transforms/split-node.mjs} +31 -31
  339. package/{esm2015/transforms/un-hang-range.js → esm2020/transforms/un-hang-range.mjs} +11 -11
  340. package/{esm2015/transforms/un-wrap.js → esm2020/transforms/un-wrap.mjs} +11 -11
  341. package/esm2020/transforms/unwrap-nodes-by-type.mjs +14 -0
  342. package/{esm2015/utils/auto-focus.js → esm2020/utils/auto-focus.mjs} +13 -13
  343. package/{esm2015/utils/auto-scroll-view.js → esm2020/utils/auto-scroll-view.mjs} +24 -24
  344. package/{esm2015/utils/cast-array.js → esm2020/utils/cast-array.mjs} +7 -7
  345. package/{esm2015/utils/common.js → esm2020/utils/common.mjs} +2 -2
  346. package/{esm2015/utils/create-empty-paragraph.js → esm2020/utils/create-empty-paragraph.mjs} +14 -14
  347. package/{esm2015/utils/data-transform.js → esm2020/utils/data-transform.mjs} +48 -48
  348. package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +46 -46
  349. package/{esm2015/utils/editor-uuid.js → esm2020/utils/editor-uuid.mjs} +8 -8
  350. package/{esm2015/utils/fragment.js → esm2020/utils/fragment.mjs} +65 -65
  351. package/{esm2015/utils/get-editable-element-height.js → esm2020/utils/get-editable-element-height.mjs} +6 -6
  352. package/{esm2015/utils/get-toolbar-class.js → esm2020/utils/get-toolbar-class.mjs} +6 -6
  353. package/{esm2015/utils/id-creator.js → esm2020/utils/id-creator.mjs} +11 -11
  354. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +13 -13
  355. package/{esm2015/utils/is-clean-empty-paragraph.js → esm2020/utils/is-clean-empty-paragraph.mjs} +36 -36
  356. package/esm2020/utils/is-inline.mjs +9 -0
  357. package/{esm2015/utils/lodash.js → esm2020/utils/lodash.mjs} +3 -3
  358. package/esm2020/utils/match.mjs +32 -0
  359. package/{esm2015/utils/merge-element-options.js → esm2020/utils/merge-element-options.mjs} +19 -19
  360. package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +3 -3
  361. package/{esm2015/worktile-theia.js → esm2020/worktile-theia.mjs} +4 -4
  362. package/fesm2015/{worktile-theia.js → worktile-theia.mjs} +13096 -13169
  363. package/fesm2015/worktile-theia.mjs.map +1 -0
  364. package/fesm2020/worktile-theia.mjs +13739 -0
  365. package/fesm2020/worktile-theia.mjs.map +1 -0
  366. package/interfaces/auto-format.d.ts +64 -64
  367. package/interfaces/editor.d.ts +146 -146
  368. package/interfaces/element.d.ts +9 -9
  369. package/interfaces/image.d.ts +25 -25
  370. package/interfaces/index.d.ts +8 -8
  371. package/interfaces/plugins/index.d.ts +4 -4
  372. package/interfaces/plugins/no-infer.d.ts +1 -1
  373. package/interfaces/plugins/plugin-key.d.ts +48 -48
  374. package/interfaces/plugins/plugins.d.ts +45 -45
  375. package/interfaces/plugins/with-override.d.ts +7 -7
  376. package/interfaces/reset-block-type-plugin-options.d.ts +23 -23
  377. package/interfaces/toolbar.d.ts +64 -64
  378. package/interfaces/upload.d.ts +11 -11
  379. package/interfaces/utility/index.d.ts +3 -3
  380. package/interfaces/utility/nested-structure-by-key.d.ts +3 -3
  381. package/interfaces/utility/override-by-key.d.ts +3 -3
  382. package/interfaces/utility/types.d.ts +1 -1
  383. package/interfaces/valid-children-types.d.ts +9 -9
  384. package/interfaces/view-base.d.ts +9 -9
  385. package/package.json +20 -6
  386. package/pipes.d.ts +16 -16
  387. package/plugins/align/align.editor.d.ts +7 -7
  388. package/plugins/align/align.plugin.d.ts +2 -2
  389. package/plugins/autoformat/autoformat.plugin.d.ts +6 -6
  390. package/plugins/autoformat/transforms/auto-format-block.d.ts +5 -5
  391. package/plugins/autoformat/transforms/auto-format-inline.d.ts +9 -9
  392. package/plugins/blockquote/blockquote.component.d.ts +11 -11
  393. package/plugins/blockquote/blockquote.editor.d.ts +4 -4
  394. package/plugins/blockquote/blockquote.plugin.d.ts +2 -2
  395. package/plugins/code/code.component.d.ts +65 -65
  396. package/plugins/code/code.editor.d.ts +8 -8
  397. package/plugins/code/code.plugin.d.ts +2 -2
  398. package/plugins/color/color.editor.d.ts +8 -8
  399. package/plugins/color/color.plugin.d.ts +1 -1
  400. package/plugins/color/toolbar-item.component.d.ts +16 -16
  401. package/plugins/common/auto-insert-data..d.ts +2 -2
  402. package/plugins/common/block-card.plugin.d.ts +2 -2
  403. package/plugins/common/get-fragment.plugin.d.ts +6 -6
  404. package/plugins/common/history.plugin.d.ts +9 -9
  405. package/plugins/common/move-selection.plugin.d.ts +2 -2
  406. package/plugins/common/remove-empty.plugin.d.ts +2 -2
  407. package/plugins/common/remove-void.plugin.d.ts +2 -2
  408. package/plugins/common/reset-type.plugin.d.ts +2 -2
  409. package/plugins/common/transforms.plugin.d.ts +8 -8
  410. package/plugins/deserializers/deserialize-html.plugin.d.ts +2 -2
  411. package/plugins/deserializers/deserialize-md.plugin.d.ts +2 -2
  412. package/plugins/font-size/font-size.editor.d.ts +10 -10
  413. package/plugins/heading/heading.editor.d.ts +9 -9
  414. package/plugins/heading/heading.plugin.d.ts +7 -7
  415. package/plugins/hr/hr.component.d.ts +12 -12
  416. package/plugins/hr/hr.editor.d.ts +4 -4
  417. package/plugins/hr/hr.plugin.d.ts +2 -2
  418. package/plugins/image/image.component.d.ts +74 -74
  419. package/plugins/image/image.editor.d.ts +12 -12
  420. package/plugins/image/image.plugin.d.ts +7 -7
  421. package/plugins/indent/indent.editor.d.ts +10 -10
  422. package/plugins/indent/indent.plugin.d.ts +8 -8
  423. package/plugins/indent/on-keydown-indent.d.ts +3 -3
  424. package/plugins/index.d.ts +1 -1
  425. package/plugins/inline-code/inline-code.component.d.ts +9 -9
  426. package/plugins/inline-code/inline-code.editor.d.ts +7 -7
  427. package/plugins/inline-code/inline-code.plugin.d.ts +2 -2
  428. package/plugins/link/edit/link-edit.component.d.ts +36 -36
  429. package/plugins/link/hover/link-hover.component.d.ts +15 -15
  430. package/plugins/link/link.component.d.ts +39 -39
  431. package/plugins/link/link.editor.d.ts +7 -7
  432. package/plugins/link/link.plugin.d.ts +2 -2
  433. package/plugins/link/link.types.d.ts +9 -9
  434. package/plugins/list/components/bulleted-list.component.d.ts +15 -15
  435. package/plugins/list/components/list-item.component.d.ts +20 -20
  436. package/plugins/list/components/numbered-list.component.d.ts +16 -16
  437. package/plugins/list/list.editor.d.ts +12 -12
  438. package/plugins/list/list.plugin.d.ts +3 -3
  439. package/plugins/list/normalizers/get-list-normalizer.d.ts +6 -6
  440. package/plugins/list/normalizers/normalize-list-item.d.ts +5 -5
  441. package/plugins/list/normalizers/normalize-no.d.ts +2 -2
  442. package/plugins/list/on-key-down-list.d.ts +2 -2
  443. package/plugins/list/queries/get-list-item-entry.d.ts +10 -10
  444. package/plugins/list/queries/get-list-item-sublist.d.ts +6 -6
  445. package/plugins/list/queries/get-list-types.d.ts +2 -2
  446. package/plugins/list/queries/get-start-list-item.d.ts +8 -8
  447. package/plugins/list/queries/has-list-in-list-item.d.ts +15 -15
  448. package/plugins/list/queries/is-in-list.d.ts +2 -2
  449. package/plugins/list/queries/is-list-nested.d.ts +5 -5
  450. package/plugins/list/queries/is-list.d.ts +2 -2
  451. package/plugins/list/queries/is-node-type-list.d.ts +2 -2
  452. package/plugins/list/queries/is-selection-at-list-item-start.d.ts +5 -5
  453. package/plugins/list/queries/is-selection-in-same-list-item.d.ts +5 -5
  454. package/plugins/list/queries/is-single-list-item.d.ts +5 -5
  455. package/plugins/list/transforms/insert-list-data.d.ts +12 -12
  456. package/plugins/list/transforms/insert-list-item.d.ts +5 -5
  457. package/plugins/list/transforms/move-list-item-down.d.ts +6 -6
  458. package/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.d.ts +20 -20
  459. package/plugins/list/transforms/move-list-item-sublist-items-to-list.d.ts +19 -19
  460. package/plugins/list/transforms/move-list-item-up.d.ts +10 -10
  461. package/plugins/list/transforms/unwrap-list.d.ts +2 -2
  462. package/plugins/list/types.d.ts +7 -7
  463. package/plugins/mark/mark.editor.d.ts +8 -8
  464. package/plugins/mark/mark.plugin.d.ts +3 -3
  465. package/plugins/node-id/node-id.plugin.d.ts +8 -8
  466. package/plugins/normalizers/insert-paragraph-nodes.d.ts +7 -7
  467. package/plugins/normalizers/remove-empty-nodes.d.ts +7 -7
  468. package/plugins/normalizers/trailing-node.plugin.d.ts +9 -9
  469. package/plugins/paint-format/paint-format.editor.d.ts +8 -8
  470. package/plugins/public-api.d.ts +15 -15
  471. package/plugins/quick-insert/components/quick-insert.component.d.ts +28 -28
  472. package/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.d.ts +28 -28
  473. package/plugins/quick-insert/quick-insert.editor.d.ts +7 -7
  474. package/plugins/quick-insert/quick-insert.plugin.d.ts +10 -10
  475. package/plugins/soft-break/soft-break.plugin.d.ts +5 -5
  476. package/plugins/soft-break/soft-break.types.d.ts +8 -8
  477. package/plugins/table/components/insert-mark/insert-mark.component.d.ts +24 -24
  478. package/plugins/table/components/row/row.component.d.ts +14 -14
  479. package/plugins/table/components/table.component.d.ts +79 -79
  480. package/plugins/table/components/td/td.component.d.ts +95 -95
  481. package/plugins/table/components/toolbar/table-options.component.d.ts +20 -20
  482. package/plugins/table/components/toolbar/table-toolbar.component.d.ts +38 -38
  483. package/plugins/table/table.editor.d.ts +25 -25
  484. package/plugins/table/table.plugin.d.ts +3 -3
  485. package/plugins/table/table.service.d.ts +30 -30
  486. package/plugins/table/table.store.d.ts +71 -71
  487. package/plugins/table/table.types.d.ts +67 -67
  488. package/plugins/table/toolbar-item.component.d.ts +17 -17
  489. package/plugins/table/transforms/clear-cell.d.ts +6 -6
  490. package/plugins/table/transforms/clear-table-node.d.ts +6 -6
  491. package/plugins/table/transforms/insert-column.d.ts +12 -12
  492. package/plugins/table/transforms/insert-row.d.ts +6 -6
  493. package/plugins/table/transforms/insert-table.d.ts +6 -6
  494. package/plugins/table/transforms/remove-column.d.ts +3 -3
  495. package/plugins/table/transforms/remove-row.d.ts +3 -3
  496. package/plugins/table/transforms/remove-table.d.ts +3 -3
  497. package/plugins/table/utils/add-columns.d.ts +2 -2
  498. package/plugins/table/utils/calc-anchor-position.d.ts +6 -6
  499. package/plugins/table/utils/calc-span.d.ts +11 -11
  500. package/plugins/table/utils/create-cell.d.ts +16 -16
  501. package/plugins/table/utils/create-row.d.ts +7 -7
  502. package/plugins/table/utils/create-table.d.ts +7 -7
  503. package/plugins/table/utils/get-base-height.d.ts +9 -9
  504. package/plugins/table/utils/get-select-cell-node.d.ts +7 -7
  505. package/plugins/table/utils/index.d.ts +7 -7
  506. package/plugins/table/utils/is-range-in-table.d.ts +6 -6
  507. package/plugins/table/utils/is-selection-in-table.d.ts +6 -6
  508. package/plugins/table/utils/is-virtual-key.d.ts +1 -1
  509. package/plugins/table/utils/merge-cell.d.ts +21 -21
  510. package/plugins/table/utils/next-path.d.ts +2 -2
  511. package/plugins/table/utils/normalize-table.d.ts +2 -2
  512. package/plugins/table/utils/remove-columns.d.ts +2 -2
  513. package/plugins/table/utils/set-menu-cell-invisibility.d.ts +3 -3
  514. package/plugins/table/utils/split-cell.d.ts +4 -4
  515. package/plugins/table/utils/table-position.d.ts +97 -97
  516. package/plugins/todo-item/todo-item.component.d.ts +21 -21
  517. package/plugins/todo-item/todo-item.editor.d.ts +5 -5
  518. package/plugins/todo-item/todo-item.plugin.d.ts +5 -5
  519. package/plugins/vertical-align/toolbar-item.component.d.ts +25 -25
  520. package/plugins/vertical-align/vertical-align.editor.d.ts +7 -7
  521. package/public-api.d.ts +20 -20
  522. package/queries/anchor-block-entry.d.ts +2 -2
  523. package/queries/anchor-block.d.ts +2 -2
  524. package/queries/anchor-inline-entry.d.ts +2 -2
  525. package/queries/find-descendant.d.ts +10 -10
  526. package/queries/find-node.d.ts +15 -15
  527. package/queries/find-path.d.ts +6 -6
  528. package/queries/get-above-by-type.d.ts +6 -6
  529. package/queries/get-above.d.ts +6 -6
  530. package/queries/get-anchor-block-entry.d.ts +2 -2
  531. package/queries/get-block-above.d.ts +7 -7
  532. package/queries/get-block-card-above.d.ts +7 -7
  533. package/queries/get-block-card-cursor.d.ts +2 -2
  534. package/queries/get-container-blocks.d.ts +2 -2
  535. package/queries/get-directly-parent.d.ts +2 -2
  536. package/queries/get-insert-elements-path.d.ts +7 -7
  537. package/queries/get-last-child-path.d.ts +6 -6
  538. package/queries/get-last-node.d.ts +2 -2
  539. package/queries/get-next-sibling-nodes.d.ts +7 -7
  540. package/queries/get-node.d.ts +2 -2
  541. package/queries/get-nodes-by-type.d.ts +6 -6
  542. package/queries/get-nodes.d.ts +4 -4
  543. package/queries/get-parent.d.ts +7 -7
  544. package/queries/get-plain-text.d.ts +6 -6
  545. package/queries/get-plugin-by-toolbar.d.ts +3 -3
  546. package/queries/get-point-before.d.ts +38 -38
  547. package/queries/get-point-from-location.d.ts +5 -5
  548. package/queries/get-previous-path.d.ts +2 -2
  549. package/queries/get-rang-from-block-start.d.ts +9 -9
  550. package/queries/get-range-before.d.ts +7 -7
  551. package/queries/get-selection-marks.d.ts +12 -12
  552. package/queries/get-selection-nodes-by-type.d.ts +3 -3
  553. package/queries/get-text.d.ts +6 -6
  554. package/queries/get-toolbar-disabled.d.ts +4 -4
  555. package/queries/index.d.ts +58 -58
  556. package/queries/is-across-blocks.d.ts +2 -2
  557. package/queries/is-ancestor-empty.d.ts +5 -5
  558. package/queries/is-ancestor.d.ts +2 -2
  559. package/queries/is-block-above-empty.d.ts +5 -5
  560. package/queries/is-block-active.d.ts +3 -3
  561. package/queries/is-block-card-cursor.d.ts +2 -2
  562. package/queries/is-block-text-empty-after-selection.d.ts +7 -7
  563. package/queries/is-collapsed.d.ts +6 -6
  564. package/queries/is-contain-nested-type.d.ts +2 -2
  565. package/queries/is-container-type.d.ts +2 -2
  566. package/queries/is-descendant.d.ts +2 -2
  567. package/queries/is-empty-content.d.ts +2 -2
  568. package/queries/is-empty-paragraph-by-path.d.ts +2 -2
  569. package/queries/is-empty-paragraph.d.ts +2 -2
  570. package/queries/is-first-child.d.ts +5 -5
  571. package/queries/is-include-types.d.ts +3 -3
  572. package/queries/is-node-type-in.d.ts +6 -6
  573. package/queries/is-node-type.d.ts +6 -6
  574. package/queries/is-paragraph.d.ts +2 -2
  575. package/queries/is-point-at-root.d.ts +2 -2
  576. package/queries/is-range-across-blocks.d.ts +8 -8
  577. package/queries/is-range-at-root.d.ts +2 -2
  578. package/queries/is-start.d.ts +5 -5
  579. package/queries/some-node.d.ts +7 -7
  580. package/services/color-select.service.d.ts +20 -20
  581. package/services/context.service.d.ts +49 -49
  582. package/services/table-contextmenu.service.d.ts +25 -25
  583. package/services/toolbar.service.d.ts +9 -9
  584. package/shortcuts/index.d.ts +2 -2
  585. package/shortcuts/mark.d.ts +2 -2
  586. package/transforms/apply-deep-to-nodes.d.ts +12 -12
  587. package/transforms/clear-marks.d.ts +2 -2
  588. package/transforms/close-conversion-hint.d.ts +2 -2
  589. package/transforms/delete-element.d.ts +2 -2
  590. package/transforms/handle-continual-delete-backward.d.ts +3 -3
  591. package/transforms/handle-continual-insert-break.d.ts +3 -3
  592. package/transforms/index.d.ts +18 -18
  593. package/transforms/insert-elements.d.ts +2 -2
  594. package/transforms/insert-paragraph.d.ts +2 -2
  595. package/transforms/merge-deep-to-nodes.d.ts +5 -5
  596. package/transforms/move-children.d.ts +24 -24
  597. package/transforms/on-keydown-reset-block-type.d.ts +3 -3
  598. package/transforms/set-end-selection.d.ts +2 -2
  599. package/transforms/set-marks.d.ts +12 -12
  600. package/transforms/set-node.d.ts +2 -2
  601. package/transforms/split-node.d.ts +3 -3
  602. package/transforms/un-hang-range.d.ts +10 -10
  603. package/transforms/un-wrap.d.ts +3 -3
  604. package/transforms/unwrap-nodes-by-type.d.ts +6 -6
  605. package/utils/auto-focus.d.ts +2 -2
  606. package/utils/auto-scroll-view.d.ts +6 -6
  607. package/utils/cast-array.d.ts +1 -1
  608. package/utils/common.d.ts +2 -2
  609. package/utils/create-empty-paragraph.d.ts +2 -2
  610. package/utils/data-transform.d.ts +6 -6
  611. package/utils/dom.d.ts +10 -10
  612. package/utils/editor-uuid.d.ts +3 -3
  613. package/utils/fragment.d.ts +10 -10
  614. package/utils/get-editable-element-height.d.ts +2 -2
  615. package/utils/get-toolbar-class.d.ts +2 -2
  616. package/utils/id-creator.d.ts +1 -1
  617. package/utils/index.d.ts +13 -13
  618. package/utils/is-clean-empty-paragraph.d.ts +9 -9
  619. package/utils/is-inline.d.ts +2 -2
  620. package/utils/lodash.d.ts +1 -1
  621. package/utils/match.d.ts +18 -18
  622. package/utils/merge-element-options.d.ts +2 -2
  623. package/utils/weak-maps.d.ts +5 -5
  624. package/worktile-theia.d.ts +5 -5
  625. package/bundles/worktile-theia.umd.js +0 -14919
  626. package/bundles/worktile-theia.umd.js.map +0 -1
  627. package/esm2015/components/color-select/color-select.component.js +0 -113
  628. package/esm2015/components/column-resize/column-resize-notifier.js +0 -31
  629. package/esm2015/components/column-resize/column-resize.module.js +0 -34
  630. package/esm2015/components/contextmenu/contextmenu.component.js +0 -64
  631. package/esm2015/components/conversion-hint/conversion-hint.component.js +0 -59
  632. package/esm2015/components/element/element.component.js +0 -24
  633. package/esm2015/components/inline-toolbar/inline-toolbar.component.js +0 -139
  634. package/esm2015/components/table-select/table-select.component.js +0 -53
  635. package/esm2015/components/template/template.component.js +0 -66
  636. package/esm2015/components/toolbar/toolbar.component.js +0 -250
  637. package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +0 -133
  638. package/esm2015/components/toolbar-group/toolbar-group.component.js +0 -116
  639. package/esm2015/components/toolbar-item/toolbar-item.component.js +0 -105
  640. package/esm2015/core/create-toolbar.js +0 -57
  641. package/esm2015/core/toolbar-item/base-toolbar-item.js +0 -92
  642. package/esm2015/core/utils/get-plugin-options.js +0 -3
  643. package/esm2015/core/utils/get-plugins.js +0 -5
  644. package/esm2015/core/utils/merge-array.js +0 -18
  645. package/esm2015/editor.component.js +0 -440
  646. package/esm2015/interfaces/editor.js +0 -23
  647. package/esm2015/interfaces/reset-block-type-plugin-options.js +0 -2
  648. package/esm2015/interfaces/upload.js +0 -2
  649. package/esm2015/plugins/align/align.editor.js +0 -48
  650. package/esm2015/plugins/autoformat/autoformat.plugin.js +0 -110
  651. package/esm2015/plugins/blockquote/blockquote.editor.js +0 -21
  652. package/esm2015/plugins/code/code.component.js +0 -245
  653. package/esm2015/plugins/color/color.editor.js +0 -45
  654. package/esm2015/plugins/color/toolbar-item.component.js +0 -124
  655. package/esm2015/plugins/common/auto-insert-data..js +0 -78
  656. package/esm2015/plugins/common/get-fragment.plugin.js +0 -25
  657. package/esm2015/plugins/font-size/font-size.editor.js +0 -98
  658. package/esm2015/plugins/image/image.component.js +0 -370
  659. package/esm2015/plugins/image/image.plugin.js +0 -58
  660. package/esm2015/plugins/indent/indent.editor.js +0 -73
  661. package/esm2015/plugins/indent/indent.plugin.js +0 -60
  662. package/esm2015/plugins/link/edit/link-edit.component.js +0 -108
  663. package/esm2015/plugins/link/hover/link-hover.component.js +0 -39
  664. package/esm2015/plugins/list/components/bulleted-list.component.js +0 -34
  665. package/esm2015/plugins/list/components/list-item.component.js +0 -95
  666. package/esm2015/plugins/list/components/numbered-list.component.js +0 -40
  667. package/esm2015/plugins/list/list.plugin.js +0 -281
  668. package/esm2015/plugins/list/normalizers/normalize-list-item.js +0 -19
  669. package/esm2015/plugins/list/types.js +0 -2
  670. package/esm2015/plugins/mark/mark.editor.js +0 -29
  671. package/esm2015/plugins/mark/mark.plugin.js +0 -102
  672. package/esm2015/plugins/node-id/node-id.plugin.js +0 -69
  673. package/esm2015/plugins/normalizers/insert-paragraph-nodes.js +0 -29
  674. package/esm2015/plugins/normalizers/trailing-node.plugin.js +0 -34
  675. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +0 -102
  676. package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +0 -84
  677. package/esm2015/plugins/quick-insert/quick-insert.plugin.js +0 -75
  678. package/esm2015/plugins/soft-break/soft-break.plugin.js +0 -37
  679. package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +0 -103
  680. package/esm2015/plugins/table/components/table.component.js +0 -470
  681. package/esm2015/plugins/table/components/td/td.component.js +0 -698
  682. package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +0 -162
  683. package/esm2015/plugins/table/table.plugin.js +0 -424
  684. package/esm2015/plugins/table/table.store.js +0 -480
  685. package/esm2015/plugins/table/toolbar-item.component.js +0 -86
  686. package/esm2015/plugins/table/transforms/clear-cell.js +0 -11
  687. package/esm2015/plugins/table/transforms/insert-table.js +0 -15
  688. package/esm2015/plugins/todo-item/todo-item.component.js +0 -66
  689. package/esm2015/plugins/vertical-align/toolbar-item.component.js +0 -90
  690. package/esm2015/queries/get-above-by-type.js +0 -11
  691. package/esm2015/queries/get-block-above.js +0 -7
  692. package/esm2015/queries/get-block-card-above.js +0 -7
  693. package/esm2015/queries/get-nodes-by-type.js +0 -12
  694. package/esm2015/queries/get-plain-text.js +0 -16
  695. package/esm2015/queries/get-selection-marks.js +0 -19
  696. package/esm2015/queries/get-toolbar-disabled.js +0 -14
  697. package/esm2015/queries/is-range-across-blocks.js +0 -18
  698. package/esm2015/services/context.service.js +0 -60
  699. package/esm2015/services/toolbar.service.js +0 -48
  700. package/esm2015/transforms/insert-elements.js +0 -35
  701. package/esm2015/transforms/merge-deep-to-nodes.js +0 -9
  702. package/esm2015/transforms/unwrap-nodes-by-type.js +0 -11
  703. package/esm2015/utils/is-inline.js +0 -10
  704. package/esm2015/utils/match.js +0 -29
  705. package/fesm2015/worktile-theia.js.map +0 -1
@@ -0,0 +1,427 @@
1
+ import { Transforms, Node, Range, Editor, Element, Path, Operation } from 'slate';
2
+ import { AngularEditor, ELEMENT_TO_COMPONENT, hotkeys } from 'slate-angular';
3
+ import { TableOptions } from './table.types';
4
+ import { isRangeInTable, isSelectionInTable, TablePosition } from './utils';
5
+ import { PluginKeys, TheEditor } from '../../interfaces';
6
+ import { ElementKinds } from '../../constants/node-types';
7
+ import { TheTableComponent } from './components/table.component';
8
+ import { TableEditor } from './table.editor';
9
+ import { clearTableNode } from './transforms/clear-table-node';
10
+ import { isVirtualKey } from './utils/is-virtual-key';
11
+ import { insertColumnAtRow } from './transforms/insert-column';
12
+ import { calculateAnchorPositionInCell } from './utils/calc-anchor-position';
13
+ import { CLIPBOARD_FORMAT_KEY } from '../../constants/default';
14
+ import { getOriginCell } from './utils/calc-span';
15
+ import { resetTableCell } from './utils/split-cell';
16
+ import { removeColumns } from './utils/remove-columns';
17
+ import { addColumns } from './utils/add-columns';
18
+ import { TheTableRowComponent } from './components/row/row.component';
19
+ import { TheTdComponent } from './components/td/td.component';
20
+ import { extractFragment } from '../../utils/fragment';
21
+ import * as TheQueries from '../../queries';
22
+ import { normalizeTable } from './utils/normalize-table';
23
+ import { _ } from '../../utils/lodash';
24
+ import { createPluginFactory } from '../../core';
25
+ import { TheTableToolbarItemComponent } from './toolbar-item.component';
26
+ export const withTable = (editor) => {
27
+ const { deleteBackward, deleteForward, onKeydown, setFragmentData, insertData, normalizeNode, isBlockCard, renderElement, deleteCutData, isContainer, onChange } = editor;
28
+ editor.deleteBackward = unit => {
29
+ const opts = new TableOptions();
30
+ if (!isSelectionInTable(opts, editor)) {
31
+ deleteBackward(unit);
32
+ return;
33
+ }
34
+ const { selection } = editor;
35
+ const [, startBlockPath] = Editor.above(editor, {
36
+ match: n => Editor.isBlock(editor, n)
37
+ });
38
+ const startPosition = TablePosition.create(opts, editor, selection.anchor.path);
39
+ if (startBlockPath.length <= startPosition.cellEntry[1].length + 1 &&
40
+ startBlockPath.pop() === 0 &&
41
+ selection.anchor.offset === 0 &&
42
+ TheQueries.isStart(editor, selection.anchor, startBlockPath) &&
43
+ !Editor.isVoid(editor, TheQueries.anchorBlock(editor))) {
44
+ return;
45
+ }
46
+ deleteBackward(unit);
47
+ };
48
+ editor.deleteForward = unit => {
49
+ const opts = new TableOptions();
50
+ const afterPoint = Editor.after(editor, editor.selection);
51
+ if (afterPoint && isRangeInTable(opts, editor, { anchor: afterPoint, focus: afterPoint })) {
52
+ const beforePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);
53
+ const afterPosition = TablePosition.create(opts, editor, afterPoint.path);
54
+ if (beforePosition.cell && beforePosition.cell !== afterPosition.cell) {
55
+ return;
56
+ }
57
+ }
58
+ deleteForward(unit);
59
+ };
60
+ editor.onKeydown = (event) => {
61
+ const opts = new TableOptions();
62
+ const isMoveUp = hotkeys.isMoveUp(event);
63
+ const isMoveDown = hotkeys.isMoveDown(event);
64
+ const isMoveBackward = hotkeys.isMoveBackward(event);
65
+ const isMoveForward = hotkeys.isMoveForward(event);
66
+ const { selection } = editor;
67
+ if (!selection || !selection.anchor || !selection.focus) {
68
+ onKeydown(event);
69
+ return;
70
+ }
71
+ const startPosition = TablePosition.create(opts, editor, selection.anchor.path);
72
+ const endPosition = TablePosition.create(opts, editor, selection.focus.path);
73
+ const isCollapsed = Range.isCollapsed(selection);
74
+ if (startPosition && endPosition && endPosition.isInTable()) {
75
+ // for keyboard up and down key in the table
76
+ if (isMoveUp || isMoveDown) {
77
+ const cellPath = endPosition.cellEntry[1];
78
+ const startPath = Editor.start(editor, cellPath).path;
79
+ const endPath = Editor.end(editor, cellPath).path;
80
+ const { isFirstLine, isLastLine } = calculateAnchorPositionInCell(editor);
81
+ startPath.pop();
82
+ endPath.pop();
83
+ if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== startPath.toString() || !isFirstLine) && isMoveUp) {
84
+ onKeydown(event);
85
+ return;
86
+ }
87
+ if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== endPath.toString() || !isLastLine) && isMoveDown) {
88
+ onKeydown(event);
89
+ return;
90
+ }
91
+ event.preventDefault();
92
+ let at;
93
+ if (isMoveUp) {
94
+ const aboveRow = startPosition.table.children[startPosition.getRowIndex() - 1];
95
+ const aboveCell = aboveRow && aboveRow.children[startPosition.getColumnIndex()];
96
+ if (aboveCell) {
97
+ if (aboveCell.hidden) {
98
+ TableEditor.selectOriginCell(editor, startPosition.table, startPosition.getRowIndex() - 1, startPosition.getColumnIndex(), false);
99
+ return;
100
+ }
101
+ else {
102
+ at = Editor.end(editor, TheEditor.findPath(editor, aboveCell));
103
+ }
104
+ }
105
+ else {
106
+ const previousNodeEntry = Editor.previous(editor, { at: startPosition.tableEntry[1] });
107
+ const beforePoint = Editor.before(editor, startPosition.tableEntry[1]);
108
+ Editor.next(editor, { at: startPosition.tableEntry[1] });
109
+ if (previousNodeEntry) {
110
+ at = Editor.end(editor, previousNodeEntry[1]);
111
+ }
112
+ if (!previousNodeEntry && beforePoint) {
113
+ at = Editor.end(editor, beforePoint.path);
114
+ }
115
+ if (!previousNodeEntry && !beforePoint) {
116
+ AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'left' });
117
+ return;
118
+ }
119
+ }
120
+ Transforms.select(editor, at);
121
+ }
122
+ else {
123
+ let belowRowIndex = startPosition.getRowIndex() + 1;
124
+ if (startPosition.cell.rowspan > 1) {
125
+ belowRowIndex = startPosition.getRowIndex() + startPosition.cell.rowspan;
126
+ }
127
+ const belowRow = startPosition.table.children[belowRowIndex];
128
+ const belowCell = belowRow && belowRow.children[startPosition.getColumnIndex()];
129
+ if (belowCell) {
130
+ if (belowCell.hidden) {
131
+ TableEditor.selectOriginCell(editor, startPosition.table, startPosition.getRowIndex() + 1, startPosition.getColumnIndex(), true);
132
+ return;
133
+ }
134
+ else {
135
+ at = Editor.start(editor, TheEditor.findPath(editor, belowCell));
136
+ }
137
+ }
138
+ else {
139
+ const nextNodeEntry = Editor.next(editor, { at: startPosition.tableEntry[1] });
140
+ const movePath = nextNodeEntry ? nextNodeEntry[1] : Editor.after(editor, startPosition.tableEntry[1]).path;
141
+ at = Editor.start(editor, movePath);
142
+ }
143
+ Transforms.select(editor, at);
144
+ }
145
+ return;
146
+ }
147
+ if (isMoveBackward) {
148
+ const beforePoint = Editor.before(editor, editor.selection);
149
+ const beforePosition = beforePoint && TablePosition.create(opts, editor, beforePoint.path);
150
+ if (beforePosition && beforePosition.cell && beforePosition.cell.hidden) {
151
+ event.preventDefault();
152
+ const at = Editor.end(editor, TheEditor.findPath(editor, beforePosition.findPrevious()));
153
+ Transforms.select(editor, at);
154
+ }
155
+ }
156
+ if (isMoveForward) {
157
+ const afterPoint = Editor.after(editor, editor.selection);
158
+ const afterPosition = afterPoint && TablePosition.create(opts, editor, afterPoint.path);
159
+ if (afterPosition.cell && afterPosition.cell.hidden) {
160
+ event.preventDefault();
161
+ const nextCell = afterPosition.findNext();
162
+ if (nextCell) {
163
+ const at = Editor.start(editor, TheEditor.findPath(editor, afterPosition.findNext()));
164
+ Transforms.select(editor, at);
165
+ event.preventDefault();
166
+ }
167
+ else {
168
+ AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'right' });
169
+ event.preventDefault();
170
+ }
171
+ return;
172
+ }
173
+ }
174
+ // Prevent deleting cells in the table
175
+ if (!isCollapsed && !startPosition.isInTable() && !isVirtualKey(event)) {
176
+ event.preventDefault();
177
+ let tableOutPath;
178
+ Editor.withoutNormalizing(editor, () => {
179
+ if (Range.isForward(selection)) {
180
+ tableOutPath = Editor.end(editor, [selection.focus.path[0] - 1]);
181
+ clearTableNode(opts, editor, true);
182
+ }
183
+ else {
184
+ tableOutPath = Editor.start(editor, [selection.focus.path[0] + 1]);
185
+ clearTableNode(opts, editor);
186
+ }
187
+ const tableOutRange = Editor.range(editor, selection.anchor, tableOutPath);
188
+ Transforms.delete(editor, { at: tableOutRange });
189
+ });
190
+ // new range
191
+ const cellRange = Editor.range(editor, editor.selection.focus.path.slice(0, 3));
192
+ const focusRange = Range.intersection(editor.selection, cellRange);
193
+ Transforms.select(editor, focusRange);
194
+ Editor.deleteFragment(editor);
195
+ return;
196
+ }
197
+ }
198
+ onKeydown(event);
199
+ return;
200
+ };
201
+ editor.setFragmentData = unit => {
202
+ const opts = new TableOptions();
203
+ if (!isSelectionInTable(opts, editor)) {
204
+ setFragmentData(unit);
205
+ return;
206
+ }
207
+ const { selection } = editor;
208
+ const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);
209
+ const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table);
210
+ const cells = tableComponent.tableStore.selectedCells;
211
+ let tableFragment = null;
212
+ if (tableComponent.tableStore.selectedRowsIndex.length > 0) {
213
+ const rows = tablePosition.table.children.slice(tableComponent.tableStore.selectedRowsIndex[0], tableComponent.tableStore.selectedRowsIndex[tableComponent.tableStore.selectedRowsIndex.length - 1] + 1);
214
+ tableFragment = {
215
+ ...tablePosition.table,
216
+ children: rows
217
+ };
218
+ }
219
+ else if (cells.length > 0) {
220
+ const tempRows = {};
221
+ for (const cell of cells) {
222
+ const { row, col } = cell;
223
+ const cellPath = [...tablePosition.tableEntry[1], row, col];
224
+ const cellNode = Node.get(editor, cellPath);
225
+ if (!tempRows[row]) {
226
+ tempRows[row] = [];
227
+ }
228
+ tempRows[row].push(cellNode);
229
+ }
230
+ const rows = Object.values(tempRows).map((item) => {
231
+ return {
232
+ type: ElementKinds.tableRow,
233
+ children: item
234
+ };
235
+ });
236
+ tableFragment = {
237
+ type: ElementKinds.table,
238
+ children: rows
239
+ };
240
+ }
241
+ if (tableFragment) {
242
+ tableFragment = normalizeTable(_.cloneDeep(tableFragment));
243
+ const plainText = Node.string(tableFragment);
244
+ tableFragment = [tableFragment];
245
+ const stringObj = JSON.stringify(tableFragment);
246
+ const encoded = window.btoa(encodeURIComponent(stringObj));
247
+ unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);
248
+ unit.setData('text/plain', plainText);
249
+ return;
250
+ }
251
+ setFragmentData(unit);
252
+ };
253
+ editor.insertData = data => {
254
+ const fragment = extractFragment(data);
255
+ if (fragment) {
256
+ const opts = new TableOptions();
257
+ const { selection } = editor;
258
+ if (isSelectionInTable(opts, editor) &&
259
+ fragment.length === 1 &&
260
+ Element.isElement(fragment[0]) &&
261
+ fragment[0].type === ElementKinds.table) {
262
+ const tablePosition = TablePosition.create(opts, editor, selection.anchor.path);
263
+ const clipboardTable = fragment[0].children;
264
+ const clipboardRow = clipboardTable[0].children;
265
+ const selectRowIndex = tablePosition.getRowIndex();
266
+ const selectColIndex = tablePosition.getColumnIndex();
267
+ const lastRowIndex = selectRowIndex + clipboardTable.length - 1;
268
+ const lastColIndex = selectColIndex + clipboardRow.length - 1;
269
+ for (let i = selectRowIndex; i <= lastRowIndex; i++) {
270
+ for (let j = selectColIndex; j <= lastColIndex; j++) {
271
+ const row = tablePosition.table.children[i];
272
+ if (row && row.children[j]) {
273
+ const originCell = getOriginCell(tablePosition.table, i, j);
274
+ if (originCell && (originCell.colspan || originCell.rowspan)) {
275
+ const path = TheEditor.findPath(editor, originCell).slice(-2);
276
+ resetTableCell(editor, tablePosition.table, originCell, path[0], path[1]);
277
+ }
278
+ }
279
+ }
280
+ }
281
+ Editor.withoutNormalizing(editor, () => {
282
+ if (lastColIndex > tablePosition.getWidth() - 1) {
283
+ const addColCount = lastColIndex - (tablePosition.getWidth() - 1);
284
+ TableEditor.insertColumn(editor, addColCount, tablePosition.getWidth());
285
+ }
286
+ if (lastRowIndex > tablePosition.getHeight() - 1) {
287
+ const addRowCount = lastRowIndex - (tablePosition.getHeight() - 1);
288
+ TableEditor.insertRow(editor, addRowCount, tablePosition.getHeight());
289
+ }
290
+ clipboardTable.forEach((row, i) => {
291
+ row.children.forEach((col, j) => {
292
+ const at = [...tablePosition.tableEntry[1], selectRowIndex + i, selectColIndex + j];
293
+ Transforms.removeNodes(editor, { at });
294
+ Transforms.insertNodes(editor, col, { at });
295
+ });
296
+ });
297
+ });
298
+ const target = Editor.start(editor, [...tablePosition.tableEntry[1], selectRowIndex, selectColIndex]);
299
+ Transforms.select(editor, target);
300
+ return;
301
+ }
302
+ }
303
+ insertData(data);
304
+ };
305
+ editor.normalizeNode = (entry) => {
306
+ if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.table) {
307
+ const table = entry[0];
308
+ const maxWidth = Math.max(...table.children.map(row => row.children.length));
309
+ const invalidRows = table.children.filter(row => row.children.length < maxWidth);
310
+ if (invalidRows.length > 0) {
311
+ const opts = new TableOptions();
312
+ Editor.withoutNormalizing(editor, () => {
313
+ table.children.map((row, rowIndex) => {
314
+ row.children.map((cell, cellIndex) => {
315
+ if (cell.hidden || cell.colspan || cell.rowspan) {
316
+ Transforms.setNodes(editor, { hidden: null, colspan: null, rowspan: null }, { at: [...entry[1], rowIndex, cellIndex] });
317
+ }
318
+ });
319
+ });
320
+ invalidRows.forEach(row => {
321
+ const count = maxWidth - row.children.length;
322
+ insertColumnAtRow(opts, editor, count, entry, table.children.indexOf(row), row.children.length);
323
+ });
324
+ });
325
+ }
326
+ if (table.columns && table.columns.length !== maxWidth) {
327
+ const columns = table.columns.length > maxWidth ? removeColumns(table, maxWidth) : addColumns(table, maxWidth);
328
+ Transforms.setNodes(editor, { columns }, { at: entry[1] });
329
+ }
330
+ }
331
+ // adjust selection when selection is in hidden cell
332
+ if (Element.isElement(entry[0]) && entry[0].type === ElementKinds.tableCell && entry[0].hidden) {
333
+ if (editor.selection && Range.isCollapsed(editor.selection) && Path.isAncestor(entry[1], editor.selection.anchor.path)) {
334
+ setTimeout(() => {
335
+ const opts = new TableOptions();
336
+ const tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);
337
+ const origin = getOriginCell(tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex());
338
+ if (origin) {
339
+ const path = AngularEditor.findPath(editor, origin);
340
+ Transforms.select(editor, Editor.end(editor, path));
341
+ }
342
+ }, 0);
343
+ return;
344
+ }
345
+ }
346
+ normalizeNode(entry);
347
+ };
348
+ editor.isBlockCard = (element) => {
349
+ if (element && element.type === ElementKinds.table) {
350
+ return true;
351
+ }
352
+ return isBlockCard(element);
353
+ };
354
+ editor.renderElement = (element) => {
355
+ if (element.type === ElementKinds.table) {
356
+ return TheTableComponent;
357
+ }
358
+ if (element.type === ElementKinds.tableRow) {
359
+ return TheTableRowComponent;
360
+ }
361
+ if (element.type === ElementKinds.tableCell) {
362
+ return TheTdComponent;
363
+ }
364
+ return renderElement(element);
365
+ };
366
+ editor.deleteCutData = () => {
367
+ const opts = new TableOptions();
368
+ if (!isSelectionInTable(opts, editor)) {
369
+ deleteCutData();
370
+ return;
371
+ }
372
+ const { selection } = editor;
373
+ const element = TablePosition.create(opts, editor, selection.anchor.path);
374
+ const tableComponent = ELEMENT_TO_COMPONENT.get(element.table);
375
+ const cells = tableComponent.tableStore.selectedCells;
376
+ if (cells.length > 0) {
377
+ Editor.withoutNormalizing(editor, () => {
378
+ if (tableComponent.tableStore.isSelectedTable) {
379
+ TableEditor.removeTable(editor);
380
+ }
381
+ else {
382
+ tableComponent.tableStore.clearSelectedCellsContent();
383
+ }
384
+ tableComponent.tableService.closeToolbar();
385
+ });
386
+ return;
387
+ }
388
+ deleteCutData();
389
+ };
390
+ editor.isContainer = (element) => {
391
+ return element.type === ElementKinds.tableCell ? true : isContainer(element);
392
+ };
393
+ editor.onChange = () => {
394
+ onChange();
395
+ // adujst selection when selection is in hidden cell
396
+ // just hook set_selection
397
+ const isCollapsed = editor.selection && Range.isCollapsed(editor.selection);
398
+ const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));
399
+ if (isCollapsed && isSelectionOperation) {
400
+ const opts = new TableOptions();
401
+ const tablePosition = TablePosition.create(opts, editor, editor.selection.anchor.path);
402
+ if (tablePosition.isInTable() && tablePosition.cell.hidden) {
403
+ TableEditor.selectOriginCell(editor, tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex(), false);
404
+ }
405
+ }
406
+ };
407
+ return editor;
408
+ };
409
+ export const createTablePlugin = createPluginFactory({
410
+ key: PluginKeys.table,
411
+ withOverrides: withTable,
412
+ nestedStructureByKey: {
413
+ [ElementKinds.table]: ElementKinds.tableRow,
414
+ [ElementKinds.tableRow]: ElementKinds.tableCell
415
+ },
416
+ toolbarItems: [
417
+ {
418
+ key: ElementKinds.table,
419
+ icon: 'table-border-all',
420
+ name: '表格',
421
+ iconComponent: TheTableToolbarItemComponent,
422
+ execute: editor => TableEditor.insertTable(editor),
423
+ active: editor => TableEditor.isActive(editor)
424
+ }
425
+ ]
426
+ });
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDcEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFv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LENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUztLQUNsRDtJQUNELFlBQVksRUFBRTtRQUNWO1lBQ0ksR0FBRyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3ZCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixhQUFhLEVBQUUsNEJBQTRCO1lBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ2xELE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQ2pEO0tBQ0o7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zvcm1zLCBQb2ludCwgTm9kZSwgUmFuZ2UsIEVkaXRvciwgTm9kZUVudHJ5LCBFbGVtZW50LCBQYXRoLCBPcGVyYXRpb24gfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCwgaG90a2V5cyB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBpc1JhbmdlSW5UYWJsZSwgaXNTZWxlY3Rpb25JblRhYmxlLCBUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBQbHVnaW5LZXlzLCBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVsZW1lbnRLaW5kcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlRWxlbWVudCwgVGFibGVSb3dFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRoZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUVkaXRvciB9IGZyb20gJy4vdGFibGUuZWRpdG9yJztcbmltcG9ydCB7IGNsZWFyVGFibGVOb2RlIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2NsZWFyLXRhYmxlLW5vZGUnO1xuaW1wb3J0IHsgaXNWaXJ0dWFsS2V5IH0gZnJvbSAnLi91dGlscy9pcy12aXJ0dWFsLWtleSc7XG5pbXBvcnQgeyBpbnNlcnRDb2x1bW5BdFJvdyB9IGZyb20gJy4vdHJhbnNmb3Jtcy9pbnNlcnQtY29sdW1uJztcbmltcG9ydCB7IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uSW5DZWxsIH0gZnJvbSAnLi91dGlscy9jYWxjLWFuY2hvci1wb3NpdGlvbic7XG5pbXBvcnQgeyBDTElQQk9BUkRfRk9STUFUX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IGdldE9yaWdpbkNlbGwgfSBmcm9tICcuL3V0aWxzL2NhbGMtc3Bhbic7XG5pbXBvcnQgeyByZXNldFRhYmxlQ2VsbCB9IGZyb20gJy4vdXRpbHMvc3BsaXQtY2VsbCc7XG5pbXBvcnQgeyByZW1vdmVDb2x1bW5zIH0gZnJvbSAnLi91dGlscy9yZW1vdmUtY29sdW1ucyc7XG5pbXBvcnQgeyBhZGRDb2x1bW5zIH0gZnJvbSAnLi91dGlscy9hZGQtY29sdW1ucyc7XG5pbXBvcnQgeyBUaGVUYWJsZVJvd0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3cvcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVUZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZXh0cmFjdEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRhYmxlIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtdGFibGUnO1xuaW1wb3J0IHsgXyB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZGFzaCc7XG5pbXBvcnQgeyBjcmVhdGVQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUaGVUYWJsZVRvb2xiYXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyLWl0ZW0uY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IHdpdGhUYWJsZSA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGRlbGV0ZUJhY2t3YXJkLFxuICAgICAgICBkZWxldGVGb3J3YXJkLFxuICAgICAgICBvbktleWRvd24sXG4gICAgICAgIHNldEZyYWdtZW50RGF0YSxcbiAgICAgICAgaW5zZXJ0RGF0YSxcbiAgICAgICAgbm9ybWFsaXplTm9kZSxcbiAgICAgICAgaXNCbG9ja0NhcmQsXG4gICAgICAgIHJlbmRlckVsZW1lbnQsXG4gICAgICAgIGRlbGV0ZUN1dERhdGEsXG4gICAgICAgIGlzQ29udGFpbmVyLFxuICAgICAgICBvbkNoYW5nZVxuICAgIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3IuZGVsZXRlQmFja3dhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcblxuICAgICAgICBjb25zdCBbLCBzdGFydEJsb2NrUGF0aF0gPSBFZGl0b3IuYWJvdmU8RWxlbWVudD4oZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PiBFZGl0b3IuaXNCbG9jayhlZGl0b3IsIG4pXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGFydEJsb2NrUGF0aC5sZW5ndGggPD0gc3RhcnRQb3NpdGlvbi5jZWxsRW50cnlbMV0ubGVuZ3RoICsgMSAmJlxuICAgICAgICAgICAgc3RhcnRCbG9ja1BhdGgucG9wKCkgPT09IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgICBUaGVRdWVyaWVzLmlzU3RhcnQoZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLCBzdGFydEJsb2NrUGF0aCkgJiZcbiAgICAgICAgICAgICFFZGl0b3IuaXNWb2lkKGVkaXRvciwgVGhlUXVlcmllcy5hbmNob3JCbG9jayhlZGl0b3IpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUZvcndhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJQb2ludCA9IEVkaXRvci5hZnRlcihlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICBpZiAoYWZ0ZXJQb2ludCAmJiBpc1JhbmdlSW5UYWJsZShvcHRzLCBlZGl0b3IsIHsgYW5jaG9yOiBhZnRlclBvaW50LCBmb2N1czogYWZ0ZXJQb2ludCB9KSkge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgYWZ0ZXJQb2ludC5wYXRoKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgIT09IGFmdGVyUG9zaXRpb24uY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGVGb3J3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25LZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZVVwID0gaG90a2V5cy5pc01vdmVVcChldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZURvd24gPSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVCYWNrd2FyZCA9IGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVGb3J3YXJkID0gaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5hbmNob3IgfHwgIXNlbGVjdGlvbi5mb2N1cykge1xuICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgc2VsZWN0aW9uLmZvY3VzLnBhdGgpO1xuICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbik7XG4gICAgICAgIGlmIChzdGFydFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uLmlzSW5UYWJsZSgpKSB7XG4gICAgICAgICAgICAvLyBmb3Iga2V5Ym9hcmQgdXAgYW5kIGRvd24ga2V5IGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgaWYgKGlzTW92ZVVwIHx8IGlzTW92ZURvd24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUGF0aCA9IGVuZFBvc2l0aW9uLmNlbGxFbnRyeVsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBhdGggPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBjZWxsUGF0aCkucGF0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQYXRoID0gRWRpdG9yLmVuZChlZGl0b3IsIGNlbGxQYXRoKS5wYXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNGaXJzdExpbmUsIGlzTGFzdExpbmUgfSA9IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uSW5DZWxsKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgc3RhcnRQYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIGVuZFBhdGgucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoKFRoZVF1ZXJpZXMuYW5jaG9yQmxvY2tFbnRyeShlZGl0b3IpWzFdLnRvU3RyaW5nKCkgIT09IHN0YXJ0UGF0aC50b1N0cmluZygpIHx8ICFpc0ZpcnN0TGluZSkgJiYgaXNNb3ZlVXApIHtcbiAgICAgICAgICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgoVGhlUXVlcmllcy5hbmNob3JCbG9ja0VudHJ5KGVkaXRvcilbMV0udG9TdHJpbmcoKSAhPT0gZW5kUGF0aC50b1N0cmluZygpIHx8ICFpc0xhc3RMaW5lKSAmJiBpc01vdmVEb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCBhdDogUG9pbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW92ZVVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3ZlUm93ID0gc3RhcnRQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVDZWxsID0gYWJvdmVSb3cgJiYgYWJvdmVSb3cuY2hpbGRyZW5bc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zZWxlY3RPcmlnaW5DZWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYWJvdmVDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vZGVFbnRyeSA9IEVkaXRvci5wcmV2aW91cyhlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IubmV4dChlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgcHJldmlvdXNOb2RlRW50cnlbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTm9kZUVudHJ5ICYmIGJlZm9yZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgYmVmb3JlUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNOb2RlRW50cnkgJiYgIWJlZm9yZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5tb3ZlQmxvY2tDYXJkKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzBdLCB7IGRpcmVjdGlvbjogJ2xlZnQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmVsb3dSb3dJbmRleCA9IHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uLmNlbGwucm93c3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93Um93SW5kZXggPSBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgKyBzdGFydFBvc2l0aW9uLmNlbGwucm93c3BhbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWxvd1JvdyA9IHN0YXJ0UG9zaXRpb24udGFibGUuY2hpbGRyZW5bYmVsb3dSb3dJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlbG93Q2VsbCA9IGJlbG93Um93ICYmIGJlbG93Um93LmNoaWxkcmVuW3N0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWxvd0NlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWxvd0NlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3Iuc2VsZWN0T3JpZ2luQ2VsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBiZWxvd0NlbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHROb2RlRW50cnkgPSBFZGl0b3IubmV4dChlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdmVQYXRoID0gbmV4dE5vZGVFbnRyeSA/IG5leHROb2RlRW50cnlbMV0gOiBFZGl0b3IuYWZ0ZXIoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0pLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5zdGFydChlZGl0b3IsIG1vdmVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNNb3ZlQmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb3NpdGlvbiA9IGJlZm9yZVBvaW50ICYmIFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgYmVmb3JlUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZVBvc2l0aW9uICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgJiYgYmVmb3JlUG9zaXRpb24uY2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYmVmb3JlUG9zaXRpb24uZmluZFByZXZpb3VzKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNNb3ZlRm9yd2FyZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9pbnQgPSBFZGl0b3IuYWZ0ZXIoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclBvc2l0aW9uID0gYWZ0ZXJQb2ludCAmJiBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIGFmdGVyUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyUG9zaXRpb24uY2VsbCAmJiBhZnRlclBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYWZ0ZXJQb3NpdGlvbi5maW5kTmV4dCgpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLm1vdmVCbG9ja0NhcmQoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMF0sIHsgZGlyZWN0aW9uOiAncmlnaHQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRlbGV0aW5nIGNlbGxzIGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgaWYgKCFpc0NvbGxhcHNlZCAmJiAhc3RhcnRQb3NpdGlvbi5pc0luVGFibGUoKSAmJiAhaXNWaXJ0dWFsS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IHRhYmxlT3V0UGF0aDogUG9pbnQ7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJhbmdlLmlzRm9yd2FyZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU91dFBhdGggPSBFZGl0b3IuZW5kKGVkaXRvciwgW3NlbGVjdGlvbi5mb2N1cy5wYXRoWzBdIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUYWJsZU5vZGUob3B0cywgZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlT3V0UGF0aCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFtzZWxlY3Rpb24uZm9jdXMucGF0aFswXSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGFibGVOb2RlKG9wdHMsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVPdXRSYW5nZSA9IEVkaXRvci5yYW5nZShlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHRhYmxlT3V0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogdGFibGVPdXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBuZXcgcmFuZ2VcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSBFZGl0b3IucmFuZ2UoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmZvY3VzLnBhdGguc2xpY2UoMCwgMykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzUmFuZ2UgPSBSYW5nZS5pbnRlcnNlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbiwgY2VsbFJhbmdlKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGZvY3VzUmFuZ2UpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgfTtcblxuICAgIGVkaXRvci5zZXRGcmFnbWVudERhdGEgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgc2V0RnJhZ21lbnREYXRhKHVuaXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlUG9zaXRpb24udGFibGUpIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICBjb25zdCBjZWxscyA9IHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRDZWxscztcbiAgICAgICAgbGV0IHRhYmxlRnJhZ21lbnQgPSBudWxsO1xuICAgICAgICBpZiAodGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlbi5zbGljZShcbiAgICAgICAgICAgICAgICB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4WzBdLFxuICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRSb3dzSW5kZXhbdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggLSAxXSArIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhYmxlUG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHJvd3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY2VsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcFJvd3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93LCBjb2wgfSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCByb3csIGNvbF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbE5vZGUgPSBOb2RlLmdldChlZGl0b3IsIGNlbGxQYXRoKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghdGVtcFJvd3Nbcm93XSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wUm93c1tyb3ddID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRlbXBSb3dzW3Jvd10ucHVzaChjZWxsTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3dzOiBUYWJsZVJvd0VsZW1lbnRbXSA9IE9iamVjdC52YWx1ZXModGVtcFJvd3MpLm1hcCgoaXRlbTogVGFibGVDZWxsRWxlbWVudFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLnRhYmxlUm93LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByb3dzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWJsZUZyYWdtZW50KSB7XG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0gbm9ybWFsaXplVGFibGUoXy5jbG9uZURlZXAodGFibGVGcmFnbWVudCkpO1xuICAgICAgICAgICAgY29uc3QgcGxhaW5UZXh0ID0gTm9kZS5zdHJpbmcodGFibGVGcmFnbWVudCk7XG4gICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0gW3RhYmxlRnJhZ21lbnRdO1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nT2JqID0gSlNPTi5zdHJpbmdpZnkodGFibGVGcmFnbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ09iaikpO1xuICAgICAgICAgICAgdW5pdC5zZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBCT0FSRF9GT1JNQVRfS0VZfWAsIGVuY29kZWQpO1xuICAgICAgICAgICAgdW5pdC5zZXREYXRhKCd0ZXh0L3BsYWluJywgcGxhaW5UZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRGcmFnbWVudERhdGEodW5pdCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pbnNlcnREYXRhID0gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXh0cmFjdEZyYWdtZW50KGRhdGEpO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpICYmXG4gICAgICAgICAgICAgICAgZnJhZ21lbnQubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgRWxlbWVudC5pc0VsZW1lbnQoZnJhZ21lbnRbMF0pICYmXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRbMF0udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFRhYmxlID0gZnJhZ21lbnRbMF0uY2hpbGRyZW4gYXMgTm9kZVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFJvdyA9IChjbGlwYm9hcmRUYWJsZVswXSBhcyBFbGVtZW50KS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RSb3dJbmRleCA9IHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RDb2xJbmRleCA9IHRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Um93SW5kZXggPSBzZWxlY3RSb3dJbmRleCArIGNsaXBib2FyZFRhYmxlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENvbEluZGV4ID0gc2VsZWN0Q29sSW5kZXggKyBjbGlwYm9hcmRSb3cubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RSb3dJbmRleDsgaSA8PSBsYXN0Um93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gc2VsZWN0Q29sSW5kZXg7IGogPD0gbGFzdENvbEluZGV4OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRhYmxlUG9zaXRpb24udGFibGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93ICYmIHJvdy5jaGlsZHJlbltqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbkNlbGwgPSBnZXRPcmlnaW5DZWxsKHRhYmxlUG9zaXRpb24udGFibGUsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5DZWxsICYmIChvcmlnaW5DZWxsLmNvbHNwYW4gfHwgb3JpZ2luQ2VsbC5yb3dzcGFuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luQ2VsbCkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRhYmxlQ2VsbChlZGl0b3IsIHRhYmxlUG9zaXRpb24udGFibGUsIG9yaWdpbkNlbGwsIHBhdGhbMF0sIHBhdGhbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29sSW5kZXggPiB0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRDb2xDb3VudCA9IGxhc3RDb2xJbmRleCAtICh0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLmluc2VydENvbHVtbihlZGl0b3IsIGFkZENvbENvdW50LCB0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Um93SW5kZXggPiB0YWJsZVBvc2l0aW9uLmdldEhlaWdodCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkUm93Q291bnQgPSBsYXN0Um93SW5kZXggLSAodGFibGVQb3NpdGlvbi5nZXRIZWlnaHQoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuaW5zZXJ0Um93KGVkaXRvciwgYWRkUm93Q291bnQsIHRhYmxlUG9zaXRpb24uZ2V0SGVpZ2h0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZFRhYmxlLmZvckVhY2goKHJvdzogVGFibGVFbGVtZW50LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5mb3JFYWNoKChjb2w6IE5vZGUsIGo6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgc2VsZWN0Um93SW5kZXggKyBpLCBzZWxlY3RDb2xJbmRleCArIGpdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7IGF0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBjb2wsIHsgYXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgc2VsZWN0Um93SW5kZXgsIHNlbGVjdENvbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnNlcnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iubm9ybWFsaXplTm9kZSA9IChlbnRyeTogTm9kZUVudHJ5PE5vZGU+KSA9PiB7XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChlbnRyeVswXSkgJiYgZW50cnlbMF0udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IGVudHJ5WzBdIGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4udGFibGUuY2hpbGRyZW4ubWFwKHJvdyA9PiByb3cuY2hpbGRyZW4ubGVuZ3RoKSk7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkUm93cyA9IHRhYmxlLmNoaWxkcmVuLmZpbHRlcihyb3cgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCA8IG1heFdpZHRoKTtcbiAgICAgICAgICAgIGlmIChpbnZhbGlkUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGlsZHJlbi5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5tYXAoKGNlbGwsIGNlbGxJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLmhpZGRlbiB8fCBjZWxsLmNvbHNwYW4gfHwgY2VsbC5yb3dzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGhpZGRlbjogbnVsbCwgY29sc3BhbjogbnVsbCwgcm93c3BhbjogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdDogWy4uLmVudHJ5WzFdLCByb3dJbmRleCwgY2VsbEluZGV4XSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IG1heFdpZHRoIC0gcm93LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydENvbHVtbkF0Um93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5IGFzIE5vZGVFbnRyeTxUYWJsZUVsZW1lbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmNoaWxkcmVuLmluZGV4T2Yocm93KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YWJsZS5jb2x1bW5zICYmIHRhYmxlLmNvbHVtbnMubGVuZ3RoICE9PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmxlbmd0aCA+IG1heFdpZHRoID8gcmVtb3ZlQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpIDogYWRkQ29sdW1ucyh0YWJsZSwgbWF4V2lkdGgpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IGNvbHVtbnMgfSwgeyBhdDogZW50cnlbMV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRqdXN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQoZW50cnlbMF0pICYmIGVudHJ5WzBdLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgJiYgZW50cnlbMF0uaGlkZGVuKSB7XG4gICAgICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChlZGl0b3Iuc2VsZWN0aW9uKSAmJiBQYXRoLmlzQW5jZXN0b3IoZW50cnlbMV0sIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBnZXRPcmlnaW5DZWxsKHRhYmxlUG9zaXRpb24udGFibGUsIHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSwgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBvcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBFZGl0b3IuZW5kKGVkaXRvciwgcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vcm1hbGl6ZU5vZGUoZW50cnkpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaXNCbG9ja0NhcmQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQmxvY2tDYXJkKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IucmVuZGVyRWxlbWVudCA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdykge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRhYmxlUm93Q29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUZENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyRWxlbWVudChlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUN1dERhdGEgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikpIHtcbiAgICAgICAgICAgIGRlbGV0ZUN1dERhdGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChlbGVtZW50LnRhYmxlKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkQ2VsbHM7XG4gICAgICAgIGlmIChjZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5yZW1vdmVUYWJsZShlZGl0b3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzQ29udGVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuY2xvc2VUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVDdXREYXRhKCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pc0NvbnRhaW5lciA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgPyB0cnVlIDogaXNDb250YWluZXIoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoKTtcbiAgICAgICAgLy8gYWR1anN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICAvLyBqdXN0IGhvb2sgc2V0X3NlbGVjdGlvblxuICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IGVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0aW9uT3BlcmF0aW9uID0gZWRpdG9yLm9wZXJhdGlvbnMuZXZlcnkob3AgPT4gT3BlcmF0aW9uLmlzU2VsZWN0aW9uT3BlcmF0aW9uKG9wKSk7XG4gICAgICAgIGlmIChpc0NvbGxhcHNlZCAmJiBpc1NlbGVjdGlvbk9wZXJhdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRhYmxlUG9zaXRpb24uaXNJblRhYmxlKCkgJiYgdGFibGVQb3NpdGlvbi5jZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBvc2l0aW9uLmdldENvbHVtbkluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhYmxlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeSh7XG4gICAga2V5OiBQbHVnaW5LZXlzLnRhYmxlLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhUYWJsZSxcbiAgICBuZXN0ZWRTdHJ1Y3R1cmVCeUtleToge1xuICAgICAgICBbRWxlbWVudEtpbmRzLnRhYmxlXTogRWxlbWVudEtpbmRzLnRhYmxlUm93LFxuICAgICAgICBbRWxlbWVudEtpbmRzLnRhYmxlUm93XTogRWxlbWVudEtpbmRzLnRhYmxlQ2VsbFxuICAgIH0sXG4gICAgdG9vbGJhckl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogRWxlbWVudEtpbmRzLnRhYmxlLFxuICAgICAgICAgICAgaWNvbjogJ3RhYmxlLWJvcmRlci1hbGwnLFxuICAgICAgICAgICAgbmFtZTogJ+ihqOagvCcsXG4gICAgICAgICAgICBpY29uQ29tcG9uZW50OiBUaGVUYWJsZVRvb2xiYXJJdGVtQ29tcG9uZW50LFxuICAgICAgICAgICAgZXhlY3V0ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmluc2VydFRhYmxlKGVkaXRvciksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pc0FjdGl2ZShlZGl0b3IpXG4gICAgICAgIH1cbiAgICBdXG59KTtcbiJdfQ==