@worktile/theia 16.1.7 → 16.1.8

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 (378) hide show
  1. package/components/contextmenu/contextmenu.component.d.ts +1 -1
  2. package/components/conversion-hint/conversion-hint.component.d.ts +1 -1
  3. package/components/inline-toolbar/inline-toolbar.component.d.ts +1 -1
  4. package/components/listbox/listbox.d.ts +3 -3
  5. package/components/plugin-menu/plugin-menu.component.d.ts +5 -4
  6. package/components/table-select/table-select.component.d.ts +1 -1
  7. package/components/toolbar/toolbar.component.d.ts +1 -1
  8. package/components/toolbar-group/toolbar-group.component.d.ts +1 -1
  9. package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
  10. package/custom-types.d.ts +1 -0
  11. package/editor.component.d.ts +1 -1
  12. package/{esm2020 → esm2022}/components/action/prevent-default.mjs +4 -4
  13. package/{esm2020 → esm2022}/components/column-resize/column-resize-notifier.mjs +4 -4
  14. package/{esm2020 → esm2022}/components/column-resize/column-resize.directive.mjs +4 -4
  15. package/{esm2020 → esm2022}/components/column-resize/column-resize.module.mjs +9 -9
  16. package/{esm2020 → esm2022}/components/column-resize/event-dispatcher.mjs +4 -4
  17. package/{esm2020 → esm2022}/components/column-resize/overlay-handle.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/components/column-resize/resizing.store.mjs +4 -4
  19. package/{esm2020 → esm2022}/components/contextmenu/contextmenu.component.mjs +4 -4
  20. package/{esm2020 → esm2022}/components/conversion-hint/conversion-hint.component.mjs +4 -4
  21. package/{esm2020 → esm2022}/components/element/element.component.mjs +4 -4
  22. package/{esm2020 → esm2022}/components/inline-toolbar/inline-toolbar.component.mjs +6 -6
  23. package/esm2022/components/listbox/listbox.mjs +375 -0
  24. package/esm2022/components/plugin-menu/plugin-menu.component.mjs +205 -0
  25. package/{esm2020 → esm2022}/components/table-select/table-select.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/components/template/template.component.mjs +4 -4
  27. package/{esm2020 → esm2022}/components/text/text.component.mjs +4 -4
  28. package/{esm2020 → esm2022}/components/toolbar/toolbar.component.mjs +4 -4
  29. package/{esm2020 → esm2022}/components/toolbar-dropdown/toolbar-dropdown.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/components/toolbar-group/toolbar-group.component.mjs +4 -4
  31. package/{esm2020 → esm2022}/components/toolbar-item/toolbar-item.component.mjs +6 -6
  32. package/{esm2020 → esm2022}/core/toolbar-item/base-toolbar-item.mjs +7 -7
  33. package/esm2022/custom-types.mjs +2 -0
  34. package/{esm2020 → esm2022}/editor.component.mjs +11 -11
  35. package/esm2022/editor.module.mjs +254 -0
  36. package/esm2022/interfaces/image.mjs +3 -0
  37. package/{esm2020 → esm2022}/interfaces/view-base.mjs +4 -4
  38. package/{esm2020 → esm2022}/pipes.mjs +10 -10
  39. package/{esm2020 → esm2022}/plugins/autoformat/transforms/auto-format-block.mjs +1 -1
  40. package/{esm2020 → esm2022}/plugins/blockquote/blockquote.component.mjs +4 -4
  41. package/{esm2020 → esm2022}/plugins/code/code.component.mjs +4 -4
  42. package/{esm2020 → esm2022}/plugins/color/toolbar-item.component.mjs +4 -4
  43. package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +59 -0
  44. package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +136 -0
  45. package/{esm2020 → esm2022}/plugins/hr/hr.component.mjs +6 -6
  46. package/esm2022/plugins/image/image.component.mjs +460 -0
  47. package/esm2022/plugins/image/image.editor.mjs +96 -0
  48. package/{esm2020 → esm2022}/plugins/inline-code/inline-code.component.mjs +6 -6
  49. package/{esm2020 → esm2022}/plugins/link/edit/link-edit.component.mjs +4 -4
  50. package/{esm2020 → esm2022}/plugins/link/hover/link-hover.component.mjs +4 -4
  51. package/{esm2020 → esm2022}/plugins/link/link.component.mjs +9 -9
  52. package/{esm2020 → esm2022}/plugins/list/components/bulleted-list.component.mjs +4 -4
  53. package/{esm2020 → esm2022}/plugins/list/components/list-item.component.mjs +4 -4
  54. package/{esm2020 → esm2022}/plugins/list/components/numbered-list.component.mjs +4 -4
  55. package/{esm2020 → esm2022}/plugins/mention/suggestion.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/plugins/quick-insert/components/quick-insert.component.mjs +4 -4
  57. package/{esm2020 → esm2022}/plugins/table/components/insert-mark/insert-mark.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/plugins/table/components/row/row.component.mjs +6 -6
  59. package/esm2022/plugins/table/components/table.component.mjs +834 -0
  60. package/{esm2020 → esm2022}/plugins/table/components/td/td.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/plugins/table/components/toolbar/table-options.component.mjs +6 -6
  62. package/{esm2020 → esm2022}/plugins/table/components/toolbar/table-toolbar.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/plugins/table/table.pipe.mjs +7 -7
  64. package/{esm2020 → esm2022}/plugins/table/table.service.mjs +4 -4
  65. package/{esm2020 → esm2022}/plugins/table/table.store.mjs +4 -4
  66. package/{esm2020 → esm2022}/plugins/table/toolbar-item.component.mjs +6 -6
  67. package/{esm2020 → esm2022}/plugins/todo-item/todo-item.component.mjs +6 -6
  68. package/{esm2020 → esm2022}/plugins/vertical-align/toolbar-item.component.mjs +4 -4
  69. package/{esm2020 → esm2022}/services/context.service.mjs +4 -4
  70. package/{esm2020 → esm2022}/services/table-contextmenu.service.mjs +4 -4
  71. package/{esm2020 → esm2022}/services/toolbar.service.mjs +4 -4
  72. package/{esm2020 → esm2022}/transforms/on-keydown-reset-block-type.mjs +1 -1
  73. package/{fesm2020 → fesm2022}/worktile-theia.mjs +436 -389
  74. package/fesm2022/worktile-theia.mjs.map +1 -0
  75. package/interfaces/editor.d.ts +5 -3
  76. package/interfaces/image.d.ts +5 -4
  77. package/package.json +6 -15
  78. package/plugins/image/image.component.d.ts +5 -3
  79. package/plugins/image/image.editor.d.ts +7 -0
  80. package/plugins/link/edit/link-edit.component.d.ts +1 -1
  81. package/plugins/link/hover/link-hover.component.d.ts +1 -1
  82. package/plugins/mention/suggestion.component.d.ts +1 -1
  83. package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -1
  84. package/plugins/table/components/insert-mark/insert-mark.component.d.ts +1 -1
  85. package/plugins/table/components/table.component.d.ts +7 -7
  86. package/plugins/table/components/toolbar/table-options.component.d.ts +1 -1
  87. package/plugins/table/components/toolbar/table-toolbar.component.d.ts +1 -1
  88. package/queries/is-range-across-blocks.d.ts +1 -1
  89. package/esm2020/components/listbox/listbox.mjs +0 -375
  90. package/esm2020/components/plugin-menu/plugin-menu.component.mjs +0 -204
  91. package/esm2020/custom-types.mjs +0 -2
  92. package/esm2020/editor.module.mjs +0 -254
  93. package/esm2020/interfaces/image.mjs +0 -3
  94. package/esm2020/plugins/deserialize/deserialize-html.plugin.mjs +0 -53
  95. package/esm2020/plugins/deserialize/deserialize-md.plugin.mjs +0 -130
  96. package/esm2020/plugins/image/image.component.mjs +0 -440
  97. package/esm2020/plugins/image/image.editor.mjs +0 -81
  98. package/esm2020/plugins/table/components/table.component.mjs +0 -834
  99. package/fesm2015/worktile-theia.mjs +0 -16711
  100. package/fesm2015/worktile-theia.mjs.map +0 -1
  101. package/fesm2020/worktile-theia.mjs.map +0 -1
  102. /package/{esm2020 → esm2022}/components/column-resize/resize-ref.mjs +0 -0
  103. /package/{esm2020 → esm2022}/components/column-resize/selectors.mjs +0 -0
  104. /package/{esm2020 → esm2022}/components/index.mjs +0 -0
  105. /package/{esm2020 → esm2022}/components/listbox/listbox.type.mjs +0 -0
  106. /package/{esm2020 → esm2022}/constants/auto-format-rules.mjs +0 -0
  107. /package/{esm2020 → esm2022}/constants/code.mjs +0 -0
  108. /package/{esm2020 → esm2022}/constants/color-select.mjs +0 -0
  109. /package/{esm2020 → esm2022}/constants/default.mjs +0 -0
  110. /package/{esm2020 → esm2022}/constants/error.mjs +0 -0
  111. /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
  112. /package/{esm2020 → esm2022}/constants/node-types.mjs +0 -0
  113. /package/{esm2020 → esm2022}/constants/plugin-menu.mjs +0 -0
  114. /package/{esm2020 → esm2022}/constants/selector.mjs +0 -0
  115. /package/{esm2020 → esm2022}/constants/toolbar.mjs +0 -0
  116. /package/{esm2020 → esm2022}/core/create-plugin.mjs +0 -0
  117. /package/{esm2020 → esm2022}/core/create-toolbar.mjs +0 -0
  118. /package/{esm2020 → esm2022}/core/index.mjs +0 -0
  119. /package/{esm2020 → esm2022}/core/utils/combine-plugins.mjs +0 -0
  120. /package/{esm2020 → esm2022}/core/utils/flatten-deep-plugins.mjs +0 -0
  121. /package/{esm2020 → esm2022}/core/utils/get-plugin-options.mjs +0 -0
  122. /package/{esm2020 → esm2022}/core/utils/get-plugin.mjs +0 -0
  123. /package/{esm2020 → esm2022}/core/utils/get-plugins.mjs +0 -0
  124. /package/{esm2020 → esm2022}/core/utils/index.mjs +0 -0
  125. /package/{esm2020 → esm2022}/core/utils/merge-array.mjs +0 -0
  126. /package/{esm2020 → esm2022}/core/utils/merge-deep-plugins.mjs +0 -0
  127. /package/{esm2020 → esm2022}/core/utils/merge-options.mjs +0 -0
  128. /package/{esm2020 → esm2022}/core/utils/nested-structure-by-key.mjs +0 -0
  129. /package/{esm2020 → esm2022}/core/utils/plugin-menu.mjs +0 -0
  130. /package/{esm2020 → esm2022}/core/utils/plugins-by-key.mjs +0 -0
  131. /package/{esm2020 → esm2022}/core/with-theia.mjs +0 -0
  132. /package/{esm2020 → esm2022}/interfaces/auto-format.mjs +0 -0
  133. /package/{esm2020 → esm2022}/interfaces/editor.mjs +0 -0
  134. /package/{esm2020 → esm2022}/interfaces/element.mjs +0 -0
  135. /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
  136. /package/{esm2020 → esm2022}/interfaces/plugins/index.mjs +0 -0
  137. /package/{esm2020 → esm2022}/interfaces/plugins/no-infer.mjs +0 -0
  138. /package/{esm2020 → esm2022}/interfaces/plugins/plugin-key.mjs +0 -0
  139. /package/{esm2020 → esm2022}/interfaces/plugins/plugin-menu.mjs +0 -0
  140. /package/{esm2020 → esm2022}/interfaces/plugins/plugins.mjs +0 -0
  141. /package/{esm2020 → esm2022}/interfaces/plugins/with-override.mjs +0 -0
  142. /package/{esm2020 → esm2022}/interfaces/reset-block-type-plugin-options.mjs +0 -0
  143. /package/{esm2020 → esm2022}/interfaces/toolbar.mjs +0 -0
  144. /package/{esm2020 → esm2022}/interfaces/upload.mjs +0 -0
  145. /package/{esm2020 → esm2022}/interfaces/utility/index.mjs +0 -0
  146. /package/{esm2020 → esm2022}/interfaces/utility/nested-structure-by-key.mjs +0 -0
  147. /package/{esm2020 → esm2022}/interfaces/utility/override-by-key.mjs +0 -0
  148. /package/{esm2020 → esm2022}/interfaces/utility/types.mjs +0 -0
  149. /package/{esm2020 → esm2022}/interfaces/valid-children-types.mjs +0 -0
  150. /package/{esm2020 → esm2022}/plugins/align/align.editor.mjs +0 -0
  151. /package/{esm2020 → esm2022}/plugins/align/align.plugin.mjs +0 -0
  152. /package/{esm2020 → esm2022}/plugins/autoformat/autoformat.plugin.mjs +0 -0
  153. /package/{esm2020 → esm2022}/plugins/autoformat/transforms/auto-format-inline.mjs +0 -0
  154. /package/{esm2020 → esm2022}/plugins/blockquote/blockquote.editor.mjs +0 -0
  155. /package/{esm2020 → esm2022}/plugins/blockquote/blockquote.plugin.mjs +0 -0
  156. /package/{esm2020 → esm2022}/plugins/code/code.editor.mjs +0 -0
  157. /package/{esm2020 → esm2022}/plugins/code/code.plugin.mjs +0 -0
  158. /package/{esm2020 → esm2022}/plugins/color/color.editor.mjs +0 -0
  159. /package/{esm2020 → esm2022}/plugins/color/color.plugin.mjs +0 -0
  160. /package/{esm2020 → esm2022}/plugins/common/block-card.plugin.mjs +0 -0
  161. /package/{esm2020 → esm2022}/plugins/common/common.plugin.mjs +0 -0
  162. /package/{esm2020 → esm2022}/plugins/common/get-fragment.plugin.mjs +0 -0
  163. /package/{esm2020 → esm2022}/plugins/common/history.plugin.mjs +0 -0
  164. /package/{esm2020 → esm2022}/plugins/common/insert-data-by-invalid-type.mjs +0 -0
  165. /package/{esm2020 → esm2022}/plugins/common/move-selection.plugin.mjs +0 -0
  166. /package/{esm2020 → esm2022}/plugins/common/remove-empty.plugin.mjs +0 -0
  167. /package/{esm2020 → esm2022}/plugins/common/remove-void.plugin.mjs +0 -0
  168. /package/{esm2020 → esm2022}/plugins/common/reset-type.plugin.mjs +0 -0
  169. /package/{esm2020 → esm2022}/plugins/common/transforms.plugin.mjs +0 -0
  170. /package/{esm2020 → esm2022}/plugins/font-size/font-size.editor.mjs +0 -0
  171. /package/{esm2020 → esm2022}/plugins/heading/heading.editor.mjs +0 -0
  172. /package/{esm2020 → esm2022}/plugins/heading/heading.plugin.mjs +0 -0
  173. /package/{esm2020 → esm2022}/plugins/hr/hr.editor.mjs +0 -0
  174. /package/{esm2020 → esm2022}/plugins/hr/hr.plugin.mjs +0 -0
  175. /package/{esm2020 → esm2022}/plugins/image/image.plugin.mjs +0 -0
  176. /package/{esm2020 → esm2022}/plugins/indent/indent.editor.mjs +0 -0
  177. /package/{esm2020 → esm2022}/plugins/indent/indent.plugin.mjs +0 -0
  178. /package/{esm2020 → esm2022}/plugins/indent/on-keydown-indent.mjs +0 -0
  179. /package/{esm2020 → esm2022}/plugins/index.mjs +0 -0
  180. /package/{esm2020 → esm2022}/plugins/inline-code/inline-code.editor.mjs +0 -0
  181. /package/{esm2020 → esm2022}/plugins/inline-code/inline-code.plugin.mjs +0 -0
  182. /package/{esm2020 → esm2022}/plugins/link/link.editor.mjs +0 -0
  183. /package/{esm2020 → esm2022}/plugins/link/link.plugin.mjs +0 -0
  184. /package/{esm2020 → esm2022}/plugins/link/link.types.mjs +0 -0
  185. /package/{esm2020 → esm2022}/plugins/list/list.editor.mjs +0 -0
  186. /package/{esm2020 → esm2022}/plugins/list/list.plugin.mjs +0 -0
  187. /package/{esm2020 → esm2022}/plugins/list/normalizers/get-list-normalizer.mjs +0 -0
  188. /package/{esm2020 → esm2022}/plugins/list/normalizers/normalize-list-item.mjs +0 -0
  189. /package/{esm2020 → esm2022}/plugins/list/normalizers/normalize-no.mjs +0 -0
  190. /package/{esm2020 → esm2022}/plugins/list/on-key-down-list.mjs +0 -0
  191. /package/{esm2020 → esm2022}/plugins/list/queries/get-list-item-entry.mjs +0 -0
  192. /package/{esm2020 → esm2022}/plugins/list/queries/get-list-item-sublist.mjs +0 -0
  193. /package/{esm2020 → esm2022}/plugins/list/queries/get-list-types.mjs +0 -0
  194. /package/{esm2020 → esm2022}/plugins/list/queries/get-start-list-item.mjs +0 -0
  195. /package/{esm2020 → esm2022}/plugins/list/queries/has-list-in-list-item.mjs +0 -0
  196. /package/{esm2020 → esm2022}/plugins/list/queries/is-in-list.mjs +0 -0
  197. /package/{esm2020 → esm2022}/plugins/list/queries/is-list-nested.mjs +0 -0
  198. /package/{esm2020 → esm2022}/plugins/list/queries/is-list.mjs +0 -0
  199. /package/{esm2020 → esm2022}/plugins/list/queries/is-node-type-list.mjs +0 -0
  200. /package/{esm2020 → esm2022}/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -0
  201. /package/{esm2020 → esm2022}/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -0
  202. /package/{esm2020 → esm2022}/plugins/list/queries/is-single-list-item.mjs +0 -0
  203. /package/{esm2020 → esm2022}/plugins/list/transforms/insert-list-data.mjs +0 -0
  204. /package/{esm2020 → esm2022}/plugins/list/transforms/insert-list-item.mjs +0 -0
  205. /package/{esm2020 → esm2022}/plugins/list/transforms/move-list-item-down.mjs +0 -0
  206. /package/{esm2020 → esm2022}/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -0
  207. /package/{esm2020 → esm2022}/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -0
  208. /package/{esm2020 → esm2022}/plugins/list/transforms/move-list-item-up.mjs +0 -0
  209. /package/{esm2020 → esm2022}/plugins/list/transforms/unwrap-list.mjs +0 -0
  210. /package/{esm2020 → esm2022}/plugins/list/types.mjs +0 -0
  211. /package/{esm2020 → esm2022}/plugins/mark/mark.editor.mjs +0 -0
  212. /package/{esm2020 → esm2022}/plugins/mark/mark.plugin.mjs +0 -0
  213. /package/{esm2020 → esm2022}/plugins/mention/index.mjs +0 -0
  214. /package/{esm2020 → esm2022}/plugins/mention/mention.editor.mjs +0 -0
  215. /package/{esm2020 → esm2022}/plugins/mention/mention.plugin.mjs +0 -0
  216. /package/{esm2020 → esm2022}/plugins/mention/mention.type.mjs +0 -0
  217. /package/{esm2020 → esm2022}/plugins/node-id/node-id.plugin.mjs +0 -0
  218. /package/{esm2020 → esm2022}/plugins/normalizers/insert-paragraph-nodes.mjs +0 -0
  219. /package/{esm2020 → esm2022}/plugins/normalizers/remove-empty-nodes.mjs +0 -0
  220. /package/{esm2020 → esm2022}/plugins/normalizers/trailing-node.plugin.mjs +0 -0
  221. /package/{esm2020 → esm2022}/plugins/paint-format/paint-format.editor.mjs +0 -0
  222. /package/{esm2020 → esm2022}/plugins/public-api.mjs +0 -0
  223. /package/{esm2020 → esm2022}/plugins/quick-insert/quick-insert.editor.mjs +0 -0
  224. /package/{esm2020 → esm2022}/plugins/quick-insert/quick-insert.plugin.mjs +0 -0
  225. /package/{esm2020 → esm2022}/plugins/soft-break/soft-break.plugin.mjs +0 -0
  226. /package/{esm2020 → esm2022}/plugins/soft-break/soft-break.types.mjs +0 -0
  227. /package/{esm2020 → esm2022}/plugins/table/table.editor.mjs +0 -0
  228. /package/{esm2020 → esm2022}/plugins/table/table.plugin.mjs +0 -0
  229. /package/{esm2020 → esm2022}/plugins/table/table.types.mjs +0 -0
  230. /package/{esm2020 → esm2022}/plugins/table/transforms/clear-cell.mjs +0 -0
  231. /package/{esm2020 → esm2022}/plugins/table/transforms/clear-table-node.mjs +0 -0
  232. /package/{esm2020 → esm2022}/plugins/table/transforms/index.mjs +0 -0
  233. /package/{esm2020 → esm2022}/plugins/table/transforms/insert-column.mjs +0 -0
  234. /package/{esm2020 → esm2022}/plugins/table/transforms/insert-row.mjs +0 -0
  235. /package/{esm2020 → esm2022}/plugins/table/transforms/insert-table.mjs +0 -0
  236. /package/{esm2020 → esm2022}/plugins/table/transforms/remove-column.mjs +0 -0
  237. /package/{esm2020 → esm2022}/plugins/table/transforms/remove-row.mjs +0 -0
  238. /package/{esm2020 → esm2022}/plugins/table/transforms/remove-table.mjs +0 -0
  239. /package/{esm2020 → esm2022}/plugins/table/utils/add-columns.mjs +0 -0
  240. /package/{esm2020 → esm2022}/plugins/table/utils/calc-anchor-position.mjs +0 -0
  241. /package/{esm2020 → esm2022}/plugins/table/utils/calc-span.mjs +0 -0
  242. /package/{esm2020 → esm2022}/plugins/table/utils/calculate-table.mjs +0 -0
  243. /package/{esm2020 → esm2022}/plugins/table/utils/cell-position.mjs +0 -0
  244. /package/{esm2020 → esm2022}/plugins/table/utils/create-cell.mjs +0 -0
  245. /package/{esm2020 → esm2022}/plugins/table/utils/create-row.mjs +0 -0
  246. /package/{esm2020 → esm2022}/plugins/table/utils/create-table-position.mjs +0 -0
  247. /package/{esm2020 → esm2022}/plugins/table/utils/create-table.mjs +0 -0
  248. /package/{esm2020 → esm2022}/plugins/table/utils/get-grid-columns.mjs +0 -0
  249. /package/{esm2020 → esm2022}/plugins/table/utils/get-min-max-cell-index.mjs +0 -0
  250. /package/{esm2020 → esm2022}/plugins/table/utils/get-select-cell-node.mjs +0 -0
  251. /package/{esm2020 → esm2022}/plugins/table/utils/handle-cell.mjs +0 -0
  252. /package/{esm2020 → esm2022}/plugins/table/utils/index.mjs +0 -0
  253. /package/{esm2020 → esm2022}/plugins/table/utils/is-header-row.mjs +0 -0
  254. /package/{esm2020 → esm2022}/plugins/table/utils/is-legal-table.mjs +0 -0
  255. /package/{esm2020 → esm2022}/plugins/table/utils/is-range-in-table.mjs +0 -0
  256. /package/{esm2020 → esm2022}/plugins/table/utils/is-selection-in-table.mjs +0 -0
  257. /package/{esm2020 → esm2022}/plugins/table/utils/is-virtual-key.mjs +0 -0
  258. /package/{esm2020 → esm2022}/plugins/table/utils/merge-cell.mjs +0 -0
  259. /package/{esm2020 → esm2022}/plugins/table/utils/next-path.mjs +0 -0
  260. /package/{esm2020 → esm2022}/plugins/table/utils/normalize-table.mjs +0 -0
  261. /package/{esm2020 → esm2022}/plugins/table/utils/remove-columns.mjs +0 -0
  262. /package/{esm2020 → esm2022}/plugins/table/utils/remove-row-column.mjs +0 -0
  263. /package/{esm2020 → esm2022}/plugins/table/utils/set-cells-background-color.mjs +0 -0
  264. /package/{esm2020 → esm2022}/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -0
  265. /package/{esm2020 → esm2022}/plugins/table/utils/set-node-options.mjs +0 -0
  266. /package/{esm2020 → esm2022}/plugins/table/utils/split-cell.mjs +0 -0
  267. /package/{esm2020 → esm2022}/plugins/table/utils/table-entry.mjs +0 -0
  268. /package/{esm2020 → esm2022}/plugins/table/utils/table-position.mjs +0 -0
  269. /package/{esm2020 → esm2022}/plugins/todo-item/todo-item.editor.mjs +0 -0
  270. /package/{esm2020 → esm2022}/plugins/todo-item/todo-item.plugin.mjs +0 -0
  271. /package/{esm2020 → esm2022}/plugins/vertical-align/vertical-align.editor.mjs +0 -0
  272. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  273. /package/{esm2020 → esm2022}/queries/anchor-block-entry.mjs +0 -0
  274. /package/{esm2020 → esm2022}/queries/anchor-block.mjs +0 -0
  275. /package/{esm2020 → esm2022}/queries/anchor-inline-entry.mjs +0 -0
  276. /package/{esm2020 → esm2022}/queries/find-descendant.mjs +0 -0
  277. /package/{esm2020 → esm2022}/queries/find-node.mjs +0 -0
  278. /package/{esm2020 → esm2022}/queries/find-path.mjs +0 -0
  279. /package/{esm2020 → esm2022}/queries/get-above-by-type.mjs +0 -0
  280. /package/{esm2020 → esm2022}/queries/get-above.mjs +0 -0
  281. /package/{esm2020 → esm2022}/queries/get-anchor-block-entry.mjs +0 -0
  282. /package/{esm2020 → esm2022}/queries/get-block-above.mjs +0 -0
  283. /package/{esm2020 → esm2022}/queries/get-block-card-above.mjs +0 -0
  284. /package/{esm2020 → esm2022}/queries/get-block-card-cursor.mjs +0 -0
  285. /package/{esm2020 → esm2022}/queries/get-container-blocks.mjs +0 -0
  286. /package/{esm2020 → esm2022}/queries/get-directly-parent.mjs +0 -0
  287. /package/{esm2020 → esm2022}/queries/get-insert-elements-path.mjs +0 -0
  288. /package/{esm2020 → esm2022}/queries/get-last-child-path.mjs +0 -0
  289. /package/{esm2020 → esm2022}/queries/get-last-node.mjs +0 -0
  290. /package/{esm2020 → esm2022}/queries/get-next-sibling-nodes.mjs +0 -0
  291. /package/{esm2020 → esm2022}/queries/get-node.mjs +0 -0
  292. /package/{esm2020 → esm2022}/queries/get-nodes-by-type.mjs +0 -0
  293. /package/{esm2020 → esm2022}/queries/get-nodes.mjs +0 -0
  294. /package/{esm2020 → esm2022}/queries/get-parent.mjs +0 -0
  295. /package/{esm2020 → esm2022}/queries/get-plain-text.mjs +0 -0
  296. /package/{esm2020 → esm2022}/queries/get-plugin-by-toolbar.mjs +0 -0
  297. /package/{esm2020 → esm2022}/queries/get-point-before.mjs +0 -0
  298. /package/{esm2020 → esm2022}/queries/get-point-from-location.mjs +0 -0
  299. /package/{esm2020 → esm2022}/queries/get-previous-path.mjs +0 -0
  300. /package/{esm2020 → esm2022}/queries/get-rang-from-block-start.mjs +0 -0
  301. /package/{esm2020 → esm2022}/queries/get-range-before.mjs +0 -0
  302. /package/{esm2020 → esm2022}/queries/get-selection-marks.mjs +0 -0
  303. /package/{esm2020 → esm2022}/queries/get-selection-nodes-by-type.mjs +0 -0
  304. /package/{esm2020 → esm2022}/queries/get-text.mjs +0 -0
  305. /package/{esm2020 → esm2022}/queries/get-toolbar-disabled.mjs +0 -0
  306. /package/{esm2020 → esm2022}/queries/index.mjs +0 -0
  307. /package/{esm2020 → esm2022}/queries/is-across-blocks.mjs +0 -0
  308. /package/{esm2020 → esm2022}/queries/is-ancestor-empty.mjs +0 -0
  309. /package/{esm2020 → esm2022}/queries/is-ancestor.mjs +0 -0
  310. /package/{esm2020 → esm2022}/queries/is-block-above-empty.mjs +0 -0
  311. /package/{esm2020 → esm2022}/queries/is-block-active.mjs +0 -0
  312. /package/{esm2020 → esm2022}/queries/is-block-card-cursor.mjs +0 -0
  313. /package/{esm2020 → esm2022}/queries/is-block-text-empty-after-selection.mjs +0 -0
  314. /package/{esm2020 → esm2022}/queries/is-collapsed.mjs +0 -0
  315. /package/{esm2020 → esm2022}/queries/is-contain-nested-type.mjs +0 -0
  316. /package/{esm2020 → esm2022}/queries/is-container-type.mjs +0 -0
  317. /package/{esm2020 → esm2022}/queries/is-descendant.mjs +0 -0
  318. /package/{esm2020 → esm2022}/queries/is-empty-content-filter.mjs +0 -0
  319. /package/{esm2020 → esm2022}/queries/is-empty-content.mjs +0 -0
  320. /package/{esm2020 → esm2022}/queries/is-empty-paragraph-by-path.mjs +0 -0
  321. /package/{esm2020 → esm2022}/queries/is-empty-paragraph.mjs +0 -0
  322. /package/{esm2020 → esm2022}/queries/is-first-child.mjs +0 -0
  323. /package/{esm2020 → esm2022}/queries/is-global-collapsed.mjs +0 -0
  324. /package/{esm2020 → esm2022}/queries/is-include-types.mjs +0 -0
  325. /package/{esm2020 → esm2022}/queries/is-node-type-in.mjs +0 -0
  326. /package/{esm2020 → esm2022}/queries/is-node-type.mjs +0 -0
  327. /package/{esm2020 → esm2022}/queries/is-paragraph.mjs +0 -0
  328. /package/{esm2020 → esm2022}/queries/is-point-at-root.mjs +0 -0
  329. /package/{esm2020 → esm2022}/queries/is-range-across-blocks.mjs +0 -0
  330. /package/{esm2020 → esm2022}/queries/is-range-at-root.mjs +0 -0
  331. /package/{esm2020 → esm2022}/queries/is-start.mjs +0 -0
  332. /package/{esm2020 → esm2022}/queries/some-node.mjs +0 -0
  333. /package/{esm2020 → esm2022}/shortcuts/index.mjs +0 -0
  334. /package/{esm2020 → esm2022}/shortcuts/mark.mjs +0 -0
  335. /package/{esm2020 → esm2022}/test/index.mjs +0 -0
  336. /package/{esm2020 → esm2022}/test/utils/with-plugin.mjs +0 -0
  337. /package/{esm2020 → esm2022}/transforms/apply-deep-to-nodes.mjs +0 -0
  338. /package/{esm2020 → esm2022}/transforms/clear-marks.mjs +0 -0
  339. /package/{esm2020 → esm2022}/transforms/close-conversion-hint.mjs +0 -0
  340. /package/{esm2020 → esm2022}/transforms/delete-element.mjs +0 -0
  341. /package/{esm2020 → esm2022}/transforms/handle-continual-delete-backward.mjs +0 -0
  342. /package/{esm2020 → esm2022}/transforms/handle-continual-insert-break.mjs +0 -0
  343. /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
  344. /package/{esm2020 → esm2022}/transforms/insert-elements.mjs +0 -0
  345. /package/{esm2020 → esm2022}/transforms/insert-paragraph.mjs +0 -0
  346. /package/{esm2020 → esm2022}/transforms/merge-deep-to-nodes.mjs +0 -0
  347. /package/{esm2020 → esm2022}/transforms/move-children.mjs +0 -0
  348. /package/{esm2020 → esm2022}/transforms/set-end-selection.mjs +0 -0
  349. /package/{esm2020 → esm2022}/transforms/set-marks.mjs +0 -0
  350. /package/{esm2020 → esm2022}/transforms/set-node.mjs +0 -0
  351. /package/{esm2020 → esm2022}/transforms/un-hang-range.mjs +0 -0
  352. /package/{esm2020 → esm2022}/transforms/un-wrap.mjs +0 -0
  353. /package/{esm2020 → esm2022}/transforms/unwrap-nodes-by-type.mjs +0 -0
  354. /package/{esm2020 → esm2022}/utils/auto-focus.mjs +0 -0
  355. /package/{esm2020 → esm2022}/utils/blob.mjs +0 -0
  356. /package/{esm2020 → esm2022}/utils/cast-array.mjs +0 -0
  357. /package/{esm2020 → esm2022}/utils/color-picker.mjs +0 -0
  358. /package/{esm2020 → esm2022}/utils/common.mjs +0 -0
  359. /package/{esm2020 → esm2022}/utils/copy-node.mjs +0 -0
  360. /package/{esm2020 → esm2022}/utils/create-empty-paragraph.mjs +0 -0
  361. /package/{esm2020 → esm2022}/utils/data-transform.mjs +0 -0
  362. /package/{esm2020 → esm2022}/utils/dom.mjs +0 -0
  363. /package/{esm2020 → esm2022}/utils/editor-uuid.mjs +0 -0
  364. /package/{esm2020 → esm2022}/utils/fragment.mjs +0 -0
  365. /package/{esm2020 → esm2022}/utils/get-editable-element-height.mjs +0 -0
  366. /package/{esm2020 → esm2022}/utils/get-toolbar-class.mjs +0 -0
  367. /package/{esm2020 → esm2022}/utils/id-creator.mjs +0 -0
  368. /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
  369. /package/{esm2020 → esm2022}/utils/insert-data-by-invalid-type.mjs +0 -0
  370. /package/{esm2020 → esm2022}/utils/is-clean-empty-paragraph.mjs +0 -0
  371. /package/{esm2020 → esm2022}/utils/is-inline.mjs +0 -0
  372. /package/{esm2020 → esm2022}/utils/lodash.mjs +0 -0
  373. /package/{esm2020 → esm2022}/utils/match.mjs +0 -0
  374. /package/{esm2020 → esm2022}/utils/merge-element-options.mjs +0 -0
  375. /package/{esm2020 → esm2022}/utils/refocus.mjs +0 -0
  376. /package/{esm2020 → esm2022}/utils/scroll-into-view.mjs +0 -0
  377. /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
  378. /package/{esm2020 → esm2022}/worktile-theia.mjs +0 -0
@@ -17,15 +17,15 @@ export class TheHrComponent extends TheBaseElementComponent {
17
17
  }
18
18
  });
19
19
  }
20
- }
21
- TheHrComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheHrComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
22
- TheHrComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TheHrComponent, selector: "the-hr, [theHr]", usesInheritance: true, ngImport: i0, template: `
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TheHrComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: TheHrComponent, selector: "the-hr, [theHr]", usesInheritance: true, ngImport: i0, template: `
23
22
  <div class="the-hr" contenteditable="false" [ngClass]="{ active: isCollapsedAndNonReadonly }">
24
23
  <hr class="the-hr" />
25
24
  <slate-children [children]="children" [context]="childrenContext" [viewContext]="viewContext"></slate-children>
26
25
  </div>
27
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.SlateChildrenComponent, selector: "slate-children", inputs: ["children", "context", "viewContext"] }] });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TheHrComponent, decorators: [{
26
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.SlateChildren, selector: "slate-children", inputs: ["children", "context", "viewContext"] }] }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TheHrComponent, decorators: [{
29
29
  type: Component,
30
30
  args: [{
31
31
  selector: 'the-hr, [theHr]',
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
37
37
  `
38
38
  }]
39
39
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvaHIvaHIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBVzNELE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQXdDO0lBQ3hFLFlBQW1CLFVBQXNCLEVBQVMsR0FBc0I7UUFDcEUsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQURSLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUV4RSxDQUFDO0lBRUQsZUFBZTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDeEUsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzsyR0FaUSxjQUFjOytGQUFkLGNBQWMsOEVBUGI7Ozs7O0tBS1Q7MkZBRVEsY0FBYztrQkFUMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUU7Ozs7O0tBS1Q7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBUaGVCYXNlRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1ociwgW3RoZUhyXScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRoZS1oclwiIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgfVwiPlxuICAgICAgICAgICAgPGhyIGNsYXNzPVwidGhlLWhyXCIgLz5cbiAgICAgICAgICAgIDxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFRoZUhyQ29tcG9uZW50IGV4dGVuZHMgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQ8RWxlbWVudCwgRWRpdG9yPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3NsYXRlLWJsb2NrLWNhcmQnKTtcbiAgICAgICAgICAgIGlmIChibG9ja0NhcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYmxvY2tDYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBzbGF0ZS1ibG9jay1jYXJkLSR7dGhpcy5lbGVtZW50LnR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvaHIvaHIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBVzNELE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQXdDO0lBQ3hFLFlBQW1CLFVBQXNCLEVBQVMsR0FBc0I7UUFDcEUsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQURSLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUV4RSxDQUFDO0lBRUQsZUFBZTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDeEUsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDbEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQVpRLGNBQWM7a0dBQWQsY0FBYyw4RUFQYjs7Ozs7S0FLVDs7MkZBRVEsY0FBYztrQkFUMUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUU7Ozs7O0tBS1Q7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBUaGVCYXNlRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS1ociwgW3RoZUhyXScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRoZS1oclwiIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgfVwiPlxuICAgICAgICAgICAgPGhyIGNsYXNzPVwidGhlLWhyXCIgLz5cbiAgICAgICAgICAgIDxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFRoZUhyQ29tcG9uZW50IGV4dGVuZHMgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQ8RWxlbWVudCwgRWRpdG9yPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0NhcmRFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3NsYXRlLWJsb2NrLWNhcmQnKTtcbiAgICAgICAgICAgIGlmIChibG9ja0NhcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYmxvY2tDYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBzbGF0ZS1ibG9jay1jYXJkLSR7dGhpcy5lbGVtZW50LnR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,460 @@
1
+ import { Component, Inject, ViewChild } from '@angular/core';
2
+ import { ThyImageDirective } from 'ngx-tethys/image';
3
+ import { ThyUploadStatus } from 'ngx-tethys/upload';
4
+ import { map } from 'rxjs/operators';
5
+ import { Transforms } from 'slate';
6
+ import { AngularEditor } from 'slate-angular';
7
+ import { HistoryEditor } from 'slate-history';
8
+ import { Alignment, ElementKinds, LayoutTypes, ToolbarActionTypes } from '../../constants/node-types';
9
+ import { getPluginOptions } from '../../core/utils';
10
+ import { PluginKeys, THE_MODE_TOKEN, TheBaseElementComponent, TheMode } from '../../interfaces';
11
+ import { THE_UPLOAD_SERVICE_TOKEN } from '../../interfaces/image';
12
+ import * as TheQueries from '../../queries';
13
+ import * as TheTransforms from '../../transforms';
14
+ import { ImageEditor } from './image.editor';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "../../services/context.service";
17
+ import * as i2 from "ngx-tethys/popover";
18
+ import * as i3 from "@angular/cdk/overlay";
19
+ import * as i4 from "ngx-tethys/image";
20
+ import * as i5 from "@angular/common";
21
+ import * as i6 from "slate-angular";
22
+ import * as i7 from "ngx-tethys/icon";
23
+ import * as i8 from "ngx-tethys/tooltip";
24
+ import * as i9 from "ngx-tethys/progress";
25
+ import * as i10 from "ngx-tethys/action";
26
+ import * as i11 from "ngx-tethys/divider";
27
+ import * as i12 from "../../interfaces";
28
+ export class TheImageComponent extends TheBaseElementComponent {
29
+ get isOpen() {
30
+ return this.layoutToolbarRef && this.layoutToolbarRef.getOverlayRef() && this.layoutToolbarRef.getOverlayRef().hasAttached();
31
+ }
32
+ get imageBindingWidth() {
33
+ const currentWidth = this.imageEntry?.width || this.naturalWidth;
34
+ return this.imageEntry?.layout && currentWidth > this.layoutDefaultWidth && !this.imageEntry?.reSized
35
+ ? this.layoutDefaultWidth
36
+ : this.imageEntry.width;
37
+ }
38
+ constructor(elementRef, imageUploaderService, config, cdr, theContextService, thyPopover, overlay, viewContainerRef, imageGroupComponent) {
39
+ super(elementRef, cdr);
40
+ this.elementRef = elementRef;
41
+ this.imageUploaderService = imageUploaderService;
42
+ this.config = config;
43
+ this.cdr = cdr;
44
+ this.theContextService = theContextService;
45
+ this.thyPopover = thyPopover;
46
+ this.overlay = overlay;
47
+ this.viewContainerRef = viewContainerRef;
48
+ this.imageGroupComponent = imageGroupComponent;
49
+ this.naturalWidth = 0;
50
+ this.naturalHeight = 0;
51
+ this.imageEntry = {};
52
+ this.uploading = false;
53
+ this.percentage = 0;
54
+ this.layoutDefaultWidth = 368;
55
+ this.disablePreview = false;
56
+ this.loadImageError = false;
57
+ this.layoutOptions = [
58
+ {
59
+ key: Alignment.left,
60
+ icon: 'image-left',
61
+ name: '左对齐',
62
+ handle: (e, key) => this.setImageNode(e, { align: key, layout: undefined })
63
+ },
64
+ {
65
+ key: Alignment.center,
66
+ icon: 'image-center',
67
+ name: '居中',
68
+ handle: (e, key) => this.setImageNode(e, { align: key, layout: undefined })
69
+ },
70
+ {
71
+ key: Alignment.right,
72
+ icon: 'image-right',
73
+ name: '右对齐',
74
+ handle: (e, key) => this.setImageNode(e, { align: key, layout: undefined })
75
+ },
76
+ {
77
+ key: ToolbarActionTypes.split
78
+ },
79
+ {
80
+ key: LayoutTypes.wrapLeft,
81
+ icon: 'wrap-left',
82
+ name: '图片居左',
83
+ handle: (e, key) => this.setImageNode(e, { layout: key })
84
+ },
85
+ {
86
+ key: LayoutTypes.wrapRight,
87
+ icon: 'wrap-right',
88
+ name: '图片居右',
89
+ handle: (e, key) => this.setImageNode(e, { layout: key })
90
+ },
91
+ {
92
+ key: 'remove',
93
+ icon: 'trash',
94
+ name: '删除',
95
+ handle: (e) => this.onDelete(e)
96
+ }
97
+ ];
98
+ this.dragable = false;
99
+ this.beforeContextChange = (value) => {
100
+ if (value.element !== this.element && value.element.thumbUrl) {
101
+ const externalSource = value.element?.externalSource;
102
+ let thumbUrl = value.element.thumbUrl;
103
+ let originUrl = value.element.originUrl;
104
+ if (!externalSource && this.imageUploaderService?.buildImageUrl) {
105
+ thumbUrl = this.imageUploaderService.buildImageUrl(thumbUrl);
106
+ originUrl = this.imageUploaderService.buildImageUrl(originUrl);
107
+ }
108
+ this.imageEntry = {
109
+ name: value.element.name,
110
+ width: value.element.width,
111
+ height: value.element.height,
112
+ align: value.element.align || Alignment.left,
113
+ layout: value.element.layout,
114
+ reSized: value.element.reSized || false,
115
+ size: value.element.size,
116
+ thumbUrl,
117
+ originUrl
118
+ };
119
+ this.setBlockCardLayoutAttr();
120
+ }
121
+ };
122
+ }
123
+ ngOnInit() {
124
+ this.fileItem = this.theContextService.uploadingFiles.find(item => item.url === this.element.url);
125
+ if (this.fileItem?.file && this.fileItem.file instanceof File) {
126
+ this.uploadImage(this.fileItem.file);
127
+ }
128
+ super.ngOnInit();
129
+ this.imagePluginOptions = getPluginOptions(this.editor, PluginKeys.image);
130
+ if (this.imagePluginOptions.disablePreview && typeof this.imagePluginOptions.disablePreview === 'function') {
131
+ this.disablePreview = this.imagePluginOptions.disablePreview(this.editor);
132
+ }
133
+ else {
134
+ this.disablePreview = this.imagePluginOptions.disablePreview;
135
+ }
136
+ }
137
+ imageClick() {
138
+ const index = this.imageGroupComponent.images.findIndex(item => item === this.imageDirective);
139
+ const imageGroup = this.imageGroupComponent.images.map(item => {
140
+ return {
141
+ originUrl: item.thyOriginSrc,
142
+ thumbUrl: item.thyPreviewSrc,
143
+ name: item.thyImageMeta.name,
144
+ size: item.thyImageMeta.size
145
+ };
146
+ });
147
+ const { originUrl, thumbUrl, name, size } = this.element;
148
+ if (this.imagePluginOptions.preview) {
149
+ this.imagePluginOptions.preview({
150
+ editor: this.editor,
151
+ previewImageInfo: {
152
+ image: {
153
+ originUrl,
154
+ thumbUrl,
155
+ name,
156
+ size
157
+ },
158
+ imageGroup,
159
+ index
160
+ }
161
+ });
162
+ }
163
+ }
164
+ onContextChange() {
165
+ super.onContextChange();
166
+ if (this.initialized) {
167
+ if (this.isShouldOpen()) {
168
+ this.openLayoutToolbar();
169
+ }
170
+ if (this.isShouldClose()) {
171
+ this.closeLayoutToolbar();
172
+ }
173
+ }
174
+ }
175
+ ngOnDestroy() {
176
+ this.uploadingSubscription.unsubscribe();
177
+ this.mouseUpSubscription.unsubscribe();
178
+ this.theContextService.removeUploadFile(this.fileItem);
179
+ if (this.uploading) {
180
+ this.theContextService.uploadingStatus$.next(false);
181
+ }
182
+ super.ngOnDestroy();
183
+ }
184
+ ngAfterViewInit() {
185
+ this.mouseUpSubscription = this.theContextService.onMouseUp$.subscribe(e => this.endDrag(e));
186
+ this.uploadingSubscription = this.imageUploaderService
187
+ .getUploadingItems$()
188
+ .pipe(map(fileUploadingItem => this.fileItem?.file && fileUploadingItem.find(item => item.file === this.fileItem?.file)))
189
+ .subscribe(uploadingItem => {
190
+ if (!uploadingItem || !uploadingItem.result) {
191
+ return;
192
+ }
193
+ this.percentage = uploadingItem.result.uploadFile.progress.percentage;
194
+ const { status } = uploadingItem.result;
195
+ // 成功和失败都要上传结束
196
+ if (status === ThyUploadStatus.done) {
197
+ this.uploadingSubscription.unsubscribe();
198
+ this.uploading = false;
199
+ this.theContextService.removeUploadFile(this.fileItem);
200
+ setTimeout(() => this.theContextService.uploadingStatus$.next(false), 0);
201
+ }
202
+ this.cdr.detectChanges();
203
+ });
204
+ }
205
+ setImageNodes(imageInfo) {
206
+ const path = AngularEditor.findPath(this.editor, this.element);
207
+ const data = { type: ElementKinds.image, url: null, ...imageInfo };
208
+ HistoryEditor.withoutSaving(this.editor, () => Transforms.setNodes(this.editor, data, { at: path }));
209
+ }
210
+ async uploadImage(file) {
211
+ this.imageEntry = {
212
+ align: this.imageEntry.align || Alignment.center,
213
+ thumbUrl: URL.createObjectURL(file)
214
+ };
215
+ this.uploading = true;
216
+ this.theContextService.uploadingStatus$.next(true);
217
+ const [uploadFileEntity] = await this.imageUploaderService.uploadFileHandle([file]).toPromise();
218
+ const { thumbUrl, originUrl } = uploadFileEntity;
219
+ const imageInfo = {
220
+ name: file.name,
221
+ thumbUrl,
222
+ originUrl,
223
+ align: this.imageEntry.align || Alignment.center,
224
+ size: file.size
225
+ };
226
+ this.setImageNodes(imageInfo);
227
+ }
228
+ startDrag(event, axis) {
229
+ if (this.loadImageError || !this.img) {
230
+ return;
231
+ }
232
+ event.preventDefault();
233
+ this.dragable = true;
234
+ const imgElement = this.img.nativeElement;
235
+ const options = {
236
+ axis,
237
+ printerPositionX: event.pageX,
238
+ printerPositionY: event.pageY,
239
+ internalWidth: imgElement.width || this.imageEntry.width,
240
+ internalHeight: imgElement.height || this.imageEntry.height,
241
+ maxWidth: this.theContextService.getFirstElementChild().clientWidth
242
+ };
243
+ this.mouseMoveSubscription = this.theContextService.onMouseMove$.subscribe(e => this.mouseMoveHandle(e, options));
244
+ }
245
+ mouseMoveHandle(event, options) {
246
+ if (this.dragable) {
247
+ const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;
248
+ const isReversal = axis.includes('-');
249
+ let offsetX = event.pageX - printerPositionX;
250
+ let offsetY = event.pageY - printerPositionY;
251
+ let { width, height } = this.element;
252
+ if (isReversal) {
253
+ offsetX = -offsetX;
254
+ offsetY = -offsetY;
255
+ }
256
+ if (this.element.align === 'center') {
257
+ offsetX = offsetX * 2;
258
+ }
259
+ if (axis.includes('x')) {
260
+ width = offsetX + internalWidth;
261
+ if (width >= maxWidth) {
262
+ width = maxWidth;
263
+ // clear `layout` when the image is adjusted to the maximum value under rich media
264
+ if (this.imageEntry?.layout) {
265
+ const path = TheQueries.findPath(this.editor, this.element);
266
+ ImageEditor.setImageNode(this.editor, path, { layout: undefined });
267
+ }
268
+ }
269
+ if (width <= 100) {
270
+ width = 100;
271
+ }
272
+ if (axis.includes('l')) {
273
+ const ratio = internalWidth / width;
274
+ height = internalHeight / ratio;
275
+ }
276
+ }
277
+ else if (axis.includes('y')) {
278
+ height = offsetY + internalHeight;
279
+ if (height >= 1000) {
280
+ height = 1000;
281
+ }
282
+ if (height <= 100) {
283
+ height = 100;
284
+ }
285
+ if (axis.includes('l')) {
286
+ const ratio = internalHeight / height;
287
+ width = internalWidth / ratio;
288
+ }
289
+ }
290
+ if (!this.imageEntry.reSized && this.imageEntry.width !== width) {
291
+ this.imageEntry.reSized = true;
292
+ }
293
+ this.img.nativeElement.style.width = width + 'px';
294
+ this.imageEntry.width = width;
295
+ this.imageEntry.height = height;
296
+ }
297
+ }
298
+ endDrag(event) {
299
+ if (this.dragable) {
300
+ this.dragable = false;
301
+ this.mouseMoveSubscription.unsubscribe();
302
+ if (this.imageEntry.width === this.theContextService.getOptions().width &&
303
+ this.imageEntry.width <= this.naturalWidth &&
304
+ this.element.width) {
305
+ this.imageEntry.width = null;
306
+ this.imageEntry.height = null;
307
+ }
308
+ Transforms.setNodes(this.editor, {
309
+ type: ElementKinds.image,
310
+ ...this.imageEntry
311
+ }, { at: this.selection });
312
+ }
313
+ }
314
+ cancelUpload(event) {
315
+ Transforms.removeNodes(this.editor, { at: this.selection });
316
+ }
317
+ isShouldOpen() {
318
+ const { theOptions: { richMedia } } = this.theContextService.getOptions();
319
+ return (!this?.readonly &&
320
+ richMedia &&
321
+ this.isCollapsedAndNonReadonly &&
322
+ TheQueries.isGlobalCollapsed(this.editor) &&
323
+ !this.uploading &&
324
+ !this.isOpen);
325
+ }
326
+ isShouldClose() {
327
+ return (this.isOpen &&
328
+ (this?.readonly || !this.isCollapsedAndNonReadonly || !TheQueries.isGlobalCollapsed(this.editor) || this.uploading));
329
+ }
330
+ openLayoutToolbar() {
331
+ if (!this.img) {
332
+ return;
333
+ }
334
+ this.layoutToolbarRef = this.thyPopover.open(this.layoutToolbar, {
335
+ origin: this.imageContent,
336
+ panelClass: 'the-plugin-toolbar-popover',
337
+ insideClosable: false,
338
+ backdropClosable: true,
339
+ hasBackdrop: false,
340
+ minWidth: 0,
341
+ viewContainerRef: this.viewContainerRef,
342
+ scrollStrategy: this.overlay.scrollStrategies.reposition()
343
+ });
344
+ this.layoutToolbarRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());
345
+ setTimeout(() => {
346
+ this.layoutToolbarRef?.getOverlayRef().updatePosition();
347
+ }, 150);
348
+ }
349
+ closeLayoutToolbar() {
350
+ this.layoutToolbarRef?.close();
351
+ }
352
+ layoutActive(key) {
353
+ const { layout, align } = this.imageEntry;
354
+ return key && ((key === align && !layout) || key === layout);
355
+ }
356
+ setImageNode(e, partial) {
357
+ e.preventDefault();
358
+ const path = TheQueries.findPath(this.editor, this.element);
359
+ ImageEditor.setImageNode(this.editor, path, partial);
360
+ }
361
+ setBlockCardLayoutAttr() {
362
+ Promise.resolve().then(() => {
363
+ const currentElement = AngularEditor.toDOMNode(this.editor, this.element);
364
+ const blockCard = currentElement.closest('.slate-block-card');
365
+ const { layout } = this.element;
366
+ if (blockCard && layout) {
367
+ blockCard.setAttribute('layout', layout);
368
+ }
369
+ else if (blockCard && !layout) {
370
+ blockCard.removeAttribute('layout');
371
+ }
372
+ this.layoutToolbarRef?.getOverlayRef().updatePosition();
373
+ });
374
+ }
375
+ onDelete(event) {
376
+ event.preventDefault();
377
+ TheTransforms.deleteElement(this.editor, this.element);
378
+ }
379
+ createPositionStrategy() {
380
+ const bottomPosition = {
381
+ originX: 'center',
382
+ originY: 'bottom',
383
+ overlayX: 'center',
384
+ overlayY: 'top',
385
+ offsetX: 0,
386
+ offsetY: 4
387
+ };
388
+ return this.overlay
389
+ .position()
390
+ .flexibleConnectedTo(this.imageContent)
391
+ .withFlexibleDimensions(false)
392
+ .withGrowAfterOpen(false)
393
+ .withPush(false)
394
+ .withPositions([bottomPosition]);
395
+ }
396
+ imageLoaded(event) {
397
+ const img = event.target;
398
+ this.naturalWidth = img.naturalWidth;
399
+ this.naturalHeight = img.naturalHeight;
400
+ if (this.config.mode === TheMode.print) {
401
+ this.setImageSize();
402
+ }
403
+ }
404
+ setImageSize() {
405
+ if (!this.img) {
406
+ return;
407
+ }
408
+ const imageContainer = this.img?.nativeElement?.closest('.image-container');
409
+ const imageContainerRect = imageContainer?.getBoundingClientRect();
410
+ const currentWidth = this.element?.width || this.naturalWidth;
411
+ const currentHeight = this.imageEntry?.height || this.naturalHeight;
412
+ const ratio = currentHeight / currentWidth;
413
+ const width = imageContainerRect?.width;
414
+ const height = ratio * imageContainerRect?.width;
415
+ this.img.nativeElement.style.width = width + 'px';
416
+ this.img.nativeElement.style.height = height + 'px';
417
+ }
418
+ imageError(event) {
419
+ const img = event.target;
420
+ const errorImageUrl = this.imagePluginOptions?.errorImageUrl;
421
+ if (errorImageUrl) {
422
+ const url = typeof errorImageUrl === 'function' ? errorImageUrl(this.editor) : errorImageUrl;
423
+ this.loadImageError = true;
424
+ this.disablePreview = true;
425
+ this.imageContent.nativeElement.classList.add('the-image-error');
426
+ img.src = url;
427
+ }
428
+ img.onerror = null;
429
+ }
430
+ // 组件库 dialog 弹出时,会记录当前的焦点。阻止 mousedown 默认行为,使得图片原本的 click 事件能获取到正确的焦点。
431
+ preventDefault(event) {
432
+ event.preventDefault();
433
+ event.stopPropagation();
434
+ }
435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TheImageComponent, deps: [{ token: i0.ElementRef }, { token: THE_UPLOAD_SERVICE_TOKEN }, { token: THE_MODE_TOKEN }, { token: i0.ChangeDetectorRef }, { token: i1.TheContextService }, { token: i2.ThyPopover }, { token: i3.Overlay }, { token: i0.ViewContainerRef }, { token: i4.ThyImageGroupComponent }], target: i0.ɵɵFactoryTarget.Component }); }
436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: TheImageComponent, selector: "the-image, [theImage]", viewQueries: [{ propertyName: "imageContent", first: true, predicate: ["imageContent"], descendants: true }, { propertyName: "img", first: true, predicate: ["img"], descendants: true }, { propertyName: "layoutToolbar", first: true, predicate: ["layoutToolbar"], descendants: true, static: true }, { propertyName: "imageDirective", first: true, predicate: ThyImageDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<div class=\"image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align\">\n <div #imageContent *ngIf=\"imageEntry.thumbUrl\" class=\"image-content\" [class.cursor-pointer]=\"!selection\">\n <img\n #img\n thyImage\n class=\"main-image\"\n [class.image-collapsed]=\"selection && !uploading\"\n [ngStyle]=\"{ 'width.px': imageBindingWidth }\"\n [alt]=\"imageEntry.name\"\n [thySrc]=\"imageEntry.thumbUrl\"\n [thyPreviewSrc]=\"imageEntry.thumbUrl\"\n [thyOriginSrc]=\"imageEntry.originUrl\"\n [thyDisablePreview]=\"disablePreview\"\n [thyImageMeta]=\"{ name: imageEntry.name, size: imageEntry.size }\"\n (load)=\"imageLoaded($event)\"\n (mousedown)=\"preventDefault($event)\"\n (error)=\"imageError($event)\"\n (click)=\"imageClick($event)\"\n />\n <div *ngIf=\"isCollapsedAndNonReadonly\" class=\"image-profile\" [class.outline]=\"selection\">\n <ng-container *ngIf=\"!loadImageError\">\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n </ng-container>\n </div>\n <div *ngIf=\"uploading\" class=\"uploading\">\n <div class=\"uploading-percentage\">\n <thy-progress thyType=\"primary\" [thyValue]=\"percentage\" thySize=\"sm\"></thy-progress>\n <thy-icon (click)=\"cancelUpload($event)\" thyIconName=\"close-circle-bold-fill\" thyIconLegging=\"true\"> </thy-icon>\n </div>\n </div>\n <div *ngIf=\"!uploading\" class=\"layer\" [class.readonly]=\"readonly\"></div>\n </div>\n <div *ngIf=\"!imageEntry.thumbUrl\" class=\"image-loading cursor-pointer\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n</div>\n\n<ng-template #layoutToolbar>\n <thy-actions thySize=\"xxs\">\n <ng-container *ngFor=\"let item of layoutOptions\">\n <a\n *ngIf=\"item.key !== 'split'\"\n href=\"javascript:;\"\n thyAction\n [thyType]=\"item.key === 'remove' ? 'danger' : 'primary'\"\n [thyActionIcon]=\"item.icon\"\n [thyActionActive]=\"layoutActive(item.key)\"\n [thyTooltip]=\"item.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"item?.handle($event, item.key)\"\n ></a>\n <thy-divider *ngIf=\"item.key === 'split'\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n </ng-container>\n </thy-actions>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SlateChildren, selector: "slate-children", inputs: ["children", "context", "viewContext"] }, { kind: "component", type: i7.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i8.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: i9.ThyProgressComponent, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "directive", type: i4.ThyImageDirective, selector: "img[thyImage]", inputs: ["thySrc", "thyPreviewSrc", "thyOriginSrc", "thyImageMeta", "thyDisablePreview", "thyResolveSize"], exportAs: ["thyImage"] }, { kind: "component", type: i10.ThyActionComponent, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: i10.ThyActionsComponent, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: i11.ThyDividerComponent, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }] }); }
437
+ }
438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TheImageComponent, decorators: [{
439
+ type: Component,
440
+ args: [{ selector: 'the-image, [theImage]', template: "<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<div class=\"image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align\">\n <div #imageContent *ngIf=\"imageEntry.thumbUrl\" class=\"image-content\" [class.cursor-pointer]=\"!selection\">\n <img\n #img\n thyImage\n class=\"main-image\"\n [class.image-collapsed]=\"selection && !uploading\"\n [ngStyle]=\"{ 'width.px': imageBindingWidth }\"\n [alt]=\"imageEntry.name\"\n [thySrc]=\"imageEntry.thumbUrl\"\n [thyPreviewSrc]=\"imageEntry.thumbUrl\"\n [thyOriginSrc]=\"imageEntry.originUrl\"\n [thyDisablePreview]=\"disablePreview\"\n [thyImageMeta]=\"{ name: imageEntry.name, size: imageEntry.size }\"\n (load)=\"imageLoaded($event)\"\n (mousedown)=\"preventDefault($event)\"\n (error)=\"imageError($event)\"\n (click)=\"imageClick($event)\"\n />\n <div *ngIf=\"isCollapsedAndNonReadonly\" class=\"image-profile\" [class.outline]=\"selection\">\n <ng-container *ngIf=\"!loadImageError\">\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n </ng-container>\n </div>\n <div *ngIf=\"uploading\" class=\"uploading\">\n <div class=\"uploading-percentage\">\n <thy-progress thyType=\"primary\" [thyValue]=\"percentage\" thySize=\"sm\"></thy-progress>\n <thy-icon (click)=\"cancelUpload($event)\" thyIconName=\"close-circle-bold-fill\" thyIconLegging=\"true\"> </thy-icon>\n </div>\n </div>\n <div *ngIf=\"!uploading\" class=\"layer\" [class.readonly]=\"readonly\"></div>\n </div>\n <div *ngIf=\"!imageEntry.thumbUrl\" class=\"image-loading cursor-pointer\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n</div>\n\n<ng-template #layoutToolbar>\n <thy-actions thySize=\"xxs\">\n <ng-container *ngFor=\"let item of layoutOptions\">\n <a\n *ngIf=\"item.key !== 'split'\"\n href=\"javascript:;\"\n thyAction\n [thyType]=\"item.key === 'remove' ? 'danger' : 'primary'\"\n [thyActionIcon]=\"item.icon\"\n [thyActionActive]=\"layoutActive(item.key)\"\n [thyTooltip]=\"item.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"item?.handle($event, item.key)\"\n ></a>\n <thy-divider *ngIf=\"item.key === 'split'\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n </ng-container>\n </thy-actions>\n</ng-template>\n" }]
441
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
442
+ type: Inject,
443
+ args: [THE_UPLOAD_SERVICE_TOKEN]
444
+ }] }, { type: i12.TheModeConfig, decorators: [{
445
+ type: Inject,
446
+ args: [THE_MODE_TOKEN]
447
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.TheContextService }, { type: i2.ThyPopover }, { type: i3.Overlay }, { type: i0.ViewContainerRef }, { type: i4.ThyImageGroupComponent }]; }, propDecorators: { imageContent: [{
448
+ type: ViewChild,
449
+ args: ['imageContent']
450
+ }], img: [{
451
+ type: ViewChild,
452
+ args: ['img', { static: false }]
453
+ }], layoutToolbar: [{
454
+ type: ViewChild,
455
+ args: ['layoutToolbar', { static: true }]
456
+ }], imageDirective: [{
457
+ type: ViewChild,
458
+ args: [ThyImageDirective]
459
+ }] } });
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvaW1hZ2UvaW1hZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvaW1hZ2UvaW1hZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFFVCxNQUFNLEVBSU4sU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSxrQkFBa0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBNEMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFDL0csT0FBTyxFQUtILHdCQUF3QixFQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sS0FBSyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7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SUFDdkIsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxjQUFjLENBQUMsS0FBWTtRQUN2QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBdGZRLGlCQUFpQiw0Q0FvR2Qsd0JBQXdCLGFBRXhCLGNBQWM7a0dBdEdqQixpQkFBaUIsd1lBZ0dmLGlCQUFpQix1RUM1SWhDLHd6RkE0REE7OzJGRGhCYSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0ksdUJBQXVCOzswQkF1RzVCLE1BQU07MkJBQUMsd0JBQXdCOzswQkFFL0IsTUFBTTsyQkFBQyxjQUFjOytOQWQxQixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFJekIsR0FBRztzQkFERixTQUFTO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSW5DLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdkLGNBQWM7c0JBQTNDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlJbWFnZURpcmVjdGl2ZSwgVGh5SW1hZ2VHcm91cENvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvaW1hZ2UnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlciwgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBUaHlVcGxvYWRTdGF0dXMgfSBmcm9tICduZ3gtdGV0aHlzL3VwbG9hZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzL2ludGVybmFsL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3IsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBCZWZvcmVDb250ZXh0Q2hhbmdlLCBTbGF0ZUVsZW1lbnRDb250ZXh0IH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBIaXN0b3J5RWRpdG9yIH0gZnJvbSAnc2xhdGUtaGlzdG9yeSc7XG5pbXBvcnQgeyBBbGlnbm1lbnQsIEVsZW1lbnRLaW5kcywgTGF5b3V0VHlwZXMsIFRvb2xiYXJBY3Rpb25UeXBlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXR5cGVzJztcbmltcG9ydCB7IGdldFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEltYWdlRWxlbWVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBQbHVnaW5LZXlzLCBUSEVfTU9ERV9UT0tFTiwgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQsIFRoZU1vZGUsIFRoZU1vZGVDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgSW1hZ2VFbnRyeSxcbiAgICBJbWFnZUluZm8sXG4gICAgSW1hZ2VQbHVnaW5PcHRpb25zLFxuICAgIExheW91dE9wdGlvbixcbiAgICBUSEVfVVBMT0FEX1NFUlZJQ0VfVE9LRU4sXG4gICAgVGhlSW1hZ2VVcGxvYWRlclNlcnZpY2Vcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbWFnZSc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgVGhlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IEltYWdlRWRpdG9yIH0gZnJvbSAnLi9pbWFnZS5lZGl0b3InO1xuXG5kZWNsYXJlIGNvbnN0ICQ6IGFueTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtaW1hZ2UsIFt0aGVJbWFnZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGhlSW1hZ2VDb21wb25lbnRcbiAgICBleHRlbmRzIFRoZUJhc2VFbGVtZW50Q29tcG9uZW50PEltYWdlRWxlbWVudCwgRWRpdG9yPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEJlZm9yZUNvbnRleHRDaGFuZ2U8U2xhdGVFbGVtZW50Q29udGV4dD5cbntcbiAgICBuYXR1cmFsV2lkdGggPSAwO1xuXG4gICAgbmF0dXJhbEhlaWdodCA9IDA7XG5cbiAgICBpbWFnZUVudHJ5OiBJbWFnZUVudHJ5ID0ge307XG5cbiAgICB1cGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHBlcmNlbnRhZ2UgPSAwO1xuXG4gICAgZmlsZUl0ZW06IHsgdXJsOiBzdHJpbmc7IGZpbGU6IEZpbGUgfTtcblxuICAgIGxheW91dERlZmF1bHRXaWR0aCA9IDM2ODtcblxuICAgIGRpc2FibGVQcmV2aWV3ID0gZmFsc2U7XG5cbiAgICBsb2FkSW1hZ2VFcnJvciA9IGZhbHNlO1xuXG4gICAgbGF5b3V0T3B0aW9uczogTGF5b3V0T3B0aW9uW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogQWxpZ25tZW50LmxlZnQsXG4gICAgICAgICAgICBpY29uOiAnaW1hZ2UtbGVmdCcsXG4gICAgICAgICAgICBuYW1lOiAn5bem5a+56b2QJyxcbiAgICAgICAgICAgIGhhbmRsZTogKGU6IE1vdXNlRXZlbnQsIGtleTogQWxpZ25tZW50KSA9PiB0aGlzLnNldEltYWdlTm9kZShlLCB7IGFsaWduOiBrZXksIGxheW91dDogdW5kZWZpbmVkIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogQWxpZ25tZW50LmNlbnRlcixcbiAgICAgICAgICAgIGljb246ICdpbWFnZS1jZW50ZXInLFxuICAgICAgICAgICAgbmFtZTogJ+WxheS4rScsXG4gICAgICAgICAgICBoYW5kbGU6IChlOiBNb3VzZUV2ZW50LCBrZXk6IEFsaWdubWVudCkgPT4gdGhpcy5zZXRJbWFnZU5vZGUoZSwgeyBhbGlnbjoga2V5LCBsYXlvdXQ6IHVuZGVmaW5lZCB9KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEFsaWdubWVudC5yaWdodCxcbiAgICAgICAgICAgIGljb246ICdpbWFnZS1yaWdodCcsXG4gICAgICAgICAgICBuYW1lOiAn5Y+z5a+56b2QJyxcbiAgICAgICAgICAgIGhhbmRsZTogKGU6IE1vdXNlRXZlbnQsIGtleTogQWxpZ25tZW50KSA9PiB0aGlzLnNldEltYWdlTm9kZShlLCB7IGFsaWduOiBrZXksIGxheW91dDogdW5kZWZpbmVkIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogVG9vbGJhckFjdGlvblR5cGVzLnNwbGl0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogTGF5b3V0VHlwZXMud3JhcExlZnQsXG4gICAgICAgICAgICBpY29uOiAnd3JhcC1sZWZ0JyxcbiAgICAgICAgICAgIG5hbWU6ICflm77niYflsYXlt6YnLFxuICAgICAgICAgICAgaGFuZGxlOiAoZTogTW91c2VFdmVudCwga2V5OiBMYXlvdXRUeXBlcykgPT4gdGhpcy5zZXRJbWFnZU5vZGUoZSwgeyBsYXlvdXQ6IGtleSB9KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IExheW91dFR5cGVzLndyYXBSaWdodCxcbiAgICAgICAgICAgIGljb246ICd3cmFwLXJpZ2h0JyxcbiAgICAgICAgICAgIG5hbWU6ICflm77niYflsYXlj7MnLFxuICAgICAgICAgICAgaGFuZGxlOiAoZTogTW91c2VFdmVudCwga2V5OiBMYXlvdXRUeXBlcykgPT4gdGhpcy5zZXRJbWFnZU5vZGUoZSwgeyBsYXlvdXQ6IGtleSB9KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdyZW1vdmUnLFxuICAgICAgICAgICAgaWNvbjogJ3RyYXNoJyxcbiAgICAgICAgICAgIG5hbWU6ICfliKDpmaQnLFxuICAgICAgICAgICAgaGFuZGxlOiAoZTogTW91c2VFdmVudCkgPT4gdGhpcy5vbkRlbGV0ZShlKVxuICAgICAgICB9XG4gICAgXTtcblxuICAgIHByaXZhdGUgdXBsb2FkaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIG1vdXNlTW92ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHJpdmF0ZSBtb3VzZVVwU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIGRyYWdhYmxlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGxheW91dFRvb2xiYXJSZWY6IFRoeVBvcG92ZXJSZWY8YW55PjtcblxuICAgIHByaXZhdGUgaW1hZ2VQbHVnaW5PcHRpb25zOiBJbWFnZVBsdWdpbk9wdGlvbnM7XG5cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRUb29sYmFyUmVmICYmIHRoaXMubGF5b3V0VG9vbGJhclJlZi5nZXRPdmVybGF5UmVmKCkgJiYgdGhpcy5sYXlvdXRUb29sYmFyUmVmLmdldE92ZXJsYXlSZWYoKS5oYXNBdHRhY2hlZCgpO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUJpbmRpbmdXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gdGhpcy5pbWFnZUVudHJ5Py53aWR0aCB8fCB0aGlzLm5hdHVyYWxXaWR0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VFbnRyeT8ubGF5b3V0ICYmIGN1cnJlbnRXaWR0aCA+IHRoaXMubGF5b3V0RGVmYXVsdFdpZHRoICYmICF0aGlzLmltYWdlRW50cnk/LnJlU2l6ZWRcbiAgICAgICAgICAgID8gdGhpcy5sYXlvdXREZWZhdWx0V2lkdGhcbiAgICAgICAgICAgIDogdGhpcy5pbWFnZUVudHJ5LndpZHRoO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlQ29udGVudCcpXG4gICAgaW1hZ2VDb250ZW50OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnaW1nJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgaW1nOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnbGF5b3V0VG9vbGJhcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgbGF5b3V0VG9vbGJhcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoVGh5SW1hZ2VEaXJlY3RpdmUpIGltYWdlRGlyZWN0aXZlOiBUaHlJbWFnZURpcmVjdGl2ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQEluamVjdChUSEVfVVBMT0FEX1NFUlZJQ0VfVE9LRU4pXG4gICAgICAgIHByaXZhdGUgaW1hZ2VVcGxvYWRlclNlcnZpY2U6IFRoZUltYWdlVXBsb2FkZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFRIRV9NT0RFX1RPS0VOKVxuICAgICAgICBwcml2YXRlIGNvbmZpZzogVGhlTW9kZUNvbmZpZyxcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgdGhlQ29udGV4dFNlcnZpY2U6IFRoZUNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRoeVBvcG92ZXI6IFRoeVBvcG92ZXIsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwdWJsaWMgaW1hZ2VHcm91cENvbXBvbmVudDogVGh5SW1hZ2VHcm91cENvbXBvbmVudFxuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIpO1xuICAgIH1cblxuICAgIGJlZm9yZUNvbnRleHRDaGFuZ2UgPSAodmFsdWU6IFNsYXRlRWxlbWVudENvbnRleHQ8SW1hZ2VFbGVtZW50PikgPT4ge1xuICAgICAgICBpZiAodmFsdWUuZWxlbWVudCAhPT0gdGhpcy5lbGVtZW50ICYmIHZhbHVlLmVsZW1lbnQudGh1bWJVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsU291cmNlID0gdmFsdWUuZWxlbWVudD8uZXh0ZXJuYWxTb3VyY2U7XG4gICAgICAgICAgICBsZXQgdGh1bWJVcmwgPSB2YWx1ZS5lbGVtZW50LnRodW1iVXJsO1xuICAgICAgICAgICAgbGV0IG9yaWdpblVybCA9IHZhbHVlLmVsZW1lbnQub3JpZ2luVXJsO1xuXG4gICAgICAgICAgICBpZiAoIWV4dGVybmFsU291cmNlICYmIHRoaXMuaW1hZ2VVcGxvYWRlclNlcnZpY2U/LmJ1aWxkSW1hZ2VVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHVtYlVybCA9IHRoaXMuaW1hZ2VVcGxvYWRlclNlcnZpY2UuYnVpbGRJbWFnZVVybCh0aHVtYlVybCk7XG4gICAgICAgICAgICAgICAgb3JpZ2luVXJsID0gdGhpcy5pbWFnZVVwbG9hZGVyU2VydmljZS5idWlsZEltYWdlVXJsKG9yaWdpblVybCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5lbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHZhbHVlLmVsZW1lbnQud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB2YWx1ZS5lbGVtZW50LmhlaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbjogdmFsdWUuZWxlbWVudC5hbGlnbiB8fCBBbGlnbm1lbnQubGVmdCxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHZhbHVlLmVsZW1lbnQubGF5b3V0LFxuICAgICAgICAgICAgICAgIHJlU2l6ZWQ6IHZhbHVlLmVsZW1lbnQucmVTaXplZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaXplOiB2YWx1ZS5lbGVtZW50LnNpemUsXG4gICAgICAgICAgICAgICAgdGh1bWJVcmwsXG4gICAgICAgICAgICAgICAgb3JpZ2luVXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXRCbG9ja0NhcmRMYXlvdXRBdHRyKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsZUl0ZW0gPSB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLnVwbG9hZGluZ0ZpbGVzLmZpbmQoaXRlbSA9PiBpdGVtLnVybCA9PT0gdGhpcy5lbGVtZW50LnVybCk7XG4gICAgICAgIGlmICh0aGlzLmZpbGVJdGVtPy5maWxlICYmIHRoaXMuZmlsZUl0ZW0uZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkSW1hZ2UodGhpcy5maWxlSXRlbS5maWxlKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmltYWdlUGx1Z2luT3B0aW9ucyA9IGdldFBsdWdpbk9wdGlvbnM8SW1hZ2VQbHVnaW5PcHRpb25zPih0aGlzLmVkaXRvciwgUGx1Z2luS2V5cy5pbWFnZSk7XG4gICAgICAgIGlmICh0aGlzLmltYWdlUGx1Z2luT3B0aW9ucy5kaXNhYmxlUHJldmlldyAmJiB0eXBlb2YgdGhpcy5pbWFnZVBsdWdpbk9wdGlvbnMuZGlzYWJsZVByZXZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVByZXZpZXcgPSB0aGlzLmltYWdlUGx1Z2luT3B0aW9ucy5kaXNhYmxlUHJldmlldyh0aGlzLmVkaXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQcmV2aWV3ID0gdGhpcy5pbWFnZVBsdWdpbk9wdGlvbnMuZGlzYWJsZVByZXZpZXcgYXMgYm9vbGVhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGltYWdlQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbWFnZUdyb3VwQ29tcG9uZW50LmltYWdlcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSB0aGlzLmltYWdlRGlyZWN0aXZlKTtcbiAgICAgICAgY29uc3QgaW1hZ2VHcm91cCA9IHRoaXMuaW1hZ2VHcm91cENvbXBvbmVudC5pbWFnZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5Vcmw6IGl0ZW0udGh5T3JpZ2luU3JjLFxuICAgICAgICAgICAgICAgIHRodW1iVXJsOiBpdGVtLnRoeVByZXZpZXdTcmMsXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS50aHlJbWFnZU1ldGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBpdGVtLnRoeUltYWdlTWV0YS5zaXplXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSBhcyBJbWFnZUluZm9bXTtcbiAgICAgICAgY29uc3QgeyBvcmlnaW5VcmwsIHRodW1iVXJsLCBuYW1lLCBzaXplIH0gPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmltYWdlUGx1Z2luT3B0aW9ucy5wcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlUGx1Z2luT3B0aW9ucy5wcmV2aWV3KHtcbiAgICAgICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgICAgIHByZXZpZXdJbWFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpblVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VHcm91cCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGV4dENoYW5nZSgpIHtcbiAgICAgICAgc3VwZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Nob3VsZE9wZW4oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkxheW91dFRvb2xiYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvdWxkQ2xvc2UoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMYXlvdXRUb29sYmFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5tb3VzZVVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudGhlQ29udGV4dFNlcnZpY2UucmVtb3ZlVXBsb2FkRmlsZSh0aGlzLmZpbGVJdGVtKTtcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLnVwbG9hZGluZ1N0YXR1cyQubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbiA9IHRoaXMudGhlQ29udGV4dFNlcnZpY2Uub25Nb3VzZVVwJC5zdWJzY3JpYmUoZSA9PiB0aGlzLmVuZERyYWcoZSkpO1xuICAgICAgICB0aGlzLnVwbG9hZGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuaW1hZ2VVcGxvYWRlclNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVcGxvYWRpbmdJdGVtcyQoKVxuICAgICAgICAgICAgLnBpcGUobWFwKGZpbGVVcGxvYWRpbmdJdGVtID0+IHRoaXMuZmlsZUl0ZW0/LmZpbGUgJiYgZmlsZVVwbG9hZGluZ0l0ZW0uZmluZChpdGVtID0+IGl0ZW0uZmlsZSA9PT0gdGhpcy5maWxlSXRlbT8uZmlsZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh1cGxvYWRpbmdJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXVwbG9hZGluZ0l0ZW0gfHwgIXVwbG9hZGluZ0l0ZW0ucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJjZW50YWdlID0gdXBsb2FkaW5nSXRlbS5yZXN1bHQudXBsb2FkRmlsZS5wcm9ncmVzcy5wZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB1cGxvYWRpbmdJdGVtLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAvLyDmiJDlip/lkozlpLHotKXpg73opoHkuIrkvKDnu5PmnZ9cbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBUaHlVcGxvYWRTdGF0dXMuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLnJlbW92ZVVwbG9hZEZpbGUodGhpcy5maWxlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50aGVDb250ZXh0U2VydmljZS51cGxvYWRpbmdTdGF0dXMkLm5leHQoZmFsc2UpLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VOb2RlcyhpbWFnZUluZm86IEltYWdlRW50cnkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHR5cGU6IEVsZW1lbnRLaW5kcy5pbWFnZSwgdXJsOiBudWxsLCAuLi5pbWFnZUluZm8gfTtcbiAgICAgICAgSGlzdG9yeUVkaXRvci53aXRob3V0U2F2aW5nKHRoaXMuZWRpdG9yLCAoKSA9PiBUcmFuc2Zvcm1zLnNldE5vZGVzKHRoaXMuZWRpdG9yLCBkYXRhLCB7IGF0OiBwYXRoIH0pKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGxvYWRJbWFnZShmaWxlOiBGaWxlKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VFbnRyeSA9IHtcbiAgICAgICAgICAgIGFsaWduOiB0aGlzLmltYWdlRW50cnkuYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcixcbiAgICAgICAgICAgIHRodW1iVXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aGVDb250ZXh0U2VydmljZS51cGxvYWRpbmdTdGF0dXMkLm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IFt1cGxvYWRGaWxlRW50aXR5XSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRlclNlcnZpY2UudXBsb2FkRmlsZUhhbmRsZShbZmlsZV0pLnRvUHJvbWlzZSgpO1xuICAgICAgICBjb25zdCB7IHRodW1iVXJsLCBvcmlnaW5VcmwgfSA9IHVwbG9hZEZpbGVFbnRpdHk7XG4gICAgICAgIGNvbnN0IGltYWdlSW5mbzogSW1hZ2VFbnRyeSA9IHtcbiAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIHRodW1iVXJsLFxuICAgICAgICAgICAgb3JpZ2luVXJsLFxuICAgICAgICAgICAgYWxpZ246IHRoaXMuaW1hZ2VFbnRyeS5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyLFxuICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VOb2RlcyhpbWFnZUluZm8pO1xuICAgIH1cblxuICAgIHN0YXJ0RHJhZyhldmVudDogTW91c2VFdmVudCwgYXhpczogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRJbWFnZUVycm9yIHx8ICF0aGlzLmltZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZHJhZ2FibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBpbWdFbGVtZW50ID0gdGhpcy5pbWcubmF0aXZlRWxlbWVudCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYXhpcyxcbiAgICAgICAgICAgIHByaW50ZXJQb3NpdGlvblg6IGV2ZW50LnBhZ2VYLFxuICAgICAgICAgICAgcHJpbnRlclBvc2l0aW9uWTogZXZlbnQucGFnZVksXG4gICAgICAgICAgICBpbnRlcm5hbFdpZHRoOiBpbWdFbGVtZW50LndpZHRoIHx8IHRoaXMuaW1hZ2VFbnRyeS53aWR0aCxcbiAgICAgICAgICAgIGludGVybmFsSGVpZ2h0OiBpbWdFbGVtZW50LmhlaWdodCB8fCB0aGlzLmltYWdlRW50cnkuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IHRoaXMudGhlQ29udGV4dFNlcnZpY2UuZ2V0Rmlyc3RFbGVtZW50Q2hpbGQoKS5jbGllbnRXaWR0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1vdXNlTW92ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGhlQ29udGV4dFNlcnZpY2Uub25Nb3VzZU1vdmUkLnN1YnNjcmliZShlID0+IHRoaXMubW91c2VNb3ZlSGFuZGxlKGUsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBtb3VzZU1vdmVIYW5kbGUoXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBheGlzOiBzdHJpbmc7XG4gICAgICAgICAgICBwcmludGVyUG9zaXRpb25YOiBudW1iZXI7XG4gICAgICAgICAgICBwcmludGVyUG9zaXRpb25ZOiBudW1iZXI7XG4gICAgICAgICAgICBpbnRlcm5hbFdpZHRoOiBudW1iZXI7XG4gICAgICAgICAgICBpbnRlcm5hbEhlaWdodDogbnVtYmVyO1xuICAgICAgICAgICAgbWF4V2lkdGg6IG51bWJlcjtcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5kcmFnYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgeyBheGlzLCBwcmludGVyUG9zaXRpb25YLCBwcmludGVyUG9zaXRpb25ZLCBpbnRlcm5hbFdpZHRoLCBpbnRlcm5hbEhlaWdodCwgbWF4V2lkdGggfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBpc1JldmVyc2FsID0gYXhpcy5pbmNsdWRlcygnLScpO1xuXG4gICAgICAgICAgICBsZXQgb2Zmc2V0WCA9IGV2ZW50LnBhZ2VYIC0gcHJpbnRlclBvc2l0aW9uWDtcbiAgICAgICAgICAgIGxldCBvZmZzZXRZID0gZXZlbnQucGFnZVkgLSBwcmludGVyUG9zaXRpb25ZO1xuICAgICAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5lbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoaXNSZXZlcnNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldFggPSAtb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICBvZmZzZXRZID0gLW9mZnNldFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgICAgIG9mZnNldFggPSBvZmZzZXRYICogMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGF4aXMuaW5jbHVkZXMoJ3gnKSkge1xuICAgICAgICAgICAgICAgIHdpZHRoID0gb2Zmc2V0WCArIGludGVybmFsV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHdpZHRoID49IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbWF4V2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgYGxheW91dGAgd2hlbiB0aGUgaW1hZ2UgaXMgYWRqdXN0ZWQgdG8gdGhlIG1heGltdW0gdmFsdWUgdW5kZXIgcmljaCBtZWRpYVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5Py5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBUaGVRdWVyaWVzLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VFZGl0b3Iuc2V0SW1hZ2VOb2RlKHRoaXMuZWRpdG9yLCBwYXRoLCB7IGxheW91dDogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAxMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChheGlzLmluY2x1ZGVzKCdsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF0aW8gPSBpbnRlcm5hbFdpZHRoIC8gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGludGVybmFsSGVpZ2h0IC8gcmF0aW87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChheGlzLmluY2x1ZGVzKCd5JykpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvZmZzZXRZICsgaW50ZXJuYWxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKGhlaWdodCA+PSAxMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDEwMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoZWlnaHQgPD0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGF4aXMuaW5jbHVkZXMoJ2wnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IGludGVybmFsSGVpZ2h0IC8gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGludGVybmFsV2lkdGggLyByYXRpbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZUVudHJ5LnJlU2l6ZWQgJiYgdGhpcy5pbWFnZUVudHJ5LndpZHRoICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeS5yZVNpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW1nLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICB0aGlzLmltYWdlRW50cnkud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmREcmFnKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeS53aWR0aCA9PT0gdGhpcy50aGVDb250ZXh0U2VydmljZS5nZXRPcHRpb25zKCkud2lkdGggJiZcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlRW50cnkud2lkdGggPD0gdGhpcy5uYXR1cmFsV2lkdGggJiZcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQud2lkdGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VFbnRyeS53aWR0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZUVudHJ5LmhlaWdodCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmltYWdlRW50cnlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgYXQ6IHRoaXMuc2VsZWN0aW9uIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWxVcGxvYWQoZXZlbnQpIHtcbiAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2Rlcyh0aGlzLmVkaXRvciwgeyBhdDogdGhpcy5zZWxlY3Rpb24gfSk7XG4gICAgfVxuXG4gICAgaXNTaG91bGRPcGVuKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICB0aGVPcHRpb25zOiB7IHJpY2hNZWRpYSB9XG4gICAgICAgIH0gPSB0aGlzLnRoZUNvbnRleHRTZXJ2aWNlLmdldE9wdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzPy5yZWFkb25seSAmJlxuICAgICAgICAgICAgcmljaE1lZGlhICYmXG4gICAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgJiZcbiAgICAgICAgICAgIFRoZVF1ZXJpZXMuaXNHbG9iYWxDb2xsYXBzZWQodGhpcy5lZGl0b3IpICYmXG4gICAgICAgICAgICAhdGhpcy51cGxvYWRpbmcgJiZcbiAgICAgICAgICAgICF0aGlzLmlzT3BlblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzU2hvdWxkQ2xvc2UoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiAmJlxuICAgICAgICAgICAgKHRoaXM/LnJlYWRvbmx5IHx8ICF0aGlzLmlzQ29sbGFwc2VkQW5kTm9uUmVhZG9ubHkgfHwgIVRoZVF1ZXJpZXMuaXNHbG9iYWxDb2xsYXBzZWQodGhpcy5lZGl0b3IpIHx8IHRoaXMudXBsb2FkaW5nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9wZW5MYXlvdXRUb29sYmFyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW1nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXlvdXRUb29sYmFyUmVmID0gdGhpcy50aHlQb3BvdmVyLm9wZW4odGhpcy5sYXlvdXRUb29sYmFyLCB7XG4gICAgICAgICAgICBvcmlnaW46IHRoaXMuaW1hZ2VDb250ZW50LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3RoZS1wbHVnaW4tdG9vbGJhci1wb3BvdmVyJyxcbiAgICAgICAgICAgIGluc2lkZUNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGF5b3V0VG9vbGJhclJlZj8uZ2V0T3ZlcmxheVJlZigpLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCkpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRUb29sYmFyUmVmPy5nZXRPdmVybGF5UmVmKCkudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfSwgMTUwKTtcbiAgICB9XG5cbiAgICBjbG9zZUxheW91dFRvb2xiYXIoKSB7XG4gICAgICAgIHRoaXMubGF5b3V0VG9vbGJhclJlZj8uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBsYXlvdXRBY3RpdmUoa2V5OiBBbGlnbm1lbnQgfCBMYXlvdXRUeXBlcykge1xuICAgICAgICBjb25zdCB7IGxheW91dCwgYWxpZ24gfSA9IHRoaXMuaW1hZ2VFbnRyeTtcbiAgICAgICAgcmV0dXJuIGtleSAmJiAoKGtleSA9PT0gYWxpZ24gJiYgIWxheW91dCkgfHwga2V5ID09PSBsYXlvdXQpO1xuICAgIH1cblxuICAgIHNldEltYWdlTm9kZShlOiBNb3VzZUV2ZW50LCBwYXJ0aWFsOiB7IGxheW91dD86IExheW91dFR5cGVzOyBhbGlnbj86IEFsaWdubWVudCB9KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IFRoZVF1ZXJpZXMuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIEltYWdlRWRpdG9yLnNldEltYWdlTm9kZSh0aGlzLmVkaXRvciwgcGF0aCwgcGFydGlhbCk7XG4gICAgfVxuXG4gICAgc2V0QmxvY2tDYXJkTGF5b3V0QXR0cigpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tDYXJkID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnLnNsYXRlLWJsb2NrLWNhcmQnKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGF5b3V0IH0gPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChibG9ja0NhcmQgJiYgbGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgYmxvY2tDYXJkLnNldEF0dHJpYnV0ZSgnbGF5b3V0JywgbGF5b3V0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2tDYXJkICYmICFsYXlvdXQpIHtcbiAgICAgICAgICAgICAgICBibG9ja0NhcmQucmVtb3ZlQXR0cmlidXRlKCdsYXlvdXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGF5b3V0VG9vbGJhclJlZj8uZ2V0T3ZlcmxheVJlZigpLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIFRoZVRyYW5zZm9ybXMuZGVsZXRlRWxlbWVudCh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50KTtcbiAgICB9XG5cbiAgICBjcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCkge1xuICAgICAgICBjb25zdCBib3R0b21Qb3NpdGlvbjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gICAgICAgICAgICBvcmlnaW5YOiAnY2VudGVyJyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgIG9mZnNldFk6IDRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaW1hZ2VDb250ZW50KVxuICAgICAgICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG4gICAgICAgICAgICAud2l0aEdyb3dBZnRlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAud2l0aFB1c2goZmFsc2UpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbYm90dG9tUG9zaXRpb25dKTtcbiAgICB9XG5cbiAgICBpbWFnZUxvYWRlZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubmF0dXJhbFdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aDtcbiAgICAgICAgdGhpcy5uYXR1cmFsSGVpZ2h0ID0gaW1nLm5hdHVyYWxIZWlnaHQ7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1vZGUgPT09IFRoZU1vZGUucHJpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbWFnZVNpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWFnZUNvbnRhaW5lciA9IHRoaXMuaW1nPy5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCcuaW1hZ2UtY29udGFpbmVyJyk7XG4gICAgICAgIGNvbnN0IGltYWdlQ29udGFpbmVyUmVjdCA9IGltYWdlQ29udGFpbmVyPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gdGhpcy5lbGVtZW50Py53aWR0aCB8fCB0aGlzLm5hdHVyYWxXaWR0aDtcbiAgICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IHRoaXMuaW1hZ2VFbnRyeT8uaGVpZ2h0IHx8IHRoaXMubmF0dXJhbEhlaWdodDtcbiAgICAgICAgY29uc3QgcmF0aW8gPSBjdXJyZW50SGVpZ2h0IC8gY3VycmVudFdpZHRoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGltYWdlQ29udGFpbmVyUmVjdD8ud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHJhdGlvICogaW1hZ2VDb250YWluZXJSZWN0Py53aWR0aDtcblxuICAgICAgICB0aGlzLmltZy5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLmltZy5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgfVxuXG4gICAgaW1hZ2VFcnJvcihldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVycm9ySW1hZ2VVcmwgPSB0aGlzLmltYWdlUGx1Z2luT3B0aW9ucz8uZXJyb3JJbWFnZVVybDtcbiAgICAgICAgaWYgKGVycm9ySW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHR5cGVvZiBlcnJvckltYWdlVXJsID09PSAnZnVuY3Rpb24nID8gZXJyb3JJbWFnZVVybCh0aGlzLmVkaXRvcikgOiBlcnJvckltYWdlVXJsO1xuICAgICAgICAgICAgdGhpcy5sb2FkSW1hZ2VFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQcmV2aWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDb250ZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndGhlLWltYWdlLWVycm9yJyk7XG4gICAgICAgICAgICBpbWcuc3JjID0gdXJsO1xuICAgICAgICB9XG4gICAgICAgIGltZy5vbmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyDnu4Tku7blupMgZGlhbG9nIOW8ueWHuuaXtu+8jOS8muiusOW9leW9k+WJjeeahOeEpueCueOAgumYu+atoiBtb3VzZWRvd24g6buY6K6k6KGM5Li677yM5L2/5b6X5Zu+54mH5Y6f5pys55qEIGNsaWNrIOS6i+S7tuiDveiOt+WPluWIsOato+ehrueahOeEpueCueOAglxuICAgIHByZXZlbnREZWZhdWx0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG59XG4iLCI8c2xhdGUtY2hpbGRyZW4gW2NoaWxkcmVuXT1cImNoaWxkcmVuXCIgW2NvbnRleHRdPVwiY2hpbGRyZW5Db250ZXh0XCIgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCI+PC9zbGF0ZS1jaGlsZHJlbj5cblxuPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgW3N0eWxlLnRleHRBbGlnbl09XCJpbWFnZUVudHJ5LmFsaWduXCI+XG4gIDxkaXYgI2ltYWdlQ29udGVudCAqbmdJZj1cImltYWdlRW50cnkudGh1bWJVcmxcIiBjbGFzcz1cImltYWdlLWNvbnRlbnRcIiBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiIXNlbGVjdGlvblwiPlxuICAgIDxpbWdcbiAgICAgICNpbWdcbiAgICAgIHRoeUltYWdlXG4gICAgICBjbGFzcz1cIm1haW4taW1hZ2VcIlxuICAgICAgW2NsYXNzLmltYWdlLWNvbGxhcHNlZF09XCJzZWxlY3Rpb24gJiYgIXVwbG9hZGluZ1wiXG4gICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aC5weCc6IGltYWdlQmluZGluZ1dpZHRoIH1cIlxuICAgICAgW2FsdF09XCJpbWFnZUVudHJ5Lm5hbWVcIlxuICAgICAgW3RoeVNyY109XCJpbWFnZUVudHJ5LnRodW1iVXJsXCJcbiAgICAgIFt0aHlQcmV2aWV3U3JjXT1cImltYWdlRW50cnkudGh1bWJVcmxcIlxuICAgICAgW3RoeU9yaWdpblNyY109XCJpbWFnZUVudHJ5Lm9yaWdpblVybFwiXG4gICAgICBbdGh5RGlzYWJsZVByZXZpZXddPVwiZGlzYWJsZVByZXZpZXdcIlxuICAgICAgW3RoeUltYWdlTWV0YV09XCJ7IG5hbWU6IGltYWdlRW50cnkubmFtZSwgc2l6ZTogaW1hZ2VFbnRyeS5zaXplIH1cIlxuICAgICAgKGxvYWQpPVwiaW1hZ2VMb2FkZWQoJGV2ZW50KVwiXG4gICAgICAobW91c2Vkb3duKT1cInByZXZlbnREZWZhdWx0KCRldmVudClcIlxuICAgICAgKGVycm9yKT1cImltYWdlRXJyb3IoJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiaW1hZ2VDbGljaygkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxkaXYgKm5nSWY9XCJpc0NvbGxhcHNlZEFuZE5vblJlYWRvbmx5XCIgY2xhc3M9XCJpbWFnZS1wcm9maWxlXCIgW2NsYXNzLm91dGxpbmVdPVwic2VsZWN0aW9uXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRJbWFnZUVycm9yXCI+XG4gICAgICAgIDxzcGFuIChtb3VzZWRvd24pPVwic3RhcnREcmFnKCRldmVudCwgJy14bCcpXCIgY2xhc3M9XCJpbWFnZS1wb2ludGVyIGxlZnQgdG9wXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiAobW91c2Vkb3duKT1cInN0YXJ0RHJhZygkZXZlbnQsICd4bCcpXCIgY2xhc3M9XCJpbWFnZS1wb2ludGVyIHJpZ2h0IHRvcFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKG1vdXNlZG93bik9XCJzdGFydERyYWcoJGV2ZW50LCAneGwnKVwiIGNsYXNzPVwiaW1hZ2UtcG9pbnRlciByaWdodCBib3R0b21cIj48L3NwYW4+XG4gICAgICAgIDxzcGFuIChtb3VzZWRvd24pPVwic3RhcnREcmFnKCRldmVudCwgJy14bCcpXCIgY2xhc3M9XCJpbWFnZS1wb2ludGVyIGxlZnQgYm90dG9tXCI+PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInVwbG9hZGluZ1wiIGNsYXNzPVwidXBsb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkaW5nLXBlcmNlbnRhZ2VcIj5cbiAgICAgICAgPHRoeS1wcm9ncmVzcyB0aHlUeXBlPVwicHJpbWFyeVwiIFt0aHlWYWx1ZV09XCJwZXJjZW50YWdlXCIgdGh5U2l6ZT1cInNtXCI+PC90aHktcHJvZ3Jlc3M+XG4gICAgICAgIDx0aHktaWNvbiAoY2xpY2spPVwiY2FuY2VsVXBsb2FkKCRldmVudClcIiB0aHlJY29uTmFtZT1cImNsb3NlLWNpcmNsZS1ib2xkLWZpbGxcIiB0aHlJY29uTGVnZ2luZz1cInRydWVcIj4gPC90aHktaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhdXBsb2FkaW5nXCIgY2xhc3M9XCJsYXllclwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFpbWFnZUVudHJ5LnRodW1iVXJsXCIgY2xhc3M9XCJpbWFnZS1sb2FkaW5nIGN1cnNvci1wb2ludGVyXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJpbWFnZVwiPjwvdGh5LWljb24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbGF5b3V0VG9vbGJhcj5cbiAgPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4eHNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxheW91dE9wdGlvbnNcIj5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwiaXRlbS5rZXkgIT09ICdzcGxpdCdcIlxuICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgIFt0aHlUeXBlXT1cIml0ZW0ua2V5ID09PSAncmVtb3ZlJyA/ICdkYW5nZXInIDogJ3ByaW1hcnknXCJcbiAgICAgICAgW3RoeUFjdGlvbkljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgW3RoeUFjdGlvbkFjdGl2ZV09XCJsYXlvdXRBY3RpdmUoaXRlbS5rZXkpXCJcbiAgICAgICAgW3RoeVRvb2x0aXBdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgdGh5VG9vbHRpcFBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwiaXRlbT8uaGFuZGxlKCRldmVudCwgaXRlbS5rZXkpXCJcbiAgICAgID48L2E+XG4gICAgICA8dGh5LWRpdmlkZXIgKm5nSWY9XCJpdGVtLmtleSA9PT0gJ3NwbGl0J1wiIGNsYXNzPVwibXItMiBtbC0xIGFsaWduLXNlbGYtY2VudGVyXCIgW3RoeVZlcnRpY2FsXT1cInRydWVcIj48L3RoeS1kaXZpZGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RoeS1hY3Rpb25zPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==