@worktile/theia 18.0.15 → 18.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) 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 +304 -311
  4. package/fesm2022/worktile-theia.mjs.map +1 -1
  5. package/interfaces/view-base.d.ts +1 -1
  6. package/package.json +2 -4
  7. package/plugins/code/code.component.scss +1 -2
  8. package/plugins/image/image.component.d.ts +1 -1
  9. package/plugins/link/link.component.d.ts +1 -1
  10. package/plugins/mention/suggestion.component.d.ts +1 -1
  11. package/plugins/vertical-align/toolbar-item.component.d.ts +3 -2
  12. package/esm2022/components/action/prevent-default.mjs +0 -21
  13. package/esm2022/components/column-resize/column-resize-notifier.mjs +0 -31
  14. package/esm2022/components/column-resize/column-resize.directive.mjs +0 -124
  15. package/esm2022/components/column-resize/event-dispatcher.mjs +0 -56
  16. package/esm2022/components/column-resize/overlay-handle.component.mjs +0 -144
  17. package/esm2022/components/column-resize/resize-ref.mjs +0 -26
  18. package/esm2022/components/column-resize/resizing.store.mjs +0 -92
  19. package/esm2022/components/column-resize/selectors.mjs +0 -4
  20. package/esm2022/components/contextmenu/contextmenu.component.mjs +0 -99
  21. package/esm2022/components/conversion-hint/conversion-hint.component.mjs +0 -56
  22. package/esm2022/components/element/element.component.mjs +0 -23
  23. package/esm2022/components/index.mjs +0 -24
  24. package/esm2022/components/inline-toolbar/inline-toolbar.component.mjs +0 -131
  25. package/esm2022/components/listbox/listbox.mjs +0 -380
  26. package/esm2022/components/listbox/listbox.type.mjs +0 -5
  27. package/esm2022/components/plugin-menu/plugin-menu.component.mjs +0 -272
  28. package/esm2022/components/table-select/table-select.component.mjs +0 -49
  29. package/esm2022/components/template/template.component.mjs +0 -62
  30. package/esm2022/components/text/text.component.mjs +0 -57
  31. package/esm2022/components/toolbar/toolbar.component.mjs +0 -262
  32. package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -137
  33. package/esm2022/components/toolbar-group/toolbar-group.component.mjs +0 -125
  34. package/esm2022/components/toolbar-item/toolbar-item.component.mjs +0 -80
  35. package/esm2022/constants/auto-format-rules.mjs +0 -167
  36. package/esm2022/constants/code.mjs +0 -85
  37. package/esm2022/constants/color-select.mjs +0 -3
  38. package/esm2022/constants/default.mjs +0 -11
  39. package/esm2022/constants/error.mjs +0 -7
  40. package/esm2022/constants/index.mjs +0 -9
  41. package/esm2022/constants/node-types.mjs +0 -136
  42. package/esm2022/constants/plugin-menu.mjs +0 -311
  43. package/esm2022/constants/selector.mjs +0 -3
  44. package/esm2022/constants/toolbar.mjs +0 -53
  45. package/esm2022/core/create-plugin.mjs +0 -5
  46. package/esm2022/core/create-toolbar.mjs +0 -55
  47. package/esm2022/core/index.mjs +0 -6
  48. package/esm2022/core/toolbar-item/base-toolbar-item.mjs +0 -95
  49. package/esm2022/core/utils/combine-plugins.mjs +0 -10
  50. package/esm2022/core/utils/flatten-deep-plugins.mjs +0 -19
  51. package/esm2022/core/utils/get-plugin-options.mjs +0 -3
  52. package/esm2022/core/utils/get-plugin.mjs +0 -2
  53. package/esm2022/core/utils/get-plugins.mjs +0 -4
  54. package/esm2022/core/utils/index.mjs +0 -12
  55. package/esm2022/core/utils/merge-array.mjs +0 -18
  56. package/esm2022/core/utils/merge-deep-plugins.mjs +0 -14
  57. package/esm2022/core/utils/merge-options.mjs +0 -25
  58. package/esm2022/core/utils/nested-structure-by-key.mjs +0 -11
  59. package/esm2022/core/utils/plugin-menu.mjs +0 -63
  60. package/esm2022/core/utils/plugins-by-key.mjs +0 -10
  61. package/esm2022/core/with-theia.mjs +0 -25
  62. package/esm2022/custom-types.mjs +0 -2
  63. package/esm2022/editor.component.mjs +0 -488
  64. package/esm2022/editor.module.mjs +0 -18
  65. package/esm2022/i18n/i18n.mjs +0 -10
  66. package/esm2022/i18n/i18n.service.mjs +0 -46
  67. package/esm2022/i18n/i18n.token.mjs +0 -9
  68. package/esm2022/i18n/index.mjs +0 -10
  69. package/esm2022/i18n/locales/de-de.mjs +0 -102
  70. package/esm2022/i18n/locales/en-us.mjs +0 -102
  71. package/esm2022/i18n/locales/ja-jp.mjs +0 -102
  72. package/esm2022/i18n/locales/ru-ru.mjs +0 -102
  73. package/esm2022/i18n/locales/zh-hans.mjs +0 -102
  74. package/esm2022/i18n/locales/zh-hant.mjs +0 -102
  75. package/esm2022/interfaces/auto-format.mjs +0 -2
  76. package/esm2022/interfaces/editor.mjs +0 -26
  77. package/esm2022/interfaces/element.mjs +0 -2
  78. package/esm2022/interfaces/image.mjs +0 -3
  79. package/esm2022/interfaces/index.mjs +0 -11
  80. package/esm2022/interfaces/plugins/index.mjs +0 -6
  81. package/esm2022/interfaces/plugins/no-infer.mjs +0 -2
  82. package/esm2022/interfaces/plugins/plugin-key.mjs +0 -42
  83. package/esm2022/interfaces/plugins/plugin-menu.mjs +0 -19
  84. package/esm2022/interfaces/plugins/plugins.mjs +0 -2
  85. package/esm2022/interfaces/plugins/with-override.mjs +0 -2
  86. package/esm2022/interfaces/preset.mjs +0 -3
  87. package/esm2022/interfaces/reset-block-type-plugin-options.mjs +0 -2
  88. package/esm2022/interfaces/toolbar.mjs +0 -12
  89. package/esm2022/interfaces/upload.mjs +0 -2
  90. package/esm2022/interfaces/utility/index.mjs +0 -4
  91. package/esm2022/interfaces/utility/nested-structure-by-key.mjs +0 -2
  92. package/esm2022/interfaces/utility/override-by-key.mjs +0 -2
  93. package/esm2022/interfaces/utility/types.mjs +0 -2
  94. package/esm2022/interfaces/valid-children-types.mjs +0 -36
  95. package/esm2022/interfaces/view-base.mjs +0 -38
  96. package/esm2022/pipes.mjs +0 -61
  97. package/esm2022/plugins/align/align.editor.mjs +0 -41
  98. package/esm2022/plugins/align/align.plugin.mjs +0 -64
  99. package/esm2022/plugins/autoformat/autoformat.plugin.mjs +0 -109
  100. package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
  101. package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
  102. package/esm2022/plugins/blockquote/blockquote.component.mjs +0 -16
  103. package/esm2022/plugins/blockquote/blockquote.editor.mjs +0 -20
  104. package/esm2022/plugins/blockquote/blockquote.plugin.mjs +0 -84
  105. package/esm2022/plugins/code/code.component.mjs +0 -255
  106. package/esm2022/plugins/code/code.editor.mjs +0 -59
  107. package/esm2022/plugins/code/code.plugin.mjs +0 -67
  108. package/esm2022/plugins/color/color.editor.mjs +0 -27
  109. package/esm2022/plugins/color/color.plugin.mjs +0 -32
  110. package/esm2022/plugins/color/toolbar-item.component.mjs +0 -99
  111. package/esm2022/plugins/common/block-card.plugin.mjs +0 -330
  112. package/esm2022/plugins/common/common.plugin.mjs +0 -49
  113. package/esm2022/plugins/common/get-fragment.plugin.mjs +0 -24
  114. package/esm2022/plugins/common/history.plugin.mjs +0 -31
  115. package/esm2022/plugins/common/insert-data-by-invalid-type.mjs +0 -23
  116. package/esm2022/plugins/common/move-selection.plugin.mjs +0 -105
  117. package/esm2022/plugins/common/remove-empty.plugin.mjs +0 -61
  118. package/esm2022/plugins/common/remove-void.plugin.mjs +0 -60
  119. package/esm2022/plugins/common/reset-type.plugin.mjs +0 -35
  120. package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +0 -61
  121. package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +0 -142
  122. package/esm2022/plugins/font-size/font-size.editor.mjs +0 -98
  123. package/esm2022/plugins/heading/heading.editor.mjs +0 -54
  124. package/esm2022/plugins/heading/heading.plugin.mjs +0 -136
  125. package/esm2022/plugins/hr/hr.component.mjs +0 -37
  126. package/esm2022/plugins/hr/hr.editor.mjs +0 -16
  127. package/esm2022/plugins/hr/hr.plugin.mjs +0 -56
  128. package/esm2022/plugins/image/image.component.mjs +0 -474
  129. package/esm2022/plugins/image/image.editor.mjs +0 -116
  130. package/esm2022/plugins/image/image.plugin.mjs +0 -90
  131. package/esm2022/plugins/indent/indent.editor.mjs +0 -78
  132. package/esm2022/plugins/indent/indent.plugin.mjs +0 -59
  133. package/esm2022/plugins/indent/on-keydown-indent.mjs +0 -59
  134. package/esm2022/plugins/index.mjs +0 -73
  135. package/esm2022/plugins/inline-code/inline-code.component.mjs +0 -28
  136. package/esm2022/plugins/inline-code/inline-code.editor.mjs +0 -49
  137. package/esm2022/plugins/inline-code/inline-code.plugin.mjs +0 -67
  138. package/esm2022/plugins/link/edit/link-edit.component.mjs +0 -104
  139. package/esm2022/plugins/link/hover/link-hover.component.mjs +0 -38
  140. package/esm2022/plugins/link/link.component.mjs +0 -170
  141. package/esm2022/plugins/link/link.editor.mjs +0 -87
  142. package/esm2022/plugins/link/link.plugin.mjs +0 -89
  143. package/esm2022/plugins/link/link.types.mjs +0 -12
  144. package/esm2022/plugins/list/components/bulleted-list.component.mjs +0 -28
  145. package/esm2022/plugins/list/components/list-item.component.mjs +0 -88
  146. package/esm2022/plugins/list/components/numbered-list.component.mjs +0 -37
  147. package/esm2022/plugins/list/list.editor.mjs +0 -128
  148. package/esm2022/plugins/list/list.plugin.mjs +0 -302
  149. package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
  150. package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +0 -18
  151. package/esm2022/plugins/list/normalizers/normalize-no.mjs +0 -43
  152. package/esm2022/plugins/list/on-key-down-list.mjs +0 -33
  153. package/esm2022/plugins/list/queries/get-list-item-entry.mjs +0 -28
  154. package/esm2022/plugins/list/queries/get-list-item-sublist.mjs +0 -12
  155. package/esm2022/plugins/list/queries/get-list-types.mjs +0 -5
  156. package/esm2022/plugins/list/queries/get-start-list-item.mjs +0 -27
  157. package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +0 -27
  158. package/esm2022/plugins/list/queries/is-in-list.mjs +0 -6
  159. package/esm2022/plugins/list/queries/is-list-nested.mjs +0 -10
  160. package/esm2022/plugins/list/queries/is-list.mjs +0 -5
  161. package/esm2022/plugins/list/queries/is-node-type-list.mjs +0 -5
  162. package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
  163. package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
  164. package/esm2022/plugins/list/queries/is-single-list-item.mjs +0 -9
  165. package/esm2022/plugins/list/transforms/insert-list-data.mjs +0 -72
  166. package/esm2022/plugins/list/transforms/insert-list-item.mjs +0 -73
  167. package/esm2022/plugins/list/transforms/move-list-item-down.mjs +0 -41
  168. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
  169. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
  170. package/esm2022/plugins/list/transforms/move-list-item-up.mjs +0 -78
  171. package/esm2022/plugins/list/transforms/unwrap-list.mjs +0 -10
  172. package/esm2022/plugins/list/types.mjs +0 -2
  173. package/esm2022/plugins/mark/mark.editor.mjs +0 -28
  174. package/esm2022/plugins/mark/mark.plugin.mjs +0 -105
  175. package/esm2022/plugins/mention/index.mjs +0 -5
  176. package/esm2022/plugins/mention/mention.editor.mjs +0 -179
  177. package/esm2022/plugins/mention/mention.plugin.mjs +0 -92
  178. package/esm2022/plugins/mention/mention.type.mjs +0 -2
  179. package/esm2022/plugins/mention/suggestion.component.mjs +0 -22
  180. package/esm2022/plugins/node-id/node-id.plugin.mjs +0 -78
  181. package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +0 -28
  182. package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +0 -18
  183. package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +0 -33
  184. package/esm2022/plugins/paint-format/paint-format.editor.mjs +0 -126
  185. package/esm2022/plugins/public-api.mjs +0 -20
  186. package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +0 -126
  187. package/esm2022/plugins/quick-insert/index.mjs +0 -4
  188. package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +0 -70
  189. package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +0 -109
  190. package/esm2022/plugins/soft-break/soft-break.plugin.mjs +0 -36
  191. package/esm2022/plugins/soft-break/soft-break.types.mjs +0 -2
  192. package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -132
  193. package/esm2022/plugins/table/components/row/row.component.mjs +0 -93
  194. package/esm2022/plugins/table/components/table.component.mjs +0 -887
  195. package/esm2022/plugins/table/components/td/td.component.mjs +0 -610
  196. package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +0 -102
  197. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -179
  198. package/esm2022/plugins/table/table.editor.mjs +0 -301
  199. package/esm2022/plugins/table/table.pipe.mjs +0 -66
  200. package/esm2022/plugins/table/table.plugin.mjs +0 -556
  201. package/esm2022/plugins/table/table.service.mjs +0 -122
  202. package/esm2022/plugins/table/table.store.mjs +0 -417
  203. package/esm2022/plugins/table/table.types.mjs +0 -68
  204. package/esm2022/plugins/table/toolbar-item.component.mjs +0 -95
  205. package/esm2022/plugins/table/transforms/clear-cell.mjs +0 -14
  206. package/esm2022/plugins/table/transforms/clear-table-node.mjs +0 -27
  207. package/esm2022/plugins/table/transforms/index.mjs +0 -8
  208. package/esm2022/plugins/table/transforms/insert-column.mjs +0 -69
  209. package/esm2022/plugins/table/transforms/insert-row.mjs +0 -50
  210. package/esm2022/plugins/table/transforms/insert-table.mjs +0 -15
  211. package/esm2022/plugins/table/transforms/move-selection-from-cell.mjs +0 -91
  212. package/esm2022/plugins/table/transforms/remove-column.mjs +0 -51
  213. package/esm2022/plugins/table/transforms/remove-row.mjs +0 -48
  214. package/esm2022/plugins/table/transforms/remove-table.mjs +0 -49
  215. package/esm2022/plugins/table/utils/add-columns.mjs +0 -38
  216. package/esm2022/plugins/table/utils/calc-anchor-position.mjs +0 -26
  217. package/esm2022/plugins/table/utils/calc-span.mjs +0 -73
  218. package/esm2022/plugins/table/utils/calculate-table.mjs +0 -116
  219. package/esm2022/plugins/table/utils/cell-position.mjs +0 -57
  220. package/esm2022/plugins/table/utils/create-cell.mjs +0 -19
  221. package/esm2022/plugins/table/utils/create-row.mjs +0 -12
  222. package/esm2022/plugins/table/utils/create-table-position.mjs +0 -10
  223. package/esm2022/plugins/table/utils/create-table.mjs +0 -15
  224. package/esm2022/plugins/table/utils/get-grid-columns.mjs +0 -79
  225. package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
  226. package/esm2022/plugins/table/utils/get-next-cell.mjs +0 -44
  227. package/esm2022/plugins/table/utils/get-select-cell-node.mjs +0 -16
  228. package/esm2022/plugins/table/utils/handle-cell.mjs +0 -25
  229. package/esm2022/plugins/table/utils/index.mjs +0 -16
  230. package/esm2022/plugins/table/utils/is-header-row.mjs +0 -15
  231. package/esm2022/plugins/table/utils/is-legal-table.mjs +0 -26
  232. package/esm2022/plugins/table/utils/is-range-in-table.mjs +0 -16
  233. package/esm2022/plugins/table/utils/is-selection-in-table.mjs +0 -51
  234. package/esm2022/plugins/table/utils/is-virtual-key.mjs +0 -13
  235. package/esm2022/plugins/table/utils/merge-cell.mjs +0 -110
  236. package/esm2022/plugins/table/utils/next-path.mjs +0 -5
  237. package/esm2022/plugins/table/utils/normalize-table.mjs +0 -31
  238. package/esm2022/plugins/table/utils/remove-columns.mjs +0 -23
  239. package/esm2022/plugins/table/utils/remove-row-column.mjs +0 -45
  240. package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
  241. package/esm2022/plugins/table/utils/split-cell.mjs +0 -29
  242. package/esm2022/plugins/table/utils/table-entry.mjs +0 -21
  243. package/esm2022/plugins/table/utils/table-position.mjs +0 -251
  244. package/esm2022/plugins/table/utils/table-viewport.mjs +0 -41
  245. package/esm2022/plugins/todo-item/todo-item.component.mjs +0 -65
  246. package/esm2022/plugins/todo-item/todo-item.editor.mjs +0 -32
  247. package/esm2022/plugins/todo-item/todo-item.plugin.mjs +0 -93
  248. package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -89
  249. package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +0 -59
  250. package/esm2022/public-api.mjs +0 -22
  251. package/esm2022/queries/anchor-block-entry.mjs +0 -13
  252. package/esm2022/queries/anchor-block.mjs +0 -6
  253. package/esm2022/queries/anchor-inline-entry.mjs +0 -10
  254. package/esm2022/queries/find-descendant.mjs +0 -47
  255. package/esm2022/queries/find-node.mjs +0 -45
  256. package/esm2022/queries/find-path.mjs +0 -28
  257. package/esm2022/queries/get-above-by-type.mjs +0 -14
  258. package/esm2022/queries/get-above.mjs +0 -9
  259. package/esm2022/queries/get-anchor-block-entry.mjs +0 -8
  260. package/esm2022/queries/get-block-above.mjs +0 -10
  261. package/esm2022/queries/get-block-card-above.mjs +0 -10
  262. package/esm2022/queries/get-block-card-cursor.mjs +0 -9
  263. package/esm2022/queries/get-container-blocks.mjs +0 -12
  264. package/esm2022/queries/get-directly-parent.mjs +0 -12
  265. package/esm2022/queries/get-insert-elements-path.mjs +0 -46
  266. package/esm2022/queries/get-last-child-path.mjs +0 -9
  267. package/esm2022/queries/get-last-node.mjs +0 -17
  268. package/esm2022/queries/get-next-sibling-nodes.mjs +0 -17
  269. package/esm2022/queries/get-node.mjs +0 -10
  270. package/esm2022/queries/get-nodes-by-type.mjs +0 -15
  271. package/esm2022/queries/get-nodes.mjs +0 -7
  272. package/esm2022/queries/get-parent.mjs +0 -12
  273. package/esm2022/queries/get-plain-text.mjs +0 -16
  274. package/esm2022/queries/get-plugin-by-toolbar.mjs +0 -13
  275. package/esm2022/queries/get-point-before.mjs +0 -62
  276. package/esm2022/queries/get-point-from-location.mjs +0 -15
  277. package/esm2022/queries/get-previous-path.mjs +0 -9
  278. package/esm2022/queries/get-rang-from-block-start.mjs +0 -16
  279. package/esm2022/queries/get-range-before.mjs +0 -17
  280. package/esm2022/queries/get-selection-marks.mjs +0 -18
  281. package/esm2022/queries/get-selection-nodes-by-type.mjs +0 -30
  282. package/esm2022/queries/get-text.mjs +0 -9
  283. package/esm2022/queries/get-toolbar-disabled.mjs +0 -13
  284. package/esm2022/queries/index.mjs +0 -62
  285. package/esm2022/queries/is-across-blocks.mjs +0 -7
  286. package/esm2022/queries/is-ancestor-empty.mjs +0 -6
  287. package/esm2022/queries/is-ancestor.mjs +0 -3
  288. package/esm2022/queries/is-block-above-empty.mjs +0 -11
  289. package/esm2022/queries/is-block-active.mjs +0 -8
  290. package/esm2022/queries/is-block-card-cursor.mjs +0 -16
  291. package/esm2022/queries/is-block-text-empty-after-selection.mjs +0 -31
  292. package/esm2022/queries/is-collapsed.mjs +0 -7
  293. package/esm2022/queries/is-contain-nested-type.mjs +0 -29
  294. package/esm2022/queries/is-container-type.mjs +0 -3
  295. package/esm2022/queries/is-descendant.mjs +0 -3
  296. package/esm2022/queries/is-empty-content-filter.mjs +0 -22
  297. package/esm2022/queries/is-empty-content.mjs +0 -15
  298. package/esm2022/queries/is-empty-paragraph-by-path.mjs +0 -7
  299. package/esm2022/queries/is-empty-paragraph.mjs +0 -28
  300. package/esm2022/queries/is-first-child.mjs +0 -5
  301. package/esm2022/queries/is-global-collapsed.mjs +0 -5
  302. package/esm2022/queries/is-include-types.mjs +0 -12
  303. package/esm2022/queries/is-node-type-in.mjs +0 -9
  304. package/esm2022/queries/is-node-type.mjs +0 -15
  305. package/esm2022/queries/is-paragraph.mjs +0 -9
  306. package/esm2022/queries/is-point-at-root.mjs +0 -2
  307. package/esm2022/queries/is-range-across-blocks.mjs +0 -22
  308. package/esm2022/queries/is-range-at-root.mjs +0 -3
  309. package/esm2022/queries/is-root-path.mjs +0 -2
  310. package/esm2022/queries/is-start.mjs +0 -6
  311. package/esm2022/queries/some-node.mjs +0 -9
  312. package/esm2022/services/context.service.mjs +0 -140
  313. package/esm2022/services/table-contextmenu.service.mjs +0 -288
  314. package/esm2022/services/toolbar.service.mjs +0 -47
  315. package/esm2022/shortcuts/index.mjs +0 -5
  316. package/esm2022/shortcuts/mark.mjs +0 -25
  317. package/esm2022/test/basic/basic.component.mjs +0 -61
  318. package/esm2022/test/faker/data-transfer-faker.mjs +0 -13
  319. package/esm2022/test/faker/tethys-icon-faker.mjs +0 -22
  320. package/esm2022/test/index.mjs +0 -7
  321. package/esm2022/test/utils/mock-plugins.mjs +0 -104
  322. package/esm2022/test/utils/preset-config.mjs +0 -17
  323. package/esm2022/test/utils/with-plugin.mjs +0 -11
  324. package/esm2022/transforms/apply-deep-to-nodes.mjs +0 -22
  325. package/esm2022/transforms/clear-marks.mjs +0 -23
  326. package/esm2022/transforms/delete-element.mjs +0 -12
  327. package/esm2022/transforms/delete-node-by-type.mjs +0 -10
  328. package/esm2022/transforms/handle-continual-delete-backward.mjs +0 -18
  329. package/esm2022/transforms/handle-continual-insert-break.mjs +0 -20
  330. package/esm2022/transforms/index.mjs +0 -19
  331. package/esm2022/transforms/insert-elements.mjs +0 -55
  332. package/esm2022/transforms/insert-paragraph.mjs +0 -6
  333. package/esm2022/transforms/merge-deep-to-nodes.mjs +0 -9
  334. package/esm2022/transforms/move-children.mjs +0 -22
  335. package/esm2022/transforms/on-keydown-reset-block-type.mjs +0 -23
  336. package/esm2022/transforms/set-end-selection.mjs +0 -10
  337. package/esm2022/transforms/set-marks.mjs +0 -9
  338. package/esm2022/transforms/set-node-by-type.mjs +0 -10
  339. package/esm2022/transforms/set-node.mjs +0 -6
  340. package/esm2022/transforms/un-hang-range.mjs +0 -11
  341. package/esm2022/transforms/un-wrap.mjs +0 -12
  342. package/esm2022/transforms/unwrap-nodes-by-type.mjs +0 -14
  343. package/esm2022/utils/auto-focus.mjs +0 -24
  344. package/esm2022/utils/blob.mjs +0 -16
  345. package/esm2022/utils/cast-array.mjs +0 -7
  346. package/esm2022/utils/color-picker.mjs +0 -15
  347. package/esm2022/utils/common.mjs +0 -11
  348. package/esm2022/utils/copy-node.mjs +0 -38
  349. package/esm2022/utils/create-empty-paragraph.mjs +0 -14
  350. package/esm2022/utils/data-transform.mjs +0 -48
  351. package/esm2022/utils/dom.mjs +0 -56
  352. package/esm2022/utils/editor-uuid.mjs +0 -8
  353. package/esm2022/utils/fragment.mjs +0 -82
  354. package/esm2022/utils/get-editable-element-height.mjs +0 -6
  355. package/esm2022/utils/get-mode.mjs +0 -14
  356. package/esm2022/utils/get-toolbar-class.mjs +0 -6
  357. package/esm2022/utils/id-creator.mjs +0 -11
  358. package/esm2022/utils/index.mjs +0 -23
  359. package/esm2022/utils/insert-data-by-invalid-type.mjs +0 -70
  360. package/esm2022/utils/is-clean-empty-paragraph.mjs +0 -37
  361. package/esm2022/utils/is-inline.mjs +0 -9
  362. package/esm2022/utils/lodash.mjs +0 -3
  363. package/esm2022/utils/match.mjs +0 -32
  364. package/esm2022/utils/merge-element-options.mjs +0 -19
  365. package/esm2022/utils/normalize.mjs +0 -61
  366. package/esm2022/utils/refocus.mjs +0 -47
  367. package/esm2022/utils/scrolling.mjs +0 -43
  368. package/esm2022/utils/update-popover-position.mjs +0 -26
  369. package/esm2022/utils/weak-maps.mjs +0 -9
  370. package/esm2022/worktile-theia.mjs +0 -5
@@ -1,102 +0,0 @@
1
- import { NgFor, NgIf } from '@angular/common';
2
- import { Component, inject, Input } from '@angular/core';
3
- import { ThyDropdownMenuItemDirective, ThyDropdownMenuItemIconDirective, ThyDropdownMenuItemNameDirective } from 'ngx-tethys/dropdown';
4
- import { ThyIcon } from 'ngx-tethys/icon';
5
- import { Transforms } from 'slate';
6
- import { TheEditor } from '../../../../interfaces';
7
- import { TableEditor } from '../../table.editor';
8
- import { TableOperations } from '../../table.types';
9
- import { hasHeaderRow } from '../../utils/is-header-row';
10
- import { getTable } from '../../utils/table-entry';
11
- import { injectTranslations, TheI18nService } from '../../../../i18n';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "ngx-tethys/popover";
14
- export class TheTableOptions {
15
- constructor(popoverRef) {
16
- this.popoverRef = popoverRef;
17
- this.locale = injectTranslations(inject(TheI18nService));
18
- this.tableDropdownList = [
19
- {
20
- name: this.locale().titleRow,
21
- key: TableOperations.headerRow
22
- },
23
- {
24
- name: this.locale().titleCol,
25
- key: TableOperations.headerColumn
26
- },
27
- {
28
- name: this.locale().orderCol,
29
- key: TableOperations.numberedColumn
30
- }
31
- ];
32
- }
33
- ngOnInit() {
34
- this.setColumnOptions();
35
- }
36
- get table() {
37
- return getTable(this.editor);
38
- }
39
- setColumnOptions() {
40
- this.tableDropdownList.forEach(item => {
41
- if (item.key === TableOperations.headerRow) {
42
- item.isActive = hasHeaderRow(this.table);
43
- }
44
- else {
45
- item.isActive = (this.table.options && this.table.options[item.key]) || false;
46
- }
47
- });
48
- }
49
- setTableOptions(event, option) {
50
- event.preventDefault();
51
- event.stopPropagation();
52
- const currentOption = this.tableDropdownList.find(item => item.key === option.key);
53
- currentOption.isActive = !option.isActive;
54
- const tableOption = {};
55
- tableOption[option.key] = currentOption.isActive || false;
56
- TableEditor.setTableOptions(this.editor, { ...tableOption });
57
- // headerRow 兼容代码, 取消标题行的时候同时设置 row 中的 header 属性
58
- if (option.key === TableOperations.headerRow && !tableOption[option.key] && this.table.children[0].header) {
59
- const rowPath = TheEditor.findPath(this.editor, this.table.children[0]);
60
- Transforms.setNodes(this.editor, { header: null }, { at: rowPath });
61
- }
62
- }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableOptions, deps: [{ token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TheTableOptions, isStandalone: true, selector: "the-table-options", inputs: { editor: "editor" }, host: { classAttribute: "the-table-options" }, ngImport: i0, template: `
65
- <div class="thy-dropdown-menu table-drop-menu">
66
- <ng-container *ngFor="let option of tableDropdownList">
67
- <a thyDropdownMenuItem href="javascript:;" (mousedown)="setTableOptions($event, option)">
68
- <span thyDropdownMenuItemName>{{ option.name }}</span>
69
- <span *ngIf="option.isActive" thyDropdownMenuItemIcon class="text-primary">
70
- <thy-icon thyIconName="check"></thy-icon>
71
- </span>
72
- </a>
73
- </ng-container>
74
- </div>
75
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }] }); }
76
- }
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableOptions, decorators: [{
78
- type: Component,
79
- args: [{
80
- selector: 'the-table-options',
81
- template: `
82
- <div class="thy-dropdown-menu table-drop-menu">
83
- <ng-container *ngFor="let option of tableDropdownList">
84
- <a thyDropdownMenuItem href="javascript:;" (mousedown)="setTableOptions($event, option)">
85
- <span thyDropdownMenuItemName>{{ option.name }}</span>
86
- <span *ngIf="option.isActive" thyDropdownMenuItemIcon class="text-primary">
87
- <thy-icon thyIconName="check"></thy-icon>
88
- </span>
89
- </a>
90
- </ng-container>
91
- </div>
92
- `,
93
- host: {
94
- class: 'the-table-options'
95
- },
96
- standalone: true,
97
- imports: [NgFor, NgIf, ThyIcon, ThyDropdownMenuItemDirective, ThyDropdownMenuItemNameDirective, ThyDropdownMenuItemIconDirective]
98
- }]
99
- }], ctorParameters: () => [{ type: i1.ThyPopoverRef }], propDecorators: { editor: [{
100
- type: Input
101
- }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtb3B0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUF1QixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7OztBQXNCMUYsTUFBTSxPQUFPLGVBQWU7SUFvQnhCLFlBQW9CLFVBQTBDO1FBQTFDLGVBQVUsR0FBVixVQUFVLENBQWdDO1FBakI5RCxXQUFNLEdBQStCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWhGLHNCQUFpQixHQUEwQjtZQUN2QztnQkFDSSxJQUFJ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LFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7S0FXVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLG1CQUFtQjtxQkFDN0I7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxFQUFFLGdDQUFnQyxDQUFDO2lCQUNwSTtrRkFFWSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlLCBUaHlEcm9wZG93bk1lbnVJdGVtSWNvbkRpcmVjdGl2ZSwgVGh5RHJvcGRvd25NZW51SXRlbU5hbWVEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFZGl0b3IsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRhYmxlRWRpdG9yIH0gZnJvbSAnLi4vLi4vdGFibGUuZWRpdG9yJztcbmltcG9ydCB7IFRhYmxlRHJvcGRvd25PcHRpb24sIFRhYmxlT3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGhhc0hlYWRlclJvdyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLWhlYWRlci1yb3cnO1xuaW1wb3J0IHsgZ2V0VGFibGUgfSBmcm9tICcuLi8uLi91dGlscy90YWJsZS1lbnRyeSc7XG5pbXBvcnQgeyBpbmplY3RUcmFuc2xhdGlvbnMsIFRoZUkxOG5TZXJ2aWNlLCBUaGVJMThuVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9pMThuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtdGFibGUtb3B0aW9ucycsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRoeS1kcm9wZG93bi1tZW51IHRhYmxlLWRyb3AtbWVudVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHRhYmxlRHJvcGRvd25MaXN0XCI+XG4gICAgICAgICAgICAgICAgPGEgdGh5RHJvcGRvd25NZW51SXRlbSBocmVmPVwiamF2YXNjcmlwdDo7XCIgKG1vdXNlZG93bik9XCJzZXRUYWJsZU9wdGlvbnMoJGV2ZW50LCBvcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lPnt7IG9wdGlvbi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvbi5pc0FjdGl2ZVwiIHRoeURyb3Bkb3duTWVudUl0ZW1JY29uIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJjaGVja1wiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGhlLXRhYmxlLW9wdGlvbnMnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgTmdJZiwgVGh5SWNvbiwgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSwgVGh5RHJvcGRvd25NZW51SXRlbU5hbWVEaXJlY3RpdmUsIFRoeURyb3Bkb3duTWVudUl0ZW1JY29uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBUaGVUYWJsZU9wdGlvbnMgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGVkaXRvcjogRWRpdG9yO1xuXG4gICAgbG9jYWxlOiBTaWduYWw8VGhlSTE4blRyYW5zbGF0aW9uPiA9IGluamVjdFRyYW5zbGF0aW9ucyhpbmplY3QoVGhlSTE4blNlcnZpY2UpKTtcblxuICAgIHRhYmxlRHJvcGRvd25MaXN0OiBUYWJsZURyb3Bkb3duT3B0aW9uW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkudGl0bGVSb3csXG4gICAgICAgICAgICBrZXk6IFRhYmxlT3BlcmF0aW9ucy5oZWFkZXJSb3dcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5sb2NhbGUoKS50aXRsZUNvbCxcbiAgICAgICAgICAgIGtleTogVGFibGVPcGVyYXRpb25zLmhlYWRlckNvbHVtblxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmxvY2FsZSgpLm9yZGVyQ29sLFxuICAgICAgICAgICAga2V5OiBUYWJsZU9wZXJhdGlvbnMubnVtYmVyZWRDb2x1bW5cbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8VGhlVGFibGVPcHRpb25zPikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldENvbHVtbk9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBnZXQgdGFibGUoKSB7XG4gICAgICAgIHJldHVybiBnZXRUYWJsZSh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgc2V0Q29sdW1uT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy50YWJsZURyb3Bkb3duTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBUYWJsZU9wZXJhdGlvbnMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IGhhc0hlYWRlclJvdyh0aGlzLnRhYmxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9ICh0aGlzLnRhYmxlLm9wdGlvbnMgJiYgdGhpcy50YWJsZS5vcHRpb25zW2l0ZW0ua2V5XSkgfHwgZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRhYmxlT3B0aW9ucyhldmVudDogTW91c2VFdmVudCwgb3B0aW9uOiBUYWJsZURyb3Bkb3duT3B0aW9uKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9uID0gdGhpcy50YWJsZURyb3Bkb3duTGlzdC5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IG9wdGlvbi5rZXkpO1xuICAgICAgICBjdXJyZW50T3B0aW9uLmlzQWN0aXZlID0gIW9wdGlvbi5pc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgdGFibGVPcHRpb24gPSB7fTtcbiAgICAgICAgdGFibGVPcHRpb25bb3B0aW9uLmtleV0gPSBjdXJyZW50T3B0aW9uLmlzQWN0aXZlIHx8IGZhbHNlO1xuICAgICAgICBUYWJsZUVkaXRvci5zZXRUYWJsZU9wdGlvbnModGhpcy5lZGl0b3IsIHsgLi4udGFibGVPcHRpb24gfSk7XG4gICAgICAgIC8vIGhlYWRlclJvdyDlhbzlrrnku6PnoIEsIOWPlua2iOagh+mimOihjOeahOaXtuWAmeWQjOaXtuiuvue9riByb3cg5Lit55qEIGhlYWRlciDlsZ7mgKdcbiAgICAgICAgaWYgKG9wdGlvbi5rZXkgPT09IFRhYmxlT3BlcmF0aW9ucy5oZWFkZXJSb3cgJiYgIXRhYmxlT3B0aW9uW29wdGlvbi5rZXldICYmIHRoaXMudGFibGUuY2hpbGRyZW5bMF0uaGVhZGVyKSB7XG4gICAgICAgICAgICBjb25zdCByb3dQYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCB0aGlzLnRhYmxlLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXModGhpcy5lZGl0b3IsIHsgaGVhZGVyOiBudWxsIH0sIHsgYXQ6IHJvd1BhdGggfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,179 +0,0 @@
1
- import { NgFor, NgIf } from '@angular/common';
2
- import { Component, inject, Input } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { ThyAction, ThyActions } from 'ngx-tethys/action';
5
- import { ThyColorPickerDirective } from 'ngx-tethys/color-picker';
6
- import { ThyDivider } from 'ngx-tethys/divider';
7
- import { ThyIcon } from 'ngx-tethys/icon';
8
- import { ThyTooltipDirective } from 'ngx-tethys/tooltip';
9
- import { getPluginOptions } from '../../../../core';
10
- import { PluginKeys, TheEditor } from '../../../../interfaces';
11
- import * as TheQueries from '../../../../queries';
12
- import { copyNode } from '../../../../utils';
13
- import { TableEditor } from '../../table.editor';
14
- import { createTablePosition } from '../../utils/create-table-position';
15
- import { isRectangularInTableCells } from '../../utils/is-selection-in-table';
16
- import { removeColumnOrRows } from '../../utils/remove-row-column';
17
- import { setCellMenuVisibility } from '../../utils/set-menu-cell-invisibility';
18
- import { getSelectedCell } from '../../utils/table-entry';
19
- import { TheTableOptions } from './table-options.component';
20
- import { injectTranslations, TheI18nService } from '../../../../i18n';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "ngx-tethys/popover";
23
- import * as i2 from "ngx-tethys/notify";
24
- import * as i3 from "@angular/forms";
25
- export var DeleteIcon;
26
- (function (DeleteIcon) {
27
- DeleteIcon["table-delete-rows"] = "table-delete-rows";
28
- DeleteIcon["table-delete-columns"] = "table-delete-columns";
29
- DeleteIcon["trash"] = "trash";
30
- })(DeleteIcon || (DeleteIcon = {}));
31
- export class TheTableToolbar {
32
- get editor() {
33
- return this.tableStore && this.tableStore.editor;
34
- }
35
- get hasDivider() {
36
- return this.cellMenuList.filter(item => item.visibility).length > 1;
37
- }
38
- get tableOptions() {
39
- return getPluginOptions(this.editor, PluginKeys.table);
40
- }
41
- constructor(thyPopover, popoverRef, thyNotifyService, viewContainerRef) {
42
- this.thyPopover = thyPopover;
43
- this.popoverRef = popoverRef;
44
- this.thyNotifyService = thyNotifyService;
45
- this.viewContainerRef = viewContainerRef;
46
- this.locale = injectTranslations(inject(TheI18nService));
47
- this.cellMenuList = [
48
- {
49
- key: 'merge-cells',
50
- name: this.locale().mergeCells,
51
- visibility: false,
52
- icon: 'table-merge-cells',
53
- actionHandle: () => {
54
- TableEditor.mergeCell(this.editor);
55
- this.popoverRef.close();
56
- this.tableStore.clearSelectedCells();
57
- }
58
- },
59
- {
60
- key: 'split-cells',
61
- name: this.locale().splitCells,
62
- visibility: false,
63
- icon: 'table-unmerge-cells',
64
- actionHandle: () => {
65
- TableEditor.splitCell(this.editor);
66
- this.popoverRef.close();
67
- this.tableStore.clearSelectedCells();
68
- }
69
- }
70
- ];
71
- }
72
- ngOnInit() {
73
- this.isColumnEqual = this.tableElement?.columns?.every(col => this.tableElement.columns[0].width === col.width) ?? true;
74
- const selectedCellPositions = this.tableStore.getSelectedCellPositions();
75
- const tableInfo = { selectedCellPositions, isSelectedTable: this.tableStore.isSelectedTable };
76
- this.isRectangle = isRectangularInTableCells(this.editor, selectedCellPositions);
77
- this.setDeleteIcon();
78
- setCellMenuVisibility(this.editor, this.cellMenuList, tableInfo);
79
- const cell = getSelectedCell(this.editor);
80
- this.selectedColor = cell ? cell.backgroundColor : '';
81
- const path = TheEditor.findPath(this.editor, this.tableElement);
82
- this.tableChangeSubscriber = this.tableStore.tableChange().subscribe(() => {
83
- const columns = TheQueries.getNode(this.editor, path).columns;
84
- this.isColumnEqual = columns?.every(col => columns[0].width === col.width) ?? true;
85
- });
86
- }
87
- ngOnDestroy() {
88
- this.tableChangeSubscriber?.unsubscribe();
89
- }
90
- setDeleteIcon() {
91
- const { selectedRowsIndex, selectedColumnsIndex } = this.tableStore;
92
- const selectedCellPositions = this.tableStore.getSelectedCellPositions();
93
- const pos = createTablePosition(this.editor);
94
- if (this.tableStore.selectedRowsIndex.length > 0) {
95
- this.deleteIcon = DeleteIcon['table-delete-rows'];
96
- this.iconName = this.locale().deleteEntireRow;
97
- }
98
- if (this.tableStore.selectedColumnsIndex.length > 0) {
99
- this.deleteIcon = DeleteIcon['table-delete-columns'];
100
- this.iconName = this.locale().deleteEntireCol;
101
- }
102
- if (this.tableStore.isSelectedTable) {
103
- this.deleteIcon = DeleteIcon.trash;
104
- this.iconName = this.locale().deleteTable;
105
- }
106
- // 满足已选中整行或者整列
107
- const isSelectedWholeRowOrColumnCell = selectedRowsIndex.length * pos.getWidth() === selectedCellPositions.length ||
108
- selectedColumnsIndex.length * pos.getHeight() === selectedCellPositions.length;
109
- if (!isSelectedWholeRowOrColumnCell) {
110
- this.deleteIcon = null;
111
- this.iconName = null;
112
- }
113
- }
114
- onDelete(event) {
115
- event.preventDefault();
116
- removeColumnOrRows(this.editor, this.tableStore);
117
- this.tableStore.clearDangerousCells();
118
- this.tableStore.clearSelectedCells();
119
- this.popoverRef.close();
120
- }
121
- onEnterDelete(event) {
122
- this.tableStore.setDangerousCells();
123
- }
124
- onLeaveDelete(event) {
125
- this.tableStore.clearDangerousCells();
126
- }
127
- openColorPanel(e) {
128
- e.preventDefault();
129
- e.stopPropagation();
130
- }
131
- changeColor(newColor) {
132
- TableEditor.setCellsBackgroundColor(this.editor, newColor);
133
- this.selectedColor = newColor;
134
- }
135
- setFullscreen(event) {
136
- this.popoverRef.close();
137
- this.tableOptions.setFullscreen(this.editor, event, this.tableElement);
138
- }
139
- preventDefault(event) {
140
- event.preventDefault();
141
- event.stopPropagation();
142
- }
143
- onCopy(e) {
144
- e?.preventDefault();
145
- copyNode(this.editor, this.tableElement, this.thyNotifyService, this.locale);
146
- }
147
- setEquallyColumnHandle(event) {
148
- this.preventDefault(event);
149
- TableEditor.setEquallyColumn(this.editor);
150
- }
151
- openTableOptionMenu(event) {
152
- this.preventDefault(event);
153
- this.thyPopover.open(TheTableOptions, {
154
- origin: event.currentTarget,
155
- initialState: {
156
- editor: this.editor
157
- },
158
- minWidth: 0,
159
- insideClosable: true,
160
- outsideClosable: true,
161
- hasBackdrop: false,
162
- placement: 'bottomLeft',
163
- originActiveClass: 'active',
164
- panelClass: 'table-options-panel',
165
- viewContainerRef: this.viewContainerRef
166
- });
167
- }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableToolbar, deps: [{ token: i1.ThyPopover }, { token: i1.ThyPopoverRef }, { token: i2.ThyNotifyService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TheTableToolbar, isStandalone: true, selector: "the-table-toolbar", inputs: { tableStore: "tableStore", tableElement: "tableElement" }, ngImport: i0, template: "<thy-actions thySize=\"xxs\" (mousedown)=\"preventDefault($event)\">\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a\n *ngIf=\"item.visibility\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item.name\"\n (click)=\"item.actionHandle()\"\n ></a>\n </ng-container>\n <thy-divider *ngIf=\"hasDivider\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"> </thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n [thyTooltip]=\"locale().cellBackground\"\n thyColorPicker\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (click)=\"openColorPanel($event)\"\n thyPlacement=\"bottomLeft\"\n [thyHasBackdrop]=\"false\"\n >\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && !isColumnEqual\"\n thyAction\n [thyTooltip]=\"locale().colEqualWidth\"\n (click)=\"setEquallyColumnHandle($event)\"\n >\n <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && tableOptions?.showFullscreen\"\n thyAction\n [thyTooltip]=\"locale().fullscreen\"\n (click)=\"setFullscreen($event)\"\n >\n <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n </a>\n <a\n *ngIf=\"tableStore.isSelectedTable && !tableStore?.isFullscreen\"\n class=\"fullscreen-hidden\"\n href=\"javascript:;\"\n thyAction\n thyActionIcon=\"copy\"\n [thyTooltip]=\"locale().copy\"\n (click)=\"onCopy($event)\"\n ></a>\n <ng-container *ngIf=\"tableStore.isSelectedTable\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"openTableOptionMenu($event)\">\n <span>{{ locale().tableOptions }}</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n [thyActionIcon]=\"deleteIcon\"\n [thyTooltip]=\"iconName\"\n (click)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n </ng-container>\n</thy-actions>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyColorPickerDirective, selector: "[thyColorPicker]", inputs: ["thyOffset", "thyHasBackdrop", "thyDefaultColor", "thyTransparentColorSelectable", "thyPresetColors", "thyPlacement", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyDisabled"], outputs: ["thyPanelOpen", "thyPanelClose"] }] }); }
170
- }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableToolbar, decorators: [{
172
- type: Component,
173
- args: [{ selector: 'the-table-toolbar', standalone: true, imports: [NgFor, NgIf, FormsModule, ThyIcon, ThyAction, ThyActions, ThyTooltipDirective, ThyDivider, ThyColorPickerDirective], template: "<thy-actions thySize=\"xxs\" (mousedown)=\"preventDefault($event)\">\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a\n *ngIf=\"item.visibility\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item.name\"\n (click)=\"item.actionHandle()\"\n ></a>\n </ng-container>\n <thy-divider *ngIf=\"hasDivider\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"> </thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n [thyTooltip]=\"locale().cellBackground\"\n thyColorPicker\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (click)=\"openColorPanel($event)\"\n thyPlacement=\"bottomLeft\"\n [thyHasBackdrop]=\"false\"\n >\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && !isColumnEqual\"\n thyAction\n [thyTooltip]=\"locale().colEqualWidth\"\n (click)=\"setEquallyColumnHandle($event)\"\n >\n <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && tableOptions?.showFullscreen\"\n thyAction\n [thyTooltip]=\"locale().fullscreen\"\n (click)=\"setFullscreen($event)\"\n >\n <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n </a>\n <a\n *ngIf=\"tableStore.isSelectedTable && !tableStore?.isFullscreen\"\n class=\"fullscreen-hidden\"\n href=\"javascript:;\"\n thyAction\n thyActionIcon=\"copy\"\n [thyTooltip]=\"locale().copy\"\n (click)=\"onCopy($event)\"\n ></a>\n <ng-container *ngIf=\"tableStore.isSelectedTable\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"openTableOptionMenu($event)\">\n <span>{{ locale().tableOptions }}</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n [thyActionIcon]=\"deleteIcon\"\n [thyTooltip]=\"iconName\"\n (click)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n </ng-container>\n</thy-actions>\n" }]
174
- }], ctorParameters: () => [{ type: i1.ThyPopover }, { type: i1.ThyPopoverRef }, { type: i2.ThyNotifyService }, { type: i0.ViewContainerRef }], propDecorators: { tableStore: [{
175
- type: Input
176
- }], tableElement: [{
177
- type: Input
178
- }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FB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QUFDLENBQUM7SUFDUCxDQUFDOytHQTdLUSxlQUFlO21HQUFmLGVBQWUsaUpDeEM1Qixvc0ZBeUVBLDRDRG5DYyxLQUFLLG1IQUFFLElBQUksNEZBQUUsV0FBVywrVkFBRSxPQUFPLHNNQUFFLFNBQVMsZ01BQUUsVUFBVSw2RUFBRSxtQkFBbUIsOFRBQUUsVUFBVSxxSkFBRSx1QkFBdUI7OzRGQUVuSCxlQUFlO2tCQU4zQixTQUFTOytCQUNJLG1CQUFtQixjQUVqQixJQUFJLFdBQ1AsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUM7eUtBaUJwSCxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBTaWduYWwsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QWN0aW9uLCBUaHlBY3Rpb25zIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5Q29sb3JQaWNrZXJEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL2NvbG9yLXBpY2tlcic7XG5pbXBvcnQgeyBUaHlEaXZpZGVyIH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcbmltcG9ydCB7IFRoeVBvcG92ZXIsIFRoeVBvcG92ZXJSZWYgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgVGh5VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cywgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uLy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgY29weU5vZGUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBUYWJsZUVkaXRvciB9IGZyb20gJy4uLy4uL3RhYmxlLmVkaXRvcic7XG5pbXBvcnQgeyBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vdGFibGUuc3RvcmUnO1xuaW1wb3J0IHsgTWVudUVudGl0eSB9IGZyb20gJy4uLy4uL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVRhYmxlUG9zaXRpb24gfSBmcm9tICcuLi8uLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuaW1wb3J0IHsgaXNSZWN0YW5ndWxhckluVGFibGVDZWxscyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLXNlbGVjdGlvbi1pbi10YWJsZSc7XG5pbXBvcnQgeyByZW1vdmVDb2x1bW5PclJvd3MgfSBmcm9tICcuLi8uLi91dGlscy9yZW1vdmUtcm93LWNvbHVtbic7XG5pbXBvcnQgeyBzZXRDZWxsTWVudVZpc2liaWxpdHkgfSBmcm9tICcuLi8uLi91dGlscy9zZXQtbWVudS1jZWxsLWludmlzaWJpbGl0eSc7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZENlbGwgfSBmcm9tICcuLi8uLi91dGlscy90YWJsZS1lbnRyeSc7XG5pbXBvcnQgeyBUaGVUYWJsZU9wdGlvbnMgfSBmcm9tICcuL3RhYmxlLW9wdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IGluamVjdFRyYW5zbGF0aW9ucywgVGhlSTE4blNlcnZpY2UsIFRoZUkxOG5UcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2kxOG4nO1xuXG5leHBvcnQgZW51bSBEZWxldGVJY29uIHtcbiAgICAndGFibGUtZGVsZXRlLXJvd3MnID0gJ3RhYmxlLWRlbGV0ZS1yb3dzJyxcbiAgICAndGFibGUtZGVsZXRlLWNvbHVtbnMnID0gJ3RhYmxlLWRlbGV0ZS1jb2x1bW5zJyxcbiAgICAndHJhc2gnID0gJ3RyYXNoJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RhYmxlLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBOZ0lmLCBGb3Jtc01vZHVsZSwgVGh5SWNvbiwgVGh5QWN0aW9uLCBUaHlBY3Rpb25zLCBUaHlUb29sdGlwRGlyZWN0aXZlLCBUaHlEaXZpZGVyLCBUaHlDb2xvclBpY2tlckRpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGhlVGFibGVUb29sYmFyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGxvY2FsZTogU2lnbmFsPFRoZUkxOG5UcmFuc2xhdGlvbj4gPSBpbmplY3RUcmFuc2xhdGlvbnMoaW5qZWN0KFRoZUkxOG5TZXJ2aWNlKSk7XG5cbiAgICBzZWxlY3RlZENvbG9yOiBzdHJpbmc7XG5cbiAgICBkZWxldGVJY29uOiBEZWxldGVJY29uO1xuXG4gICAgaWNvbk5hbWU6IHN0cmluZztcblxuICAgIGlzUmVjdGFuZ2xlOiBib29sZWFuO1xuXG4gICAgaXNDb2x1bW5FcXVhbDogYm9vbGVhbjtcblxuICAgIHRhYmxlQ2hhbmdlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgQElucHV0KCkgdGFibGVTdG9yZTogVGFibGVTdG9yZTtcblxuICAgIEBJbnB1dCgpIHRhYmxlRWxlbWVudDogVGFibGVFbGVtZW50O1xuXG4gICAgZ2V0IGVkaXRvcigpOiBFZGl0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVN0b3JlICYmIHRoaXMudGFibGVTdG9yZS5lZGl0b3I7XG4gICAgfVxuXG4gICAgY2VsbE1lbnVMaXN0OiBNZW51RW50aXR5W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ21lcmdlLWNlbGxzJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkubWVyZ2VDZWxscyxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbjogJ3RhYmxlLW1lcmdlLWNlbGxzJyxcbiAgICAgICAgICAgIGFjdGlvbkhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLm1lcmdlQ2VsbCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLmNsZWFyU2VsZWN0ZWRDZWxscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdzcGxpdC1jZWxscycsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmxvY2FsZSgpLnNwbGl0Q2VsbHMsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZSxcbiAgICAgICAgICAgIGljb246ICd0YWJsZS11bm1lcmdlLWNlbGxzJyxcbiAgICAgICAgICAgIGFjdGlvbkhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNwbGl0Q2VsbCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLmNsZWFyU2VsZWN0ZWRDZWxscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXTtcblxuICAgIGdldCBoYXNEaXZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsTWVudUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS52aXNpYmlsaXR5KS5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIGdldCB0YWJsZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBnZXRQbHVnaW5PcHRpb25zKHRoaXMuZWRpdG9yLCBQbHVnaW5LZXlzLnRhYmxlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0aHlQb3BvdmVyOiBUaHlQb3BvdmVyLFxuICAgICAgICBwcml2YXRlIHBvcG92ZXJSZWY6IFRoeVBvcG92ZXJSZWY8VGhlVGFibGVPcHRpb25zPixcbiAgICAgICAgcHJpdmF0ZSB0aHlOb3RpZnlTZXJ2aWNlOiBUaHlOb3RpZnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pc0NvbHVtbkVxdWFsID0gdGhpcy50YWJsZUVsZW1lbnQ/LmNvbHVtbnM/LmV2ZXJ5KGNvbCA9PiB0aGlzLnRhYmxlRWxlbWVudC5jb2x1bW5zWzBdLndpZHRoID09PSBjb2wud2lkdGgpID8/IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRoaXMudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgY29uc3QgdGFibGVJbmZvID0geyBzZWxlY3RlZENlbGxQb3NpdGlvbnMsIGlzU2VsZWN0ZWRUYWJsZTogdGhpcy50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSB9O1xuICAgICAgICB0aGlzLmlzUmVjdGFuZ2xlID0gaXNSZWN0YW5ndWxhckluVGFibGVDZWxscyh0aGlzLmVkaXRvciwgc2VsZWN0ZWRDZWxsUG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5zZXREZWxldGVJY29uKCk7XG4gICAgICAgIHNldENlbGxNZW51VmlzaWJpbGl0eSh0aGlzLmVkaXRvciwgdGhpcy5jZWxsTWVudUxpc3QsIHRhYmxlSW5mbyk7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBnZXRTZWxlY3RlZENlbGwodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSBjZWxsID8gY2VsbC5iYWNrZ3JvdW5kQ29sb3IgOiAnJztcblxuICAgICAgICBjb25zdCBwYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCB0aGlzLnRhYmxlRWxlbWVudCk7XG4gICAgICAgIHRoaXMudGFibGVDaGFuZ2VTdWJzY3JpYmVyID0gdGhpcy50YWJsZVN0b3JlLnRhYmxlQ2hhbmdlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSAoVGhlUXVlcmllcy5nZXROb2RlKHRoaXMuZWRpdG9yLCBwYXRoKSBhcyBUYWJsZUVsZW1lbnQpLmNvbHVtbnM7XG4gICAgICAgICAgICB0aGlzLmlzQ29sdW1uRXF1YWwgPSBjb2x1bW5zPy5ldmVyeShjb2wgPT4gY29sdW1uc1swXS53aWR0aCA9PT0gY29sLndpZHRoKSA/PyB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50YWJsZUNoYW5nZVN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgc2V0RGVsZXRlSWNvbigpIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3RlZFJvd3NJbmRleCwgc2VsZWN0ZWRDb2x1bW5zSW5kZXggfSA9IHRoaXMudGFibGVTdG9yZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGhpcy50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBjb25zdCBwb3MgPSBjcmVhdGVUYWJsZVBvc2l0aW9uKHRoaXMuZWRpdG9yKTtcblxuICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlSWNvbiA9IERlbGV0ZUljb25bJ3RhYmxlLWRlbGV0ZS1yb3dzJ107XG4gICAgICAgICAgICB0aGlzLmljb25OYW1lID0gdGhpcy5sb2NhbGUoKS5kZWxldGVFbnRpcmVSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGVTdG9yZS5zZWxlY3RlZENvbHVtbnNJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBEZWxldGVJY29uWyd0YWJsZS1kZWxldGUtY29sdW1ucyddO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9IHRoaXMubG9jYWxlKCkuZGVsZXRlRW50aXJlQ29sO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBEZWxldGVJY29uLnRyYXNoO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9IHRoaXMubG9jYWxlKCkuZGVsZXRlVGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5ruh6Laz5bey6YCJ5Lit5pW06KGM5oiW6ICF5pW05YiXXG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRXaG9sZVJvd09yQ29sdW1uQ2VsbCA9XG4gICAgICAgICAgICBzZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggKiBwb3MuZ2V0V2lkdGgoKSA9PT0gc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCB8fFxuICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5zSW5kZXgubGVuZ3RoICogcG9zLmdldEhlaWdodCgpID09PSBzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWRXaG9sZVJvd09yQ29sdW1uQ2VsbCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJY29uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EZWxldGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVtb3ZlQ29sdW1uT3JSb3dzKHRoaXMuZWRpdG9yLCB0aGlzLnRhYmxlU3RvcmUpO1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmUuY2xlYXJEYW5nZXJvdXNDZWxscygpO1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzKCk7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIG9uRW50ZXJEZWxldGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNldERhbmdlcm91c0NlbGxzKCk7XG4gICAgfVxuXG4gICAgb25MZWF2ZURlbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmUuY2xlYXJEYW5nZXJvdXNDZWxscygpO1xuICAgIH1cblxuICAgIG9wZW5Db2xvclBhbmVsKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNoYW5nZUNvbG9yKG5ld0NvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgVGFibGVFZGl0b3Iuc2V0Q2VsbHNCYWNrZ3JvdW5kQ29sb3IodGhpcy5lZGl0b3IsIG5ld0NvbG9yKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gbmV3Q29sb3I7XG4gICAgfVxuXG4gICAgc2V0RnVsbHNjcmVlbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMuc2V0RnVsbHNjcmVlbih0aGlzLmVkaXRvciwgZXZlbnQsIHRoaXMudGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcmV2ZW50RGVmYXVsdChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbkNvcHkoZTogRXZlbnQpIHtcbiAgICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29weU5vZGUodGhpcy5lZGl0b3IsIHRoaXMudGFibGVFbGVtZW50LCB0aGlzLnRoeU5vdGlmeVNlcnZpY2UsIHRoaXMubG9jYWxlKTtcbiAgICB9XG5cbiAgICBzZXRFcXVhbGx5Q29sdW1uSGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgICAgICBUYWJsZUVkaXRvci5zZXRFcXVhbGx5Q29sdW1uKHRoaXMuZWRpdG9yKTtcbiAgICB9XG5cbiAgICBvcGVuVGFibGVPcHRpb25NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXIub3BlbihUaGVUYWJsZU9wdGlvbnMsIHtcbiAgICAgICAgICAgIG9yaWdpbjogZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIGluc2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgb3V0c2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICBvcmlnaW5BY3RpdmVDbGFzczogJ2FjdGl2ZScsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndGFibGUtb3B0aW9ucy1wYW5lbCcsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWZcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4eHNcIiAobW91c2Vkb3duKT1cInByZXZlbnREZWZhdWx0KCRldmVudClcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZWxsTWVudUxpc3RcIj5cbiAgICA8YVxuICAgICAgKm5nSWY9XCJpdGVtLnZpc2liaWxpdHlcIlxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIFt0aHlBY3Rpb25JY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJpdGVtLm5hbWVcIlxuICAgICAgKGNsaWNrKT1cIml0ZW0uYWN0aW9uSGFuZGxlKClcIlxuICAgID48L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8dGh5LWRpdmlkZXIgKm5nSWY9XCJoYXNEaXZpZGVyXCIgY2xhc3M9XCJtci0yIG1sLTEgYWxpZ24tc2VsZi1jZW50ZXJcIiBbdGh5VmVydGljYWxdPVwidHJ1ZVwiIHRoeUNvbG9yPVwibGlnaHRcIj4gPC90aHktZGl2aWRlcj5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICB0aHlBY3Rpb25cbiAgICBbdGh5VG9vbHRpcF09XCJsb2NhbGUoKS5jZWxsQmFja2dyb3VuZFwiXG4gICAgdGh5Q29sb3JQaWNrZXJcbiAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sb3JcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbG9yKCRldmVudClcIlxuICAgIChjbGljayk9XCJvcGVuQ29sb3JQYW5lbCgkZXZlbnQpXCJcbiAgICB0aHlQbGFjZW1lbnQ9XCJib3R0b21MZWZ0XCJcbiAgICBbdGh5SGFzQmFja2Ryb3BdPVwiZmFsc2VcIlxuICA+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYmFja2dyb3VuZC10dFwiIHRoeUljb25UeXBlPVwidHdvdG9uZVwiIFt0aHlUd290b25lQ29sb3JdPVwic2VsZWN0ZWRDb2xvclwiPjwvdGh5LWljb24+XG4gIDwvYT5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAqbmdJZj1cInRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlICYmICFpc0NvbHVtbkVxdWFsXCJcbiAgICB0aHlBY3Rpb25cbiAgICBbdGh5VG9vbHRpcF09XCJsb2NhbGUoKS5jb2xFcXVhbFdpZHRoXCJcbiAgICAoY2xpY2spPVwic2V0RXF1YWxseUNvbHVtbkhhbmRsZSgkZXZlbnQpXCJcbiAgPlxuICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cInRhYmxlLWNvbHVtbi1lcXVhbC13aWR0aFwiPjwvdGh5LWljb24+XG4gIDwvYT5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAqbmdJZj1cInRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlICYmIHRhYmxlT3B0aW9ucz8uc2hvd0Z1bGxzY3JlZW5cIlxuICAgIHRoeUFjdGlvblxuICAgIFt0aHlUb29sdGlwXT1cImxvY2FsZSgpLmZ1bGxzY3JlZW5cIlxuICAgIChjbGljayk9XCJzZXRGdWxsc2NyZWVuKCRldmVudClcIlxuICA+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYXJyb3dzLWFsdFwiPjwvdGh5LWljb24+XG4gIDwvYT5cbiAgPGFcbiAgICAqbmdJZj1cInRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlICYmICF0YWJsZVN0b3JlPy5pc0Z1bGxzY3JlZW5cIlxuICAgIGNsYXNzPVwiZnVsbHNjcmVlbi1oaWRkZW5cIlxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgIHRoeUFjdGlvblxuICAgIHRoeUFjdGlvbkljb249XCJjb3B5XCJcbiAgICBbdGh5VG9vbHRpcF09XCJsb2NhbGUoKS5jb3B5XCJcbiAgICAoY2xpY2spPVwib25Db3B5KCRldmVudClcIlxuICA+PC9hPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGVcIj5cbiAgICA8dGh5LWRpdmlkZXIgY2xhc3M9XCJtci0yIG1sLTEgYWxpZ24tc2VsZi1jZW50ZXJcIiBbdGh5VmVydGljYWxdPVwidHJ1ZVwiIHRoeUNvbG9yPVwibGlnaHRcIj48L3RoeS1kaXZpZGVyPlxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImxpbmstd2l0aC1kb3duXCIgdGh5QWN0aW9uIChtb3VzZWRvd24pPVwicHJldmVudERlZmF1bHQoJGV2ZW50KVwiIChjbGljayk9XCJvcGVuVGFibGVPcHRpb25NZW51KCRldmVudClcIj5cbiAgICAgIDxzcGFuPnt7IGxvY2FsZSgpLnRhYmxlT3B0aW9ucyB9fTwvc3Bhbj5cbiAgICAgIDx0aHktaWNvbiBjbGFzcz1cImZvbnQtc2l6ZS1zbSB0ZXh0LWRlc2MgbWwtMVwiIHRoeUljb25OYW1lPVwiY2FyZXQtZG93blwiPjwvdGh5LWljb24+XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlU3RvcmU/LmlzRnVsbHNjcmVlbiA/IGRlbGV0ZUljb24gJiYgIXRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlIDogZGVsZXRlSWNvblwiPlxuICAgIDx0aHktZGl2aWRlciBjbGFzcz1cIm1yLTIgbWwtMSBhbGlnbi1zZWxmLWNlbnRlclwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCIgdGh5Q29sb3I9XCJsaWdodFwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPGFcbiAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgdGh5QWN0aW9uXG4gICAgICB0aHlUeXBlPVwiZGFuZ2VyXCJcbiAgICAgIFt0aHlBY3Rpb25JY29uXT1cImRlbGV0ZUljb25cIlxuICAgICAgW3RoeVRvb2x0aXBdPVwiaWNvbk5hbWVcIlxuICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKCRldmVudClcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwib25FbnRlckRlbGV0ZSgkZXZlbnQpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm9uTGVhdmVEZWxldGUoJGV2ZW50KVwiXG4gICAgPjwvYT5cbiAgPC9uZy1jb250YWluZXI+XG48L3RoeS1hY3Rpb25zPlxuIl19