@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
@@ -0,0 +1,375 @@
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.5", 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.5", 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.5", 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.5", 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.5", 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.5", 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.5", 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.5", 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.5", 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=