@worktile/theia 18.0.16 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/constants/node-types.d.ts +1 -0
  2. package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
  3. package/fesm2022/worktile-theia.mjs +262 -281
  4. package/fesm2022/worktile-theia.mjs.map +1 -1
  5. package/package.json +4 -6
  6. package/plugins/code/code.component.scss +1 -2
  7. package/plugins/image/image.component.d.ts +1 -1
  8. package/plugins/mention/suggestion.component.d.ts +1 -1
  9. package/esm2022/components/action/prevent-default.mjs +0 -21
  10. package/esm2022/components/column-resize/column-resize-notifier.mjs +0 -31
  11. package/esm2022/components/column-resize/column-resize.directive.mjs +0 -124
  12. package/esm2022/components/column-resize/event-dispatcher.mjs +0 -56
  13. package/esm2022/components/column-resize/overlay-handle.component.mjs +0 -144
  14. package/esm2022/components/column-resize/resize-ref.mjs +0 -26
  15. package/esm2022/components/column-resize/resizing.store.mjs +0 -92
  16. package/esm2022/components/column-resize/selectors.mjs +0 -4
  17. package/esm2022/components/contextmenu/contextmenu.component.mjs +0 -99
  18. package/esm2022/components/conversion-hint/conversion-hint.component.mjs +0 -56
  19. package/esm2022/components/element/element.component.mjs +0 -23
  20. package/esm2022/components/index.mjs +0 -24
  21. package/esm2022/components/inline-toolbar/inline-toolbar.component.mjs +0 -131
  22. package/esm2022/components/listbox/listbox.mjs +0 -380
  23. package/esm2022/components/listbox/listbox.type.mjs +0 -5
  24. package/esm2022/components/plugin-menu/plugin-menu.component.mjs +0 -272
  25. package/esm2022/components/table-select/table-select.component.mjs +0 -49
  26. package/esm2022/components/template/template.component.mjs +0 -62
  27. package/esm2022/components/text/text.component.mjs +0 -57
  28. package/esm2022/components/toolbar/toolbar.component.mjs +0 -262
  29. package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -137
  30. package/esm2022/components/toolbar-group/toolbar-group.component.mjs +0 -125
  31. package/esm2022/components/toolbar-item/toolbar-item.component.mjs +0 -80
  32. package/esm2022/constants/auto-format-rules.mjs +0 -167
  33. package/esm2022/constants/code.mjs +0 -85
  34. package/esm2022/constants/color-select.mjs +0 -3
  35. package/esm2022/constants/default.mjs +0 -11
  36. package/esm2022/constants/error.mjs +0 -7
  37. package/esm2022/constants/index.mjs +0 -9
  38. package/esm2022/constants/node-types.mjs +0 -136
  39. package/esm2022/constants/plugin-menu.mjs +0 -311
  40. package/esm2022/constants/selector.mjs +0 -3
  41. package/esm2022/constants/toolbar.mjs +0 -53
  42. package/esm2022/core/create-plugin.mjs +0 -5
  43. package/esm2022/core/create-toolbar.mjs +0 -55
  44. package/esm2022/core/index.mjs +0 -6
  45. package/esm2022/core/toolbar-item/base-toolbar-item.mjs +0 -95
  46. package/esm2022/core/utils/combine-plugins.mjs +0 -10
  47. package/esm2022/core/utils/flatten-deep-plugins.mjs +0 -19
  48. package/esm2022/core/utils/get-plugin-options.mjs +0 -3
  49. package/esm2022/core/utils/get-plugin.mjs +0 -2
  50. package/esm2022/core/utils/get-plugins.mjs +0 -4
  51. package/esm2022/core/utils/index.mjs +0 -12
  52. package/esm2022/core/utils/merge-array.mjs +0 -18
  53. package/esm2022/core/utils/merge-deep-plugins.mjs +0 -14
  54. package/esm2022/core/utils/merge-options.mjs +0 -25
  55. package/esm2022/core/utils/nested-structure-by-key.mjs +0 -11
  56. package/esm2022/core/utils/plugin-menu.mjs +0 -63
  57. package/esm2022/core/utils/plugins-by-key.mjs +0 -10
  58. package/esm2022/core/with-theia.mjs +0 -25
  59. package/esm2022/custom-types.mjs +0 -2
  60. package/esm2022/editor.component.mjs +0 -488
  61. package/esm2022/editor.module.mjs +0 -18
  62. package/esm2022/i18n/i18n.mjs +0 -10
  63. package/esm2022/i18n/i18n.service.mjs +0 -46
  64. package/esm2022/i18n/i18n.token.mjs +0 -9
  65. package/esm2022/i18n/index.mjs +0 -10
  66. package/esm2022/i18n/locales/de-de.mjs +0 -102
  67. package/esm2022/i18n/locales/en-us.mjs +0 -102
  68. package/esm2022/i18n/locales/ja-jp.mjs +0 -102
  69. package/esm2022/i18n/locales/ru-ru.mjs +0 -102
  70. package/esm2022/i18n/locales/zh-hans.mjs +0 -102
  71. package/esm2022/i18n/locales/zh-hant.mjs +0 -102
  72. package/esm2022/interfaces/auto-format.mjs +0 -2
  73. package/esm2022/interfaces/editor.mjs +0 -26
  74. package/esm2022/interfaces/element.mjs +0 -2
  75. package/esm2022/interfaces/image.mjs +0 -3
  76. package/esm2022/interfaces/index.mjs +0 -11
  77. package/esm2022/interfaces/plugins/index.mjs +0 -6
  78. package/esm2022/interfaces/plugins/no-infer.mjs +0 -2
  79. package/esm2022/interfaces/plugins/plugin-key.mjs +0 -42
  80. package/esm2022/interfaces/plugins/plugin-menu.mjs +0 -19
  81. package/esm2022/interfaces/plugins/plugins.mjs +0 -2
  82. package/esm2022/interfaces/plugins/with-override.mjs +0 -2
  83. package/esm2022/interfaces/preset.mjs +0 -3
  84. package/esm2022/interfaces/reset-block-type-plugin-options.mjs +0 -2
  85. package/esm2022/interfaces/toolbar.mjs +0 -12
  86. package/esm2022/interfaces/upload.mjs +0 -2
  87. package/esm2022/interfaces/utility/index.mjs +0 -4
  88. package/esm2022/interfaces/utility/nested-structure-by-key.mjs +0 -2
  89. package/esm2022/interfaces/utility/override-by-key.mjs +0 -2
  90. package/esm2022/interfaces/utility/types.mjs +0 -2
  91. package/esm2022/interfaces/valid-children-types.mjs +0 -36
  92. package/esm2022/interfaces/view-base.mjs +0 -38
  93. package/esm2022/pipes.mjs +0 -61
  94. package/esm2022/plugins/align/align.editor.mjs +0 -41
  95. package/esm2022/plugins/align/align.plugin.mjs +0 -64
  96. package/esm2022/plugins/autoformat/autoformat.plugin.mjs +0 -109
  97. package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
  98. package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
  99. package/esm2022/plugins/blockquote/blockquote.component.mjs +0 -16
  100. package/esm2022/plugins/blockquote/blockquote.editor.mjs +0 -20
  101. package/esm2022/plugins/blockquote/blockquote.plugin.mjs +0 -84
  102. package/esm2022/plugins/code/code.component.mjs +0 -255
  103. package/esm2022/plugins/code/code.editor.mjs +0 -59
  104. package/esm2022/plugins/code/code.plugin.mjs +0 -67
  105. package/esm2022/plugins/color/color.editor.mjs +0 -27
  106. package/esm2022/plugins/color/color.plugin.mjs +0 -32
  107. package/esm2022/plugins/color/toolbar-item.component.mjs +0 -99
  108. package/esm2022/plugins/common/block-card.plugin.mjs +0 -330
  109. package/esm2022/plugins/common/common.plugin.mjs +0 -49
  110. package/esm2022/plugins/common/get-fragment.plugin.mjs +0 -24
  111. package/esm2022/plugins/common/history.plugin.mjs +0 -31
  112. package/esm2022/plugins/common/insert-data-by-invalid-type.mjs +0 -23
  113. package/esm2022/plugins/common/move-selection.plugin.mjs +0 -105
  114. package/esm2022/plugins/common/remove-empty.plugin.mjs +0 -61
  115. package/esm2022/plugins/common/remove-void.plugin.mjs +0 -60
  116. package/esm2022/plugins/common/reset-type.plugin.mjs +0 -35
  117. package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +0 -61
  118. package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +0 -142
  119. package/esm2022/plugins/font-size/font-size.editor.mjs +0 -98
  120. package/esm2022/plugins/heading/heading.editor.mjs +0 -54
  121. package/esm2022/plugins/heading/heading.plugin.mjs +0 -136
  122. package/esm2022/plugins/hr/hr.component.mjs +0 -37
  123. package/esm2022/plugins/hr/hr.editor.mjs +0 -16
  124. package/esm2022/plugins/hr/hr.plugin.mjs +0 -56
  125. package/esm2022/plugins/image/image.component.mjs +0 -474
  126. package/esm2022/plugins/image/image.editor.mjs +0 -116
  127. package/esm2022/plugins/image/image.plugin.mjs +0 -90
  128. package/esm2022/plugins/indent/indent.editor.mjs +0 -78
  129. package/esm2022/plugins/indent/indent.plugin.mjs +0 -59
  130. package/esm2022/plugins/indent/on-keydown-indent.mjs +0 -59
  131. package/esm2022/plugins/index.mjs +0 -73
  132. package/esm2022/plugins/inline-code/inline-code.component.mjs +0 -28
  133. package/esm2022/plugins/inline-code/inline-code.editor.mjs +0 -49
  134. package/esm2022/plugins/inline-code/inline-code.plugin.mjs +0 -67
  135. package/esm2022/plugins/link/edit/link-edit.component.mjs +0 -104
  136. package/esm2022/plugins/link/hover/link-hover.component.mjs +0 -38
  137. package/esm2022/plugins/link/link.component.mjs +0 -170
  138. package/esm2022/plugins/link/link.editor.mjs +0 -87
  139. package/esm2022/plugins/link/link.plugin.mjs +0 -89
  140. package/esm2022/plugins/link/link.types.mjs +0 -12
  141. package/esm2022/plugins/list/components/bulleted-list.component.mjs +0 -28
  142. package/esm2022/plugins/list/components/list-item.component.mjs +0 -88
  143. package/esm2022/plugins/list/components/numbered-list.component.mjs +0 -37
  144. package/esm2022/plugins/list/list.editor.mjs +0 -128
  145. package/esm2022/plugins/list/list.plugin.mjs +0 -302
  146. package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
  147. package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +0 -18
  148. package/esm2022/plugins/list/normalizers/normalize-no.mjs +0 -43
  149. package/esm2022/plugins/list/on-key-down-list.mjs +0 -33
  150. package/esm2022/plugins/list/queries/get-list-item-entry.mjs +0 -28
  151. package/esm2022/plugins/list/queries/get-list-item-sublist.mjs +0 -12
  152. package/esm2022/plugins/list/queries/get-list-types.mjs +0 -5
  153. package/esm2022/plugins/list/queries/get-start-list-item.mjs +0 -27
  154. package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +0 -27
  155. package/esm2022/plugins/list/queries/is-in-list.mjs +0 -6
  156. package/esm2022/plugins/list/queries/is-list-nested.mjs +0 -10
  157. package/esm2022/plugins/list/queries/is-list.mjs +0 -5
  158. package/esm2022/plugins/list/queries/is-node-type-list.mjs +0 -5
  159. package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
  160. package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
  161. package/esm2022/plugins/list/queries/is-single-list-item.mjs +0 -9
  162. package/esm2022/plugins/list/transforms/insert-list-data.mjs +0 -72
  163. package/esm2022/plugins/list/transforms/insert-list-item.mjs +0 -73
  164. package/esm2022/plugins/list/transforms/move-list-item-down.mjs +0 -41
  165. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
  166. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
  167. package/esm2022/plugins/list/transforms/move-list-item-up.mjs +0 -78
  168. package/esm2022/plugins/list/transforms/unwrap-list.mjs +0 -10
  169. package/esm2022/plugins/list/types.mjs +0 -2
  170. package/esm2022/plugins/mark/mark.editor.mjs +0 -28
  171. package/esm2022/plugins/mark/mark.plugin.mjs +0 -105
  172. package/esm2022/plugins/mention/index.mjs +0 -5
  173. package/esm2022/plugins/mention/mention.editor.mjs +0 -179
  174. package/esm2022/plugins/mention/mention.plugin.mjs +0 -92
  175. package/esm2022/plugins/mention/mention.type.mjs +0 -2
  176. package/esm2022/plugins/mention/suggestion.component.mjs +0 -22
  177. package/esm2022/plugins/node-id/node-id.plugin.mjs +0 -78
  178. package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +0 -28
  179. package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +0 -18
  180. package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +0 -33
  181. package/esm2022/plugins/paint-format/paint-format.editor.mjs +0 -126
  182. package/esm2022/plugins/public-api.mjs +0 -20
  183. package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +0 -126
  184. package/esm2022/plugins/quick-insert/index.mjs +0 -4
  185. package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +0 -70
  186. package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +0 -109
  187. package/esm2022/plugins/soft-break/soft-break.plugin.mjs +0 -36
  188. package/esm2022/plugins/soft-break/soft-break.types.mjs +0 -2
  189. package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -132
  190. package/esm2022/plugins/table/components/row/row.component.mjs +0 -93
  191. package/esm2022/plugins/table/components/table.component.mjs +0 -887
  192. package/esm2022/plugins/table/components/td/td.component.mjs +0 -610
  193. package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +0 -102
  194. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -179
  195. package/esm2022/plugins/table/table.editor.mjs +0 -301
  196. package/esm2022/plugins/table/table.pipe.mjs +0 -66
  197. package/esm2022/plugins/table/table.plugin.mjs +0 -556
  198. package/esm2022/plugins/table/table.service.mjs +0 -122
  199. package/esm2022/plugins/table/table.store.mjs +0 -417
  200. package/esm2022/plugins/table/table.types.mjs +0 -68
  201. package/esm2022/plugins/table/toolbar-item.component.mjs +0 -95
  202. package/esm2022/plugins/table/transforms/clear-cell.mjs +0 -14
  203. package/esm2022/plugins/table/transforms/clear-table-node.mjs +0 -27
  204. package/esm2022/plugins/table/transforms/index.mjs +0 -8
  205. package/esm2022/plugins/table/transforms/insert-column.mjs +0 -69
  206. package/esm2022/plugins/table/transforms/insert-row.mjs +0 -50
  207. package/esm2022/plugins/table/transforms/insert-table.mjs +0 -15
  208. package/esm2022/plugins/table/transforms/move-selection-from-cell.mjs +0 -91
  209. package/esm2022/plugins/table/transforms/remove-column.mjs +0 -51
  210. package/esm2022/plugins/table/transforms/remove-row.mjs +0 -48
  211. package/esm2022/plugins/table/transforms/remove-table.mjs +0 -49
  212. package/esm2022/plugins/table/utils/add-columns.mjs +0 -38
  213. package/esm2022/plugins/table/utils/calc-anchor-position.mjs +0 -26
  214. package/esm2022/plugins/table/utils/calc-span.mjs +0 -73
  215. package/esm2022/plugins/table/utils/calculate-table.mjs +0 -116
  216. package/esm2022/plugins/table/utils/cell-position.mjs +0 -57
  217. package/esm2022/plugins/table/utils/create-cell.mjs +0 -19
  218. package/esm2022/plugins/table/utils/create-row.mjs +0 -12
  219. package/esm2022/plugins/table/utils/create-table-position.mjs +0 -10
  220. package/esm2022/plugins/table/utils/create-table.mjs +0 -15
  221. package/esm2022/plugins/table/utils/get-grid-columns.mjs +0 -79
  222. package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
  223. package/esm2022/plugins/table/utils/get-next-cell.mjs +0 -44
  224. package/esm2022/plugins/table/utils/get-select-cell-node.mjs +0 -16
  225. package/esm2022/plugins/table/utils/handle-cell.mjs +0 -25
  226. package/esm2022/plugins/table/utils/index.mjs +0 -16
  227. package/esm2022/plugins/table/utils/is-header-row.mjs +0 -15
  228. package/esm2022/plugins/table/utils/is-legal-table.mjs +0 -26
  229. package/esm2022/plugins/table/utils/is-range-in-table.mjs +0 -16
  230. package/esm2022/plugins/table/utils/is-selection-in-table.mjs +0 -51
  231. package/esm2022/plugins/table/utils/is-virtual-key.mjs +0 -13
  232. package/esm2022/plugins/table/utils/merge-cell.mjs +0 -110
  233. package/esm2022/plugins/table/utils/next-path.mjs +0 -5
  234. package/esm2022/plugins/table/utils/normalize-table.mjs +0 -31
  235. package/esm2022/plugins/table/utils/remove-columns.mjs +0 -23
  236. package/esm2022/plugins/table/utils/remove-row-column.mjs +0 -45
  237. package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
  238. package/esm2022/plugins/table/utils/split-cell.mjs +0 -29
  239. package/esm2022/plugins/table/utils/table-entry.mjs +0 -21
  240. package/esm2022/plugins/table/utils/table-position.mjs +0 -251
  241. package/esm2022/plugins/table/utils/table-viewport.mjs +0 -41
  242. package/esm2022/plugins/todo-item/todo-item.component.mjs +0 -65
  243. package/esm2022/plugins/todo-item/todo-item.editor.mjs +0 -32
  244. package/esm2022/plugins/todo-item/todo-item.plugin.mjs +0 -93
  245. package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -95
  246. package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +0 -59
  247. package/esm2022/public-api.mjs +0 -22
  248. package/esm2022/queries/anchor-block-entry.mjs +0 -13
  249. package/esm2022/queries/anchor-block.mjs +0 -6
  250. package/esm2022/queries/anchor-inline-entry.mjs +0 -10
  251. package/esm2022/queries/find-descendant.mjs +0 -47
  252. package/esm2022/queries/find-node.mjs +0 -45
  253. package/esm2022/queries/find-path.mjs +0 -28
  254. package/esm2022/queries/get-above-by-type.mjs +0 -14
  255. package/esm2022/queries/get-above.mjs +0 -9
  256. package/esm2022/queries/get-anchor-block-entry.mjs +0 -8
  257. package/esm2022/queries/get-block-above.mjs +0 -10
  258. package/esm2022/queries/get-block-card-above.mjs +0 -10
  259. package/esm2022/queries/get-block-card-cursor.mjs +0 -9
  260. package/esm2022/queries/get-container-blocks.mjs +0 -12
  261. package/esm2022/queries/get-directly-parent.mjs +0 -12
  262. package/esm2022/queries/get-insert-elements-path.mjs +0 -46
  263. package/esm2022/queries/get-last-child-path.mjs +0 -9
  264. package/esm2022/queries/get-last-node.mjs +0 -17
  265. package/esm2022/queries/get-next-sibling-nodes.mjs +0 -17
  266. package/esm2022/queries/get-node.mjs +0 -10
  267. package/esm2022/queries/get-nodes-by-type.mjs +0 -15
  268. package/esm2022/queries/get-nodes.mjs +0 -7
  269. package/esm2022/queries/get-parent.mjs +0 -12
  270. package/esm2022/queries/get-plain-text.mjs +0 -16
  271. package/esm2022/queries/get-plugin-by-toolbar.mjs +0 -13
  272. package/esm2022/queries/get-point-before.mjs +0 -62
  273. package/esm2022/queries/get-point-from-location.mjs +0 -15
  274. package/esm2022/queries/get-previous-path.mjs +0 -9
  275. package/esm2022/queries/get-rang-from-block-start.mjs +0 -16
  276. package/esm2022/queries/get-range-before.mjs +0 -17
  277. package/esm2022/queries/get-selection-marks.mjs +0 -18
  278. package/esm2022/queries/get-selection-nodes-by-type.mjs +0 -30
  279. package/esm2022/queries/get-text.mjs +0 -9
  280. package/esm2022/queries/get-toolbar-disabled.mjs +0 -13
  281. package/esm2022/queries/index.mjs +0 -62
  282. package/esm2022/queries/is-across-blocks.mjs +0 -7
  283. package/esm2022/queries/is-ancestor-empty.mjs +0 -6
  284. package/esm2022/queries/is-ancestor.mjs +0 -3
  285. package/esm2022/queries/is-block-above-empty.mjs +0 -11
  286. package/esm2022/queries/is-block-active.mjs +0 -8
  287. package/esm2022/queries/is-block-card-cursor.mjs +0 -16
  288. package/esm2022/queries/is-block-text-empty-after-selection.mjs +0 -31
  289. package/esm2022/queries/is-collapsed.mjs +0 -7
  290. package/esm2022/queries/is-contain-nested-type.mjs +0 -29
  291. package/esm2022/queries/is-container-type.mjs +0 -3
  292. package/esm2022/queries/is-descendant.mjs +0 -3
  293. package/esm2022/queries/is-empty-content-filter.mjs +0 -22
  294. package/esm2022/queries/is-empty-content.mjs +0 -15
  295. package/esm2022/queries/is-empty-paragraph-by-path.mjs +0 -7
  296. package/esm2022/queries/is-empty-paragraph.mjs +0 -28
  297. package/esm2022/queries/is-first-child.mjs +0 -5
  298. package/esm2022/queries/is-global-collapsed.mjs +0 -5
  299. package/esm2022/queries/is-include-types.mjs +0 -12
  300. package/esm2022/queries/is-node-type-in.mjs +0 -9
  301. package/esm2022/queries/is-node-type.mjs +0 -15
  302. package/esm2022/queries/is-paragraph.mjs +0 -9
  303. package/esm2022/queries/is-point-at-root.mjs +0 -2
  304. package/esm2022/queries/is-range-across-blocks.mjs +0 -22
  305. package/esm2022/queries/is-range-at-root.mjs +0 -3
  306. package/esm2022/queries/is-root-path.mjs +0 -2
  307. package/esm2022/queries/is-start.mjs +0 -6
  308. package/esm2022/queries/some-node.mjs +0 -9
  309. package/esm2022/services/context.service.mjs +0 -140
  310. package/esm2022/services/table-contextmenu.service.mjs +0 -288
  311. package/esm2022/services/toolbar.service.mjs +0 -47
  312. package/esm2022/shortcuts/index.mjs +0 -5
  313. package/esm2022/shortcuts/mark.mjs +0 -25
  314. package/esm2022/test/basic/basic.component.mjs +0 -61
  315. package/esm2022/test/faker/data-transfer-faker.mjs +0 -13
  316. package/esm2022/test/faker/tethys-icon-faker.mjs +0 -22
  317. package/esm2022/test/index.mjs +0 -7
  318. package/esm2022/test/utils/mock-plugins.mjs +0 -104
  319. package/esm2022/test/utils/preset-config.mjs +0 -17
  320. package/esm2022/test/utils/with-plugin.mjs +0 -11
  321. package/esm2022/transforms/apply-deep-to-nodes.mjs +0 -22
  322. package/esm2022/transforms/clear-marks.mjs +0 -23
  323. package/esm2022/transforms/delete-element.mjs +0 -12
  324. package/esm2022/transforms/delete-node-by-type.mjs +0 -10
  325. package/esm2022/transforms/handle-continual-delete-backward.mjs +0 -18
  326. package/esm2022/transforms/handle-continual-insert-break.mjs +0 -20
  327. package/esm2022/transforms/index.mjs +0 -19
  328. package/esm2022/transforms/insert-elements.mjs +0 -55
  329. package/esm2022/transforms/insert-paragraph.mjs +0 -6
  330. package/esm2022/transforms/merge-deep-to-nodes.mjs +0 -9
  331. package/esm2022/transforms/move-children.mjs +0 -22
  332. package/esm2022/transforms/on-keydown-reset-block-type.mjs +0 -23
  333. package/esm2022/transforms/set-end-selection.mjs +0 -10
  334. package/esm2022/transforms/set-marks.mjs +0 -9
  335. package/esm2022/transforms/set-node-by-type.mjs +0 -10
  336. package/esm2022/transforms/set-node.mjs +0 -6
  337. package/esm2022/transforms/un-hang-range.mjs +0 -11
  338. package/esm2022/transforms/un-wrap.mjs +0 -12
  339. package/esm2022/transforms/unwrap-nodes-by-type.mjs +0 -14
  340. package/esm2022/utils/auto-focus.mjs +0 -24
  341. package/esm2022/utils/blob.mjs +0 -16
  342. package/esm2022/utils/cast-array.mjs +0 -7
  343. package/esm2022/utils/color-picker.mjs +0 -15
  344. package/esm2022/utils/common.mjs +0 -11
  345. package/esm2022/utils/copy-node.mjs +0 -38
  346. package/esm2022/utils/create-empty-paragraph.mjs +0 -14
  347. package/esm2022/utils/data-transform.mjs +0 -48
  348. package/esm2022/utils/dom.mjs +0 -56
  349. package/esm2022/utils/editor-uuid.mjs +0 -8
  350. package/esm2022/utils/fragment.mjs +0 -82
  351. package/esm2022/utils/get-editable-element-height.mjs +0 -6
  352. package/esm2022/utils/get-mode.mjs +0 -14
  353. package/esm2022/utils/get-toolbar-class.mjs +0 -6
  354. package/esm2022/utils/id-creator.mjs +0 -11
  355. package/esm2022/utils/index.mjs +0 -23
  356. package/esm2022/utils/insert-data-by-invalid-type.mjs +0 -70
  357. package/esm2022/utils/is-clean-empty-paragraph.mjs +0 -37
  358. package/esm2022/utils/is-inline.mjs +0 -9
  359. package/esm2022/utils/lodash.mjs +0 -3
  360. package/esm2022/utils/match.mjs +0 -32
  361. package/esm2022/utils/merge-element-options.mjs +0 -19
  362. package/esm2022/utils/normalize.mjs +0 -61
  363. package/esm2022/utils/refocus.mjs +0 -47
  364. package/esm2022/utils/scrolling.mjs +0 -43
  365. package/esm2022/utils/update-popover-position.mjs +0 -26
  366. package/esm2022/utils/weak-maps.mjs +0 -9
  367. package/esm2022/worktile-theia.mjs +0 -5
@@ -1,301 +0,0 @@
1
- import { Editor, Element, Node, Text, Transforms } from 'slate';
2
- import { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';
3
- import { ALIGN_BLOCK_TYPES, ElementKinds, MarkProps, SpecialBackgroundColor, TableHeaderBackgroundColor, VerticalAlignment } from '../../constants';
4
- import { TheEditor } from '../../interfaces';
5
- import * as TheQueries from '../../queries';
6
- import * as TheTransforms from '../../transforms';
7
- import { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';
8
- import { TableOptions } from './table.types';
9
- import { insertColumn, insertRow, insertTable, removeColumn, removeRow, removeTable } from './transforms';
10
- import { clearCell } from './transforms/clear-cell';
11
- import { getOriginCell, hasHeaderRow } from './utils';
12
- import { createTablePosition } from './utils/create-table-position';
13
- import { setCellIndent, sortCell } from './utils/handle-cell';
14
- import { mergeCell } from './utils/merge-cell';
15
- import { splitCell } from './utils/split-cell';
16
- import { getTablePath } from './utils/table-entry';
17
- export const TableEditor = {
18
- insertTable(editor, optionsParam) {
19
- const opts = new TableOptions(optionsParam);
20
- insertTable(opts, editor);
21
- },
22
- insertColumn(editor, count = 1, at, optionsParam) {
23
- const opts = new TableOptions(optionsParam);
24
- insertColumn(opts, editor, count, at);
25
- },
26
- insertRow(editor, count = 1, at, optionsParam) {
27
- const opts = new TableOptions(optionsParam);
28
- insertRow(opts, editor, count, at);
29
- },
30
- removeTable(editor, optionsParam) {
31
- const opts = new TableOptions(optionsParam);
32
- removeTable(opts, editor);
33
- },
34
- removeRow(editor, rowIndex, optionsParam) {
35
- const opts = new TableOptions(optionsParam);
36
- removeRow(opts, editor, rowIndex);
37
- },
38
- removeColumn(editor, colIndex, optionsParam) {
39
- const opts = new TableOptions(optionsParam);
40
- removeColumn(opts, editor, colIndex);
41
- },
42
- clearCell(editor, nodeEntry, optionsParam) {
43
- const opts = new TableOptions(optionsParam);
44
- clearCell(opts, editor, nodeEntry);
45
- },
46
- setCellsBackgroundColor(editor, color, cells) {
47
- // 点击自定义颜色面板输入框设置颜色值时,会丢失焦点和选区(目前无法做到焦点同时存在于编辑器和输入框)
48
- let location;
49
- if (!editor.selection) {
50
- const { rangeRef } = THE_EDITOR_PREVIOUS_SELECTION.get(editor);
51
- location = rangeRef.current.anchor;
52
- }
53
- else {
54
- location = editor.selection?.anchor;
55
- }
56
- if (!cells) {
57
- cells = TableEditor.getSelectedCells(editor, location) || [];
58
- }
59
- if (cells.length) {
60
- const isHeader = TableEditor.isActiveHeader(editor, location);
61
- if (color === 'transparent' ||
62
- (color === TableHeaderBackgroundColor && isHeader) ||
63
- (color === SpecialBackgroundColor && !isHeader)) {
64
- color = null;
65
- }
66
- Editor.withoutNormalizing(editor, () => {
67
- cells.map(cell => {
68
- const cellPath = AngularEditor.findPath(editor, cell);
69
- Transforms.setNodes(editor, { backgroundColor: color }, { at: cellPath });
70
- });
71
- });
72
- }
73
- },
74
- mergeCell(editor) {
75
- const selectedCellsPosition = TableEditor.getSelectedCellPositions(editor);
76
- selectedCellsPosition.length && mergeCell(editor, selectedCellsPosition);
77
- },
78
- splitCell(editor) {
79
- splitCell(editor);
80
- },
81
- setTableOptions(editor, newOptions) {
82
- const tablePosition = createTablePosition(editor);
83
- const tablePath = getTablePath(editor);
84
- const table = tablePosition.table;
85
- const options = { ...table.options, ...newOptions };
86
- Transforms.setNodes(editor, { options }, { at: tablePath });
87
- },
88
- setEquallyColumn(editor) {
89
- const [tableEntry] = Editor.nodes(editor, { at: editor.selection, match: (n) => n.type === ElementKinds.table });
90
- const tableElement = (tableEntry && tableEntry[0]);
91
- if (tableElement) {
92
- const columns = tableElement.columns;
93
- const sumWidth = columns.reduce((previousValue, currentValue) => {
94
- return previousValue + currentValue.width;
95
- }, 0);
96
- const equalColumns = columns.map(() => {
97
- return { width: sumWidth / columns.length };
98
- });
99
- TheTransforms.setNode(editor, { columns: equalColumns }, tableElement);
100
- }
101
- },
102
- clearCellsContent(editor, cells) {
103
- if (!cells) {
104
- cells = editor.selection ? TableEditor.getSelectedCells(editor) || [] : [];
105
- }
106
- if (cells.length > 0) {
107
- const tablePosition = createTablePosition(editor);
108
- if (tablePosition.isInTable()) {
109
- Editor.withoutNormalizing(editor, () => {
110
- cells.forEach(cell => {
111
- const path = TheEditor.findPath(editor, cell);
112
- TableEditor.clearCell(editor, [cell, path]);
113
- });
114
- });
115
- Transforms.select(editor, Editor.start(editor, tablePosition.cellEntry[1]));
116
- }
117
- }
118
- },
119
- isActive(editor) {
120
- const [table] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.table });
121
- return !!table;
122
- },
123
- getSelectedCellPositions(editor) {
124
- const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
125
- if (tableNode) {
126
- const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]);
127
- const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();
128
- if (selectedCellPositions.length > 0) {
129
- return selectedCellPositions;
130
- }
131
- }
132
- return null;
133
- },
134
- getSelectedCells(editor, location) {
135
- const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table, {
136
- at: location || editor.selection?.anchor
137
- });
138
- if (tableNode) {
139
- const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]);
140
- return tableComponent?.tableStore?.selectedCells || null;
141
- }
142
- return null;
143
- },
144
- setAlign(editor, alignment, cells) {
145
- return TableEditor.handleSelectedCells(editor, (_, cellRange) => {
146
- Transforms.setNodes(editor, { align: alignment }, {
147
- at: cellRange,
148
- match: (n) => ALIGN_BLOCK_TYPES.includes(n.type)
149
- });
150
- }, cells);
151
- },
152
- setVerticalAlign(editor, alignment, cells) {
153
- const isSelected = TableEditor.handleSelectedCells(editor, cellPath => {
154
- Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });
155
- }, cells);
156
- if (!isSelected) {
157
- const cellEntry = TheQueries.getAboveByType(editor, ElementKinds.tableCell);
158
- if (cellEntry) {
159
- const [, cellPath] = cellEntry;
160
- Transforms.setNodes(editor, { verticalAlign: alignment }, {
161
- at: cellPath,
162
- match: (n) => n.type === ElementKinds.tableCell
163
- });
164
- return true;
165
- }
166
- return false;
167
- }
168
- return true;
169
- },
170
- isVerticalAlignActive(editor, alignment) {
171
- const cells = TableEditor.getSelectedCellPositions(editor);
172
- if (cells) {
173
- const lastCell = cells[cells.length - 1];
174
- const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
175
- const cellPath = [...tableNode[1], lastCell.row, lastCell.col];
176
- const cell = Node.get(editor, cellPath);
177
- const { verticalAlign } = cell;
178
- if (!verticalAlign && alignment === VerticalAlignment.top) {
179
- return true;
180
- }
181
- return verticalAlign === alignment;
182
- }
183
- else {
184
- const cellElement = TheQueries.getAboveByType(editor, ElementKinds.tableCell);
185
- if (cellElement) {
186
- const { verticalAlign } = cellElement[0];
187
- if (!verticalAlign && alignment === VerticalAlignment.top) {
188
- return true;
189
- }
190
- return verticalAlign === alignment;
191
- }
192
- }
193
- return null;
194
- },
195
- toggleMark(editor, isActive, format, value = true) {
196
- return TableEditor.handleSelectedCells(editor, at => {
197
- if (isActive) {
198
- Transforms.unsetNodes(editor, format, {
199
- at,
200
- match: Text.isText,
201
- split: true
202
- });
203
- }
204
- else {
205
- Transforms.setNodes(editor, { [format]: value }, {
206
- at,
207
- match: Text.isText,
208
- split: true
209
- });
210
- }
211
- });
212
- },
213
- clearMark(editor) {
214
- return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {
215
- const unsetMarks = {};
216
- MarkProps.forEach(key => {
217
- unsetMarks[key] = null;
218
- });
219
- TheTransforms.setMarks(editor, unsetMarks, cellRange);
220
- });
221
- },
222
- formatBrush(editor, marks) {
223
- return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {
224
- TheTransforms.setMarks(editor, marks, cellRange);
225
- });
226
- },
227
- handleSelectedCells(editor, handle, cells) {
228
- if (!cells) {
229
- cells = TableEditor.getSelectedCells(editor);
230
- }
231
- if (cells?.length) {
232
- Editor.withoutNormalizing(editor, () => {
233
- cells.forEach(cell => {
234
- const cellPath = TheEditor.findPath(editor, cell);
235
- const cellRange = { anchor: Editor.start(editor, cellPath), focus: Editor.end(editor, cellPath) };
236
- handle(cellPath, cellRange);
237
- });
238
- });
239
- return true;
240
- }
241
- return false;
242
- },
243
- hasHeaderRow(editor, location) {
244
- const [tableEntry] = Editor.nodes(editor, { at: location, match: (n) => n.type === ElementKinds.table });
245
- return hasHeaderRow(tableEntry[0]);
246
- },
247
- hasHeaderColumn(editor, location) {
248
- const [tableEntry] = Editor.nodes(editor, { at: location, match: (n) => n.type === ElementKinds.table });
249
- return tableEntry && tableEntry[0]?.options?.headerColumn;
250
- },
251
- isActiveHeader(editor, location) {
252
- location = location || editor.selection;
253
- if (!TableEditor.hasHeaderRow(editor, location) && !TableEditor.hasHeaderColumn(editor, location)) {
254
- return false;
255
- }
256
- const position = createTablePosition(editor, location.path);
257
- if (TableEditor.hasHeaderRow(editor, location) && position.getRowIndex() === 0) {
258
- return true;
259
- }
260
- if (TableEditor.hasHeaderColumn(editor, location) && position.getColumnIndex() === 0) {
261
- return true;
262
- }
263
- return false;
264
- },
265
- hasHeaderRowCell(editor) {
266
- const isHeaderRow = Editor.nodes(editor, {
267
- match: n => Element.isElement(n) &&
268
- ((n.type === ElementKinds.tableRow && n.header) || (n.type === ElementKinds.table && n.options?.headerRow))
269
- });
270
- const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];
271
- sortCell(selectedCells);
272
- const isContainHeaderRow = !!selectedCells && selectedCells[0].row === 0;
273
- return isHeaderRow && isContainHeaderRow;
274
- },
275
- hasHeaderColumnCell(editor) {
276
- const table = TheQueries.getAboveByType(editor, ElementKinds.table);
277
- const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];
278
- sortCell(selectedCells);
279
- const isContainHeaderColumn = !!selectedCells && selectedCells[0].col === 0;
280
- const isHeaderColumn = table && table[0] && table[0]?.options?.headerColumn;
281
- return isHeaderColumn && isContainHeaderColumn;
282
- },
283
- selectOriginCell(editor, table, rowIndex, columnIndex, isStart) {
284
- const origin = getOriginCell(table, rowIndex, columnIndex);
285
- if (origin) {
286
- const path = AngularEditor.findPath(editor, origin);
287
- Transforms.select(editor, isStart ? Editor.start(editor, path) : Editor.end(editor, path));
288
- }
289
- },
290
- handleIndent(editor, indentType) {
291
- return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {
292
- const children = TheQueries.getNode(editor, cellPath).children;
293
- if (children.length) {
294
- children.forEach((child, index) => {
295
- setCellIndent(editor, indentType, child, [...cellPath, index]);
296
- });
297
- }
298
- });
299
- }
300
- };
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFZLElBQUksRUFBaUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFDSCxpQkFBaUIsRUFFakIsWUFBWSxFQUVaLFNBQVMsRUFFVCxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLGlCQUFpQixFQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFF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QUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgRWxlbWVudCwgTG9jYXRpb24sIE5vZGUsIE5vZGVFbnRyeSwgUGF0aCwgUG9pbnQsIFJhbmdlLCBUZXh0LCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gICAgQUxJR05fQkxPQ0tfVFlQRVMsXG4gICAgQWxpZ25tZW50LFxuICAgIEVsZW1lbnRLaW5kcyxcbiAgICBJbmRlbnRzLFxuICAgIE1hcmtQcm9wcyxcbiAgICBNYXJrVHlwZXMsXG4gICAgU3BlY2lhbEJhY2tncm91bmRDb2xvcixcbiAgICBUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvcixcbiAgICBWZXJ0aWNhbEFsaWdubWVudFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCwgVGFibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRoZUVkaXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCAqIGFzIFRoZVRyYW5zZm9ybXMgZnJvbSAnLi4vLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBUSEVfRURJVE9SX1BSRVZJT1VTX1NFTEVDVElPTiB9IGZyb20gJy4uLy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBUaGVUYWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zLCBUaGVUYWJsZU9wdGlvbnMgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGluc2VydENvbHVtbiwgaW5zZXJ0Um93LCBpbnNlcnRUYWJsZSwgcmVtb3ZlQ29sdW1uLCByZW1vdmVSb3csIHJlbW92ZVRhYmxlIH0gZnJvbSAnLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGNsZWFyQ2VsbCB9IGZyb20gJy4vdHJhbnNmb3Jtcy9jbGVhci1jZWxsJztcbmltcG9ydCB7IGdldE9yaWdpbkNlbGwsIGhhc0hlYWRlclJvdyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXRhYmxlLXBvc2l0aW9uJztcbmltcG9ydCB7IHNldENlbGxJbmRlbnQsIHNvcnRDZWxsIH0gZnJvbSAnLi91dGlscy9oYW5kbGUtY2VsbCc7XG5pbXBvcnQgeyBtZXJnZUNlbGwgfSBmcm9tICcuL3V0aWxzL21lcmdlLWNlbGwnO1xuaW1wb3J0IHsgc3BsaXRDZWxsIH0gZnJvbSAnLi91dGlscy9zcGxpdC1jZWxsJztcbmltcG9ydCB7IGdldFRhYmxlUGF0aCB9IGZyb20gJy4vdXRpbHMvdGFibGUtZW50cnknO1xuXG5leHBvcnQgY29uc3QgVGFibGVFZGl0b3IgPSB7XG4gICAgaW5zZXJ0VGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG5cbiAgICBpbnNlcnRDb2x1bW4oZWRpdG9yOiBFZGl0b3IsIGNvdW50OiBudW1iZXIgPSAxLCBhdD86IG51bWJlciwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGluc2VydENvbHVtbihvcHRzLCBlZGl0b3IsIGNvdW50LCBhdCk7XG4gICAgfSxcblxuICAgIGluc2VydFJvdyhlZGl0b3I6IEVkaXRvciwgY291bnQ6IG51bWJlciA9IDEsIGF0PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgaW5zZXJ0Um93KG9wdHMsIGVkaXRvciwgY291bnQsIGF0KTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlVGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG5cbiAgICByZW1vdmVSb3coZWRpdG9yOiBFZGl0b3IsIHJvd0luZGV4PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgcmVtb3ZlUm93KG9wdHMsIGVkaXRvciwgcm93SW5kZXgpO1xuICAgIH0sXG5cbiAgICByZW1vdmVDb2x1bW4oZWRpdG9yOiBFZGl0b3IsIGNvbEluZGV4PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgcmVtb3ZlQ29sdW1uKG9wdHMsIGVkaXRvciwgY29sSW5kZXgpO1xuICAgIH0sXG5cbiAgICBjbGVhckNlbGwoZWRpdG9yOiBFZGl0b3IsIG5vZGVFbnRyeT86IE5vZGVFbnRyeTxFbGVtZW50Piwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGNsZWFyQ2VsbChvcHRzLCBlZGl0b3IsIG5vZGVFbnRyeSk7XG4gICAgfSxcblxuICAgIHNldENlbGxzQmFja2dyb3VuZENvbG9yKGVkaXRvcjogRWRpdG9yLCBjb2xvcjogc3RyaW5nLCBjZWxscz86IFRhYmxlQ2VsbEVsZW1lbnRbXSkge1xuICAgICAgICAvLyDngrnlh7voh6rlrprkuYnpopzoibLpnaLmnb/ovpPlhaXmoYborr7nva7popzoibLlgLzml7bvvIzkvJrkuKLlpLHnhKbngrnlkozpgInljLrvvIjnm67liY3ml6Dms5XlgZrliLDnhKbngrnlkIzml7blrZjlnKjkuo7nvJbovpHlmajlkozovpPlhaXmoYbvvIlcbiAgICAgICAgbGV0IGxvY2F0aW9uOiBQb2ludDtcbiAgICAgICAgaWYgKCFlZGl0b3Iuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB7IHJhbmdlUmVmIH0gPSBUSEVfRURJVE9SX1BSRVZJT1VTX1NFTEVDVElPTi5nZXQoZWRpdG9yKTtcbiAgICAgICAgICAgIGxvY2F0aW9uID0gcmFuZ2VSZWYuY3VycmVudC5hbmNob3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NhdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24/LmFuY2hvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNlbGxzKSB7XG4gICAgICAgICAgICBjZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yLCBsb2NhdGlvbikgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaXNIZWFkZXIgPSBUYWJsZUVkaXRvci5pc0FjdGl2ZUhlYWRlcihlZGl0b3IsIGxvY2F0aW9uKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb2xvciA9PT0gJ3RyYW5zcGFyZW50JyB8fFxuICAgICAgICAgICAgICAgIChjb2xvciA9PT0gVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3IgJiYgaXNIZWFkZXIpIHx8XG4gICAgICAgICAgICAgICAgKGNvbG9yID09PSBTcGVjaWFsQmFja2dyb3VuZENvbG9yICYmICFpc0hlYWRlcilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbG9yID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbHMubWFwKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9LCB7IGF0OiBjZWxsUGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIG1lcmdlQ2VsbChlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzUG9zaXRpb24gPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoZWRpdG9yKTtcbiAgICAgICAgc2VsZWN0ZWRDZWxsc1Bvc2l0aW9uLmxlbmd0aCAmJiBtZXJnZUNlbGwoZWRpdG9yLCBzZWxlY3RlZENlbGxzUG9zaXRpb24pO1xuICAgIH0sXG5cbiAgICBzcGxpdENlbGwoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgc3BsaXRDZWxsKGVkaXRvcik7XG4gICAgfSxcblxuICAgIHNldFRhYmxlT3B0aW9ucyhlZGl0b3I6IEVkaXRvciwgbmV3T3B0aW9uczogVGhlVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9IGdldFRhYmxlUGF0aChlZGl0b3IpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRhYmxlUG9zaXRpb24udGFibGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRhYmxlLm9wdGlvbnMsIC4uLm5ld09wdGlvbnMgfTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgb3B0aW9ucyB9LCB7IGF0OiB0YWJsZVBhdGggfSk7XG4gICAgfSxcblxuICAgIHNldEVxdWFsbHlDb2x1bW4oZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgW3RhYmxlRW50cnldID0gRWRpdG9yLm5vZGVzKGVkaXRvciwgeyBhdDogZWRpdG9yLnNlbGVjdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gKHRhYmxlRW50cnkgJiYgdGFibGVFbnRyeVswXSkgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBpZiAodGFibGVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVFbGVtZW50LmNvbHVtbnM7XG4gICAgICAgICAgICBjb25zdCBzdW1XaWR0aCA9IGNvbHVtbnMucmVkdWNlKChwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZSArIGN1cnJlbnRWYWx1ZS53aWR0aDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgY29uc3QgZXF1YWxDb2x1bW5zID0gY29sdW1ucy5tYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBzdW1XaWR0aCAvIGNvbHVtbnMubGVuZ3RoIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5zZXROb2RlKGVkaXRvciwgeyBjb2x1bW5zOiBlcXVhbENvbHVtbnMgfSwgdGFibGVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNlbGxzQ29udGVudChlZGl0b3I6IEVkaXRvciwgY2VsbHM/OiBUYWJsZUNlbGxFbGVtZW50W10pIHtcbiAgICAgICAgaWYgKCFjZWxscykge1xuICAgICAgICAgICAgY2VsbHMgPSBlZGl0b3Iuc2VsZWN0aW9uID8gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3IpIHx8IFtdIDogW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi5pc0luVGFibGUoKSkge1xuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5jbGVhckNlbGwoZWRpdG9yLCBbY2VsbCwgcGF0aF0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIEVkaXRvci5zdGFydChlZGl0b3IsIHRhYmxlUG9zaXRpb24uY2VsbEVudHJ5WzFdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgW3RhYmxlXSA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHsgbWF0Y2g6IG4gPT4gRWxlbWVudC5pc0VsZW1lbnQobikgJiYgbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIHJldHVybiAhIXRhYmxlO1xuICAgIH0sXG5cbiAgICBnZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZSk7XG4gICAgICAgIGlmICh0YWJsZU5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlTm9kZVswXSkgYXMgVGhlVGFibGU7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsUG9zaXRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBnZXRTZWxlY3RlZENlbGxzKGVkaXRvcjogRWRpdG9yLCBsb2NhdGlvbj86IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUsIHtcbiAgICAgICAgICAgIGF0OiBsb2NhdGlvbiB8fCBlZGl0b3Iuc2VsZWN0aW9uPy5hbmNob3JcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0YWJsZU5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlTm9kZVswXSkgYXMgVGhlVGFibGU7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVDb21wb25lbnQ/LnRhYmxlU3RvcmU/LnNlbGVjdGVkQ2VsbHMgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgc2V0QWxpZ24oZWRpdG9yOiBFZGl0b3IsIGFsaWdubWVudDogQWxpZ25tZW50LCBjZWxscz86IFRhYmxlQ2VsbEVsZW1lbnRbXSkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIChfLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgIHsgYWxpZ246IGFsaWdubWVudCB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogY2VsbFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBBTElHTl9CTE9DS19UWVBFUy5pbmNsdWRlcyhuLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNlbGxzXG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIHNldFZlcnRpY2FsQWxpZ24oZWRpdG9yOiBUaGVFZGl0b3IsIGFsaWdubWVudDogVmVydGljYWxBbGlnbm1lbnQsIGNlbGxzPzogVGFibGVDZWxsRWxlbWVudFtdKSB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgY2VsbFBhdGggPT4ge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IHZlcnRpY2FsQWxpZ246IGFsaWdubWVudCB9LCB7IGF0OiBjZWxsUGF0aCB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjZWxsc1xuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbnRyeSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGVDZWxsKTtcbiAgICAgICAgICAgIGlmIChjZWxsRW50cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBjZWxsUGF0aF0gPSBjZWxsRW50cnk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICB7IHZlcnRpY2FsQWxpZ246IGFsaWdubWVudCB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogY2VsbFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogKG46IEVsZW1lbnQpID0+IG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgaXNWZXJ0aWNhbEFsaWduQWN0aXZlKGVkaXRvcjogVGhlRWRpdG9yLCBhbGlnbm1lbnQ6IFZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcik7XG4gICAgICAgIGlmIChjZWxscykge1xuICAgICAgICAgICAgY29uc3QgbGFzdENlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVOb2RlWzFdLCBsYXN0Q2VsbC5yb3csIGxhc3RDZWxsLmNvbF07XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmVydGljYWxBbGlnbiB9ID0gY2VsbDtcbiAgICAgICAgICAgIGlmICghdmVydGljYWxBbGlnbiAmJiBhbGlnbm1lbnQgPT09IFZlcnRpY2FsQWxpZ25tZW50LnRvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ24gPT09IGFsaWdubWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpO1xuICAgICAgICAgICAgaWYgKGNlbGxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2ZXJ0aWNhbEFsaWduIH0gPSBjZWxsRWxlbWVudFswXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsQWxpZ24gJiYgYWxpZ25tZW50ID09PSBWZXJ0aWNhbEFsaWdubWVudC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduID09PSBhbGlnbm1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIHRvZ2dsZU1hcmsoZWRpdG9yOiBUaGVFZGl0b3IsIGlzQWN0aXZlOiBib29sZWFuLCBmb3JtYXQ6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlRWRpdG9yLmhhbmRsZVNlbGVjdGVkQ2VsbHMoZWRpdG9yLCBhdCA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnVuc2V0Tm9kZXMoZWRpdG9yLCBmb3JtYXQsIHtcbiAgICAgICAgICAgICAgICAgICAgYXQsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoOiBUZXh0LmlzVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICB7IFtmb3JtYXQgYXMgc3RyaW5nXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogVGV4dC5pc1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGxpdDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyTWFyayhlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChjZWxsUGF0aCwgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bnNldE1hcmtzOiB7IFtrZXkgaW4gTWFya1R5cGVzXT86IG51bGwgfCBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgICAgTWFya1Byb3BzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICB1bnNldE1hcmtzW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE1hcmtzKGVkaXRvciwgdW5zZXRNYXJrcywgY2VsbFJhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGZvcm1hdEJydXNoKGVkaXRvcjogVGhlRWRpdG9yLCBtYXJrczogeyBba2V5IGluIE1hcmtUeXBlc10/OiBhbnkgfSkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChjZWxsUGF0aCwgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE1hcmtzKGVkaXRvciwgbWFya3MsIGNlbGxSYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBoYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvcjogVGhlRWRpdG9yLCBoYW5kbGU6IChjZWxsUGF0aDogUGF0aCwgY2VsbFJhbmdlOiBSYW5nZSkgPT4gdm9pZCwgY2VsbHM/OiBUYWJsZUNlbGxFbGVtZW50W10pIHtcbiAgICAgICAgaWYgKCFjZWxscykge1xuICAgICAgICAgICAgY2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlID0geyBhbmNob3I6IEVkaXRvci5zdGFydChlZGl0b3IsIGNlbGxQYXRoKSwgZm9jdXM6IEVkaXRvci5lbmQoZWRpdG9yLCBjZWxsUGF0aCkgfTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlKGNlbGxQYXRoLCBjZWxsUmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvdyhlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuIGhhc0hlYWRlclJvdyh0YWJsZUVudHJ5WzBdIGFzIFRhYmxlRWxlbWVudCk7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlckNvbHVtbihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnkgJiYgKHRhYmxlRW50cnlbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUhlYWRlcihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgIGlmICghVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmICFUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCAobG9jYXRpb24gYXMgUG9pbnQpLnBhdGgpO1xuICAgICAgICBpZiAoVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmIHBvc2l0aW9uLmdldFJvd0luZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikgJiYgcG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvd0NlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PlxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KG4pICYmXG4gICAgICAgICAgICAgICAgKChuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBuLmhlYWRlcikgfHwgKG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlICYmIG4ub3B0aW9ucz8uaGVhZGVyUm93KSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoZWRpdG9yKSA/PyBbXTtcbiAgICAgICAgc29ydENlbGwoc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGFpbkhlYWRlclJvdyA9ICEhc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzWzBdLnJvdyA9PT0gMDtcblxuICAgICAgICByZXR1cm4gaXNIZWFkZXJSb3cgJiYgaXNDb250YWluSGVhZGVyUm93O1xuICAgIH0sXG5cbiAgICBoYXNIZWFkZXJDb2x1bW5DZWxsKGVkaXRvcjogVGhlRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoZWRpdG9yKSA/PyBbXTtcbiAgICAgICAgc29ydENlbGwoc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGFpbkhlYWRlckNvbHVtbiA9ICEhc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzWzBdLmNvbCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJDb2x1bW4gPSB0YWJsZSAmJiB0YWJsZVswXSAmJiAodGFibGVbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuXG4gICAgICAgIHJldHVybiBpc0hlYWRlckNvbHVtbiAmJiBpc0NvbnRhaW5IZWFkZXJDb2x1bW47XG4gICAgfSxcbiAgICBzZWxlY3RPcmlnaW5DZWxsKGVkaXRvcjogVGhlRWRpdG9yLCB0YWJsZTogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc1N0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbkNlbGwodGFibGUsIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgaXNTdGFydCA/IEVkaXRvci5zdGFydChlZGl0b3IsIHBhdGgpIDogRWRpdG9yLmVuZChlZGl0b3IsIHBhdGgpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBoYW5kbGVJbmRlbnQoZWRpdG9yOiBUaGVFZGl0b3IsIGluZGVudFR5cGU6IEluZGVudHMpIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlRWRpdG9yLmhhbmRsZVNlbGVjdGVkQ2VsbHMoZWRpdG9yLCAoY2VsbFBhdGgsIGNlbGxSYW5nZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoVGhlUXVlcmllcy5nZXROb2RlKGVkaXRvciwgY2VsbFBhdGgpIGFzIEN1c3RvbUVsZW1lbnQpLmNoaWxkcmVuIGFzIEVsZW1lbnRbXTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldENlbGxJbmRlbnQoZWRpdG9yLCBpbmRlbnRUeXBlLCBjaGlsZCwgWy4uLmNlbGxQYXRoLCBpbmRleF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuIl19
@@ -1,66 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { TABLE_CONTROL, TABLE_NUMBER_COLUMN } from './table.types';
3
- import { hasHeaderRow } from './utils';
4
- import * as i0 from "@angular/core";
5
- export class TableFreezeColumnPipe {
6
- transform(table, tablePluginOptions, tableWrapperWidth) {
7
- if (!(tablePluginOptions?.freezeColumnHeader && table.options?.headerColumn)) {
8
- return false;
9
- }
10
- const rows = table.children?.map(item => item.children);
11
- const mergeColumnCells = rows && rows.map(cells => cells[0]).filter(item => item.colspan && item.colspan !== 1);
12
- if (mergeColumnCells.length) {
13
- // 存在合并的列时,取消冻结
14
- return false;
15
- }
16
- const headerColumnWidth = table.columns && table.columns[0].width;
17
- let buffer = TABLE_CONTROL;
18
- if (table.options?.numberedColumn) {
19
- buffer = TABLE_NUMBER_COLUMN + TABLE_CONTROL;
20
- }
21
- return headerColumnWidth + buffer < tableWrapperWidth;
22
- }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeColumnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
24
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeColumnPipe, isStandalone: true, name: "freezeColumn" }); }
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeColumnPipe, decorators: [{
27
- type: Pipe,
28
- args: [{
29
- name: 'freezeColumn',
30
- standalone: true
31
- }]
32
- }] });
33
- export class TableFreezeRowPipe {
34
- transform(table, tablePluginOptions) {
35
- if (!table.children.length) {
36
- return false;
37
- }
38
- if (!(hasHeaderRow(table) && tablePluginOptions?.freezeRowHeader)) {
39
- return false;
40
- }
41
- // 标题行存在合并的行时,取消冻结
42
- const mergeRows = table.children[0]?.children.filter(item => item.rowspan && item.rowspan !== 1);
43
- return !mergeRows.length;
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeRowPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
46
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeRowPipe, isStandalone: true, name: "freezeRow" }); }
47
- }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableFreezeRowPipe, decorators: [{
49
- type: Pipe,
50
- args: [{
51
- name: 'freezeRow',
52
- standalone: true
53
- }]
54
- }] });
55
- export class TableHasHeaderRowPipe {
56
- transform(table) {
57
- return hasHeaderRow(table);
58
- }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableHasHeaderRowPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
60
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TableHasHeaderRowPipe, isStandalone: true, name: "hasHeaderRow" }); }
61
- }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableHasHeaderRowPipe, decorators: [{
63
- type: Pipe,
64
- args: [{ name: 'hasHeaderRow', standalone: true }]
65
- }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL3RhYmxlL3RhYmxlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFNdkMsTUFBTSxPQUFPLHFCQUFxQjtJQUM5QixTQUFTLENBQUMsS0FBbUIsRUFBRSxrQkFBd0MsRUFBRSxpQkFBeUI7UUFDOUYsSUFBSSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hILElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsZUFBZTtZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEdBQUcsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1FBQ2pELENBQUM7UUFFRCxPQUFPLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztJQUMxRCxDQUFDOytHQXBCUSxxQkFBcUI7NkdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFKakMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLElBQUk7aUJBQ25COztBQTRCRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFNBQVMsQ0FBQyxLQUFtQixFQUFFLGtCQUF3QztRQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQzsrR0FiUSxrQkFBa0I7NkdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsV0FBVztvQkFDakIsVUFBVSxFQUFFLElBQUk7aUJBQ25COztBQWtCRCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFNBQVMsQ0FBQyxLQUFtQjtRQUN6QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQUhRLHFCQUFxQjs2R0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRBQkxFX0NPTlRST0wsIFRBQkxFX05VTUJFUl9DT0xVTU4sIFRoZVBsdWdpblRhYmxlT3B0aW9uIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBoYXNIZWFkZXJSb3cgfSBmcm9tICcuL3V0aWxzJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdmcmVlemVDb2x1bW4nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVGcmVlemVDb2x1bW5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHRhYmxlOiBUYWJsZUVsZW1lbnQsIHRhYmxlUGx1Z2luT3B0aW9uczogVGhlUGx1Z2luVGFibGVPcHRpb24sIHRhYmxlV3JhcHBlcldpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCEodGFibGVQbHVnaW5PcHRpb25zPy5mcmVlemVDb2x1bW5IZWFkZXIgJiYgdGFibGUub3B0aW9ucz8uaGVhZGVyQ29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93cyA9IHRhYmxlLmNoaWxkcmVuPy5tYXAoaXRlbSA9PiBpdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgY29uc3QgbWVyZ2VDb2x1bW5DZWxscyA9IHJvd3MgJiYgcm93cy5tYXAoY2VsbHMgPT4gY2VsbHNbMF0pLmZpbHRlcihpdGVtID0+IGl0ZW0uY29sc3BhbiAmJiBpdGVtLmNvbHNwYW4gIT09IDEpO1xuICAgICAgICBpZiAobWVyZ2VDb2x1bW5DZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIOWtmOWcqOWQiOW5tueahOWIl+aXtu+8jOWPlua2iOWGu+e7k1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVyQ29sdW1uV2lkdGggPSB0YWJsZS5jb2x1bW5zICYmIHRhYmxlLmNvbHVtbnNbMF0ud2lkdGg7XG4gICAgICAgIGxldCBidWZmZXIgPSBUQUJMRV9DT05UUk9MO1xuICAgICAgICBpZiAodGFibGUub3B0aW9ucz8ubnVtYmVyZWRDb2x1bW4pIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IFRBQkxFX05VTUJFUl9DT0xVTU4gKyBUQUJMRV9DT05UUk9MO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhlYWRlckNvbHVtbldpZHRoICsgYnVmZmVyIDwgdGFibGVXcmFwcGVyV2lkdGg7XG4gICAgfVxufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZyZWV6ZVJvdycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZyZWV6ZVJvd1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odGFibGU6IFRhYmxlRWxlbWVudCwgdGFibGVQbHVnaW5PcHRpb25zOiBUaGVQbHVnaW5UYWJsZU9wdGlvbikge1xuICAgICAgICBpZiAoIXRhYmxlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoaGFzSGVhZGVyUm93KHRhYmxlKSAmJiB0YWJsZVBsdWdpbk9wdGlvbnM/LmZyZWV6ZVJvd0hlYWRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOagh+mimOihjOWtmOWcqOWQiOW5tueahOihjOaXtu+8jOWPlua2iOWGu+e7k1xuICAgICAgICBjb25zdCBtZXJnZVJvd3MgPSB0YWJsZS5jaGlsZHJlblswXT8uY2hpbGRyZW4uZmlsdGVyKGl0ZW0gPT4gaXRlbS5yb3dzcGFuICYmIGl0ZW0ucm93c3BhbiAhPT0gMSk7XG4gICAgICAgIHJldHVybiAhbWVyZ2VSb3dzLmxlbmd0aDtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2hhc0hlYWRlclJvdycsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBUYWJsZUhhc0hlYWRlclJvd1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odGFibGU6IFRhYmxlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gaGFzSGVhZGVyUm93KHRhYmxlKTtcbiAgICB9XG59XG4iXX0=