@worktile/theia 16.1.2 → 16.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/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 +1 -1
  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/editor.component.d.ts +1 -1
  11. package/editor.module.d.ts +1 -1
  12. package/{esm2022 → esm2020}/components/action/prevent-default.mjs +4 -4
  13. package/{esm2022 → esm2020}/components/column-resize/column-resize-notifier.mjs +4 -4
  14. package/{esm2022 → esm2020}/components/column-resize/column-resize.directive.mjs +4 -4
  15. package/{esm2022 → esm2020}/components/column-resize/column-resize.module.mjs +9 -9
  16. package/{esm2022 → esm2020}/components/column-resize/event-dispatcher.mjs +4 -4
  17. package/{esm2022 → esm2020}/components/column-resize/overlay-handle.component.mjs +4 -4
  18. package/{esm2022 → esm2020}/components/column-resize/resizing.store.mjs +4 -4
  19. package/{esm2022 → esm2020}/components/contextmenu/contextmenu.component.mjs +4 -4
  20. package/{esm2022 → esm2020}/components/conversion-hint/conversion-hint.component.mjs +4 -4
  21. package/{esm2022 → esm2020}/components/element/element.component.mjs +4 -4
  22. package/{esm2022 → esm2020}/components/inline-toolbar/inline-toolbar.component.mjs +6 -6
  23. package/esm2020/components/listbox/listbox.mjs +375 -0
  24. package/{esm2022 → esm2020}/components/plugin-menu/plugin-menu.component.mjs +4 -4
  25. package/{esm2022 → esm2020}/components/table-select/table-select.component.mjs +4 -4
  26. package/{esm2022 → esm2020}/components/template/template.component.mjs +4 -4
  27. package/{esm2022 → esm2020}/components/text/text.component.mjs +4 -4
  28. package/{esm2022 → esm2020}/components/toolbar/toolbar.component.mjs +4 -4
  29. package/{esm2022 → esm2020}/components/toolbar-dropdown/toolbar-dropdown.component.mjs +4 -4
  30. package/{esm2022 → esm2020}/components/toolbar-group/toolbar-group.component.mjs +4 -4
  31. package/{esm2022 → esm2020}/components/toolbar-item/toolbar-item.component.mjs +6 -6
  32. package/esm2020/constants/plugin-menu.mjs +309 -0
  33. package/{esm2022 → esm2020}/core/toolbar-item/base-toolbar-item.mjs +7 -7
  34. package/{esm2022 → esm2020}/editor.component.mjs +11 -11
  35. package/esm2020/editor.module.mjs +254 -0
  36. package/{esm2022 → esm2020}/interfaces/view-base.mjs +4 -4
  37. package/{esm2022 → esm2020}/pipes.mjs +10 -10
  38. package/{esm2022 → esm2020}/plugins/blockquote/blockquote.component.mjs +4 -4
  39. package/{esm2022 → esm2020}/plugins/code/code.component.mjs +4 -4
  40. package/{esm2022 → esm2020}/plugins/color/toolbar-item.component.mjs +4 -4
  41. package/{esm2022 → esm2020}/plugins/hr/hr.component.mjs +6 -6
  42. package/{esm2022 → esm2020}/plugins/image/image.component.mjs +4 -4
  43. package/{esm2022 → esm2020}/plugins/inline-code/inline-code.component.mjs +6 -6
  44. package/{esm2022 → esm2020}/plugins/link/edit/link-edit.component.mjs +4 -4
  45. package/{esm2022 → esm2020}/plugins/link/hover/link-hover.component.mjs +4 -4
  46. package/{esm2022 → esm2020}/plugins/link/link.component.mjs +9 -9
  47. package/{esm2022 → esm2020}/plugins/list/components/bulleted-list.component.mjs +4 -4
  48. package/{esm2022 → esm2020}/plugins/list/components/list-item.component.mjs +4 -4
  49. package/{esm2022 → esm2020}/plugins/list/components/numbered-list.component.mjs +4 -4
  50. package/{esm2022 → esm2020}/plugins/mention/suggestion.component.mjs +4 -4
  51. package/{esm2022 → esm2020}/plugins/quick-insert/components/quick-insert.component.mjs +4 -4
  52. package/{esm2022 → esm2020}/plugins/table/components/insert-mark/insert-mark.component.mjs +4 -4
  53. package/{esm2022 → esm2020}/plugins/table/components/row/row.component.mjs +6 -6
  54. package/{esm2022 → esm2020}/plugins/table/components/table.component.mjs +16 -16
  55. package/{esm2022 → esm2020}/plugins/table/components/td/td.component.mjs +4 -4
  56. package/{esm2022 → esm2020}/plugins/table/components/toolbar/table-options.component.mjs +6 -6
  57. package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +190 -0
  58. package/{esm2022 → esm2020}/plugins/table/table.pipe.mjs +7 -7
  59. package/{esm2022 → esm2020}/plugins/table/table.service.mjs +4 -4
  60. package/{esm2022 → esm2020}/plugins/table/table.store.mjs +4 -4
  61. package/{esm2022 → esm2020}/plugins/table/toolbar-item.component.mjs +6 -7
  62. package/{esm2022 → esm2020}/plugins/todo-item/todo-item.component.mjs +6 -6
  63. package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +82 -0
  64. package/{esm2022 → esm2020}/services/context.service.mjs +4 -4
  65. package/{esm2022 → esm2020}/services/table-contextmenu.service.mjs +4 -4
  66. package/{esm2022 → esm2020}/services/toolbar.service.mjs +4 -4
  67. package/fesm2015/worktile-theia.mjs +16706 -0
  68. package/fesm2015/worktile-theia.mjs.map +1 -0
  69. package/{fesm2022 → fesm2020}/worktile-theia.mjs +431 -448
  70. package/fesm2020/worktile-theia.mjs.map +1 -0
  71. package/interfaces/editor.d.ts +2 -4
  72. package/package.json +11 -5
  73. package/plugins/link/edit/link-edit.component.d.ts +1 -1
  74. package/plugins/link/hover/link-hover.component.d.ts +1 -1
  75. package/plugins/mention/suggestion.component.d.ts +1 -1
  76. package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -1
  77. package/plugins/table/components/insert-mark/insert-mark.component.d.ts +1 -1
  78. package/plugins/table/components/table.component.d.ts +1 -1
  79. package/plugins/table/components/toolbar/table-options.component.d.ts +1 -1
  80. package/plugins/table/components/toolbar/table-toolbar.component.d.ts +1 -1
  81. package/queries/is-range-across-blocks.d.ts +1 -1
  82. package/esm2022/components/listbox/listbox.mjs +0 -375
  83. package/esm2022/constants/plugin-menu.mjs +0 -325
  84. package/esm2022/editor.module.mjs +0 -254
  85. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -189
  86. package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -83
  87. package/fesm2022/worktile-theia.mjs.map +0 -1
  88. /package/{esm2022 → esm2020}/components/column-resize/resize-ref.mjs +0 -0
  89. /package/{esm2022 → esm2020}/components/column-resize/selectors.mjs +0 -0
  90. /package/{esm2022 → esm2020}/components/index.mjs +0 -0
  91. /package/{esm2022 → esm2020}/components/listbox/listbox.type.mjs +0 -0
  92. /package/{esm2022 → esm2020}/constants/auto-format-rules.mjs +0 -0
  93. /package/{esm2022 → esm2020}/constants/code.mjs +0 -0
  94. /package/{esm2022 → esm2020}/constants/color-select.mjs +0 -0
  95. /package/{esm2022 → esm2020}/constants/default.mjs +0 -0
  96. /package/{esm2022 → esm2020}/constants/error.mjs +0 -0
  97. /package/{esm2022 → esm2020}/constants/index.mjs +0 -0
  98. /package/{esm2022 → esm2020}/constants/node-types.mjs +0 -0
  99. /package/{esm2022 → esm2020}/constants/selector.mjs +0 -0
  100. /package/{esm2022 → esm2020}/constants/toolbar.mjs +0 -0
  101. /package/{esm2022 → esm2020}/core/create-plugin.mjs +0 -0
  102. /package/{esm2022 → esm2020}/core/create-toolbar.mjs +0 -0
  103. /package/{esm2022 → esm2020}/core/index.mjs +0 -0
  104. /package/{esm2022 → esm2020}/core/utils/combine-plugins.mjs +0 -0
  105. /package/{esm2022 → esm2020}/core/utils/flatten-deep-plugins.mjs +0 -0
  106. /package/{esm2022 → esm2020}/core/utils/get-plugin-options.mjs +0 -0
  107. /package/{esm2022 → esm2020}/core/utils/get-plugin.mjs +0 -0
  108. /package/{esm2022 → esm2020}/core/utils/get-plugins.mjs +0 -0
  109. /package/{esm2022 → esm2020}/core/utils/index.mjs +0 -0
  110. /package/{esm2022 → esm2020}/core/utils/merge-array.mjs +0 -0
  111. /package/{esm2022 → esm2020}/core/utils/merge-deep-plugins.mjs +0 -0
  112. /package/{esm2022 → esm2020}/core/utils/merge-options.mjs +0 -0
  113. /package/{esm2022 → esm2020}/core/utils/nested-structure-by-key.mjs +0 -0
  114. /package/{esm2022 → esm2020}/core/utils/plugin-menu.mjs +0 -0
  115. /package/{esm2022 → esm2020}/core/utils/plugins-by-key.mjs +0 -0
  116. /package/{esm2022 → esm2020}/core/with-theia.mjs +0 -0
  117. /package/{esm2022 → esm2020}/custom-types.mjs +0 -0
  118. /package/{esm2022 → esm2020}/interfaces/auto-format.mjs +0 -0
  119. /package/{esm2022 → esm2020}/interfaces/editor.mjs +0 -0
  120. /package/{esm2022 → esm2020}/interfaces/element.mjs +0 -0
  121. /package/{esm2022 → esm2020}/interfaces/image.mjs +0 -0
  122. /package/{esm2022 → esm2020}/interfaces/index.mjs +0 -0
  123. /package/{esm2022 → esm2020}/interfaces/plugins/index.mjs +0 -0
  124. /package/{esm2022 → esm2020}/interfaces/plugins/no-infer.mjs +0 -0
  125. /package/{esm2022 → esm2020}/interfaces/plugins/plugin-key.mjs +0 -0
  126. /package/{esm2022 → esm2020}/interfaces/plugins/plugin-menu.mjs +0 -0
  127. /package/{esm2022 → esm2020}/interfaces/plugins/plugins.mjs +0 -0
  128. /package/{esm2022 → esm2020}/interfaces/plugins/with-override.mjs +0 -0
  129. /package/{esm2022 → esm2020}/interfaces/reset-block-type-plugin-options.mjs +0 -0
  130. /package/{esm2022 → esm2020}/interfaces/toolbar.mjs +0 -0
  131. /package/{esm2022 → esm2020}/interfaces/upload.mjs +0 -0
  132. /package/{esm2022 → esm2020}/interfaces/utility/index.mjs +0 -0
  133. /package/{esm2022 → esm2020}/interfaces/utility/nested-structure-by-key.mjs +0 -0
  134. /package/{esm2022 → esm2020}/interfaces/utility/override-by-key.mjs +0 -0
  135. /package/{esm2022 → esm2020}/interfaces/utility/types.mjs +0 -0
  136. /package/{esm2022 → esm2020}/interfaces/valid-children-types.mjs +0 -0
  137. /package/{esm2022 → esm2020}/plugins/align/align.editor.mjs +0 -0
  138. /package/{esm2022 → esm2020}/plugins/align/align.plugin.mjs +0 -0
  139. /package/{esm2022 → esm2020}/plugins/autoformat/autoformat.plugin.mjs +0 -0
  140. /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-block.mjs +0 -0
  141. /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-inline.mjs +0 -0
  142. /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.editor.mjs +0 -0
  143. /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.plugin.mjs +0 -0
  144. /package/{esm2022 → esm2020}/plugins/code/code.editor.mjs +0 -0
  145. /package/{esm2022 → esm2020}/plugins/code/code.plugin.mjs +0 -0
  146. /package/{esm2022 → esm2020}/plugins/color/color.editor.mjs +0 -0
  147. /package/{esm2022 → esm2020}/plugins/color/color.plugin.mjs +0 -0
  148. /package/{esm2022 → esm2020}/plugins/common/block-card.plugin.mjs +0 -0
  149. /package/{esm2022 → esm2020}/plugins/common/common.plugin.mjs +0 -0
  150. /package/{esm2022 → esm2020}/plugins/common/get-fragment.plugin.mjs +0 -0
  151. /package/{esm2022 → esm2020}/plugins/common/history.plugin.mjs +0 -0
  152. /package/{esm2022 → esm2020}/plugins/common/insert-data-by-invalid-type.mjs +0 -0
  153. /package/{esm2022 → esm2020}/plugins/common/move-selection.plugin.mjs +0 -0
  154. /package/{esm2022 → esm2020}/plugins/common/remove-empty.plugin.mjs +0 -0
  155. /package/{esm2022 → esm2020}/plugins/common/remove-void.plugin.mjs +0 -0
  156. /package/{esm2022 → esm2020}/plugins/common/reset-type.plugin.mjs +0 -0
  157. /package/{esm2022 → esm2020}/plugins/common/transforms.plugin.mjs +0 -0
  158. /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-html.plugin.mjs +0 -0
  159. /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-md.plugin.mjs +0 -0
  160. /package/{esm2022 → esm2020}/plugins/font-size/font-size.editor.mjs +0 -0
  161. /package/{esm2022 → esm2020}/plugins/heading/heading.editor.mjs +0 -0
  162. /package/{esm2022 → esm2020}/plugins/heading/heading.plugin.mjs +0 -0
  163. /package/{esm2022 → esm2020}/plugins/hr/hr.editor.mjs +0 -0
  164. /package/{esm2022 → esm2020}/plugins/hr/hr.plugin.mjs +0 -0
  165. /package/{esm2022 → esm2020}/plugins/image/image.editor.mjs +0 -0
  166. /package/{esm2022 → esm2020}/plugins/image/image.plugin.mjs +0 -0
  167. /package/{esm2022 → esm2020}/plugins/indent/indent.editor.mjs +0 -0
  168. /package/{esm2022 → esm2020}/plugins/indent/indent.plugin.mjs +0 -0
  169. /package/{esm2022 → esm2020}/plugins/indent/on-keydown-indent.mjs +0 -0
  170. /package/{esm2022 → esm2020}/plugins/index.mjs +0 -0
  171. /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.editor.mjs +0 -0
  172. /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.plugin.mjs +0 -0
  173. /package/{esm2022 → esm2020}/plugins/link/link.editor.mjs +0 -0
  174. /package/{esm2022 → esm2020}/plugins/link/link.plugin.mjs +0 -0
  175. /package/{esm2022 → esm2020}/plugins/link/link.types.mjs +0 -0
  176. /package/{esm2022 → esm2020}/plugins/list/list.editor.mjs +0 -0
  177. /package/{esm2022 → esm2020}/plugins/list/list.plugin.mjs +0 -0
  178. /package/{esm2022 → esm2020}/plugins/list/normalizers/get-list-normalizer.mjs +0 -0
  179. /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-list-item.mjs +0 -0
  180. /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-no.mjs +0 -0
  181. /package/{esm2022 → esm2020}/plugins/list/on-key-down-list.mjs +0 -0
  182. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-entry.mjs +0 -0
  183. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-sublist.mjs +0 -0
  184. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-types.mjs +0 -0
  185. /package/{esm2022 → esm2020}/plugins/list/queries/get-start-list-item.mjs +0 -0
  186. /package/{esm2022 → esm2020}/plugins/list/queries/has-list-in-list-item.mjs +0 -0
  187. /package/{esm2022 → esm2020}/plugins/list/queries/is-in-list.mjs +0 -0
  188. /package/{esm2022 → esm2020}/plugins/list/queries/is-list-nested.mjs +0 -0
  189. /package/{esm2022 → esm2020}/plugins/list/queries/is-list.mjs +0 -0
  190. /package/{esm2022 → esm2020}/plugins/list/queries/is-node-type-list.mjs +0 -0
  191. /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -0
  192. /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -0
  193. /package/{esm2022 → esm2020}/plugins/list/queries/is-single-list-item.mjs +0 -0
  194. /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-data.mjs +0 -0
  195. /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-item.mjs +0 -0
  196. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-down.mjs +0 -0
  197. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -0
  198. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -0
  199. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-up.mjs +0 -0
  200. /package/{esm2022 → esm2020}/plugins/list/transforms/unwrap-list.mjs +0 -0
  201. /package/{esm2022 → esm2020}/plugins/list/types.mjs +0 -0
  202. /package/{esm2022 → esm2020}/plugins/mark/mark.editor.mjs +0 -0
  203. /package/{esm2022 → esm2020}/plugins/mark/mark.plugin.mjs +0 -0
  204. /package/{esm2022 → esm2020}/plugins/mention/index.mjs +0 -0
  205. /package/{esm2022 → esm2020}/plugins/mention/mention.editor.mjs +0 -0
  206. /package/{esm2022 → esm2020}/plugins/mention/mention.plugin.mjs +0 -0
  207. /package/{esm2022 → esm2020}/plugins/mention/mention.type.mjs +0 -0
  208. /package/{esm2022 → esm2020}/plugins/node-id/node-id.plugin.mjs +0 -0
  209. /package/{esm2022 → esm2020}/plugins/normalizers/insert-paragraph-nodes.mjs +0 -0
  210. /package/{esm2022 → esm2020}/plugins/normalizers/remove-empty-nodes.mjs +0 -0
  211. /package/{esm2022 → esm2020}/plugins/normalizers/trailing-node.plugin.mjs +0 -0
  212. /package/{esm2022 → esm2020}/plugins/paint-format/paint-format.editor.mjs +0 -0
  213. /package/{esm2022 → esm2020}/plugins/public-api.mjs +0 -0
  214. /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.editor.mjs +0 -0
  215. /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.plugin.mjs +0 -0
  216. /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.plugin.mjs +0 -0
  217. /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.types.mjs +0 -0
  218. /package/{esm2022 → esm2020}/plugins/table/table.editor.mjs +0 -0
  219. /package/{esm2022 → esm2020}/plugins/table/table.plugin.mjs +0 -0
  220. /package/{esm2022 → esm2020}/plugins/table/table.types.mjs +0 -0
  221. /package/{esm2022 → esm2020}/plugins/table/transforms/clear-cell.mjs +0 -0
  222. /package/{esm2022 → esm2020}/plugins/table/transforms/clear-table-node.mjs +0 -0
  223. /package/{esm2022 → esm2020}/plugins/table/transforms/index.mjs +0 -0
  224. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-column.mjs +0 -0
  225. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-row.mjs +0 -0
  226. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-table.mjs +0 -0
  227. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-column.mjs +0 -0
  228. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-row.mjs +0 -0
  229. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-table.mjs +0 -0
  230. /package/{esm2022 → esm2020}/plugins/table/utils/add-columns.mjs +0 -0
  231. /package/{esm2022 → esm2020}/plugins/table/utils/calc-anchor-position.mjs +0 -0
  232. /package/{esm2022 → esm2020}/plugins/table/utils/calc-span.mjs +0 -0
  233. /package/{esm2022 → esm2020}/plugins/table/utils/calculate-table.mjs +0 -0
  234. /package/{esm2022 → esm2020}/plugins/table/utils/cell-position.mjs +0 -0
  235. /package/{esm2022 → esm2020}/plugins/table/utils/create-cell.mjs +0 -0
  236. /package/{esm2022 → esm2020}/plugins/table/utils/create-row.mjs +0 -0
  237. /package/{esm2022 → esm2020}/plugins/table/utils/create-table-position.mjs +0 -0
  238. /package/{esm2022 → esm2020}/plugins/table/utils/create-table.mjs +0 -0
  239. /package/{esm2022 → esm2020}/plugins/table/utils/get-grid-columns.mjs +0 -0
  240. /package/{esm2022 → esm2020}/plugins/table/utils/get-min-max-cell-index.mjs +0 -0
  241. /package/{esm2022 → esm2020}/plugins/table/utils/get-select-cell-node.mjs +0 -0
  242. /package/{esm2022 → esm2020}/plugins/table/utils/handle-cell.mjs +0 -0
  243. /package/{esm2022 → esm2020}/plugins/table/utils/index.mjs +0 -0
  244. /package/{esm2022 → esm2020}/plugins/table/utils/is-header-row.mjs +0 -0
  245. /package/{esm2022 → esm2020}/plugins/table/utils/is-legal-table.mjs +0 -0
  246. /package/{esm2022 → esm2020}/plugins/table/utils/is-range-in-table.mjs +0 -0
  247. /package/{esm2022 → esm2020}/plugins/table/utils/is-selection-in-table.mjs +0 -0
  248. /package/{esm2022 → esm2020}/plugins/table/utils/is-virtual-key.mjs +0 -0
  249. /package/{esm2022 → esm2020}/plugins/table/utils/merge-cell.mjs +0 -0
  250. /package/{esm2022 → esm2020}/plugins/table/utils/next-path.mjs +0 -0
  251. /package/{esm2022 → esm2020}/plugins/table/utils/normalize-table.mjs +0 -0
  252. /package/{esm2022 → esm2020}/plugins/table/utils/remove-columns.mjs +0 -0
  253. /package/{esm2022 → esm2020}/plugins/table/utils/remove-row-column.mjs +0 -0
  254. /package/{esm2022 → esm2020}/plugins/table/utils/set-cells-background-color.mjs +0 -0
  255. /package/{esm2022 → esm2020}/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -0
  256. /package/{esm2022 → esm2020}/plugins/table/utils/set-node-options.mjs +0 -0
  257. /package/{esm2022 → esm2020}/plugins/table/utils/split-cell.mjs +0 -0
  258. /package/{esm2022 → esm2020}/plugins/table/utils/table-entry.mjs +0 -0
  259. /package/{esm2022 → esm2020}/plugins/table/utils/table-position.mjs +0 -0
  260. /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.editor.mjs +0 -0
  261. /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.plugin.mjs +0 -0
  262. /package/{esm2022 → esm2020}/plugins/vertical-align/vertical-align.editor.mjs +0 -0
  263. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
  264. /package/{esm2022 → esm2020}/queries/anchor-block-entry.mjs +0 -0
  265. /package/{esm2022 → esm2020}/queries/anchor-block.mjs +0 -0
  266. /package/{esm2022 → esm2020}/queries/anchor-inline-entry.mjs +0 -0
  267. /package/{esm2022 → esm2020}/queries/find-descendant.mjs +0 -0
  268. /package/{esm2022 → esm2020}/queries/find-node.mjs +0 -0
  269. /package/{esm2022 → esm2020}/queries/find-path.mjs +0 -0
  270. /package/{esm2022 → esm2020}/queries/get-above-by-type.mjs +0 -0
  271. /package/{esm2022 → esm2020}/queries/get-above.mjs +0 -0
  272. /package/{esm2022 → esm2020}/queries/get-anchor-block-entry.mjs +0 -0
  273. /package/{esm2022 → esm2020}/queries/get-block-above.mjs +0 -0
  274. /package/{esm2022 → esm2020}/queries/get-block-card-above.mjs +0 -0
  275. /package/{esm2022 → esm2020}/queries/get-block-card-cursor.mjs +0 -0
  276. /package/{esm2022 → esm2020}/queries/get-container-blocks.mjs +0 -0
  277. /package/{esm2022 → esm2020}/queries/get-directly-parent.mjs +0 -0
  278. /package/{esm2022 → esm2020}/queries/get-insert-elements-path.mjs +0 -0
  279. /package/{esm2022 → esm2020}/queries/get-last-child-path.mjs +0 -0
  280. /package/{esm2022 → esm2020}/queries/get-last-node.mjs +0 -0
  281. /package/{esm2022 → esm2020}/queries/get-next-sibling-nodes.mjs +0 -0
  282. /package/{esm2022 → esm2020}/queries/get-node.mjs +0 -0
  283. /package/{esm2022 → esm2020}/queries/get-nodes-by-type.mjs +0 -0
  284. /package/{esm2022 → esm2020}/queries/get-nodes.mjs +0 -0
  285. /package/{esm2022 → esm2020}/queries/get-parent.mjs +0 -0
  286. /package/{esm2022 → esm2020}/queries/get-plain-text.mjs +0 -0
  287. /package/{esm2022 → esm2020}/queries/get-plugin-by-toolbar.mjs +0 -0
  288. /package/{esm2022 → esm2020}/queries/get-point-before.mjs +0 -0
  289. /package/{esm2022 → esm2020}/queries/get-point-from-location.mjs +0 -0
  290. /package/{esm2022 → esm2020}/queries/get-previous-path.mjs +0 -0
  291. /package/{esm2022 → esm2020}/queries/get-rang-from-block-start.mjs +0 -0
  292. /package/{esm2022 → esm2020}/queries/get-range-before.mjs +0 -0
  293. /package/{esm2022 → esm2020}/queries/get-selection-marks.mjs +0 -0
  294. /package/{esm2022 → esm2020}/queries/get-selection-nodes-by-type.mjs +0 -0
  295. /package/{esm2022 → esm2020}/queries/get-text.mjs +0 -0
  296. /package/{esm2022 → esm2020}/queries/get-toolbar-disabled.mjs +0 -0
  297. /package/{esm2022 → esm2020}/queries/index.mjs +0 -0
  298. /package/{esm2022 → esm2020}/queries/is-across-blocks.mjs +0 -0
  299. /package/{esm2022 → esm2020}/queries/is-ancestor-empty.mjs +0 -0
  300. /package/{esm2022 → esm2020}/queries/is-ancestor.mjs +0 -0
  301. /package/{esm2022 → esm2020}/queries/is-block-above-empty.mjs +0 -0
  302. /package/{esm2022 → esm2020}/queries/is-block-active.mjs +0 -0
  303. /package/{esm2022 → esm2020}/queries/is-block-card-cursor.mjs +0 -0
  304. /package/{esm2022 → esm2020}/queries/is-block-text-empty-after-selection.mjs +0 -0
  305. /package/{esm2022 → esm2020}/queries/is-collapsed.mjs +0 -0
  306. /package/{esm2022 → esm2020}/queries/is-contain-nested-type.mjs +0 -0
  307. /package/{esm2022 → esm2020}/queries/is-container-type.mjs +0 -0
  308. /package/{esm2022 → esm2020}/queries/is-descendant.mjs +0 -0
  309. /package/{esm2022 → esm2020}/queries/is-empty-content-filter.mjs +0 -0
  310. /package/{esm2022 → esm2020}/queries/is-empty-content.mjs +0 -0
  311. /package/{esm2022 → esm2020}/queries/is-empty-paragraph-by-path.mjs +0 -0
  312. /package/{esm2022 → esm2020}/queries/is-empty-paragraph.mjs +0 -0
  313. /package/{esm2022 → esm2020}/queries/is-first-child.mjs +0 -0
  314. /package/{esm2022 → esm2020}/queries/is-global-collapsed.mjs +0 -0
  315. /package/{esm2022 → esm2020}/queries/is-include-types.mjs +0 -0
  316. /package/{esm2022 → esm2020}/queries/is-node-type-in.mjs +0 -0
  317. /package/{esm2022 → esm2020}/queries/is-node-type.mjs +0 -0
  318. /package/{esm2022 → esm2020}/queries/is-paragraph.mjs +0 -0
  319. /package/{esm2022 → esm2020}/queries/is-point-at-root.mjs +0 -0
  320. /package/{esm2022 → esm2020}/queries/is-range-across-blocks.mjs +0 -0
  321. /package/{esm2022 → esm2020}/queries/is-range-at-root.mjs +0 -0
  322. /package/{esm2022 → esm2020}/queries/is-start.mjs +0 -0
  323. /package/{esm2022 → esm2020}/queries/some-node.mjs +0 -0
  324. /package/{esm2022 → esm2020}/shortcuts/index.mjs +0 -0
  325. /package/{esm2022 → esm2020}/shortcuts/mark.mjs +0 -0
  326. /package/{esm2022 → esm2020}/test/index.mjs +0 -0
  327. /package/{esm2022 → esm2020}/test/utils/with-plugin.mjs +0 -0
  328. /package/{esm2022 → esm2020}/transforms/apply-deep-to-nodes.mjs +0 -0
  329. /package/{esm2022 → esm2020}/transforms/clear-marks.mjs +0 -0
  330. /package/{esm2022 → esm2020}/transforms/close-conversion-hint.mjs +0 -0
  331. /package/{esm2022 → esm2020}/transforms/delete-element.mjs +0 -0
  332. /package/{esm2022 → esm2020}/transforms/handle-continual-delete-backward.mjs +0 -0
  333. /package/{esm2022 → esm2020}/transforms/handle-continual-insert-break.mjs +0 -0
  334. /package/{esm2022 → esm2020}/transforms/index.mjs +0 -0
  335. /package/{esm2022 → esm2020}/transforms/insert-elements.mjs +0 -0
  336. /package/{esm2022 → esm2020}/transforms/insert-paragraph.mjs +0 -0
  337. /package/{esm2022 → esm2020}/transforms/merge-deep-to-nodes.mjs +0 -0
  338. /package/{esm2022 → esm2020}/transforms/move-children.mjs +0 -0
  339. /package/{esm2022 → esm2020}/transforms/on-keydown-reset-block-type.mjs +0 -0
  340. /package/{esm2022 → esm2020}/transforms/set-end-selection.mjs +0 -0
  341. /package/{esm2022 → esm2020}/transforms/set-marks.mjs +0 -0
  342. /package/{esm2022 → esm2020}/transforms/set-node.mjs +0 -0
  343. /package/{esm2022 → esm2020}/transforms/un-hang-range.mjs +0 -0
  344. /package/{esm2022 → esm2020}/transforms/un-wrap.mjs +0 -0
  345. /package/{esm2022 → esm2020}/transforms/unwrap-nodes-by-type.mjs +0 -0
  346. /package/{esm2022 → esm2020}/utils/auto-focus.mjs +0 -0
  347. /package/{esm2022 → esm2020}/utils/blob.mjs +0 -0
  348. /package/{esm2022 → esm2020}/utils/cast-array.mjs +0 -0
  349. /package/{esm2022 → esm2020}/utils/color-picker.mjs +0 -0
  350. /package/{esm2022 → esm2020}/utils/common.mjs +0 -0
  351. /package/{esm2022 → esm2020}/utils/copy-node.mjs +0 -0
  352. /package/{esm2022 → esm2020}/utils/create-empty-paragraph.mjs +0 -0
  353. /package/{esm2022 → esm2020}/utils/data-transform.mjs +0 -0
  354. /package/{esm2022 → esm2020}/utils/dom.mjs +0 -0
  355. /package/{esm2022 → esm2020}/utils/editor-uuid.mjs +0 -0
  356. /package/{esm2022 → esm2020}/utils/fragment.mjs +0 -0
  357. /package/{esm2022 → esm2020}/utils/get-editable-element-height.mjs +0 -0
  358. /package/{esm2022 → esm2020}/utils/get-toolbar-class.mjs +0 -0
  359. /package/{esm2022 → esm2020}/utils/id-creator.mjs +0 -0
  360. /package/{esm2022 → esm2020}/utils/index.mjs +0 -0
  361. /package/{esm2022 → esm2020}/utils/insert-data-by-invalid-type.mjs +0 -0
  362. /package/{esm2022 → esm2020}/utils/is-clean-empty-paragraph.mjs +0 -0
  363. /package/{esm2022 → esm2020}/utils/is-inline.mjs +0 -0
  364. /package/{esm2022 → esm2020}/utils/lodash.mjs +0 -0
  365. /package/{esm2022 → esm2020}/utils/match.mjs +0 -0
  366. /package/{esm2022 → esm2020}/utils/merge-element-options.mjs +0 -0
  367. /package/{esm2022 → esm2020}/utils/refocus.mjs +0 -0
  368. /package/{esm2022 → esm2020}/utils/scroll-into-view.mjs +0 -0
  369. /package/{esm2022 → esm2020}/utils/weak-maps.mjs +0 -0
  370. /package/{esm2022 → esm2020}/worktile-theia.mjs +0 -0
@@ -28,7 +28,6 @@ export declare const TheEditor: {
28
28
  findKey(editor: AngularEditor, node: Node): import("slate-angular").Key;
29
29
  onError(errorData: import("slate-angular").SlateError): void;
30
30
  findPath(editor: AngularEditor, node: Node): Path;
31
- isNodeInEditor(editor: AngularEditor, node: Node): boolean;
32
31
  findDocumentOrShadowRoot(editor: AngularEditor): Document | ShadowRoot;
33
32
  isFocused(editor: AngularEditor): boolean;
34
33
  isReadonly(editor: AngularEditor): boolean;
@@ -44,16 +43,15 @@ export declare const TheEditor: {
44
43
  insertTextData(editor: AngularEditor, data: DataTransfer): boolean;
45
44
  onKeydown(editor: AngularEditor, data: KeyboardEvent): void;
46
45
  onClick(editor: AngularEditor, data: MouseEvent): void;
47
- setFragmentData(editor: AngularEditor, data: DataTransfer, originEvent?: "drag" | "copy" | "cut"): void;
46
+ setFragmentData(editor: AngularEditor, data: DataTransfer, originEvent?: "copy" | "cut" | "drag"): void;
48
47
  deleteCutData(editor: AngularEditor): void;
49
48
  toDOMNode(editor: AngularEditor, node: Node): HTMLElement;
50
49
  toDOMPoint(editor: AngularEditor, point: import("slate").BasePoint): import("slate-angular").DOMPoint;
51
50
  toDOMRange(editor: AngularEditor, range: import("slate").BaseRange): globalThis.Range;
52
51
  toSlateNode(editor: AngularEditor, domNode: globalThis.Node): Node;
53
52
  findEventRange(editor: AngularEditor, event: any): import("slate").BaseRange;
54
- isLeafInEditor(editor: AngularEditor, leafNode: globalThis.Element): boolean;
55
53
  toSlatePoint(editor: AngularEditor, domPoint: import("slate-angular").DOMPoint): import("slate").BasePoint;
56
- toSlateRange(editor: AngularEditor, domRange: globalThis.Range | StaticRange | Selection): import("slate").BaseRange;
54
+ toSlateRange(editor: AngularEditor, domRange: StaticRange | globalThis.Range | Selection): import("slate").BaseRange;
57
55
  isLeafBlock(editor: AngularEditor, node: Node): boolean;
58
56
  isBlockCardLeftCursor(editor: AngularEditor): boolean;
59
57
  isBlockCardRightCursor(editor: AngularEditor): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worktile/theia",
3
- "version": "16.1.2",
3
+ "version": "16.1.4",
4
4
  "description": "theia editor",
5
5
  "author": "YanDong <nanianqiumo@foxmail.com>",
6
6
  "homepage": "https://github.com/atinc/theia#readme",
@@ -13,9 +13,11 @@
13
13
  ".": {
14
14
  "sass": "./styles/index.scss",
15
15
  "types": "./index.d.ts",
16
- "esm2022": "./esm2022/worktile-theia.mjs",
17
- "esm": "./esm2022/worktile-theia.mjs",
18
- "default": "./fesm2022/worktile-theia.mjs"
16
+ "esm2020": "./esm2020/worktile-theia.mjs",
17
+ "es2020": "./fesm2020/worktile-theia.mjs",
18
+ "es2015": "./fesm2015/worktile-theia.mjs",
19
+ "node": "./fesm2015/worktile-theia.mjs",
20
+ "default": "./fesm2020/worktile-theia.mjs"
19
21
  },
20
22
  "./styles/index": {
21
23
  "sass": "./styles/index.scss"
@@ -47,7 +49,11 @@
47
49
  "lodash": "3.10.1",
48
50
  "@angular/core": "^16.2.1"
49
51
  },
50
- "module": "fesm2022/worktile-theia.mjs",
52
+ "module": "fesm2015/worktile-theia.mjs",
53
+ "es2020": "fesm2020/worktile-theia.mjs",
54
+ "esm2020": "esm2020/worktile-theia.mjs",
55
+ "fesm2020": "fesm2020/worktile-theia.mjs",
56
+ "fesm2015": "fesm2015/worktile-theia.mjs",
51
57
  "typings": "index.d.ts",
52
58
  "sideEffects": false
53
59
  }
@@ -31,5 +31,5 @@ export declare class TheLinkEditComponent implements OnInit {
31
31
  closePopover(type?: string): void;
32
32
  applyLink(form: any): void;
33
33
  static ɵfac: i0.ɵɵFactoryDeclaration<TheLinkEditComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkEditComponent, "the-link-edit", never, { "tag": { "alias": "tag"; "required": false; }; "node": { "alias": "node"; "required": false; }; "link": { "alias": "link"; "required": false; }; "text": { "alias": "text"; "required": false; }; "originSelection": { "alias": "originSelection"; "required": false; }; }, {}, never, never, false, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkEditComponent, "the-link-edit", never, { "tag": "tag"; "node": "node"; "link": "link"; "text": "text"; "originSelection": "originSelection"; }, {}, never, never, false, never>;
35
35
  }
@@ -11,5 +11,5 @@ export declare class TheLinkHoverComponent implements OnInit {
11
11
  editLink(event: MouseEvent): void;
12
12
  removeLink(event: MouseEvent): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<TheLinkHoverComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkHoverComponent, "the-link-hover", never, { "link": { "alias": "link"; "required": false; }; "dom": { "alias": "dom"; "required": false; }; "editHandle": { "alias": "editHandle"; "required": false; }; "deleteHandle": { "alias": "deleteHandle"; "required": false; }; }, {}, never, never, false, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheLinkHoverComponent, "the-link-hover", never, { "link": "link"; "dom": "dom"; "editHandle": "editHandle"; "deleteHandle": "deleteHandle"; }, {}, never, never, false, never>;
15
15
  }
@@ -8,5 +8,5 @@ export declare abstract class TheBaseSuggestion {
8
8
  abstract getSearchResult(keywords: string): void;
9
9
  abstract selectMention<T>(event: T): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<TheBaseSuggestion, never>;
11
- static ɵdir: i0.ɵɵDirectiveDeclaration<TheBaseSuggestion, never, never, { "editor": { "alias": "editor"; "required": false; }; "type": { "alias": "type"; "required": false; }; "keywords": { "alias": "keywords"; "required": false; }; }, {}, never, never, false, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TheBaseSuggestion, never, never, { "editor": "editor"; "type": "type"; "keywords": "keywords"; }, {}, never, never, false, never>;
12
12
  }
@@ -25,5 +25,5 @@ export declare class TheQuickInsertComponent implements OnInit {
25
25
  mouseLeave(event: MouseEvent): void;
26
26
  handleClick(event: MouseEvent): void;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<TheQuickInsertComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<TheQuickInsertComponent, "[theQuickInsert]", never, { "editor": { "alias": "editor"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; }, {}, never, never, false, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheQuickInsertComponent, "[theQuickInsert]", never, { "editor": "editor"; "isVisible": "isVisible"; }, {}, never, never, false, never>;
29
29
  }
@@ -24,5 +24,5 @@ export declare class TheInsertMarkComponent implements OnInit, OnDestroy {
24
24
  onMouseLeave(event: MouseEvent): void;
25
25
  getLength(): string;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<TheInsertMarkComponent, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<TheInsertMarkComponent, "the-table-insert-mark", never, { "type": { "alias": "type"; "required": false; }; "at": { "alias": "at"; "required": false; }; "tableStore": { "alias": "tableStore"; "required": false; }; "parentElement": { "alias": "parentElement"; "required": false; }; }, {}, never, never, false, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheInsertMarkComponent, "the-table-insert-mark", never, { "type": "type"; "at": "at"; "tableStore": "tableStore"; "parentElement": "parentElement"; }, {}, never, never, false, never>;
28
28
  }
@@ -80,7 +80,7 @@ export declare class TheTableComponent extends TheBaseElementComponent<TableElem
80
80
  subscribeCellsChange(): void;
81
81
  useRowControls(): void;
82
82
  detectChanges(): void;
83
- resolveImage(): Promise<any[]> | Promise<boolean>;
83
+ resolveImage(): Promise<boolean> | Promise<any[]>;
84
84
  getColControls(): void;
85
85
  getIsInTable(): void;
86
86
  getDefaultCellWidth(): number[];
@@ -13,5 +13,5 @@ export declare class TheTableOptionsComponent implements OnInit {
13
13
  setColumnOptions(): void;
14
14
  setTableOptions(event: MouseEvent, option: TableDropdownOption): void;
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<TheTableOptionsComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<TheTableOptionsComponent, "the-table-options", never, { "editor": { "alias": "editor"; "required": false; }; }, {}, never, never, false, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheTableOptionsComponent, "the-table-options", never, { "editor": "editor"; }, {}, never, never, false, never>;
17
17
  }
@@ -38,7 +38,7 @@ export declare class TheTableToolbarComponent implements OnInit, OnDestroy {
38
38
  setEquallyColumnHandle(event: MouseEvent): void;
39
39
  openTableOptionMenu(event: Event): void;
40
40
  static ɵfac: i0.ɵɵFactoryDeclaration<TheTableToolbarComponent, never>;
41
- static ɵcmp: i0.ɵɵComponentDeclaration<TheTableToolbarComponent, "the-table-toolbar", never, { "tableStore": { "alias": "tableStore"; "required": false; }; "tableElement": { "alias": "tableElement"; "required": false; }; }, {}, never, never, false, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<TheTableToolbarComponent, "the-table-toolbar", never, { "tableStore": "tableStore"; "tableElement": "tableElement"; }, {}, never, never, false, never>;
42
42
  }
43
43
  export declare enum DeleteIcon {
44
44
  'table-delete-rows' = "table-delete-rows",
@@ -3,6 +3,6 @@ import { EditorAboveOptions } from '../interfaces';
3
3
  /**
4
4
  * Is the range (default: selection) across blocks.
5
5
  */
6
- export declare const isRangeAcrossBlocks: (editor: Editor, { at, ...options }?: Omit<EditorAboveOptions<import("slate").Ancestor>, "at" | "match"> & {
6
+ export declare const isRangeAcrossBlocks: (editor: Editor, { at, ...options }?: Omit<EditorAboveOptions<import("slate").Ancestor>, "match" | "at"> & {
7
7
  at?: Range | null;
8
8
  }) => boolean;
@@ -1,375 +0,0 @@
1
- import { DOWN_ARROW, LEFT_ARROW, ENTER, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
2
- import { forwardRef, Optional, SkipSelf } from '@angular/core';
3
- import { ContentChildren, Directive, EventEmitter, HostBinding, Inject, Input, Output } from '@angular/core';
4
- import { fromEvent } from 'rxjs';
5
- import { debounceTime } from 'rxjs/operators';
6
- import { THE_LISTBOX_TOKEN, THE_LISTBOX_PARENT_OPTION_TOKEN, THE_LISTBOX_PARENT_GROUP_TOKEN } from './listbox.type';
7
- import * as i0 from "@angular/core";
8
- export class TheListboxOptionDirective {
9
- get hasChild() {
10
- return this._options.length > 0;
11
- }
12
- get firstChild() {
13
- return this._options.first;
14
- }
15
- constructor(parentOption, parentGroup, elementRef) {
16
- this.parentOption = parentOption;
17
- this.parentGroup = parentGroup;
18
- this.elementRef = elementRef;
19
- this._active = false;
20
- this.className = 'the-listbox-option';
21
- }
22
- ngOnInit() { }
23
- ngAfterContentInit() { }
24
- getGroups() {
25
- const groups = [];
26
- this._options.forEach(option => {
27
- if (option.parentOption && option.parentOption === this && !groups.includes(option.parentGroup)) {
28
- groups.push(option.parentGroup);
29
- }
30
- });
31
- return groups;
32
- }
33
- setActive(active) {
34
- this._active = active;
35
- if (active) {
36
- this.elementRef.nativeElement.classList.add('focus');
37
- }
38
- else {
39
- this.elementRef.nativeElement.classList.remove('focus');
40
- }
41
- }
42
- getActive() {
43
- return this._active;
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxOptionDirective, deps: [{ token: THE_LISTBOX_PARENT_OPTION_TOKEN, optional: true, skipSelf: true }, { token: THE_LISTBOX_PARENT_GROUP_TOKEN }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
46
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxOptionDirective, selector: "[theListboxOption]", inputs: { theOptionValue: "theOptionValue", theOptionDisabled: "theOptionDisabled" }, host: { properties: { "class": "this.className" } }, providers: [
47
- {
48
- provide: THE_LISTBOX_PARENT_OPTION_TOKEN,
49
- useExisting: TheListboxOptionDirective
50
- }
51
- ], queries: [{ propertyName: "_options", predicate: i0.forwardRef(function () { return TheListboxOptionDirective; }), descendants: true }], exportAs: ["theListboxOption"], ngImport: i0 }); }
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxOptionDirective, decorators: [{
54
- type: Directive,
55
- args: [{
56
- selector: '[theListboxOption]',
57
- exportAs: 'theListboxOption',
58
- providers: [
59
- {
60
- provide: THE_LISTBOX_PARENT_OPTION_TOKEN,
61
- useExisting: TheListboxOptionDirective
62
- }
63
- ]
64
- }]
65
- }], ctorParameters: function () { return [{ type: TheListboxOptionDirective, decorators: [{
66
- type: Inject,
67
- args: [THE_LISTBOX_PARENT_OPTION_TOKEN]
68
- }, {
69
- type: Optional
70
- }, {
71
- type: SkipSelf
72
- }] }, { type: TheListboxGroupDirective, decorators: [{
73
- type: Inject,
74
- args: [THE_LISTBOX_PARENT_GROUP_TOKEN]
75
- }] }, { type: i0.ElementRef }]; }, propDecorators: { className: [{
76
- type: HostBinding,
77
- args: ['class']
78
- }], _options: [{
79
- type: ContentChildren,
80
- args: [forwardRef(() => TheListboxOptionDirective), { descendants: true }]
81
- }], theOptionValue: [{
82
- type: Input
83
- }], theOptionDisabled: [{
84
- type: Input
85
- }] } });
86
- export class TheListboxGroupDirective {
87
- constructor(parentOption, theListBox) {
88
- this.parentOption = parentOption;
89
- this.theListBox = theListBox;
90
- this.className = 'the-listbox-group';
91
- this.options = [];
92
- /**
93
- * 大于 1 表示水平分组,小于等于 1 表示垂直分组
94
- */
95
- this.horizontalColumn = 1;
96
- }
97
- ngOnInit() { }
98
- ngAfterContentInit() {
99
- this.filterOptions();
100
- }
101
- filterOptions() {
102
- this.options = this._options.filter(_option => {
103
- if (_option.parentGroup && _option.parentGroup === this) {
104
- return true;
105
- }
106
- else {
107
- return false;
108
- }
109
- });
110
- }
111
- getSiblingGroups() {
112
- if (this.parentOption) {
113
- return this.parentOption.getGroups();
114
- }
115
- else {
116
- return this.theListBox.groups;
117
- }
118
- }
119
- hasChild() {
120
- return this.options.length > 0;
121
- }
122
- getFirst() {
123
- return this.options[0];
124
- }
125
- getLast() {
126
- return this.options[this.options.length - 1];
127
- }
128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxGroupDirective, deps: [{ token: THE_LISTBOX_PARENT_OPTION_TOKEN, optional: true, skipSelf: true }, { token: THE_LISTBOX_TOKEN }], target: i0.ɵɵFactoryTarget.Directive }); }
129
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxGroupDirective, selector: "[theListboxGroup]", inputs: { horizontalColumn: "horizontalColumn" }, host: { properties: { "class": "this.className" } }, providers: [
130
- {
131
- provide: THE_LISTBOX_PARENT_GROUP_TOKEN,
132
- useExisting: TheListboxGroupDirective
133
- }
134
- ], queries: [{ propertyName: "_options", predicate: TheListboxOptionDirective, descendants: true }], exportAs: ["theListboxGroup"], ngImport: i0 }); }
135
- }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxGroupDirective, decorators: [{
137
- type: Directive,
138
- args: [{
139
- selector: '[theListboxGroup]',
140
- exportAs: 'theListboxGroup',
141
- providers: [
142
- {
143
- provide: THE_LISTBOX_PARENT_GROUP_TOKEN,
144
- useExisting: TheListboxGroupDirective
145
- }
146
- ]
147
- }]
148
- }], ctorParameters: function () { return [{ type: TheListboxOptionDirective, decorators: [{
149
- type: Inject,
150
- args: [THE_LISTBOX_PARENT_OPTION_TOKEN]
151
- }, {
152
- type: Optional
153
- }, {
154
- type: SkipSelf
155
- }] }, { type: TheListboxDirective, decorators: [{
156
- type: Inject,
157
- args: [THE_LISTBOX_TOKEN]
158
- }] }]; }, propDecorators: { className: [{
159
- type: HostBinding,
160
- args: ['class']
161
- }], _options: [{
162
- type: ContentChildren,
163
- args: [TheListboxOptionDirective, { descendants: true }]
164
- }], horizontalColumn: [{
165
- type: Input
166
- }] } });
167
- export class TheListboxDirective {
168
- constructor(ngZone, elementRef) {
169
- this.ngZone = ngZone;
170
- this.elementRef = elementRef;
171
- this.className = 'the-listbox-container';
172
- this.groups = [];
173
- this.autoActiveFirstItem = true;
174
- this.theListboxChange = new EventEmitter();
175
- }
176
- ngOnInit() { }
177
- ngAfterContentInit() {
178
- this.filterGroups();
179
- if (this.groups.length > 0 && this.autoActiveFirstItem) {
180
- this.setActiveItem(null, this.groups[0].getFirst(), 'init');
181
- }
182
- this._optionChangesSubscription = this._options.changes.pipe(debounceTime(20)).subscribe(() => {
183
- this.filterGroups();
184
- this.setActiveItem(this.activeOption, this.groups[0].getFirst(), 'init');
185
- });
186
- this.ngZone.runOutsideAngular(() => {
187
- this._keyboardSubscription = fromEvent(this.keyboardContainer || this.elementRef.nativeElement, 'keydown').subscribe(event => {
188
- this.handleKeydown(event);
189
- });
190
- });
191
- }
192
- filterGroups() {
193
- this.groups = this._groups.filter(group => {
194
- group.filterOptions();
195
- if (!group.parentOption && group.hasChild()) {
196
- return true;
197
- }
198
- else {
199
- return false;
200
- }
201
- });
202
- }
203
- handleKeydown(event) {
204
- const { keyCode } = event;
205
- if (!this.activeOption && (keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === RIGHT_ARROW || keyCode === LEFT_ARROW)) {
206
- this.setActiveItem(null, this.groups[0].getFirst(), 'init');
207
- return;
208
- }
209
- switch (keyCode) {
210
- case DOWN_ARROW:
211
- this.setNextLineActive();
212
- event.preventDefault();
213
- break;
214
- case UP_ARROW:
215
- this.setPreviousLineActive();
216
- event.preventDefault();
217
- break;
218
- case RIGHT_ARROW:
219
- this.setNextItemActive();
220
- event.preventDefault();
221
- break;
222
- case LEFT_ARROW:
223
- this.setPreviousItemActive();
224
- event.preventDefault();
225
- break;
226
- case ENTER:
227
- this.theListboxChange.emit({ option: this.activeOption, type: 'select' });
228
- event.preventDefault();
229
- break;
230
- }
231
- }
232
- /**
233
- * ←
234
- */
235
- setPreviousItemActive() {
236
- if (this.activeOption.parentOption) {
237
- this.setActiveItem(this.activeOption, this.activeOption.parentOption, 'parent');
238
- }
239
- else {
240
- const groupOptions = this.activeOption.parentGroup.options;
241
- let optionIndex = groupOptions.indexOf(this.activeOption);
242
- let newOptionIndex = optionIndex - 1;
243
- if (newOptionIndex >= 0) {
244
- this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
245
- }
246
- else {
247
- this.enterPreviousGroup();
248
- }
249
- }
250
- }
251
- /**
252
- * ↓ 键
253
- */
254
- setNextLineActive(activeOption) {
255
- const _activeOption = activeOption ? activeOption : this.activeOption;
256
- const groupOptions = _activeOption.parentGroup.options;
257
- let optionIndex = groupOptions.indexOf(_activeOption);
258
- let newOptionIndex = optionIndex + _activeOption.parentGroup.horizontalColumn;
259
- const lastLineLength = groupOptions.length % _activeOption.parentGroup.horizontalColumn;
260
- const lastLineStartIndex = groupOptions.length - (lastLineLength > 0 ? lastLineLength : 1);
261
- let newOption = null;
262
- if (newOptionIndex <= groupOptions.length - 1) {
263
- newOption = groupOptions[newOptionIndex];
264
- }
265
- else if (optionIndex < lastLineStartIndex) {
266
- newOptionIndex = groupOptions.length - 1;
267
- newOption = groupOptions[newOptionIndex];
268
- }
269
- if (newOption) {
270
- this.setActiveItem(this.activeOption, newOption, 'turn');
271
- }
272
- else {
273
- this.enterNextGroup();
274
- }
275
- }
276
- /**
277
- * → 键
278
- */
279
- setNextItemActive() {
280
- if (this.activeOption.hasChild) {
281
- this.setActiveItem(this.activeOption, this.activeOption.firstChild, 'child');
282
- }
283
- else {
284
- const groupOptions = this.activeOption.parentGroup.options;
285
- let optionIndex = groupOptions.indexOf(this.activeOption);
286
- let newOptionIndex = optionIndex + 1;
287
- if (newOptionIndex <= groupOptions.length - 1) {
288
- this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
289
- }
290
- else {
291
- this.enterNextGroup();
292
- }
293
- }
294
- }
295
- /**
296
- * ↑ 键
297
- */
298
- setPreviousLineActive() {
299
- const groupOptions = this.activeOption.parentGroup.options;
300
- let optionIndex = groupOptions.indexOf(this.activeOption);
301
- let newOptionIndex = optionIndex - this.activeOption.parentGroup.horizontalColumn;
302
- if (newOptionIndex >= 0) {
303
- this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');
304
- }
305
- else {
306
- this.enterPreviousGroup();
307
- }
308
- }
309
- enterNextGroup() {
310
- const groups = this.activeOption.parentGroup.getSiblingGroups();
311
- const groupIndex = groups.indexOf(this.activeOption.parentGroup);
312
- let newGroupIndex = groupIndex + 1;
313
- if (newGroupIndex > groups.length - 1) {
314
- newGroupIndex = 0;
315
- }
316
- this.setActiveItem(this.activeOption, groups[newGroupIndex].getFirst(), 'turn');
317
- }
318
- enterPreviousGroup() {
319
- const groups = this.activeOption.parentGroup.getSiblingGroups();
320
- const groupIndex = groups.indexOf(this.activeOption.parentGroup);
321
- let newGroupIndex = groupIndex - 1;
322
- if (newGroupIndex < 0) {
323
- newGroupIndex = groups.length - 1;
324
- }
325
- this.setActiveItem(this.activeOption, groups[newGroupIndex].getLast(), 'turn');
326
- }
327
- setActiveItem(previous, option, type) {
328
- if (previous) {
329
- previous.setActive(false);
330
- }
331
- option.setActive(true);
332
- this.activeOption = option;
333
- this.theListboxChange.emit({ option, type });
334
- }
335
- ngOnDestroy() {
336
- this._optionChangesSubscription.unsubscribe();
337
- this._keyboardSubscription.unsubscribe();
338
- }
339
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
340
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.1", type: TheListboxDirective, selector: "[theListBox]", inputs: { keyboardContainer: "keyboardContainer", autoActiveFirstItem: "autoActiveFirstItem" }, outputs: { theListboxChange: "theListboxChange" }, host: { properties: { "class": "this.className" } }, providers: [
341
- {
342
- provide: THE_LISTBOX_TOKEN,
343
- useExisting: TheListboxDirective
344
- }
345
- ], queries: [{ propertyName: "_groups", predicate: TheListboxGroupDirective, descendants: true }, { propertyName: "_options", predicate: TheListboxOptionDirective, descendants: true }], exportAs: ["theListBox"], ngImport: i0 }); }
346
- }
347
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: TheListboxDirective, decorators: [{
348
- type: Directive,
349
- args: [{
350
- selector: '[theListBox]',
351
- exportAs: 'theListBox',
352
- providers: [
353
- {
354
- provide: THE_LISTBOX_TOKEN,
355
- useExisting: TheListboxDirective
356
- }
357
- ]
358
- }]
359
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { className: [{
360
- type: HostBinding,
361
- args: ['class']
362
- }], _groups: [{
363
- type: ContentChildren,
364
- args: [TheListboxGroupDirective, { descendants: true }]
365
- }], _options: [{
366
- type: ContentChildren,
367
- args: [TheListboxOptionDirective, { descendants: true }]
368
- }], keyboardContainer: [{
369
- type: Input
370
- }], autoActiveFirstItem: [{
371
- type: Input
372
- }], theListboxChange: [{
373
- type: Output
374
- }] } });
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL2xpc3Rib3gvbGlzdGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBSyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUNqQyxNQUFNLGdCQUFnQixDQUFDOztBQVl4QixNQUFNLE9BQU8seUJBQXlCO0lBUWxDLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFNRCxZQUM0RSxZQUF1QyxFQUNoRSxXQUFxQyxFQUM3RSxVQUFtQztRQUY4QixpQkFBWSxHQUFaLFlBQVksQ0FBMkI7UUFDaEUsZ0JBQVcsR0FBWCxXQUFXLENBQTBCO1FBQzdFLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBdEJ0QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRUYsY0FBUyxHQUFHLG9CQUFvQixDQUFDO0lBcUJwRCxDQUFDO0lBRUosUUFBUSxLQUFVLENBQUM7SUFFbkIsa0JBQWtCLEtBQVUsQ0FBQztJQUU3QixTQUFTO1FBQ0wsTUFBTSxNQUFNLEdBQStCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDN0YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0Q7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDOzhHQW5EUSx5QkFBeUIsa0JBcUJ0QiwrQkFBK0IsNkNBQy9CLDhCQUE4QjtrR0F0QmpDLHlCQUF5Qix3TEFQdkI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsK0JBQStCO2dCQUN4QyxXQUFXLEVBQUUseUJBQXlCO2FBQ3pDO1NBQ0osc0ZBT2lDLHlCQUF5Qjs7MkZBTGxELHlCQUF5QjtrQkFWckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsV0FBVywyQkFBMkI7eUJBQ3pDO3FCQUNKO2lCQUNKOzswQkFzQlEsTUFBTTsyQkFBQywrQkFBK0I7OzBCQUFHLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUM3RCxNQUFNOzJCQUFDLDhCQUE4QjtxRUFuQnBCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFHYixRQUFRO3NCQURkLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQVcxRSxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSzs7QUE4Q1YsTUFBTSxPQUFPLHdCQUF3QjtJQVlqQyxZQUM0RSxZQUF1QyxFQUM3RSxVQUErQjtRQURPLGlCQUFZLEdBQVosWUFBWSxDQUEyQjtRQUM3RSxlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQWIvQyxjQUFTLEdBQUcsbUJBQW1CLENBQUM7UUFFdEQsWUFBTyxHQUFnQyxFQUFFLENBQUM7UUFJMUM7O1dBRUc7UUFDTSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFLM0IsQ0FBQztJQUVKLFFBQVEsS0FBVSxDQUFDO0lBRW5CLGtCQUFrQjtRQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUNyRCxPQUFPLElBQUksQ0FBQzthQUNmO2lCQUFNO2dCQUNILE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN4QzthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQzs4R0FuRFEsd0JBQXdCLGtCQWFyQiwrQkFBK0IsNkNBQy9CLGlCQUFpQjtrR0FkcEIsd0JBQXdCLG1KQVB0QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSw4QkFBOEI7Z0JBQ3ZDLFdBQVcsRUFBRSx3QkFBd0I7YUFDeEM7U0FDSixtREFPZ0IseUJBQXlCOzsyRkFMakMsd0JBQXdCO2tCQVZwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsOEJBQThCOzRCQUN2QyxXQUFXLDBCQUEwQjt5QkFDeEM7cUJBQ0o7aUJBQ0o7OzBCQWNRLE1BQU07MkJBQUMsK0JBQStCOzswQkFBRyxRQUFROzswQkFBSSxRQUFROzswQkFDN0QsTUFBTTsyQkFBQyxpQkFBaUI7NENBYlAsU0FBUztzQkFBOUIsV0FBVzt1QkFBQyxPQUFPO2dCQUlzRCxRQUFRO3NCQUFqRixlQUFlO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFLeEQsZ0JBQWdCO3NCQUF4QixLQUFLOztBQXNEVixNQUFNLE9BQU8sbUJBQW1CO0lBcUI1QixZQUFvQixNQUFjLEVBQVUsVUFBbUM7UUFBM0QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBcEJ6RCxjQUFTLEdBQUcsdUJBQXVCLENBQUM7UUFRbkQsV0FBTSxHQUErQixFQUFFLENBQUM7UUFRdEMsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTFCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO0lBRVcsQ0FBQztJQUVuRixRQUFRLEtBQVUsQ0FBQztJQUVuQixrQkFBa0I7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FDbEMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUN2RCxTQUFTLENBQ1osQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN6QyxPQUFPLElBQUksQ0FBQzthQUNmO2lCQUFNO2dCQUNILE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW9CO1FBQzlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssVUFBVSxDQUFDLEVBQUU7WUFDN0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1RCxPQUFPO1NBQ1Y7UUFFRCxRQUFRLE9BQU8sRUFBRTtZQUNiLEtBQUssVUFBVTtnQkFDWCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1YsS0FBSyxRQUFRO2dCQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM3QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07WUFDVixLQUFLLFdBQVc7Z0JBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUNWLEtBQUssVUFBVTtnQkFDWCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDMUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUI7UUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRTtZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkY7YUFBTTtZQUNILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUMzRCxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRCxJQUFJLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksY0FBYyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUMvRTtpQkFBTTtnQkFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtTQUNKO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsWUFBd0M7UUFDdEQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEUsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDdkQsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxJQUFJLGNBQWMsR0FBRyxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5RSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDeEYsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxjQUFjLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0MsU0FBUyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QzthQUFNLElBQUksV0FBVyxHQUFHLGtCQUFrQixFQUFFO1lBQ3pDLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN6QyxTQUFTLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzVEO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRjthQUFNO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQzNELElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFELElBQUksY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxjQUFjLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDL0U7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3pCO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxxQkFBcUI7UUFDakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzNELElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELElBQUksY0FBYyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRixJQUFJLGNBQWMsSUFBSSxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvRTthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksYUFBYSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsYUFBYSxHQUFHLENBQUMsQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksYUFBYSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUEwQyxFQUFFLE1BQWlDLEVBQUUsSUFBK0I7UUFDeEgsSUFBSSxRQUFRLEVBQUU7WUFDVixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsMEJBQTBCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7OEdBaE1RLG1CQUFtQjtrR0FBbkIsbUJBQW1CLCtPQVBqQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxtQkFBbUI7YUFDbkM7U0FDSixrREFhZ0Isd0JBQXdCLDhEQUV4Qix5QkFBeUI7OzJGQWJqQyxtQkFBbUI7a0JBVi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxxQkFBcUI7eUJBQ25DO3FCQUNKO2lCQUNKO3NIQUV5QixTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBVXdELE9BQU87c0JBQWxGLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUVhLFFBQVE7c0JBQXBGLGVBQWU7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUV4RCxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIEVOVEVSLCBSSUdIVF9BUlJPVywgVVBfQVJST1csIFQgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgZm9yd2FyZFJlZiwgTmdab25lLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgVGhlTGlzdGJveENoYW5nZUV2ZW50VHlwZSxcbiAgICBUSEVfTElTVEJPWF9UT0tFTixcbiAgICBUSEVfTElTVEJPWF9QQVJFTlRfT1BUSU9OX1RPS0VOLFxuICAgIFRIRV9MSVNUQk9YX1BBUkVOVF9HUk9VUF9UT0tFTlxufSBmcm9tICcuL2xpc3Rib3gudHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3RoZUxpc3Rib3hPcHRpb25dJyxcbiAgICBleHBvcnRBczogJ3RoZUxpc3Rib3hPcHRpb24nLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSEVfTElTVEJPWF9QQVJFTlRfT1BUSU9OX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHJpdmF0ZSBfYWN0aXZlID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NOYW1lID0gJ3RoZS1saXN0Ym94LW9wdGlvbic7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgX29wdGlvbnM6IFF1ZXJ5TGlzdDxUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlPjtcblxuICAgIGdldCBoYXNDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZmlyc3Q7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGhlT3B0aW9uVmFsdWU6IHVua25vd247XG5cbiAgICBASW5wdXQoKSB0aGVPcHRpb25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFRIRV9MSVNUQk9YX1BBUkVOVF9PUFRJT05fVE9LRU4pIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHB1YmxpYyBwYXJlbnRPcHRpb246IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUsXG4gICAgICAgIEBJbmplY3QoVEhFX0xJU1RCT1hfUEFSRU5UX0dST1VQX1RPS0VOKSBwdWJsaWMgcGFyZW50R3JvdXA6IFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge31cblxuICAgIGdldEdyb3VwcygpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzOiBUaGVMaXN0Ym94R3JvdXBEaXJlY3RpdmVbXSA9IFtdO1xuICAgICAgICB0aGlzLl9vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb24ucGFyZW50T3B0aW9uICYmIG9wdGlvbi5wYXJlbnRPcHRpb24gPT09IHRoaXMgJiYgIWdyb3Vwcy5pbmNsdWRlcyhvcHRpb24ucGFyZW50R3JvdXApKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2gob3B0aW9uLnBhcmVudEdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZvY3VzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGhlTGlzdGJveEdyb3VwXScsXG4gICAgZXhwb3J0QXM6ICd0aGVMaXN0Ym94R3JvdXAnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSEVfTElTVEJPWF9QQVJFTlRfR1JPVVBfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGhlTGlzdGJveEdyb3VwRGlyZWN0aXZlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzTmFtZSA9ICd0aGUtbGlzdGJveC1ncm91cCc7XG5cbiAgICBvcHRpb25zOiBUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwdWJsaWMgX29wdGlvbnM6IFF1ZXJ5TGlzdDxUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIOWkp+S6jiAxIOihqOekuuawtOW5s+WIhue7hO+8jOWwj+S6juetieS6jiAxIOihqOekuuWeguebtOWIhue7hFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhvcml6b250YWxDb2x1bW4gPSAxO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVEhFX0xJU1RCT1hfUEFSRU5UX09QVElPTl9UT0tFTikgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHVibGljIHBhcmVudE9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgQEluamVjdChUSEVfTElTVEJPWF9UT0tFTikgcHVibGljIHRoZUxpc3RCb3g6IFRoZUxpc3Rib3hEaXJlY3RpdmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgIH1cblxuICAgIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKF9vcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKF9vcHRpb24ucGFyZW50R3JvdXAgJiYgX29wdGlvbi5wYXJlbnRHcm91cCA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNpYmxpbmdHcm91cHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50T3B0aW9uLmdldEdyb3VwcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhlTGlzdEJveC5ncm91cHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldEZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zWzBdO1xuICAgIH1cblxuICAgIGdldExhc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5vcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdGhlTGlzdEJveF0nLFxuICAgIGV4cG9ydEFzOiAndGhlTGlzdEJveCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIRV9MSVNUQk9YX1RPS0VOLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRoZUxpc3Rib3hEaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGhlTGlzdGJveERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NOYW1lID0gJ3RoZS1saXN0Ym94LWNvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIF9vcHRpb25DaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIF9rZXlib2FyZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIGFjdGl2ZU9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZTtcblxuICAgIHB1YmxpYyBncm91cHM6IFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZVtdID0gW107XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwcm90ZWN0ZWQgX2dyb3VwczogUXVlcnlMaXN0PFRoZUxpc3Rib3hHcm91cERpcmVjdGl2ZT47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHJvdGVjdGVkIF9vcHRpb25zOiBRdWVyeUxpc3Q8VGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZT47XG5cbiAgICBASW5wdXQoKSBrZXlib2FyZENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBASW5wdXQoKSBhdXRvQWN0aXZlRmlyc3RJdGVtID0gdHJ1ZTtcblxuICAgIEBPdXRwdXQoKSB0aGVMaXN0Ym94Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVMaXN0Ym94Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlckdyb3VwcygpO1xuICAgICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCAmJiB0aGlzLmF1dG9BY3RpdmVGaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbShudWxsLCB0aGlzLmdyb3Vwc1swXS5nZXRGaXJzdCgpLCAnaW5pdCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLl9vcHRpb25zLmNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMjApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJHcm91cHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgdGhpcy5ncm91cHNbMF0uZ2V0Rmlyc3QoKSwgJ2luaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KFxuICAgICAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRDb250YWluZXIgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2tleWRvd24nXG4gICAgICAgICAgICApLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWx0ZXJHcm91cHMoKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLmZpbHRlcihncm91cCA9PiB7XG4gICAgICAgICAgICBncm91cC5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwLnBhcmVudE9wdGlvbiAmJiBncm91cC5oYXNDaGlsZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlT3B0aW9uICYmIChrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IFJJR0hUX0FSUk9XIHx8IGtleUNvZGUgPT09IExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0obnVsbCwgdGhpcy5ncm91cHNbMF0uZ2V0Rmlyc3QoKSwgJ2luaXQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV4dExpbmVBY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBVUF9BUlJPVzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByZXZpb3VzTGluZUFjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgICAgICAgICAgdGhpcy50aGVMaXN0Ym94Q2hhbmdlLmVtaXQoeyBvcHRpb246IHRoaXMuYWN0aXZlT3B0aW9uLCB0eXBlOiAnc2VsZWN0JyB9KTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaQXG4gICAgICovXG4gICAgc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50T3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIHRoaXMuYWN0aXZlT3B0aW9uLnBhcmVudE9wdGlvbiwgJ3BhcmVudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBPcHRpb25zID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAub3B0aW9ucztcbiAgICAgICAgICAgIGxldCBvcHRpb25JbmRleCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKHRoaXMuYWN0aXZlT3B0aW9uKTtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25JbmRleCA9IG9wdGlvbkluZGV4IC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdPcHRpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uLCBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdLCAndHVybicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyUHJldmlvdXNHcm91cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaTIOmUrlxuICAgICAqL1xuICAgIHNldE5leHRMaW5lQWN0aXZlKGFjdGl2ZU9wdGlvbj86IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgX2FjdGl2ZU9wdGlvbiA9IGFjdGl2ZU9wdGlvbiA/IGFjdGl2ZU9wdGlvbiA6IHRoaXMuYWN0aXZlT3B0aW9uO1xuICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBfYWN0aXZlT3B0aW9uLnBhcmVudEdyb3VwLm9wdGlvbnM7XG4gICAgICAgIGxldCBvcHRpb25JbmRleCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKF9hY3RpdmVPcHRpb24pO1xuICAgICAgICBsZXQgbmV3T3B0aW9uSW5kZXggPSBvcHRpb25JbmRleCArIF9hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuaG9yaXpvbnRhbENvbHVtbjtcbiAgICAgICAgY29uc3QgbGFzdExpbmVMZW5ndGggPSBncm91cE9wdGlvbnMubGVuZ3RoICUgX2FjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5ob3Jpem9udGFsQ29sdW1uO1xuICAgICAgICBjb25zdCBsYXN0TGluZVN0YXJ0SW5kZXggPSBncm91cE9wdGlvbnMubGVuZ3RoIC0gKGxhc3RMaW5lTGVuZ3RoID4gMCA/IGxhc3RMaW5lTGVuZ3RoIDogMSk7XG4gICAgICAgIGxldCBuZXdPcHRpb24gPSBudWxsO1xuICAgICAgICBpZiAobmV3T3B0aW9uSW5kZXggPD0gZ3JvdXBPcHRpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbiA9IGdyb3VwT3B0aW9uc1tuZXdPcHRpb25JbmRleF07XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uSW5kZXggPCBsYXN0TGluZVN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbkluZGV4ID0gZ3JvdXBPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBuZXdPcHRpb24gPSBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgbmV3T3B0aW9uLCAndHVybicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbnRlck5leHRHcm91cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog4oaSIOmUrlxuICAgICAqL1xuICAgIHNldE5leHRJdGVtQWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24uaGFzQ2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgdGhpcy5hY3RpdmVPcHRpb24uZmlyc3RDaGlsZCwgJ2NoaWxkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSB0aGlzLmFjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5vcHRpb25zO1xuICAgICAgICAgICAgbGV0IG9wdGlvbkluZGV4ID0gZ3JvdXBPcHRpb25zLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbkluZGV4ID0gb3B0aW9uSW5kZXggKyAxO1xuICAgICAgICAgICAgaWYgKG5ld09wdGlvbkluZGV4IDw9IGdyb3VwT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlT3B0aW9uLCBncm91cE9wdGlvbnNbbmV3T3B0aW9uSW5kZXhdLCAndHVybicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyTmV4dEdyb3VwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDihpEg6ZSuXG4gICAgICovXG4gICAgc2V0UHJldmlvdXNMaW5lQWN0aXZlKCkge1xuICAgICAgICBjb25zdCBncm91cE9wdGlvbnMgPSB0aGlzLmFjdGl2ZU9wdGlvbi5wYXJlbnRHcm91cC5vcHRpb25zO1xuICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSBncm91cE9wdGlvbnMuaW5kZXhPZih0aGlzLmFjdGl2ZU9wdGlvbik7XG4gICAgICAgIGxldCBuZXdPcHRpb25JbmRleCA9IG9wdGlvbkluZGV4IC0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuaG9yaXpvbnRhbENvbHVtbjtcbiAgICAgICAgaWYgKG5ld09wdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbiwgZ3JvdXBPcHRpb25zW25ld09wdGlvbkluZGV4XSwgJ3R1cm4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXJQcmV2aW91c0dyb3VwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbnRlck5leHRHcm91cCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuZ2V0U2libGluZ0dyb3VwcygpO1xuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBzLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXApO1xuICAgICAgICBsZXQgbmV3R3JvdXBJbmRleCA9IGdyb3VwSW5kZXggKyAxO1xuICAgICAgICBpZiAobmV3R3JvdXBJbmRleCA+IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBuZXdHcm91cEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIGdyb3Vwc1tuZXdHcm91cEluZGV4XS5nZXRGaXJzdCgpLCAndHVybicpO1xuICAgIH1cblxuICAgIGVudGVyUHJldmlvdXNHcm91cCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXAuZ2V0U2libGluZ0dyb3VwcygpO1xuICAgICAgICBjb25zdCBncm91cEluZGV4ID0gZ3JvdXBzLmluZGV4T2YodGhpcy5hY3RpdmVPcHRpb24ucGFyZW50R3JvdXApO1xuICAgICAgICBsZXQgbmV3R3JvdXBJbmRleCA9IGdyb3VwSW5kZXggLSAxO1xuICAgICAgICBpZiAobmV3R3JvdXBJbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5ld0dyb3VwSW5kZXggPSBncm91cHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24sIGdyb3Vwc1tuZXdHcm91cEluZGV4XS5nZXRMYXN0KCksICd0dXJuJyk7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlSXRlbShwcmV2aW91czogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSB8IG51bGwsIG9wdGlvbjogVGhlTGlzdGJveE9wdGlvbkRpcmVjdGl2ZSwgdHlwZTogVGhlTGlzdGJveENoYW5nZUV2ZW50VHlwZSkge1xuICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgIHByZXZpb3VzLnNldEFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9uLnNldEFjdGl2ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVPcHRpb24gPSBvcHRpb247XG4gICAgICAgIHRoaXMudGhlTGlzdGJveENoYW5nZS5lbWl0KHsgb3B0aW9uLCB0eXBlIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcHRpb25DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoZUxpc3Rib3hDaGFuZ2VFdmVudCB7XG4gICAgb3B0aW9uOiBUaGVMaXN0Ym94T3B0aW9uRGlyZWN0aXZlO1xuICAgIHR5cGU6IFRoZUxpc3Rib3hDaGFuZ2VFdmVudFR5cGU7XG59XG4iXX0=