@worktile/theia 3.0.8 → 3.1.0-next.1

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 (397) hide show
  1. package/components/toolbar/toolbar.component.d.ts +2 -3
  2. package/components/toolbar-dropdown/toolbar-dropdown.component.scss +0 -1
  3. package/components/toolbar-item/toolbar-item.component.d.ts +2 -3
  4. package/esm2020/components/color-select/color-select.component.mjs +109 -0
  5. package/{esm2015/components/column-resize/column-resize-notifier.js → esm2020/components/column-resize/column-resize-notifier.mjs} +4 -4
  6. package/{esm2015/components/column-resize/column-resize.directive.js → esm2020/components/column-resize/column-resize.directive.mjs} +4 -4
  7. package/esm2020/components/column-resize/column-resize.module.mjs +33 -0
  8. package/{esm2015/components/column-resize/event-dispatcher.js → esm2020/components/column-resize/event-dispatcher.mjs} +4 -4
  9. package/{esm2015/components/column-resize/overlay-handle.component.js → esm2020/components/column-resize/overlay-handle.component.mjs} +4 -4
  10. package/{esm2015/components/column-resize/resize-ref.js → esm2020/components/column-resize/resize-ref.mjs} +0 -0
  11. package/{esm2015/components/column-resize/resizing.store.js → esm2020/components/column-resize/resizing.store.mjs} +4 -4
  12. package/{esm2015/components/column-resize/selectors.js → esm2020/components/column-resize/selectors.mjs} +0 -0
  13. package/esm2020/components/contextmenu/contextmenu.component.mjs +61 -0
  14. package/esm2020/components/conversion-hint/conversion-hint.component.mjs +54 -0
  15. package/esm2020/components/element/element.component.mjs +23 -0
  16. package/esm2020/components/inline-toolbar/inline-toolbar.component.mjs +138 -0
  17. package/{esm2015/components/nav-split-line/nav-split-line.component.js → esm2020/components/nav-split-line/nav-split-line.component.mjs} +4 -4
  18. package/esm2020/components/table-select/table-select.component.mjs +50 -0
  19. package/esm2020/components/template/template.component.mjs +62 -0
  20. package/{esm2015/components/text/text.component.js → esm2020/components/text/text.component.mjs} +4 -4
  21. package/esm2020/components/toolbar/toolbar.component.mjs +241 -0
  22. package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +129 -0
  23. package/esm2020/components/toolbar-group/toolbar-group.component.mjs +110 -0
  24. package/esm2020/components/toolbar-item/toolbar-item.component.mjs +101 -0
  25. package/{esm2015/constants/auto-format-rules.js → esm2020/constants/auto-format-rules.mjs} +0 -0
  26. package/{esm2015/constants/code.js → esm2020/constants/code.mjs} +0 -0
  27. package/{esm2015/constants/color-select.js → esm2020/constants/color-select.mjs} +0 -0
  28. package/{esm2015/constants/default.js → esm2020/constants/default.mjs} +0 -0
  29. package/{esm2015/constants/error.js → esm2020/constants/error.mjs} +0 -0
  30. package/{esm2015/constants/index.js → esm2020/constants/index.mjs} +0 -0
  31. package/{esm2015/constants/node-types.js → esm2020/constants/node-types.mjs} +0 -0
  32. package/{esm2015/constants/selector.js → esm2020/constants/selector.mjs} +0 -0
  33. package/{esm2015/constants/toolbar.js → esm2020/constants/toolbar.mjs} +0 -0
  34. package/{esm2015/core/create-plugin.js → esm2020/core/create-plugin.mjs} +0 -0
  35. package/esm2020/core/create-toolbar.mjs +56 -0
  36. package/{esm2015/core/index.js → esm2020/core/index.mjs} +0 -0
  37. package/esm2020/core/toolbar-item/base-toolbar-item.mjs +90 -0
  38. package/{esm2015/core/utils/combine-plugins.js → esm2020/core/utils/combine-plugins.mjs} +0 -0
  39. package/{esm2015/core/utils/flatten-deep-plugins.js → esm2020/core/utils/flatten-deep-plugins.mjs} +0 -0
  40. package/esm2020/core/utils/get-plugin-options.mjs +3 -0
  41. package/{esm2015/core/utils/get-plugin.js → esm2020/core/utils/get-plugin.mjs} +0 -0
  42. package/esm2020/core/utils/get-plugins.mjs +4 -0
  43. package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +0 -0
  44. package/esm2020/core/utils/merge-array.mjs +18 -0
  45. package/{esm2015/core/utils/merge-deep-plugins.js → esm2020/core/utils/merge-deep-plugins.mjs} +0 -0
  46. package/{esm2015/core/utils/merge-options.js → esm2020/core/utils/merge-options.mjs} +0 -0
  47. package/{esm2015/core/utils/nested-structure-by-key.js → esm2020/core/utils/nested-structure-by-key.mjs} +0 -0
  48. package/{esm2015/core/utils/plugins-by-key.js → esm2020/core/utils/plugins-by-key.mjs} +0 -0
  49. package/{esm2015/core/with-theia.js → esm2020/core/with-theia.mjs} +0 -0
  50. package/{esm2015/custom-types.js → esm2020/custom-types.mjs} +0 -0
  51. package/esm2020/editor.component.mjs +431 -0
  52. package/{esm2015/editor.module.js → esm2020/editor.module.mjs} +5 -6
  53. package/{esm2015/interfaces/auto-format.js → esm2020/interfaces/auto-format.mjs} +0 -0
  54. package/esm2020/interfaces/editor.mjs +25 -0
  55. package/{esm2015/interfaces/element.js → esm2020/interfaces/element.mjs} +0 -0
  56. package/{esm2015/interfaces/image.js → esm2020/interfaces/image.mjs} +0 -0
  57. package/{esm2015/interfaces/index.js → esm2020/interfaces/index.mjs} +0 -0
  58. package/{esm2015/interfaces/plugins/index.js → esm2020/interfaces/plugins/index.mjs} +0 -0
  59. package/{esm2015/interfaces/plugins/no-infer.js → esm2020/interfaces/plugins/no-infer.mjs} +0 -0
  60. package/{esm2015/interfaces/plugins/plugin-key.js → esm2020/interfaces/plugins/plugin-key.mjs} +0 -0
  61. package/{esm2015/interfaces/plugins/plugins.js → esm2020/interfaces/plugins/plugins.mjs} +0 -0
  62. package/{esm2015/interfaces/plugins/with-override.js → esm2020/interfaces/plugins/with-override.mjs} +0 -0
  63. package/{esm2015/interfaces/reset-block-type-plugin-options.js → esm2020/interfaces/reset-block-type-plugin-options.mjs} +0 -0
  64. package/{esm2015/interfaces/toolbar.js → esm2020/interfaces/toolbar.mjs} +0 -0
  65. package/{esm2015/interfaces/upload.js → esm2020/interfaces/upload.mjs} +1 -1
  66. package/{esm2015/interfaces/utility/index.js → esm2020/interfaces/utility/index.mjs} +0 -0
  67. package/{esm2015/interfaces/utility/nested-structure-by-key.js → esm2020/interfaces/utility/nested-structure-by-key.mjs} +0 -0
  68. package/{esm2015/interfaces/utility/override-by-key.js → esm2020/interfaces/utility/override-by-key.mjs} +0 -0
  69. package/{esm2015/interfaces/utility/types.js → esm2020/interfaces/utility/types.mjs} +0 -0
  70. package/{esm2015/interfaces/valid-children-types.js → esm2020/interfaces/valid-children-types.mjs} +0 -0
  71. package/{esm2015/interfaces/view-base.js → esm2020/interfaces/view-base.mjs} +4 -4
  72. package/{esm2015/pipes.js → esm2020/pipes.mjs} +7 -7
  73. package/esm2020/plugins/align/align.editor.mjs +47 -0
  74. package/{esm2015/plugins/align/align.plugin.js → esm2020/plugins/align/align.plugin.mjs} +0 -0
  75. package/esm2020/plugins/autoformat/autoformat.plugin.mjs +109 -0
  76. package/{esm2015/plugins/autoformat/transforms/auto-format-block.js → esm2020/plugins/autoformat/transforms/auto-format-block.mjs} +0 -0
  77. package/{esm2015/plugins/autoformat/transforms/auto-format-inline.js → esm2020/plugins/autoformat/transforms/auto-format-inline.mjs} +0 -0
  78. package/{esm2015/plugins/blockquote/blockquote.component.js → esm2020/plugins/blockquote/blockquote.component.mjs} +4 -4
  79. package/esm2020/plugins/blockquote/blockquote.editor.mjs +20 -0
  80. package/{esm2015/plugins/blockquote/blockquote.plugin.js → esm2020/plugins/blockquote/blockquote.plugin.mjs} +0 -0
  81. package/esm2020/plugins/code/code.component.mjs +241 -0
  82. package/{esm2015/plugins/code/code.editor.js → esm2020/plugins/code/code.editor.mjs} +0 -0
  83. package/{esm2015/plugins/code/code.plugin.js → esm2020/plugins/code/code.plugin.mjs} +0 -0
  84. package/esm2020/plugins/color/color.editor.mjs +44 -0
  85. package/{esm2015/plugins/color/color.plugin.js → esm2020/plugins/color/color.plugin.mjs} +0 -0
  86. package/esm2020/plugins/color/toolbar-item.component.mjs +123 -0
  87. package/esm2020/plugins/common/auto-insert-data..mjs +77 -0
  88. package/{esm2015/plugins/common/block-card.plugin.js → esm2020/plugins/common/block-card.plugin.mjs} +2 -2
  89. package/esm2020/plugins/common/get-fragment.plugin.mjs +24 -0
  90. package/{esm2015/plugins/common/history.plugin.js → esm2020/plugins/common/history.plugin.mjs} +0 -0
  91. package/{esm2015/plugins/common/move-selection.plugin.js → esm2020/plugins/common/move-selection.plugin.mjs} +0 -0
  92. package/{esm2015/plugins/common/remove-empty.plugin.js → esm2020/plugins/common/remove-empty.plugin.mjs} +0 -0
  93. package/{esm2015/plugins/common/remove-void.plugin.js → esm2020/plugins/common/remove-void.plugin.mjs} +0 -0
  94. package/{esm2015/plugins/common/reset-type.plugin.js → esm2020/plugins/common/reset-type.plugin.mjs} +0 -0
  95. package/{esm2015/plugins/common/transforms.plugin.js → esm2020/plugins/common/transforms.plugin.mjs} +0 -0
  96. package/{esm2015/plugins/deserializers/deserialize-html.plugin.js → esm2020/plugins/deserializers/deserialize-html.plugin.mjs} +0 -0
  97. package/{esm2015/plugins/deserializers/deserialize-md.plugin.js → esm2020/plugins/deserializers/deserialize-md.plugin.mjs} +0 -0
  98. package/esm2020/plugins/font-size/font-size.editor.mjs +98 -0
  99. package/{esm2015/plugins/heading/heading.editor.js → esm2020/plugins/heading/heading.editor.mjs} +0 -0
  100. package/{esm2015/plugins/heading/heading.plugin.js → esm2020/plugins/heading/heading.plugin.mjs} +0 -0
  101. package/{esm2015/plugins/hr/hr.component.js → esm2020/plugins/hr/hr.component.mjs} +4 -4
  102. package/{esm2015/plugins/hr/hr.editor.js → esm2020/plugins/hr/hr.editor.mjs} +0 -0
  103. package/{esm2015/plugins/hr/hr.plugin.js → esm2020/plugins/hr/hr.plugin.mjs} +0 -0
  104. package/esm2020/plugins/image/image.component.mjs +365 -0
  105. package/{esm2015/plugins/image/image.editor.js → esm2020/plugins/image/image.editor.mjs} +0 -0
  106. package/esm2020/plugins/image/image.plugin.mjs +57 -0
  107. package/esm2020/plugins/indent/indent.editor.mjs +71 -0
  108. package/esm2020/plugins/indent/indent.plugin.mjs +58 -0
  109. package/{esm2015/plugins/indent/on-keydown-indent.js → esm2020/plugins/indent/on-keydown-indent.mjs} +0 -0
  110. package/{esm2015/plugins/index.js → esm2020/plugins/index.mjs} +0 -0
  111. package/{esm2015/plugins/inline-code/inline-code.component.js → esm2020/plugins/inline-code/inline-code.component.mjs} +4 -4
  112. package/{esm2015/plugins/inline-code/inline-code.editor.js → esm2020/plugins/inline-code/inline-code.editor.mjs} +2 -3
  113. package/{esm2015/plugins/inline-code/inline-code.plugin.js → esm2020/plugins/inline-code/inline-code.plugin.mjs} +0 -0
  114. package/esm2020/plugins/link/edit/link-edit.component.mjs +105 -0
  115. package/esm2020/plugins/link/hover/link-hover.component.mjs +36 -0
  116. package/{esm2015/plugins/link/link.component.js → esm2020/plugins/link/link.component.mjs} +7 -7
  117. package/{esm2015/plugins/link/link.editor.js → esm2020/plugins/link/link.editor.mjs} +0 -0
  118. package/{esm2015/plugins/link/link.plugin.js → esm2020/plugins/link/link.plugin.mjs} +0 -0
  119. package/{esm2015/plugins/link/link.types.js → esm2020/plugins/link/link.types.mjs} +0 -0
  120. package/esm2020/plugins/list/components/bulleted-list.component.mjs +33 -0
  121. package/esm2020/plugins/list/components/list-item.component.mjs +93 -0
  122. package/esm2020/plugins/list/components/numbered-list.component.mjs +39 -0
  123. package/{esm2015/plugins/list/list.editor.js → esm2020/plugins/list/list.editor.mjs} +0 -0
  124. package/esm2020/plugins/list/list.plugin.mjs +286 -0
  125. package/{esm2015/plugins/list/normalizers/get-list-normalizer.js → esm2020/plugins/list/normalizers/get-list-normalizer.mjs} +0 -0
  126. package/esm2020/plugins/list/normalizers/normalize-list-item.mjs +18 -0
  127. package/{esm2015/plugins/list/normalizers/normalize-no.js → esm2020/plugins/list/normalizers/normalize-no.mjs} +0 -0
  128. package/{esm2015/plugins/list/on-key-down-list.js → esm2020/plugins/list/on-key-down-list.mjs} +0 -0
  129. package/{esm2015/plugins/list/queries/get-list-item-entry.js → esm2020/plugins/list/queries/get-list-item-entry.mjs} +0 -0
  130. package/{esm2015/plugins/list/queries/get-list-item-sublist.js → esm2020/plugins/list/queries/get-list-item-sublist.mjs} +0 -0
  131. package/{esm2015/plugins/list/queries/get-list-types.js → esm2020/plugins/list/queries/get-list-types.mjs} +0 -0
  132. package/{esm2015/plugins/list/queries/get-start-list-item.js → esm2020/plugins/list/queries/get-start-list-item.mjs} +0 -0
  133. package/{esm2015/plugins/list/queries/has-list-in-list-item.js → esm2020/plugins/list/queries/has-list-in-list-item.mjs} +0 -0
  134. package/{esm2015/plugins/list/queries/is-in-list.js → esm2020/plugins/list/queries/is-in-list.mjs} +0 -0
  135. package/{esm2015/plugins/list/queries/is-list-nested.js → esm2020/plugins/list/queries/is-list-nested.mjs} +0 -0
  136. package/{esm2015/plugins/list/queries/is-list.js → esm2020/plugins/list/queries/is-list.mjs} +0 -0
  137. package/{esm2015/plugins/list/queries/is-node-type-list.js → esm2020/plugins/list/queries/is-node-type-list.mjs} +0 -0
  138. package/{esm2015/plugins/list/queries/is-selection-at-list-item-start.js → esm2020/plugins/list/queries/is-selection-at-list-item-start.mjs} +0 -0
  139. package/{esm2015/plugins/list/queries/is-selection-in-same-list-item.js → esm2020/plugins/list/queries/is-selection-in-same-list-item.mjs} +0 -0
  140. package/{esm2015/plugins/list/queries/is-single-list-item.js → esm2020/plugins/list/queries/is-single-list-item.mjs} +0 -0
  141. package/{esm2015/plugins/list/transforms/insert-list-data.js → esm2020/plugins/list/transforms/insert-list-data.mjs} +0 -0
  142. package/{esm2015/plugins/list/transforms/insert-list-item.js → esm2020/plugins/list/transforms/insert-list-item.mjs} +0 -0
  143. package/{esm2015/plugins/list/transforms/move-list-item-down.js → esm2020/plugins/list/transforms/move-list-item-down.mjs} +0 -0
  144. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs} +0 -0
  145. package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs} +0 -0
  146. package/{esm2015/plugins/list/transforms/move-list-item-up.js → esm2020/plugins/list/transforms/move-list-item-up.mjs} +0 -0
  147. package/{esm2015/plugins/list/transforms/unwrap-list.js → esm2020/plugins/list/transforms/unwrap-list.mjs} +0 -0
  148. package/{esm2015/plugins/list/types.js → esm2020/plugins/list/types.mjs} +0 -0
  149. package/esm2020/plugins/mark/mark.editor.mjs +28 -0
  150. package/esm2020/plugins/mark/mark.plugin.mjs +105 -0
  151. package/esm2020/plugins/node-id/node-id.plugin.mjs +78 -0
  152. package/esm2020/plugins/normalizers/insert-paragraph-nodes.mjs +28 -0
  153. package/{esm2015/plugins/normalizers/remove-empty-nodes.js → esm2020/plugins/normalizers/remove-empty-nodes.mjs} +0 -0
  154. package/esm2020/plugins/normalizers/trailing-node.plugin.mjs +33 -0
  155. package/{esm2015/plugins/paint-format/paint-format.editor.js → esm2020/plugins/paint-format/paint-format.editor.mjs} +0 -0
  156. package/{esm2015/plugins/public-api.js → esm2020/plugins/public-api.mjs} +0 -0
  157. package/esm2020/plugins/quick-insert/components/quick-insert.component.mjs +96 -0
  158. package/esm2020/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.mjs +80 -0
  159. package/{esm2015/plugins/quick-insert/quick-insert.editor.js → esm2020/plugins/quick-insert/quick-insert.editor.mjs} +0 -0
  160. package/esm2020/plugins/quick-insert/quick-insert.plugin.mjs +74 -0
  161. package/esm2020/plugins/soft-break/soft-break.plugin.mjs +36 -0
  162. package/{esm2015/plugins/soft-break/soft-break.types.js → esm2020/plugins/soft-break/soft-break.types.mjs} +0 -0
  163. package/esm2020/plugins/table/components/insert-mark/insert-mark.component.mjs +100 -0
  164. package/{esm2015/plugins/table/components/row/row.component.js → esm2020/plugins/table/components/row/row.component.mjs} +4 -4
  165. package/esm2020/plugins/table/components/table.component.mjs +461 -0
  166. package/esm2020/plugins/table/components/td/td.component.mjs +696 -0
  167. package/{esm2015/plugins/table/components/toolbar/table-options.component.js → esm2020/plugins/table/components/toolbar/table-options.component.mjs} +8 -5
  168. package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +159 -0
  169. package/{esm2015/plugins/table/table.editor.js → esm2020/plugins/table/table.editor.mjs} +0 -0
  170. package/esm2020/plugins/table/table.plugin.mjs +427 -0
  171. package/{esm2015/plugins/table/table.service.js → esm2020/plugins/table/table.service.mjs} +4 -4
  172. package/esm2020/plugins/table/table.store.mjs +484 -0
  173. package/{esm2015/plugins/table/table.types.js → esm2020/plugins/table/table.types.mjs} +0 -0
  174. package/esm2020/plugins/table/toolbar-item.component.mjs +85 -0
  175. package/esm2020/plugins/table/transforms/clear-cell.mjs +14 -0
  176. package/{esm2015/plugins/table/transforms/clear-table-node.js → esm2020/plugins/table/transforms/clear-table-node.mjs} +0 -0
  177. package/{esm2015/plugins/table/transforms/insert-column.js → esm2020/plugins/table/transforms/insert-column.mjs} +0 -0
  178. package/{esm2015/plugins/table/transforms/insert-row.js → esm2020/plugins/table/transforms/insert-row.mjs} +0 -0
  179. package/esm2020/plugins/table/transforms/insert-table.mjs +15 -0
  180. package/{esm2015/plugins/table/transforms/remove-column.js → esm2020/plugins/table/transforms/remove-column.mjs} +0 -0
  181. package/{esm2015/plugins/table/transforms/remove-row.js → esm2020/plugins/table/transforms/remove-row.mjs} +0 -0
  182. package/{esm2015/plugins/table/transforms/remove-table.js → esm2020/plugins/table/transforms/remove-table.mjs} +0 -0
  183. package/{esm2015/plugins/table/utils/add-columns.js → esm2020/plugins/table/utils/add-columns.mjs} +0 -0
  184. package/{esm2015/plugins/table/utils/calc-anchor-position.js → esm2020/plugins/table/utils/calc-anchor-position.mjs} +0 -0
  185. package/{esm2015/plugins/table/utils/calc-span.js → esm2020/plugins/table/utils/calc-span.mjs} +0 -0
  186. package/{esm2015/plugins/table/utils/create-cell.js → esm2020/plugins/table/utils/create-cell.mjs} +0 -0
  187. package/{esm2015/plugins/table/utils/create-row.js → esm2020/plugins/table/utils/create-row.mjs} +0 -0
  188. package/{esm2015/plugins/table/utils/create-table.js → esm2020/plugins/table/utils/create-table.mjs} +0 -0
  189. package/{esm2015/plugins/table/utils/get-base-height.js → esm2020/plugins/table/utils/get-base-height.mjs} +0 -0
  190. package/{esm2015/plugins/table/utils/get-select-cell-node.js → esm2020/plugins/table/utils/get-select-cell-node.mjs} +5 -2
  191. package/{esm2015/plugins/table/utils/index.js → esm2020/plugins/table/utils/index.mjs} +0 -0
  192. package/{esm2015/plugins/table/utils/is-range-in-table.js → esm2020/plugins/table/utils/is-range-in-table.mjs} +0 -0
  193. package/{esm2015/plugins/table/utils/is-selection-in-table.js → esm2020/plugins/table/utils/is-selection-in-table.mjs} +0 -0
  194. package/{esm2015/plugins/table/utils/is-virtual-key.js → esm2020/plugins/table/utils/is-virtual-key.mjs} +0 -0
  195. package/{esm2015/plugins/table/utils/merge-cell.js → esm2020/plugins/table/utils/merge-cell.mjs} +0 -0
  196. package/{esm2015/plugins/table/utils/next-path.js → esm2020/plugins/table/utils/next-path.mjs} +0 -0
  197. package/{esm2015/plugins/table/utils/normalize-table.js → esm2020/plugins/table/utils/normalize-table.mjs} +0 -0
  198. package/{esm2015/plugins/table/utils/remove-columns.js → esm2020/plugins/table/utils/remove-columns.mjs} +0 -0
  199. package/{esm2015/plugins/table/utils/set-menu-cell-invisibility.js → esm2020/plugins/table/utils/set-menu-cell-invisibility.mjs} +0 -0
  200. package/{esm2015/plugins/table/utils/split-cell.js → esm2020/plugins/table/utils/split-cell.mjs} +0 -0
  201. package/{esm2015/plugins/table/utils/table-position.js → esm2020/plugins/table/utils/table-position.mjs} +0 -0
  202. package/esm2020/plugins/todo-item/todo-item.component.mjs +64 -0
  203. package/{esm2015/plugins/todo-item/todo-item.editor.js → esm2020/plugins/todo-item/todo-item.editor.mjs} +0 -0
  204. package/{esm2015/plugins/todo-item/todo-item.plugin.js → esm2020/plugins/todo-item/todo-item.plugin.mjs} +0 -0
  205. package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +83 -0
  206. package/{esm2015/plugins/vertical-align/vertical-align.editor.js → esm2020/plugins/vertical-align/vertical-align.editor.mjs} +0 -0
  207. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  208. package/{esm2015/queries/anchor-block-entry.js → esm2020/queries/anchor-block-entry.mjs} +0 -0
  209. package/{esm2015/queries/anchor-block.js → esm2020/queries/anchor-block.mjs} +0 -0
  210. package/{esm2015/queries/anchor-inline-entry.js → esm2020/queries/anchor-inline-entry.mjs} +0 -0
  211. package/{esm2015/queries/find-descendant.js → esm2020/queries/find-descendant.mjs} +0 -0
  212. package/{esm2015/queries/find-node.js → esm2020/queries/find-node.mjs} +0 -0
  213. package/{esm2015/queries/find-path.js → esm2020/queries/find-path.mjs} +0 -0
  214. package/esm2020/queries/get-above-by-type.mjs +14 -0
  215. package/{esm2015/queries/get-above.js → esm2020/queries/get-above.mjs} +0 -0
  216. package/{esm2015/queries/get-anchor-block-entry.js → esm2020/queries/get-anchor-block-entry.mjs} +0 -0
  217. package/esm2020/queries/get-block-above.mjs +10 -0
  218. package/esm2020/queries/get-block-card-above.mjs +10 -0
  219. package/{esm2015/queries/get-block-card-cursor.js → esm2020/queries/get-block-card-cursor.mjs} +0 -0
  220. package/{esm2015/queries/get-container-blocks.js → esm2020/queries/get-container-blocks.mjs} +0 -0
  221. package/{esm2015/queries/get-directly-parent.js → esm2020/queries/get-directly-parent.mjs} +0 -0
  222. package/{esm2015/queries/get-insert-elements-path.js → esm2020/queries/get-insert-elements-path.mjs} +0 -0
  223. package/{esm2015/queries/get-last-child-path.js → esm2020/queries/get-last-child-path.mjs} +0 -0
  224. package/{esm2015/queries/get-last-node.js → esm2020/queries/get-last-node.mjs} +0 -0
  225. package/{esm2015/queries/get-next-sibling-nodes.js → esm2020/queries/get-next-sibling-nodes.mjs} +0 -0
  226. package/{esm2015/queries/get-node.js → esm2020/queries/get-node.mjs} +0 -0
  227. package/esm2020/queries/get-nodes-by-type.mjs +15 -0
  228. package/{esm2015/queries/get-nodes.js → esm2020/queries/get-nodes.mjs} +0 -0
  229. package/{esm2015/queries/get-parent.js → esm2020/queries/get-parent.mjs} +0 -0
  230. package/esm2020/queries/get-plain-text.mjs +16 -0
  231. package/{esm2015/queries/get-plugin-by-toolbar.js → esm2020/queries/get-plugin-by-toolbar.mjs} +0 -0
  232. package/{esm2015/queries/get-point-before.js → esm2020/queries/get-point-before.mjs} +0 -0
  233. package/{esm2015/queries/get-point-from-location.js → esm2020/queries/get-point-from-location.mjs} +0 -0
  234. package/{esm2015/queries/get-previous-path.js → esm2020/queries/get-previous-path.mjs} +0 -0
  235. package/{esm2015/queries/get-rang-from-block-start.js → esm2020/queries/get-rang-from-block-start.mjs} +0 -0
  236. package/{esm2015/queries/get-range-before.js → esm2020/queries/get-range-before.mjs} +0 -0
  237. package/esm2020/queries/get-selection-marks.mjs +18 -0
  238. package/{esm2015/queries/get-selection-nodes-by-type.js → esm2020/queries/get-selection-nodes-by-type.mjs} +0 -0
  239. package/{esm2015/queries/get-text.js → esm2020/queries/get-text.mjs} +0 -0
  240. package/esm2020/queries/get-toolbar-disabled.mjs +13 -0
  241. package/esm2020/queries/index.mjs +59 -0
  242. package/{esm2015/queries/is-across-blocks.js → esm2020/queries/is-across-blocks.mjs} +0 -0
  243. package/{esm2015/queries/is-ancestor-empty.js → esm2020/queries/is-ancestor-empty.mjs} +0 -0
  244. package/{esm2015/queries/is-ancestor.js → esm2020/queries/is-ancestor.mjs} +0 -0
  245. package/{esm2015/queries/is-block-above-empty.js → esm2020/queries/is-block-above-empty.mjs} +0 -0
  246. package/{esm2015/queries/is-block-active.js → esm2020/queries/is-block-active.mjs} +0 -0
  247. package/{esm2015/queries/is-block-card-cursor.js → esm2020/queries/is-block-card-cursor.mjs} +0 -0
  248. package/{esm2015/queries/is-block-text-empty-after-selection.js → esm2020/queries/is-block-text-empty-after-selection.mjs} +0 -0
  249. package/{esm2015/queries/is-collapsed.js → esm2020/queries/is-collapsed.mjs} +0 -0
  250. package/{esm2015/queries/is-contain-nested-type.js → esm2020/queries/is-contain-nested-type.mjs} +0 -0
  251. package/{esm2015/queries/is-container-type.js → esm2020/queries/is-container-type.mjs} +0 -0
  252. package/{esm2015/queries/is-descendant.js → esm2020/queries/is-descendant.mjs} +0 -0
  253. package/esm2020/queries/is-empty-content.mjs +15 -0
  254. package/{esm2015/queries/is-empty-paragraph-by-path.js → esm2020/queries/is-empty-paragraph-by-path.mjs} +0 -0
  255. package/{esm2015/queries/is-empty-paragraph.js → esm2020/queries/is-empty-paragraph.mjs} +0 -0
  256. package/{esm2015/queries/is-first-child.js → esm2020/queries/is-first-child.mjs} +0 -0
  257. package/{esm2015/queries/is-include-types.js → esm2020/queries/is-include-types.mjs} +0 -0
  258. package/{esm2015/queries/is-node-type-in.js → esm2020/queries/is-node-type-in.mjs} +0 -0
  259. package/{esm2015/queries/is-node-type.js → esm2020/queries/is-node-type.mjs} +0 -0
  260. package/{esm2015/queries/is-paragraph.js → esm2020/queries/is-paragraph.mjs} +0 -0
  261. package/{esm2015/queries/is-point-at-root.js → esm2020/queries/is-point-at-root.mjs} +0 -0
  262. package/esm2020/queries/is-range-across-blocks.mjs +22 -0
  263. package/{esm2015/queries/is-range-at-root.js → esm2020/queries/is-range-at-root.mjs} +0 -0
  264. package/{esm2015/queries/is-start.js → esm2020/queries/is-start.mjs} +0 -0
  265. package/{esm2015/queries/some-node.js → esm2020/queries/some-node.mjs} +0 -0
  266. package/{esm2015/services/color-select.service.js → esm2020/services/color-select.service.mjs} +4 -4
  267. package/esm2020/services/context.service.mjs +59 -0
  268. package/{esm2015/services/table-contextmenu.service.js → esm2020/services/table-contextmenu.service.mjs} +4 -4
  269. package/esm2020/services/toolbar.service.mjs +48 -0
  270. package/{esm2015/shortcuts/index.js → esm2020/shortcuts/index.mjs} +0 -0
  271. package/{esm2015/shortcuts/mark.js → esm2020/shortcuts/mark.mjs} +0 -0
  272. package/{esm2015/transforms/apply-deep-to-nodes.js → esm2020/transforms/apply-deep-to-nodes.mjs} +0 -0
  273. package/{esm2015/transforms/clear-marks.js → esm2020/transforms/clear-marks.mjs} +0 -0
  274. package/{esm2015/transforms/close-conversion-hint.js → esm2020/transforms/close-conversion-hint.mjs} +0 -0
  275. package/{esm2015/transforms/delete-element.js → esm2020/transforms/delete-element.mjs} +0 -0
  276. package/{esm2015/transforms/handle-continual-delete-backward.js → esm2020/transforms/handle-continual-delete-backward.mjs} +0 -0
  277. package/{esm2015/transforms/handle-continual-insert-break.js → esm2020/transforms/handle-continual-insert-break.mjs} +0 -0
  278. package/{esm2015/transforms/index.js → esm2020/transforms/index.mjs} +0 -0
  279. package/esm2020/transforms/insert-elements.mjs +34 -0
  280. package/{esm2015/transforms/insert-paragraph.js → esm2020/transforms/insert-paragraph.mjs} +0 -0
  281. package/esm2020/transforms/merge-deep-to-nodes.mjs +9 -0
  282. package/{esm2015/transforms/move-children.js → esm2020/transforms/move-children.mjs} +0 -0
  283. package/{esm2015/transforms/on-keydown-reset-block-type.js → esm2020/transforms/on-keydown-reset-block-type.mjs} +0 -0
  284. package/{esm2015/transforms/set-end-selection.js → esm2020/transforms/set-end-selection.mjs} +0 -0
  285. package/{esm2015/transforms/set-marks.js → esm2020/transforms/set-marks.mjs} +0 -0
  286. package/{esm2015/transforms/set-node.js → esm2020/transforms/set-node.mjs} +0 -0
  287. package/{esm2015/transforms/split-node.js → esm2020/transforms/split-node.mjs} +0 -0
  288. package/{esm2015/transforms/un-hang-range.js → esm2020/transforms/un-hang-range.mjs} +0 -0
  289. package/{esm2015/transforms/un-wrap.js → esm2020/transforms/un-wrap.mjs} +0 -0
  290. package/esm2020/transforms/unwrap-nodes-by-type.mjs +14 -0
  291. package/{esm2015/utils/auto-focus.js → esm2020/utils/auto-focus.mjs} +0 -0
  292. package/{esm2015/utils/auto-scroll-view.js → esm2020/utils/auto-scroll-view.mjs} +0 -0
  293. package/{esm2015/utils/cast-array.js → esm2020/utils/cast-array.mjs} +0 -0
  294. package/{esm2015/utils/common.js → esm2020/utils/common.mjs} +0 -0
  295. package/{esm2015/utils/create-empty-paragraph.js → esm2020/utils/create-empty-paragraph.mjs} +0 -0
  296. package/{esm2015/utils/data-transform.js → esm2020/utils/data-transform.mjs} +0 -0
  297. package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +0 -0
  298. package/{esm2015/utils/editor-uuid.js → esm2020/utils/editor-uuid.mjs} +0 -0
  299. package/{esm2015/utils/fragment.js → esm2020/utils/fragment.mjs} +0 -0
  300. package/{esm2015/utils/get-editable-element-height.js → esm2020/utils/get-editable-element-height.mjs} +0 -0
  301. package/{esm2015/utils/get-toolbar-class.js → esm2020/utils/get-toolbar-class.mjs} +0 -0
  302. package/{esm2015/utils/id-creator.js → esm2020/utils/id-creator.mjs} +0 -0
  303. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
  304. package/{esm2015/utils/is-clean-empty-paragraph.js → esm2020/utils/is-clean-empty-paragraph.mjs} +0 -0
  305. package/esm2020/utils/is-inline.mjs +9 -0
  306. package/{esm2015/utils/lodash.js → esm2020/utils/lodash.mjs} +0 -0
  307. package/esm2020/utils/match.mjs +32 -0
  308. package/{esm2015/utils/merge-element-options.js → esm2020/utils/merge-element-options.mjs} +0 -0
  309. package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +0 -0
  310. package/{esm2015/worktile-theia.js → esm2020/worktile-theia.mjs} +0 -0
  311. package/fesm2015/{worktile-theia.js → worktile-theia.mjs} +257 -316
  312. package/fesm2015/worktile-theia.mjs.map +1 -0
  313. package/fesm2020/worktile-theia.mjs +13739 -0
  314. package/fesm2020/worktile-theia.mjs.map +1 -0
  315. package/interfaces/editor.d.ts +3 -3
  316. package/interfaces/upload.d.ts +1 -1
  317. package/package.json +20 -6
  318. package/queries/index.d.ts +2 -1
  319. package/queries/is-empty-content.d.ts +2 -0
  320. package/bundles/worktile-theia.umd.js +0 -14905
  321. package/bundles/worktile-theia.umd.js.map +0 -1
  322. package/esm2015/components/color-select/color-select.component.js +0 -113
  323. package/esm2015/components/column-resize/column-resize.module.js +0 -34
  324. package/esm2015/components/contextmenu/contextmenu.component.js +0 -64
  325. package/esm2015/components/conversion-hint/conversion-hint.component.js +0 -59
  326. package/esm2015/components/element/element.component.js +0 -24
  327. package/esm2015/components/inline-toolbar/inline-toolbar.component.js +0 -139
  328. package/esm2015/components/table-select/table-select.component.js +0 -53
  329. package/esm2015/components/template/template.component.js +0 -66
  330. package/esm2015/components/toolbar/toolbar.component.js +0 -250
  331. package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +0 -133
  332. package/esm2015/components/toolbar-group/toolbar-group.component.js +0 -116
  333. package/esm2015/components/toolbar-item/toolbar-item.component.js +0 -105
  334. package/esm2015/core/create-toolbar.js +0 -57
  335. package/esm2015/core/toolbar-item/base-toolbar-item.js +0 -92
  336. package/esm2015/core/utils/get-plugin-options.js +0 -3
  337. package/esm2015/core/utils/get-plugins.js +0 -5
  338. package/esm2015/core/utils/merge-array.js +0 -18
  339. package/esm2015/editor.component.js +0 -440
  340. package/esm2015/interfaces/editor.js +0 -23
  341. package/esm2015/plugins/align/align.editor.js +0 -48
  342. package/esm2015/plugins/autoformat/autoformat.plugin.js +0 -110
  343. package/esm2015/plugins/blockquote/blockquote.editor.js +0 -21
  344. package/esm2015/plugins/code/code.component.js +0 -245
  345. package/esm2015/plugins/color/color.editor.js +0 -45
  346. package/esm2015/plugins/color/toolbar-item.component.js +0 -124
  347. package/esm2015/plugins/common/auto-insert-data..js +0 -78
  348. package/esm2015/plugins/common/get-fragment.plugin.js +0 -25
  349. package/esm2015/plugins/font-size/font-size.editor.js +0 -98
  350. package/esm2015/plugins/image/image.component.js +0 -370
  351. package/esm2015/plugins/image/image.plugin.js +0 -58
  352. package/esm2015/plugins/indent/indent.editor.js +0 -73
  353. package/esm2015/plugins/indent/indent.plugin.js +0 -60
  354. package/esm2015/plugins/link/edit/link-edit.component.js +0 -108
  355. package/esm2015/plugins/link/hover/link-hover.component.js +0 -39
  356. package/esm2015/plugins/list/components/bulleted-list.component.js +0 -34
  357. package/esm2015/plugins/list/components/list-item.component.js +0 -95
  358. package/esm2015/plugins/list/components/numbered-list.component.js +0 -40
  359. package/esm2015/plugins/list/list.plugin.js +0 -281
  360. package/esm2015/plugins/list/normalizers/normalize-list-item.js +0 -19
  361. package/esm2015/plugins/mark/mark.editor.js +0 -29
  362. package/esm2015/plugins/mark/mark.plugin.js +0 -102
  363. package/esm2015/plugins/node-id/node-id.plugin.js +0 -69
  364. package/esm2015/plugins/normalizers/insert-paragraph-nodes.js +0 -29
  365. package/esm2015/plugins/normalizers/trailing-node.plugin.js +0 -34
  366. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +0 -102
  367. package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +0 -84
  368. package/esm2015/plugins/quick-insert/quick-insert.plugin.js +0 -75
  369. package/esm2015/plugins/soft-break/soft-break.plugin.js +0 -37
  370. package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +0 -103
  371. package/esm2015/plugins/table/components/table.component.js +0 -470
  372. package/esm2015/plugins/table/components/td/td.component.js +0 -698
  373. package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +0 -162
  374. package/esm2015/plugins/table/table.plugin.js +0 -424
  375. package/esm2015/plugins/table/table.store.js +0 -480
  376. package/esm2015/plugins/table/toolbar-item.component.js +0 -86
  377. package/esm2015/plugins/table/transforms/clear-cell.js +0 -11
  378. package/esm2015/plugins/table/transforms/insert-table.js +0 -15
  379. package/esm2015/plugins/todo-item/todo-item.component.js +0 -66
  380. package/esm2015/plugins/vertical-align/toolbar-item.component.js +0 -90
  381. package/esm2015/queries/get-above-by-type.js +0 -11
  382. package/esm2015/queries/get-block-above.js +0 -7
  383. package/esm2015/queries/get-block-card-above.js +0 -7
  384. package/esm2015/queries/get-nodes-by-type.js +0 -12
  385. package/esm2015/queries/get-plain-text.js +0 -16
  386. package/esm2015/queries/get-selection-marks.js +0 -19
  387. package/esm2015/queries/get-toolbar-disabled.js +0 -14
  388. package/esm2015/queries/index.js +0 -58
  389. package/esm2015/queries/is-range-across-blocks.js +0 -18
  390. package/esm2015/services/context.service.js +0 -60
  391. package/esm2015/services/toolbar.service.js +0 -48
  392. package/esm2015/transforms/insert-elements.js +0 -35
  393. package/esm2015/transforms/merge-deep-to-nodes.js +0 -9
  394. package/esm2015/transforms/unwrap-nodes-by-type.js +0 -11
  395. package/esm2015/utils/is-inline.js +0 -10
  396. package/esm2015/utils/match.js +0 -29
  397. package/fesm2015/worktile-theia.js.map +0 -1
@@ -0,0 +1,241 @@
1
+ import { Component, ChangeDetectionStrategy, ViewChild, Inject } from '@angular/core';
2
+ import { Transforms } from 'slate';
3
+ import { AngularEditor, IS_SAFARI } from 'slate-angular';
4
+ import { CodeMirrorComponent } from 'ng-codemirror';
5
+ import { CODEMIRROR_PADDING_TOP, CODE_MODES, DropdownMode, ToolbarItemMode } from '../../constants';
6
+ import { TheBaseElementComponent, TheMode, THE_MODE_TOKEN } from '../../interfaces';
7
+ import { CodeEditor } from './code.editor';
8
+ import * as TheTransforms from '../../transforms';
9
+ import { delay, take, takeUntil } from 'rxjs/operators';
10
+ import { fromEvent, Subject } from 'rxjs';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "ngx-tethys/notify";
13
+ import * as i2 from "../../services/context.service";
14
+ import * as i3 from "ngx-tethys/nav";
15
+ import * as i4 from "../../components/toolbar-dropdown/toolbar-dropdown.component";
16
+ import * as i5 from "ngx-tethys/switch";
17
+ import * as i6 from "../../components/nav-split-line/nav-split-line.component";
18
+ import * as i7 from "slate-angular";
19
+ import * as i8 from "ng-codemirror";
20
+ import * as i9 from "ngx-tethys/resizable";
21
+ import * as i10 from "@angular/common";
22
+ import * as i11 from "@angular/forms";
23
+ import * as i12 from "ngx-tethys/tooltip";
24
+ import * as i13 from "../../interfaces";
25
+ export class TheCodeComponent extends TheBaseElementComponent {
26
+ constructor(elementRef, cdr, thyNotifyService, contextService, ngZone, config) {
27
+ super(elementRef, cdr);
28
+ this.elementRef = elementRef;
29
+ this.cdr = cdr;
30
+ this.thyNotifyService = thyNotifyService;
31
+ this.contextService = contextService;
32
+ this.ngZone = ngZone;
33
+ this.config = config;
34
+ this.startRenderCodemirror = false;
35
+ this.dropdownMode = DropdownMode;
36
+ this.maxHeight = this.config.mode === TheMode.default ? 350 - CODEMIRROR_PADDING_TOP * 2 : 0;
37
+ this.menus = CODE_MODES.map(item => {
38
+ return { key: item.value, name: item.showName };
39
+ });
40
+ this.destroy$ = new Subject();
41
+ this.ToolbarItemMode = ToolbarItemMode;
42
+ this.isHightLight = false;
43
+ this.resizeHeight = null;
44
+ this.options = {
45
+ mode: this.menus[0].key,
46
+ lineNumbers: false,
47
+ readOnly: false,
48
+ autofocus: false,
49
+ lineWiseCopyCut: true,
50
+ lineWrapping: this.config.mode === TheMode.default ? false : true,
51
+ cursorBlinkRate: 500
52
+ };
53
+ this.activeLanguage = this.menus[0];
54
+ this.resizeBounds = null;
55
+ this.onChangeLanguage = item => {
56
+ this.options = { ...this.options, mode: item.key };
57
+ this.activeLanguage = item;
58
+ CodeEditor.setCodeAttribute(this.editor, this.element, { language: item.key });
59
+ };
60
+ }
61
+ get code() {
62
+ return this.element.content;
63
+ }
64
+ onContextChange() {
65
+ super.onContextChange();
66
+ if (this.initialized) {
67
+ if (this.options.readOnly !== this.readonly) {
68
+ this.useReadonly();
69
+ }
70
+ if (this.options.mode !== this.element.language) {
71
+ this.useMode();
72
+ }
73
+ if (this.options.lineWrapping !== this.element.autoWrap) {
74
+ this.useAutoWrap();
75
+ }
76
+ if (this.resizeHeight !== this.element.height) {
77
+ this.useHeight();
78
+ }
79
+ }
80
+ }
81
+ ngOnInit() {
82
+ super.ngOnInit();
83
+ this.ngZone.runOutsideAngular(() => {
84
+ fromEvent(this.nativeElement, 'mousedown')
85
+ .pipe(takeUntil(this.destroy$))
86
+ .subscribe(event => {
87
+ event.stopPropagation();
88
+ const isBlockOperation = this.isCollapsed &&
89
+ this.nativeElement.querySelector('.the-code-block-operation').contains(event.target);
90
+ const isCodemirror = this.nativeElement.querySelector('.ng-codemirror').contains(event.target);
91
+ this.isHightLight = !isCodemirror && !isBlockOperation;
92
+ });
93
+ });
94
+ this.elementRef.nativeElement.classList.add('the-code-container');
95
+ }
96
+ ngAfterViewInit() {
97
+ if (this.readonly) {
98
+ // delay 20ms
99
+ // ccodemirror is too slow
100
+ this.ngZone.onStable.pipe(take(1), delay(20)).subscribe(() => {
101
+ this.renderCodemirror();
102
+ });
103
+ }
104
+ else {
105
+ // edit mode can not delay
106
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
107
+ this.renderCodemirror();
108
+ this.initializeCodemirrorFocus();
109
+ this.resizeBounds = {
110
+ nativeElement: this.contextService.getEditableElement()
111
+ };
112
+ });
113
+ }
114
+ }
115
+ renderCodemirror() {
116
+ this.startRenderCodemirror = true;
117
+ this.useReadonly();
118
+ this.useMode();
119
+ this.useAutoWrap();
120
+ this.useHeight();
121
+ this.cdr.detectChanges();
122
+ }
123
+ initializeCodemirrorFocus() {
124
+ if (this.isCollapsed) {
125
+ setTimeout(() => {
126
+ if (this.isCollapsed && this.codemirror && this.codemirror.editor && !this.codemirror.editor.hasFocus()) {
127
+ AngularEditor.blur(this.editor);
128
+ this.codemirror.editor.focus();
129
+ this.codemirror.editor.refresh();
130
+ }
131
+ }, 200);
132
+ }
133
+ }
134
+ codeChange($event) {
135
+ this.isHightLight = false;
136
+ CodeEditor.setCodeAttribute(this.editor, this.element, { content: $event });
137
+ }
138
+ onDelete(event) {
139
+ event.preventDefault();
140
+ TheTransforms.deleteElement(this.editor, this.element);
141
+ }
142
+ onCopy(event) {
143
+ event.preventDefault();
144
+ event.stopPropagation();
145
+ // remove codemorrir selection
146
+ const selection = window.getSelection();
147
+ if (selection.rangeCount > 0) {
148
+ selection.removeAllRanges();
149
+ }
150
+ AngularEditor.focus(this.editor);
151
+ Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));
152
+ if (IS_SAFARI) {
153
+ this.safariCopy();
154
+ return;
155
+ }
156
+ document.execCommand('copy') ? this.thyNotifyService.success('复制成功') : this.thyNotifyService.error('复制失败');
157
+ AngularEditor.deselect(this.editor);
158
+ }
159
+ safariCopy() {
160
+ const currentElement = AngularEditor.toDOMNode(this.editor, this.element);
161
+ const blockCard = currentElement.closest('.slate-block-card');
162
+ const span = document.createElement('pre');
163
+ span.appendChild(blockCard.cloneNode(true));
164
+ span.textContent = this.element.content;
165
+ if (this.element.language) {
166
+ span.setAttribute('data-language', this.element.language);
167
+ }
168
+ if (this.element.autoWrap) {
169
+ span.setAttribute('data-auto-wrap', String(this.element.autoWrap));
170
+ }
171
+ if (this.element.height) {
172
+ span.setAttribute('data-height', String(this.element.height));
173
+ }
174
+ document.body.appendChild(span);
175
+ const selection = window.getSelection();
176
+ const range = document.createRange();
177
+ if (selection) {
178
+ selection.removeAllRanges();
179
+ range.selectNode(span);
180
+ selection.addRange(range);
181
+ document.execCommand('copy') ? this.thyNotifyService.success('复制成功') : this.thyNotifyService.error('复制失败');
182
+ selection.removeAllRanges();
183
+ document.body.removeChild(span);
184
+ AngularEditor.deselect(this.editor);
185
+ }
186
+ }
187
+ focusChange(codeMirrorFocused) {
188
+ if (codeMirrorFocused) {
189
+ this.isHightLight = false;
190
+ }
191
+ }
192
+ useMode() {
193
+ this.options = { ...this.options, mode: this.element.language };
194
+ const menuItem = this.menus.find(i => i.key === this.element.language);
195
+ if (menuItem) {
196
+ this.activeLanguage = menuItem;
197
+ }
198
+ }
199
+ useAutoWrap() {
200
+ this.options = { ...this.options, lineWrapping: this.element.autoWrap || false };
201
+ }
202
+ useHeight() {
203
+ if (this.element.height && this.config.mode !== 'print') {
204
+ this.resizeHeight = this.element.height;
205
+ this.maxHeight = this.element.height;
206
+ }
207
+ }
208
+ useReadonly() {
209
+ this.options = { ...this.options, readOnly: this.readonly, cursorBlinkRate: this.readonly ? -1 : 500 };
210
+ }
211
+ onResize({ height }) {
212
+ this.resizeHeight = height;
213
+ this.maxHeight = height;
214
+ }
215
+ onEndResize() {
216
+ Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));
217
+ CodeEditor.setCodeAttribute(this.editor, this.element, { height: this.resizeHeight });
218
+ }
219
+ onChangeWrap(value) {
220
+ this.isHightLight = false;
221
+ this.options = { ...this.options, lineWrapping: value || false };
222
+ CodeEditor.setCodeAttribute(this.editor, this.element, { autoWrap: value ? value : null });
223
+ }
224
+ ngOnDestroy() {
225
+ this.destroy$.next();
226
+ this.destroy$.complete();
227
+ }
228
+ }
229
+ TheCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheCodeComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ThyNotifyService }, { token: i2.TheContextService }, { token: i0.NgZone }, { token: THE_MODE_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
230
+ TheCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: TheCodeComponent, selector: "div[theCode]", viewQueries: [{ propertyName: "codemirror", first: true, predicate: ["codemirror"], descendants: true, read: CodeMirrorComponent }], usesInheritance: true, ngImport: i0, template: "<div contenteditable=\"false\" class=\"the-code-block-operation\" *ngIf=\"isCollapsed && codemirror && !options.readOnly\">\n <thy-icon-nav>\n <the-toolbar-dropdown\n [menus]=\"menus\"\n [toolbarItem]=\"activeLanguage\"\n [dropdownItemKey]=\"activeLanguage?.key\"\n [itemMousedownHandle]=\"onChangeLanguage\"\n >\n </the-toolbar-dropdown>\n <span class=\"auto-wrap d-flex align-items-center\">\n <span>\u81EA\u52A8\u6362\u884C</span>\n <thy-switch\n class=\"auto-wrap-btn d-flex\"\n [(ngModel)]=\"options.lineWrapping\"\n (ngModelChange)=\"onChangeWrap($event)\"\n thySize=\"sm\"\n ></thy-switch>\n </span>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"copy\"\n thyTooltip=\"\u590D\u5236\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onCopy($event)\"\n ></a>\n <nav-split-line [mode]=\"ToolbarItemMode.vertical\"></nav-split-line>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"trash\"\n thyTooltip=\"\u5220\u9664\"\n class=\"remove-link\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onDelete($event)\"\n ></a>\n </thy-icon-nav>\n</div>\n\n<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<!-- \u53EA\u8BFB\u6A21\u5F0F\u4E0BCodeMirror-sizer\u9AD8\u5EA6\u6BD4\u7F16\u8F91\u6A21\u5F0F\u4E0B\u591A2px\uFF0C\u8BBE\u7F6EthyMinHeight\u4E3A46px\u9632\u6B62\u62D6\u62FD\u5230\u6700\u5C0F\u9AD8\u5EA6\u65F6\u53EA\u8BFB\u6A21\u5F0F\u4E0B\u51FA\u73B0\u6EDA\u52A8\u6761 -->\n<div\n thyResizable\n [thyMinHeight]=\"46\"\n [thyBounds]=\"resizeBounds\"\n [style.height.px]=\"resizeHeight\"\n (thyResize)=\"onResize($event)\"\n (thyResizeEnd)=\"onEndResize()\"\n class=\"resize-code-container\"\n [ngClass]=\"{ focus: isCollapsed, readonly: options.readOnly, active: isHightLight && isCollapsed }\"\n>\n <ng-codemirror\n *ngIf=\"startRenderCodemirror\"\n #codemirror\n contenteditable=\"false\"\n class=\"ng-codemirror-wrapper\"\n [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n [options]=\"options\"\n [ngModel]=\"code\"\n [delayRefreshTime]=\"300\"\n (ngModelChange)=\"codeChange($event)\"\n (focusChange)=\"focusChange($event)\"\n [autoMaxHeight]=\"maxHeight\"\n >\n </ng-codemirror>\n <thy-resize-handle thyDirection=\"bottom\" class=\"code-resize-icon\" *ngIf=\"isCollapsed && !options.readOnly\"></thy-resize-handle>\n</div>\n", components: [{ type: i3.ThyIconNavComponent, selector: "thy-icon-nav", inputs: ["thyType"] }, { type: i4.TheToolbarDropdownComponent, selector: "the-toolbar-dropdown", inputs: ["itemMousedownHandle"] }, { type: i5.ThySwitchComponent, selector: "thy-switch", inputs: ["thyType", "thySize", "thyDisabled"], outputs: ["thyChange"] }, { type: i3.ThyIconNavLinkComponent, selector: "[thyIconNavLink]", inputs: ["thyIconNavLinkIcon", "thyIconNavLinkActive"] }, { type: i6.NavSplitLineComponent, selector: "nav-split-line", inputs: ["mode"] }, { type: i7.SlateChildrenComponent, selector: "slate-children", inputs: ["children", "context", "viewContext"] }, { type: i8.CodeMirrorComponent, selector: "ng-codemirror, [ngCodeMirror]", inputs: ["autoMaxHeight", "delayRefreshTime", "options"], outputs: ["focusChange"] }, { type: i9.ThyResizeHandleComponent, selector: "thy-resize-handle, [thy-resize-handle]", inputs: ["thyDirection"], outputs: ["thyMouseDown"], exportAs: ["thyResizeHandle"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i12.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { type: i9.ThyResizableDirective, selector: "[thyResizable]", inputs: ["thyBounds", "thyMaxHeight", "thyMaxWidth", "thyMinHeight", "thyMinWidth", "thyGridColumnCount", "thyMaxColumn", "thyMinColumn", "thyLockAspectRatio", "thyPreview", "thyDisabled"], outputs: ["thyResize", "thyResizeEnd", "thyResizeStart"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
231
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheCodeComponent, decorators: [{
232
+ type: Component,
233
+ args: [{ selector: 'div[theCode]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div contenteditable=\"false\" class=\"the-code-block-operation\" *ngIf=\"isCollapsed && codemirror && !options.readOnly\">\n <thy-icon-nav>\n <the-toolbar-dropdown\n [menus]=\"menus\"\n [toolbarItem]=\"activeLanguage\"\n [dropdownItemKey]=\"activeLanguage?.key\"\n [itemMousedownHandle]=\"onChangeLanguage\"\n >\n </the-toolbar-dropdown>\n <span class=\"auto-wrap d-flex align-items-center\">\n <span>\u81EA\u52A8\u6362\u884C</span>\n <thy-switch\n class=\"auto-wrap-btn d-flex\"\n [(ngModel)]=\"options.lineWrapping\"\n (ngModelChange)=\"onChangeWrap($event)\"\n thySize=\"sm\"\n ></thy-switch>\n </span>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"copy\"\n thyTooltip=\"\u590D\u5236\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onCopy($event)\"\n ></a>\n <nav-split-line [mode]=\"ToolbarItemMode.vertical\"></nav-split-line>\n <a\n href=\"javascript:;\"\n thyIconNavLink\n thyIconNavLinkIcon=\"trash\"\n thyTooltip=\"\u5220\u9664\"\n class=\"remove-link\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"onDelete($event)\"\n ></a>\n </thy-icon-nav>\n</div>\n\n<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<!-- \u53EA\u8BFB\u6A21\u5F0F\u4E0BCodeMirror-sizer\u9AD8\u5EA6\u6BD4\u7F16\u8F91\u6A21\u5F0F\u4E0B\u591A2px\uFF0C\u8BBE\u7F6EthyMinHeight\u4E3A46px\u9632\u6B62\u62D6\u62FD\u5230\u6700\u5C0F\u9AD8\u5EA6\u65F6\u53EA\u8BFB\u6A21\u5F0F\u4E0B\u51FA\u73B0\u6EDA\u52A8\u6761 -->\n<div\n thyResizable\n [thyMinHeight]=\"46\"\n [thyBounds]=\"resizeBounds\"\n [style.height.px]=\"resizeHeight\"\n (thyResize)=\"onResize($event)\"\n (thyResizeEnd)=\"onEndResize()\"\n class=\"resize-code-container\"\n [ngClass]=\"{ focus: isCollapsed, readonly: options.readOnly, active: isHightLight && isCollapsed }\"\n>\n <ng-codemirror\n *ngIf=\"startRenderCodemirror\"\n #codemirror\n contenteditable=\"false\"\n class=\"ng-codemirror-wrapper\"\n [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n [options]=\"options\"\n [ngModel]=\"code\"\n [delayRefreshTime]=\"300\"\n (ngModelChange)=\"codeChange($event)\"\n (focusChange)=\"focusChange($event)\"\n [autoMaxHeight]=\"maxHeight\"\n >\n </ng-codemirror>\n <thy-resize-handle thyDirection=\"bottom\" class=\"code-resize-icon\" *ngIf=\"isCollapsed && !options.readOnly\"></thy-resize-handle>\n</div>\n" }]
234
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ThyNotifyService }, { type: i2.TheContextService }, { type: i0.NgZone }, { type: i13.TheModeConfig, decorators: [{
235
+ type: Inject,
236
+ args: [THE_MODE_TOKEN]
237
+ }] }]; }, propDecorators: { codemirror: [{
238
+ type: ViewChild,
239
+ args: ['codemirror', { read: CodeMirrorComponent, static: false }]
240
+ }] } });
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb2RlL2NvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvY29kZS9jb2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBR1QsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVCxNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFzQix1QkFBdUIsRUFBRSxPQUFPLEVBQWlCLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSx1QkFBNEM7SUFtRDlFLFlBQ1csVUFBc0IsRUFDdEIsR0FBc0IsRUFDckIsZ0JBQWtDLEVBQ2xDLGNBQWlDLEVBQ2pDLE1BQWMsRUFFZCxNQUFxQjtRQUU3QixLQUFLLENBQUMs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QUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7UUFDakUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs2R0E1T1EsZ0JBQWdCLG9LQXlEYixjQUFjO2lHQXpEakIsZ0JBQWdCLHlJQThCUSxtQkFBbUIsb0RDN0R4RCxreEZBb0VBOzJGRHJDYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNOzswQkEyRDFDLE1BQU07MkJBQUMsY0FBYzs0Q0ExQjFCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE5nWm9uZSxcbiAgICBJbmplY3QsXG4gICAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcbmltcG9ydCB7IEVkaXRvciwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IsIElTX1NBRkFSSSB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgQ29kZU1pcnJvckNvbXBvbmVudCB9IGZyb20gJ25nLWNvZGVtaXJyb3InO1xuaW1wb3J0IHsgQ09ERU1JUlJPUl9QQURESU5HX1RPUCwgQ09ERV9NT0RFUywgRHJvcGRvd25Nb2RlLCBUb29sYmFySXRlbU1vZGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRGVmYXVsdFRvb2xiYXJJdGVtLCBUaGVCYXNlRWxlbWVudENvbXBvbmVudCwgVGhlTW9kZSwgVGhlTW9kZUNvbmZpZywgVEhFX01PREVfVE9LRU4gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvZGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IENvZGVFZGl0b3IgfSBmcm9tICcuL2NvZGUuZWRpdG9yJztcbmltcG9ydCAqIGFzIFRoZVRyYW5zZm9ybXMgZnJvbSAnLi4vLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGh5UmVzaXplRXZlbnQgfSBmcm9tICduZ3gtdGV0aHlzL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBUaGVDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkaXZbdGhlQ29kZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUaGVDb2RlQ29tcG9uZW50IGV4dGVuZHMgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQ8Q29kZUVsZW1lbnQsIEVkaXRvcj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhcnRSZW5kZXJDb2RlbWlycm9yID0gZmFsc2U7XG4gICAgZHJvcGRvd25Nb2RlID0gRHJvcGRvd25Nb2RlO1xuICAgIG1heEhlaWdodCA9IHRoaXMuY29uZmlnLm1vZGUgPT09IFRoZU1vZGUuZGVmYXVsdCA/IDM1MCAtIENPREVNSVJST1JfUEFERElOR19UT1AgKiAyIDogMDtcbiAgICBtZW51cyA9IENPREVfTU9ERVMubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4geyBrZXk6IGl0ZW0udmFsdWUsIG5hbWU6IGl0ZW0uc2hvd05hbWUgfTtcbiAgICB9KTtcbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgVG9vbGJhckl0ZW1Nb2RlID0gVG9vbGJhckl0ZW1Nb2RlO1xuICAgIGlzSGlnaHRMaWdodCA9IGZhbHNlO1xuICAgIHJlc2l6ZUhlaWdodDogbnVtYmVyID0gbnVsbDtcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIG1vZGU6IHRoaXMubWVudXNbMF0ua2V5LFxuICAgICAgICBsaW5lTnVtYmVyczogZmFsc2UsXG4gICAgICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICAgICAgYXV0b2ZvY3VzOiBmYWxzZSxcbiAgICAgICAgbGluZVdpc2VDb3B5Q3V0OiB0cnVlLFxuICAgICAgICBsaW5lV3JhcHBpbmc6IHRoaXMuY29uZmlnLm1vZGUgPT09IFRoZU1vZGUuZGVmYXVsdCA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgY3Vyc29yQmxpbmtSYXRlOiA1MDBcbiAgICB9O1xuXG4gICAgYWN0aXZlTGFuZ3VhZ2U6IERlZmF1bHRUb29sYmFySXRlbSA9IHRoaXMubWVudXNbMF07XG5cbiAgICByZXNpemVCb3VuZHMgPSBudWxsO1xuXG4gICAgZ2V0IGNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY29udGVudDtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdjb2RlbWlycm9yJywgeyByZWFkOiBDb2RlTWlycm9yQ29tcG9uZW50LCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgY29kZW1pcnJvcjogQ29kZU1pcnJvckNvbXBvbmVudDtcblxuICAgIG9uQ29udGV4dENoYW5nZSgpIHtcbiAgICAgICAgc3VwZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlYWRPbmx5ICE9PSB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VSZWFkb25seSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlICE9PSB0aGlzLmVsZW1lbnQubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZU1vZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nICE9PSB0aGlzLmVsZW1lbnQuYXV0b1dyYXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUF1dG9XcmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemVIZWlnaHQgIT09IHRoaXMuZWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUhlaWdodCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSB0aHlOb3RpZnlTZXJ2aWNlOiBUaHlOb3RpZnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBUaGVDb250ZXh0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChUSEVfTU9ERV9UT0tFTilcbiAgICAgICAgcHJpdmF0ZSBjb25maWc6IFRoZU1vZGVDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNCbG9ja09wZXJhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRoZS1jb2RlLWJsb2NrLW9wZXJhdGlvbicpLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29kZW1pcnJvciA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubmctY29kZW1pcnJvcicpLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIaWdodExpZ2h0ID0gIWlzQ29kZW1pcnJvciAmJiAhaXNCbG9ja09wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RoZS1jb2RlLWNvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIC8vIGRlbGF5IDIwbXNcbiAgICAgICAgICAgIC8vIGNjb2RlbWlycm9yIGlzIHRvbyBzbG93XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSksIGRlbGF5KDIwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvZGVtaXJyb3IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZWRpdCBtb2RlIGNhbiBub3QgZGVsYXlcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckNvZGVtaXJyb3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb2RlbWlycm9yRm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUJvdW5kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudDogdGhpcy5jb250ZXh0U2VydmljZS5nZXRFZGl0YWJsZUVsZW1lbnQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlckNvZGVtaXJyb3IoKSB7XG4gICAgICAgIHRoaXMuc3RhcnRSZW5kZXJDb2RlbWlycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51c2VSZWFkb25seSgpO1xuICAgICAgICB0aGlzLnVzZU1vZGUoKTtcbiAgICAgICAgdGhpcy51c2VBdXRvV3JhcCgpO1xuICAgICAgICB0aGlzLnVzZUhlaWdodCgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUNvZGVtaXJyb3JGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHRoaXMuY29kZW1pcnJvciAmJiB0aGlzLmNvZGVtaXJyb3IuZWRpdG9yICYmICF0aGlzLmNvZGVtaXJyb3IuZWRpdG9yLmhhc0ZvY3VzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5ibHVyKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlbWlycm9yLmVkaXRvci5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVtaXJyb3IuZWRpdG9yLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29kZUNoYW5nZSgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc0hpZ2h0TGlnaHQgPSBmYWxzZTtcbiAgICAgICAgQ29kZUVkaXRvci5zZXRDb2RlQXR0cmlidXRlKHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnQsIHsgY29udGVudDogJGV2ZW50IH0pO1xuICAgIH1cblxuICAgIG9uRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIFRoZVRyYW5zZm9ybXMuZGVsZXRlRWxlbWVudCh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50KTtcbiAgICB9XG5cbiAgICBvbkNvcHkoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIC8vIHJlbW92ZSBjb2RlbW9ycmlyIHNlbGVjdGlvblxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBBbmd1bGFyRWRpdG9yLmZvY3VzKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCkpO1xuXG4gICAgICAgIGlmIChJU19TQUZBUkkpIHtcbiAgICAgICAgICAgIHRoaXMuc2FmYXJpQ29weSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSA/IHRoaXMudGh5Tm90aWZ5U2VydmljZS5zdWNjZXNzKCflpI3liLbmiJDlip8nKSA6IHRoaXMudGh5Tm90aWZ5U2VydmljZS5lcnJvcign5aSN5Yi25aSx6LSlJyk7XG4gICAgICAgIEFuZ3VsYXJFZGl0b3IuZGVzZWxlY3QodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHNhZmFyaUNvcHkoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJsb2NrQ2FyZCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoJy5zbGF0ZS1ibG9jay1jYXJkJyk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcblxuICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGJsb2NrQ2FyZC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGhpcy5lbGVtZW50LmNvbnRlbnQ7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLWxhbmd1YWdlJywgdGhpcy5lbGVtZW50Lmxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmF1dG9XcmFwKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvLXdyYXAnLCBTdHJpbmcodGhpcy5lbGVtZW50LmF1dG9XcmFwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLWhlaWdodCcsIFN0cmluZyh0aGlzLmVsZW1lbnQuaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKTtcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShzcGFuKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykgPyB0aGlzLnRoeU5vdGlmeVNlcnZpY2Uuc3VjY2Vzcygn5aSN5Yi25oiQ5YqfJykgOiB0aGlzLnRoeU5vdGlmeVNlcnZpY2UuZXJyb3IoJ+WkjeWItuWksei0pScpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IuZGVzZWxlY3QodGhpcy5lZGl0b3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNDaGFuZ2UoY29kZU1pcnJvckZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGNvZGVNaXJyb3JGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzSGlnaHRMaWdodCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2VMYW5ndWFnZSA9IGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbW9kZTogaXRlbS5rZXkgfTtcbiAgICAgICAgdGhpcy5hY3RpdmVMYW5ndWFnZSA9IGl0ZW07XG4gICAgICAgIENvZGVFZGl0b3Iuc2V0Q29kZUF0dHJpYnV0ZSh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50LCB7IGxhbmd1YWdlOiBpdGVtLmtleSB9KTtcbiAgICB9O1xuXG4gICAgdXNlTW9kZSgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIG1vZGU6IHRoaXMuZWxlbWVudC5sYW5ndWFnZSB9O1xuICAgICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMubWVudXMuZmluZChpID0+IGkua2V5ID09PSB0aGlzLmVsZW1lbnQubGFuZ3VhZ2UpO1xuICAgICAgICBpZiAobWVudUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTGFuZ3VhZ2UgPSBtZW51SXRlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVzZUF1dG9XcmFwKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbGluZVdyYXBwaW5nOiB0aGlzLmVsZW1lbnQuYXV0b1dyYXAgfHwgZmFsc2UgfTtcbiAgICB9XG5cbiAgICB1c2VIZWlnaHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaGVpZ2h0ICYmIHRoaXMuY29uZmlnLm1vZGUgIT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0ID0gdGhpcy5lbGVtZW50LmhlaWdodDtcbiAgICAgICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5lbGVtZW50LmhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVzZVJlYWRvbmx5KCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgcmVhZE9ubHk6IHRoaXMucmVhZG9ubHksIGN1cnNvckJsaW5rUmF0ZTogdGhpcy5yZWFkb25seSA/IC0xIDogNTAwIH07XG4gICAgfVxuXG4gICAgb25SZXNpemUoeyBoZWlnaHQgfTogVGh5UmVzaXplRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH1cblxuICAgIG9uRW5kUmVzaXplKCkge1xuICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgQW5ndWxhckVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50KSk7XG4gICAgICAgIENvZGVFZGl0b3Iuc2V0Q29kZUF0dHJpYnV0ZSh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50LCB7IGhlaWdodDogdGhpcy5yZXNpemVIZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VXcmFwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNIaWdodExpZ2h0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCBsaW5lV3JhcHBpbmc6IHZhbHVlIHx8IGZhbHNlIH07XG4gICAgICAgIENvZGVFZGl0b3Iuc2V0Q29kZUF0dHJpYnV0ZSh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50LCB7IGF1dG9XcmFwOiB2YWx1ZSA/IHZhbHVlIDogbnVsbCB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCIgY2xhc3M9XCJ0aGUtY29kZS1ibG9jay1vcGVyYXRpb25cIiAqbmdJZj1cImlzQ29sbGFwc2VkICYmIGNvZGVtaXJyb3IgJiYgIW9wdGlvbnMucmVhZE9ubHlcIj5cbiAgICA8dGh5LWljb24tbmF2PlxuICAgICAgICA8dGhlLXRvb2xiYXItZHJvcGRvd25cbiAgICAgICAgICAgIFttZW51c109XCJtZW51c1wiXG4gICAgICAgICAgICBbdG9vbGJhckl0ZW1dPVwiYWN0aXZlTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgW2Ryb3Bkb3duSXRlbUtleV09XCJhY3RpdmVMYW5ndWFnZT8ua2V5XCJcbiAgICAgICAgICAgIFtpdGVtTW91c2Vkb3duSGFuZGxlXT1cIm9uQ2hhbmdlTGFuZ3VhZ2VcIlxuICAgICAgICA+XG4gICAgICAgIDwvdGhlLXRvb2xiYXItZHJvcGRvd24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by13cmFwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuPuiHquWKqOaNouihjDwvc3Bhbj5cbiAgICAgICAgICAgIDx0aHktc3dpdGNoXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLXdyYXAtYnRuIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zLmxpbmVXcmFwcGluZ1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VXcmFwKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRoeVNpemU9XCJzbVwiXG4gICAgICAgICAgICA+PC90aHktc3dpdGNoPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIHRoeUljb25OYXZMaW5rXG4gICAgICAgICAgICB0aHlJY29uTmF2TGlua0ljb249XCJjb3B5XCJcbiAgICAgICAgICAgIHRoeVRvb2x0aXA9XCLlpI3liLZcIlxuICAgICAgICAgICAgdGh5VG9vbHRpcFBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQ29weSgkZXZlbnQpXCJcbiAgICAgICAgPjwvYT5cbiAgICAgICAgPG5hdi1zcGxpdC1saW5lIFttb2RlXT1cIlRvb2xiYXJJdGVtTW9kZS52ZXJ0aWNhbFwiPjwvbmF2LXNwbGl0LWxpbmU+XG4gICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIHRoeUljb25OYXZMaW5rXG4gICAgICAgICAgICB0aHlJY29uTmF2TGlua0ljb249XCJ0cmFzaFwiXG4gICAgICAgICAgICB0aHlUb29sdGlwPVwi5Yig6ZmkXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVtb3ZlLWxpbmtcIlxuICAgICAgICAgICAgdGh5VG9vbHRpcFBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uRGVsZXRlKCRldmVudClcIlxuICAgICAgICA+PC9hPlxuICAgIDwvdGh5LWljb24tbmF2PlxuPC9kaXY+XG5cbjxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuXG48IS0tIOWPquivu+aooeW8j+S4i0NvZGVNaXJyb3Itc2l6ZXLpq5jluqbmr5TnvJbovpHmqKHlvI/kuIvlpJoycHjvvIzorr7nva50aHlNaW5IZWlnaHTkuLo0NnB46Ziy5q2i5ouW5ou95Yiw5pyA5bCP6auY5bqm5pe25Y+q6K+75qih5byP5LiL5Ye6546w5rua5Yqo5p2hICAtLT5cbjxkaXZcbiAgICB0aHlSZXNpemFibGVcbiAgICBbdGh5TWluSGVpZ2h0XT1cIjQ2XCJcbiAgICBbdGh5Qm91bmRzXT1cInJlc2l6ZUJvdW5kc1wiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJyZXNpemVIZWlnaHRcIlxuICAgICh0aHlSZXNpemUpPVwib25SZXNpemUoJGV2ZW50KVwiXG4gICAgKHRoeVJlc2l6ZUVuZCk9XCJvbkVuZFJlc2l6ZSgpXCJcbiAgICBjbGFzcz1cInJlc2l6ZS1jb2RlLWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwieyBmb2N1czogaXNDb2xsYXBzZWQsIHJlYWRvbmx5OiBvcHRpb25zLnJlYWRPbmx5LCBhY3RpdmU6IGlzSGlnaHRMaWdodCAmJiBpc0NvbGxhcHNlZCB9XCJcbj5cbiAgICA8bmctY29kZW1pcnJvclxuICAgICAgICAqbmdJZj1cInN0YXJ0UmVuZGVyQ29kZW1pcnJvclwiXG4gICAgICAgICNjb2RlbWlycm9yXG4gICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJcbiAgICAgICAgY2xhc3M9XCJuZy1jb2RlbWlycm9yLXdyYXBwZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IG1heEhlaWdodDogbWF4SGVpZ2h0ID4gMCA/IG1heEhlaWdodCArICdweCcgOiAnYXV0bycgfVwiXG4gICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgICAgICBbbmdNb2RlbF09XCJjb2RlXCJcbiAgICAgICAgW2RlbGF5UmVmcmVzaFRpbWVdPVwiMzAwXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzQ2hhbmdlKT1cImZvY3VzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbYXV0b01heEhlaWdodF09XCJtYXhIZWlnaHRcIlxuICAgID5cbiAgICA8L25nLWNvZGVtaXJyb3I+XG4gICAgPHRoeS1yZXNpemUtaGFuZGxlIHRoeURpcmVjdGlvbj1cImJvdHRvbVwiIGNsYXNzPVwiY29kZS1yZXNpemUtaWNvblwiICpuZ0lmPVwiaXNDb2xsYXBzZWQgJiYgIW9wdGlvbnMucmVhZE9ubHlcIj48L3RoeS1yZXNpemUtaGFuZGxlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { Editor, Node, Text, Transforms } from 'slate';
2
+ import { Colors, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';
3
+ import { MarkTypes } from '../../constants/node-types';
4
+ import { TheColorSelectService } from '../../services/color-select.service';
5
+ import { TableEditor } from '../table/table.editor';
6
+ export const ColorEditor = {
7
+ getActiveColor(editor, type) {
8
+ if (!editor?.selection) {
9
+ return;
10
+ }
11
+ const node = Node.get(editor, editor.selection?.anchor.path);
12
+ if (!Text.isText(node)) {
13
+ return undefined;
14
+ }
15
+ const marks = Editor.marks(editor);
16
+ return marks && marks[type];
17
+ },
18
+ setColor(editor, color, type) {
19
+ if (TableEditor.toggleMark(editor, !color, type, color)) {
20
+ return;
21
+ }
22
+ if (color) {
23
+ Editor.addMark(editor, type, color);
24
+ }
25
+ else {
26
+ Editor.removeMark(editor, type);
27
+ }
28
+ },
29
+ selectColor(editor, type) {
30
+ const rangeRef = Editor.rangeRef(editor, editor.selection);
31
+ const colorSelectService = editor.injector.get(TheColorSelectService);
32
+ const element = event.target.closest('.thy-icon-nav-link');
33
+ colorSelectService.toggleColorSelect(element, ColorEditor.getActiveColor(editor, type), Colors, {
34
+ showCustom: true,
35
+ perRowColorNumbers: 8,
36
+ rowOptions: { 2: '#aaa' },
37
+ specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor
38
+ }, (newColor) => {
39
+ Transforms.select(editor, rangeRef.current);
40
+ ColorEditor.setColor(editor, newColor, type);
41
+ }, 'bottomLeft', 0);
42
+ }
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvY29sb3IvY29sb3IuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBYSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3ZCLGNBQWMsQ0FBQyxNQUFjLEVBQUUsSUFBaUQ7UUFDNUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsUUFBUSxDQUFDLE1BQWMsRUFBRSxLQUFnQixFQUFFLElBQWlEO1FBQ3hGLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3JELE9BQU87U0FDVjtRQUNELElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO2FBQU07WUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsTUFBYyxFQUFFLElBQWlEO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUUsa0JBQWtCLENBQUMsaUJBQWlCLENBQ2hDLE9BQXNCLEVBQ3RCLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUN4QyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsSUFBSTtZQUNoQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7WUFDekIsWUFBWSxFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1NBQ3JGLEVBQ0QsQ0FBQyxRQUFtQixFQUFFLEVBQUU7WUFDcEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLEVBQ0QsWUFBWSxFQUNaLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIE5vZGUsIFRleHQsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBDb2xvcnMsIENvbG9yVHlwZSwgU3BlY2lhbEJhY2tncm91bmRDb2xvciwgU3BlY2lhbFRleHRDb2xvciB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1zZWxlY3QnO1xuaW1wb3J0IHsgTWFya1R5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtdHlwZXMnO1xuaW1wb3J0IHsgVGhlQ29sb3JTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3Itc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVFZGl0b3IgfSBmcm9tICcuLi90YWJsZS90YWJsZS5lZGl0b3InO1xuXG5leHBvcnQgY29uc3QgQ29sb3JFZGl0b3IgPSB7XG4gICAgZ2V0QWN0aXZlQ29sb3IoZWRpdG9yOiBFZGl0b3IsIHR5cGU6IE1hcmtUeXBlcy5jb2xvciB8IE1hcmtUeXBlcy5iYWNrZ3JvdW5kQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWVkaXRvcj8uc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9kZSA9IE5vZGUuZ2V0KGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbj8uYW5jaG9yLnBhdGgpO1xuICAgICAgICBpZiAoIVRleHQuaXNUZXh0KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hcmtzID0gRWRpdG9yLm1hcmtzKGVkaXRvcik7XG4gICAgICAgIHJldHVybiBtYXJrcyAmJiBtYXJrc1t0eXBlXTtcbiAgICB9LFxuICAgIHNldENvbG9yKGVkaXRvcjogRWRpdG9yLCBjb2xvcjogQ29sb3JUeXBlLCB0eXBlOiBNYXJrVHlwZXMuY29sb3IgfCBNYXJrVHlwZXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci50b2dnbGVNYXJrKGVkaXRvciwgIWNvbG9yLCB0eXBlLCBjb2xvcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgICAgIEVkaXRvci5hZGRNYXJrKGVkaXRvciwgdHlwZSwgY29sb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgRWRpdG9yLnJlbW92ZU1hcmsoZWRpdG9yLCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0Q29sb3IoZWRpdG9yOiBFZGl0b3IsIHR5cGU6IE1hcmtUeXBlcy5jb2xvciB8IE1hcmtUeXBlcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWYgPSBFZGl0b3IucmFuZ2VSZWYoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgY29uc3QgY29sb3JTZWxlY3RTZXJ2aWNlID0gZWRpdG9yLmluamVjdG9yLmdldChUaGVDb2xvclNlbGVjdFNlcnZpY2UpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLnRoeS1pY29uLW5hdi1saW5rJyk7XG4gICAgICAgIGNvbG9yU2VsZWN0U2VydmljZS50b2dnbGVDb2xvclNlbGVjdChcbiAgICAgICAgICAgIGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICBDb2xvckVkaXRvci5nZXRBY3RpdmVDb2xvcihlZGl0b3IsIHR5cGUpLFxuICAgICAgICAgICAgQ29sb3JzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNob3dDdXN0b206IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyUm93Q29sb3JOdW1iZXJzOiA4LFxuICAgICAgICAgICAgICAgIHJvd09wdGlvbnM6IHsgMjogJyNhYWEnIH0sXG4gICAgICAgICAgICAgICAgc3BlY2lhbENvbG9yOiB0eXBlID09PSBNYXJrVHlwZXMuY29sb3IgPyBTcGVjaWFsVGV4dENvbG9yIDogU3BlY2lhbEJhY2tncm91bmRDb2xvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChuZXdDb2xvcjogQ29sb3JUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCByYW5nZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICBDb2xvckVkaXRvci5zZXRDb2xvcihlZGl0b3IsIG5ld0NvbG9yLCB0eXBlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgfVxufTtcbiJdfQ==
@@ -0,0 +1,123 @@
1
+ import { Component } from '@angular/core';
2
+ import { Transforms } from 'slate';
3
+ import { ColorEditor } from './color.editor';
4
+ import { Colors, SpecialBackgroundColor, SpecialTextColor } from '../../constants/color-select';
5
+ import { MarkTypes } from '../../constants/node-types';
6
+ import { TheColorSelectComponent } from '../../components/color-select/color-select.component';
7
+ import { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "ngx-tethys/popover";
10
+ import * as i2 from "ngx-tethys/nav";
11
+ import * as i3 from "ngx-tethys/icon";
12
+ import * as i4 from "@angular/common";
13
+ import * as i5 from "ngx-tethys/tooltip";
14
+ export class TheColorToolbarItemComponent extends TheBaseToolbarItem {
15
+ constructor(thyPopover) {
16
+ super();
17
+ this.thyPopover = thyPopover;
18
+ }
19
+ get isOpenColorSelect() {
20
+ return this.colorSelectRef && this.colorSelectRef.componentInstance;
21
+ }
22
+ execute(event) {
23
+ super.execute(event);
24
+ if (this.editor?.disabled || this.disabled) {
25
+ return;
26
+ }
27
+ const type = this.toolbarItem.key;
28
+ this.toggleColorSelect(event, type);
29
+ }
30
+ toggleColorSelect(event, type) {
31
+ if (this.isOpenColorSelect) {
32
+ this.colorSelectRef.close();
33
+ return;
34
+ }
35
+ this.colorSelectRef = this.thyPopover.open(TheColorSelectComponent, {
36
+ initialState: {
37
+ colors: Colors,
38
+ selectedColor: ColorEditor.getActiveColor(this.editor, type),
39
+ option: {
40
+ showCustom: true,
41
+ perRowColorNumbers: 8,
42
+ rowOptions: { 2: '#aaa' },
43
+ specialColor: type === MarkTypes.color ? SpecialTextColor : SpecialBackgroundColor
44
+ },
45
+ selectAction: (color) => {
46
+ Transforms.select(this.editor, this.editor.selection);
47
+ ColorEditor.setColor(this.editor, color, type);
48
+ }
49
+ },
50
+ origin: event.currentTarget,
51
+ backdropClosable: false,
52
+ placement: 'bottomLeft',
53
+ offset: 10,
54
+ minWidth: 0,
55
+ hasBackdrop: false,
56
+ insideClosable: false,
57
+ panelClass: 'color-select-container'
58
+ });
59
+ return this.colorSelectRef;
60
+ }
61
+ close() {
62
+ if (this.isOpenColorSelect) {
63
+ this.colorSelectRef.close();
64
+ }
65
+ }
66
+ }
67
+ TheColorToolbarItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheColorToolbarItemComponent, deps: [{ token: i1.ThyPopover }], target: i0.ɵɵFactoryTarget.Component });
68
+ TheColorToolbarItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: TheColorToolbarItemComponent, selector: "the-color-toolbar-item", host: { classAttribute: "the-toolbar-item" }, usesInheritance: true, ngImport: i0, template: `
69
+ <a
70
+ class="link-width-down"
71
+ thyIconNavLink
72
+ [ngStyle]="{
73
+ width: toolbarItem.key === 'color' ? '42px' : 'auto'
74
+ }"
75
+ [thyTooltip]="toolbarItem.name"
76
+ [thyIconNavLinkActive]="active"
77
+ thyTooltipPlacement="top"
78
+ (mousedown)="execute($event)"
79
+ >
80
+ <thy-icon [thyIconName]="toolbarItem.icon" thyIconType="twotone" [thyTwotoneColor]="active"></thy-icon>
81
+ <thy-icon
82
+ [ngClass]="{
83
+ 'link-down-icon': true,
84
+ 'font-size-sm': true,
85
+ 'text-desc': true
86
+ }"
87
+ thyIconName="caret-down"
88
+ ></thy-icon>
89
+ </a>
90
+ `, isInline: true, components: [{ type: i2.ThyIconNavLinkComponent, selector: "[thyIconNavLink]", inputs: ["thyIconNavLinkIcon", "thyIconNavLinkActive"] }, { type: i3.ThyIconComponent, selector: "thy-icon", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: TheColorToolbarItemComponent, decorators: [{
92
+ type: Component,
93
+ args: [{
94
+ selector: 'the-color-toolbar-item',
95
+ template: `
96
+ <a
97
+ class="link-width-down"
98
+ thyIconNavLink
99
+ [ngStyle]="{
100
+ width: toolbarItem.key === 'color' ? '42px' : 'auto'
101
+ }"
102
+ [thyTooltip]="toolbarItem.name"
103
+ [thyIconNavLinkActive]="active"
104
+ thyTooltipPlacement="top"
105
+ (mousedown)="execute($event)"
106
+ >
107
+ <thy-icon [thyIconName]="toolbarItem.icon" thyIconType="twotone" [thyTwotoneColor]="active"></thy-icon>
108
+ <thy-icon
109
+ [ngClass]="{
110
+ 'link-down-icon': true,
111
+ 'font-size-sm': true,
112
+ 'text-desc': true
113
+ }"
114
+ thyIconName="caret-down"
115
+ ></thy-icon>
116
+ </a>
117
+ `,
118
+ host: {
119
+ class: 'the-toolbar-item'
120
+ }
121
+ }]
122
+ }], ctorParameters: function () { return [{ type: i1.ThyPopover }]; } });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2NvbG9yL3Rvb2xiYXItaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRW5DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFhLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7O0FBK0IvRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsa0JBQWtCO0lBT2hFLFlBQW9CLFVBQXNCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRFEsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUUxQyxDQUFDO0lBTkQsSUFBSSxpQkFBaUI7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7SUFDeEUsQ0FBQztJQU1ELE9BQU8sQ0FBQyxLQUFpQjtRQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxPQUFPO1NBQ1Y7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQWtELENBQUM7UUFDakYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxJQUFpRDtRQUNsRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEUsWUFBWSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGFBQWEsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO2dCQUM1RCxNQUFNLEVBQUU7b0JBQ0osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLFlBQVksRUFBRSxJQUFJLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtpQkFDckY7Z0JBQ0QsWUFBWSxFQUFFLENBQUMsS0FBZ0IsRUFBRSxFQUFFO29CQUMvQixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkQsQ0FBQzthQUNKO1lBQ0QsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUE0QjtZQUMxQyxnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLENBQUM7WUFDWCxXQUFXLEVBQUUsS0FBSztZQUNsQixjQUFjLEVBQUUsS0FBSztZQUNyQixVQUFVLEVBQUUsd0JBQXdCO1NBQ3ZDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDOzt5SEF4RFEsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsbUlBM0IzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDsyRkFLUSw0QkFBNEI7a0JBN0J4QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLGtCQUFrQjtxQkFDNUI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyLCBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IENvbG9yRWRpdG9yIH0gZnJvbSAnLi9jb2xvci5lZGl0b3InO1xuaW1wb3J0IHsgQ29sb3JzLCBDb2xvclR5cGUsIFNwZWNpYWxCYWNrZ3JvdW5kQ29sb3IsIFNwZWNpYWxUZXh0Q29sb3IgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29sb3Itc2VsZWN0JztcbmltcG9ydCB7IE1hcmtUeXBlcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXR5cGVzJztcbmltcG9ydCB7IFRoZUNvbG9yU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb2xvci1zZWxlY3QvY29sb3Itc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVCYXNlVG9vbGJhckl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlL3Rvb2xiYXItaXRlbS9iYXNlLXRvb2xiYXItaXRlbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLWNvbG9yLXRvb2xiYXItaXRlbScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwibGluay13aWR0aC1kb3duXCJcbiAgICAgICAgICAgIHRoeUljb25OYXZMaW5rXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRvb2xiYXJJdGVtLmtleSA9PT0gJ2NvbG9yJyA/ICc0MnB4JyA6ICdhdXRvJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbdGh5VG9vbHRpcF09XCJ0b29sYmFySXRlbS5uYW1lXCJcbiAgICAgICAgICAgIFt0aHlJY29uTmF2TGlua0FjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgICAgICAgdGh5VG9vbHRpcFBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cImV4ZWN1dGUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0aHktaWNvbiBbdGh5SWNvbk5hbWVdPVwidG9vbGJhckl0ZW0uaWNvblwiIHRoeUljb25UeXBlPVwidHdvdG9uZVwiIFt0aHlUd290b25lQ29sb3JdPVwiYWN0aXZlXCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDx0aHktaWNvblxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2xpbmstZG93bi1pY29uJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZS1zbSc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0LWRlc2MnOiB0cnVlXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgdGh5SWNvbk5hbWU9XCJjYXJldC1kb3duXCJcbiAgICAgICAgICAgID48L3RoeS1pY29uPlxuICAgICAgICA8L2E+XG4gICAgYCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGhlLXRvb2xiYXItaXRlbSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFRoZUNvbG9yVG9vbGJhckl0ZW1Db21wb25lbnQgZXh0ZW5kcyBUaGVCYXNlVG9vbGJhckl0ZW0ge1xuICAgIGNvbG9yU2VsZWN0UmVmOiBUaHlQb3BvdmVyUmVmPFRoZUNvbG9yU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGdldCBpc09wZW5Db2xvclNlbGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZWxlY3RSZWYgJiYgdGhpcy5jb2xvclNlbGVjdFJlZi5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRoeVBvcG92ZXI6IFRoeVBvcG92ZXIpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHN1cGVyLmV4ZWN1dGUoZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3I/LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy50b29sYmFySXRlbS5rZXkgYXMgTWFya1R5cGVzLmNvbG9yICYgTWFya1R5cGVzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgdGhpcy50b2dnbGVDb2xvclNlbGVjdChldmVudCwgdHlwZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29sb3JTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IE1hcmtUeXBlcy5jb2xvciB8IE1hcmtUeXBlcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuQ29sb3JTZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sb3JTZWxlY3RSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbG9yU2VsZWN0UmVmID0gdGhpcy50aHlQb3BvdmVyLm9wZW4oVGhlQ29sb3JTZWxlY3RDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGNvbG9yczogQ29sb3JzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IENvbG9yRWRpdG9yLmdldEFjdGl2ZUNvbG9yKHRoaXMuZWRpdG9yLCB0eXBlKSxcbiAgICAgICAgICAgICAgICBvcHRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd0N1c3RvbTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGVyUm93Q29sb3JOdW1iZXJzOiA4LFxuICAgICAgICAgICAgICAgICAgICByb3dPcHRpb25zOiB7IDI6ICcjYWFhJyB9LFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsQ29sb3I6IHR5cGUgPT09IE1hcmtUeXBlcy5jb2xvciA/IFNwZWNpYWxUZXh0Q29sb3IgOiBTcGVjaWFsQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3RBY3Rpb246IChjb2xvcjogQ29sb3JUeXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBDb2xvckVkaXRvci5zZXRDb2xvcih0aGlzLmVkaXRvciwgY29sb3IsIHR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmlnaW46IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICBiYWNrZHJvcENsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnLFxuICAgICAgICAgICAgb2Zmc2V0OiAxMCxcbiAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgaW5zaWRlQ2xvc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2NvbG9yLXNlbGVjdC1jb250YWluZXInXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlbGVjdFJlZjtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuQ29sb3JTZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sb3JTZWxlY3RSZWYuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,77 @@
1
+ import { Editor, Path, Transforms } from 'slate';
2
+ import { AngularEditor } from 'slate-angular';
3
+ import { DefaultElementOptions, PluginKeys } from '../../interfaces';
4
+ import { createPluginFactory } from '../../core';
5
+ import { extractFragment } from '../../utils/fragment';
6
+ import { mergeElementOptions } from '../../utils/merge-element-options';
7
+ import * as TheQueries from '../../queries';
8
+ import * as TheTransforms from '../../transforms';
9
+ export const withAutoInsertData = (editor) => {
10
+ const { insertData } = editor;
11
+ let allElementOptions = DefaultElementOptions;
12
+ // if (validChildren?.length) {
13
+ // const validInfo = mergeElementOptions(validChildren);
14
+ // allElementOptions = Object.values(validInfo);
15
+ // }
16
+ editor.insertData = (data) => {
17
+ if (editor.extraElementOptions?.length) {
18
+ const extraInfo = mergeElementOptions(editor.extraElementOptions);
19
+ allElementOptions = Object.values(extraInfo);
20
+ }
21
+ const indivisibleTypes = allElementOptions.filter(item => item.isIndivisible).map(item => item.type);
22
+ const fragment = extractFragment(data);
23
+ if (fragment) {
24
+ if (TheQueries.isAcrossBlocks(editor, fragment) || Editor.isVoid(editor, fragment[0])) {
25
+ const { selection } = editor;
26
+ const [start] = Editor.edges(editor, selection);
27
+ // query whether there is a node to be verified
28
+ const tryVerifyNode = allElementOptions.find(item => TheQueries.getAboveByType(editor, item.type, { at: start, mode: 'lowest' }));
29
+ if (tryVerifyNode) {
30
+ // is exist invalid element type in fragment
31
+ const invalidIndex = fragment.findIndex(item => tryVerifyNode.inValidChildrenTypes.includes(item.type));
32
+ if (invalidIndex > -1) {
33
+ const validFragmentData = fragment.slice(0, invalidIndex);
34
+ const invalidFragmentData = fragment.slice(invalidIndex, fragment.length);
35
+ Editor.withoutNormalizing(editor, () => {
36
+ if (validFragmentData.length > 0) {
37
+ validFragmentData.forEach(item => {
38
+ Transforms.insertNodes(editor, item);
39
+ });
40
+ }
41
+ // split node
42
+ const path = TheTransforms.splitNode(editor, indivisibleTypes);
43
+ Transforms.insertNodes(editor, invalidFragmentData, {
44
+ at: Path.next(path)
45
+ });
46
+ });
47
+ return;
48
+ }
49
+ }
50
+ Editor.withoutNormalizing(editor, () => {
51
+ const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);
52
+ const emptyPath = Path.parent(editor.selection.anchor.path);
53
+ Transforms.insertNodes(editor, fragment);
54
+ if (isEmptyParagraph) {
55
+ Transforms.delete(editor, { at: emptyPath });
56
+ const lastPath = emptyPath.pop();
57
+ Transforms.select(editor, [...emptyPath, lastPath + fragment.length - 1]);
58
+ }
59
+ else {
60
+ const lastPath = emptyPath.pop();
61
+ Transforms.select(editor, [...emptyPath, lastPath + fragment.length]);
62
+ }
63
+ AngularEditor.focus(editor);
64
+ Transforms.collapse(editor, { edge: 'end' });
65
+ });
66
+ return;
67
+ }
68
+ }
69
+ insertData(data);
70
+ };
71
+ return editor;
72
+ };
73
+ export const createAutoInsertDataPlugin = createPluginFactory({
74
+ key: PluginKeys.autoInsertData,
75
+ withOverrides: withAutoInsertData
76
+ });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1pbnNlcnQtZGF0YS4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vYXV0by1pbnNlcnQtZGF0YS4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFtQixNQUFTLEVBQUssRUFBRTtJQUNqRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzlCLElBQUksaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7SUFDOUMsK0JBQStCO0lBQy9CLDREQUE0RDtJQUM1RCxvREFBb0Q7SUFDcEQsSUFBSTtJQUVKLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFrQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xFLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENB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QUFFLENBQUMsQ0FBQzt3QkFDN0MsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzdFO3lCQUFNO3dCQUNILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDakMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQ3pFO29CQUNELGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVCLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87YUFDVjtTQUNKO1FBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDO0lBQzFELEdBQUcsRUFBRSxVQUFVLENBQUMsY0FBYztJQUM5QixhQUFhLEVBQUUsa0JBQWtCO0NBQ3BDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgUGF0aCwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IERlZmF1bHRFbGVtZW50T3B0aW9ucywgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgZXh0cmFjdEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuaW1wb3J0IHsgbWVyZ2VFbGVtZW50T3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL21lcmdlLWVsZW1lbnQtb3B0aW9ucyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IHdpdGhBdXRvSW5zZXJ0RGF0YSA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IGluc2VydERhdGEgfSA9IGVkaXRvcjtcbiAgICBsZXQgYWxsRWxlbWVudE9wdGlvbnMgPSBEZWZhdWx0RWxlbWVudE9wdGlvbnM7XG4gICAgLy8gaWYgKHZhbGlkQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgIC8vICAgICBjb25zdCB2YWxpZEluZm8gPSBtZXJnZUVsZW1lbnRPcHRpb25zKHZhbGlkQ2hpbGRyZW4pO1xuICAgIC8vICAgICBhbGxFbGVtZW50T3B0aW9ucyA9IE9iamVjdC52YWx1ZXModmFsaWRJbmZvKTtcbiAgICAvLyB9XG5cbiAgICBlZGl0b3IuaW5zZXJ0RGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICAgICAgaWYgKGVkaXRvci5leHRyYUVsZW1lbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhSW5mbyA9IG1lcmdlRWxlbWVudE9wdGlvbnMoZWRpdG9yLmV4dHJhRWxlbWVudE9wdGlvbnMpO1xuICAgICAgICAgICAgYWxsRWxlbWVudE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKGV4dHJhSW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kaXZpc2libGVUeXBlcyA9IGFsbEVsZW1lbnRPcHRpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNJbmRpdmlzaWJsZSkubWFwKGl0ZW0gPT4gaXRlbS50eXBlKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICAgICAgaWYgKFRoZVF1ZXJpZXMuaXNBY3Jvc3NCbG9ja3MoZWRpdG9yLCBmcmFnbWVudCkgfHwgRWRpdG9yLmlzVm9pZChlZGl0b3IsIGZyYWdtZW50WzBdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgICAgICAgICAgY29uc3QgW3N0YXJ0XSA9IEVkaXRvci5lZGdlcyhlZGl0b3IsIHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgLy8gcXVlcnkgd2hldGhlciB0aGVyZSBpcyBhIG5vZGUgdG8gYmUgdmVyaWZpZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0cnlWZXJpZnlOb2RlID0gYWxsRWxlbWVudE9wdGlvbnMuZmluZChpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgIFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBpdGVtLnR5cGUsIHsgYXQ6IHN0YXJ0LCBtb2RlOiAnbG93ZXN0JyB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyeVZlcmlmeU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgZXhpc3QgaW52YWxpZCBlbGVtZW50IHR5cGUgaW4gZnJhZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEluZGV4ID0gZnJhZ21lbnQuZmluZEluZGV4KGl0ZW0gPT4gdHJ5VmVyaWZ5Tm9kZS5pblZhbGlkQ2hpbGRyZW5UeXBlcy5pbmNsdWRlcyhpdGVtLnR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZEZyYWdtZW50RGF0YSA9IGZyYWdtZW50LnNsaWNlKDAsIGludmFsaWRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkRnJhZ21lbnREYXRhID0gZnJhZ21lbnQuc2xpY2UoaW52YWxpZEluZGV4LCBmcmFnbWVudC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGcmFnbWVudERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZEZyYWdtZW50RGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BsaXQgbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBUaGVUcmFuc2Zvcm1zLnNwbGl0Tm9kZShlZGl0b3IsIGluZGl2aXNpYmxlVHlwZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBpbnZhbGlkRnJhZ21lbnREYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBQYXRoLm5leHQocGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRW1wdHlQYXJhZ3JhcGggPSBUaGVRdWVyaWVzLmlzRW1wdHlQYXJhZ3JhcGgoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5UGF0aCA9IFBhdGgucGFyZW50KGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGVzKGVkaXRvciwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eVBhcmFncmFwaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7IGF0OiBlbXB0eVBhdGggfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0UGF0aCA9IGVtcHR5UGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLmVtcHR5UGF0aCwgbGFzdFBhdGggKyBmcmFnbWVudC5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0UGF0aCA9IGVtcHR5UGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgWy4uLmVtcHR5UGF0aCwgbGFzdFBhdGggKyBmcmFnbWVudC5sZW5ndGhdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdlbmQnIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnNlcnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUF1dG9JbnNlcnREYXRhUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeSh7XG4gICAga2V5OiBQbHVnaW5LZXlzLmF1dG9JbnNlcnREYXRhLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhBdXRvSW5zZXJ0RGF0YVxufSk7XG4iXX0=