@cuby-ui/core 0.0.227 → 0.0.230

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 (269) hide show
  1. package/components/button/button.component.d.ts +1 -1
  2. package/components/content-wrapper/content-wrapper.component.d.ts +11 -0
  3. package/components/content-wrapper/index.d.ts +1 -0
  4. package/components/empty-state/empty-state.component.d.ts +7 -0
  5. package/components/empty-state/index.d.ts +1 -0
  6. package/components/ghost-input/ghost-input.component.d.ts +6 -0
  7. package/components/ghost-input/index.d.ts +1 -0
  8. package/components/index.d.ts +3 -0
  9. package/components/sidebar/sidebar-header/sidebar-header.component.d.ts +1 -1
  10. package/components/sidebar/sidebar-navigation-item/sidebar-navigation-item.component.d.ts +1 -1
  11. package/directives/tooltip/tooltip.component.d.ts +1 -1
  12. package/editor/components/editor-attaches-tool/editor-attaches-tool.component.d.ts +44 -0
  13. package/editor/components/editor-attaches-tool/editor-attaches-tool.options.d.ts +17 -0
  14. package/editor/components/editor-attaches-tool/index.d.ts +2 -0
  15. package/editor/components/editor-image-tool/editor-image-tool.component.d.ts +14 -0
  16. package/editor/components/editor-image-tool/editor-image-tool.options.d.ts +26 -0
  17. package/editor/components/editor-image-tool/index.d.ts +2 -0
  18. package/editor/components/editor-tool/editor-tool.component.d.ts +22 -0
  19. package/editor/components/editor-tool-modal/editor-tool-modal.component.d.ts +24 -0
  20. package/editor/components/editor-tool-modal/editor-tool-modal.options.d.ts +8 -0
  21. package/editor/components/editor-tool-modal/index.d.ts +2 -0
  22. package/editor/components/editor-tooltip/editor-tooltip.component.d.ts +16 -0
  23. package/editor/components/editor-tooltip/editor-tooltip.options.d.ts +9 -0
  24. package/editor/components/editor-tooltip/index.d.ts +2 -0
  25. package/editor/components/editor-video-tool/editor-video-tool.component.d.ts +12 -0
  26. package/editor/components/editor-video-tool/editor-video-tool.options.d.ts +26 -0
  27. package/editor/components/editor-video-tool/index.d.ts +2 -0
  28. package/editor/components/index.d.ts +7 -0
  29. package/editor/components/marker-modal/index.d.ts +3 -0
  30. package/editor/components/marker-modal/marker-modal.component.d.ts +62 -0
  31. package/editor/components/marker-modal/marker-modal.interfaces.d.ts +7 -0
  32. package/editor/components/marker-modal/marker-modal.options.d.ts +1 -0
  33. package/editor/components/marker-select/component/select-item/select-option.component.d.ts +7 -0
  34. package/editor/components/marker-select/index.d.ts +2 -0
  35. package/editor/components/marker-select/marker-select.component.d.ts +40 -0
  36. package/editor/components/marker-select/marker-select.options.d.ts +1 -0
  37. package/editor/config/custom-elements.d.ts +2 -0
  38. package/editor/config/editor.config.d.ts +3 -0
  39. package/editor/config/editor.provider.d.ts +2 -0
  40. package/editor/config/index.d.ts +2 -0
  41. package/editor/constants/editor.constants.d.ts +15 -0
  42. package/editor/constants/index.d.ts +1 -0
  43. package/editor/editor.component.d.ts +71 -0
  44. package/editor/events/editor-drag.event.d.ts +2 -0
  45. package/editor/events/editor-keyboard.event.d.ts +2 -0
  46. package/editor/events/editor-modal.event.d.ts +3 -0
  47. package/editor/events/editor-tooltip.event.d.ts +2 -0
  48. package/editor/events/set-editor-events.d.ts +1 -0
  49. package/editor/index.d.ts +9 -0
  50. package/editor/interfaces/angular-element.d.ts +2 -0
  51. package/editor/interfaces/blocks-request-data.d.ts +6 -0
  52. package/editor/interfaces/combined-block-adding-event.d.ts +7 -0
  53. package/editor/interfaces/combined-block-data.d.ts +5 -0
  54. package/editor/interfaces/combined-part-block-data.d.ts +7 -0
  55. package/editor/interfaces/custom-element.d.ts +5 -0
  56. package/editor/interfaces/event-action-data.d.ts +5 -0
  57. package/editor/interfaces/file-response-data.d.ts +10 -0
  58. package/editor/interfaces/full-block-data.d.ts +8 -0
  59. package/editor/interfaces/index.d.ts +14 -0
  60. package/editor/interfaces/main-editor-config.d.ts +15 -0
  61. package/editor/interfaces/mutation-actions.d.ts +5 -0
  62. package/editor/interfaces/parent.d.ts +4 -0
  63. package/editor/interfaces/tools.d.ts +4 -0
  64. package/editor/interfaces/tune.d.ts +6 -0
  65. package/editor/pipes/file-size.pipe.d.ts +9 -0
  66. package/editor/services/editor-service.options.d.ts +8 -0
  67. package/editor/services/editor.service.d.ts +23 -0
  68. package/editor/services/index.d.ts +6 -0
  69. package/editor/services/jtext-api.options.d.ts +20 -0
  70. package/editor/services/jtext-api.service.d.ts +23 -0
  71. package/editor/services/markers-service.options.d.ts +4 -0
  72. package/editor/services/markers.service.d.ts +11 -0
  73. package/editor/tools/attaches.tool.d.ts +28 -0
  74. package/editor/tools/bold.tool.d.ts +11 -0
  75. package/editor/tools/combined-text-block.tool.d.ts +49 -0
  76. package/editor/tools/custom-marker.tool.d.ts +16 -0
  77. package/editor/tools/header.tool.d.ts +8 -0
  78. package/editor/tools/image.tool.d.ts +37 -0
  79. package/editor/tools/index.d.ts +11 -0
  80. package/editor/tools/italic.tool.d.ts +12 -0
  81. package/editor/tools/link-marker.tool.d.ts +15 -0
  82. package/editor/tools/list.tool.d.ts +5 -0
  83. package/editor/tools/marker.tool.d.ts +36 -0
  84. package/editor/tools/role-marker.tool.d.ts +7 -0
  85. package/editor/tools/selection-base.tool.d.ts +24 -0
  86. package/editor/tools/tool-marker.tool.d.ts +7 -0
  87. package/editor/tools/video.tool.d.ts +32 -0
  88. package/editor/utils/create-link-modal.d.ts +3 -0
  89. package/editor/utils/create-tool-modal.d.ts +4 -0
  90. package/editor/utils/create-tooltip.d.ts +8 -0
  91. package/editor/utils/file-uploader.d.ts +26 -0
  92. package/editor/utils/generate-id.d.ts +1 -0
  93. package/editor/utils/index.d.ts +9 -0
  94. package/editor/utils/recalculate-indexes.d.ts +2 -0
  95. package/editor/utils/remove-element-tag-wrapper.d.ts +1 -0
  96. package/editor/utils/split-html.d.ts +1 -0
  97. package/editor/utils/url.validator.d.ts +2 -0
  98. package/editor/widgets/editor-block/editor-block.component.d.ts +22 -0
  99. package/editor/widgets/editor-block/index.d.ts +1 -0
  100. package/editor/widgets/editor-modal/editor-modal.component.d.ts +19 -0
  101. package/editor/widgets/editor-modal/index.d.ts +1 -0
  102. package/editor/widgets/editor-readonly/editor-readonly.component.d.ts +28 -0
  103. package/editor/widgets/editor-readonly/editor-readonly.options.d.ts +5 -0
  104. package/editor/widgets/editor-readonly/index.d.ts +2 -0
  105. package/editor/widgets/index.d.ts +3 -0
  106. package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +2 -2
  107. package/esm2022/components/content-wrapper/content-wrapper.component.mjs +29 -0
  108. package/esm2022/components/content-wrapper/index.mjs +2 -0
  109. package/esm2022/components/empty-state/empty-state.component.mjs +17 -0
  110. package/esm2022/components/empty-state/index.mjs +2 -0
  111. package/esm2022/components/ghost-input/ghost-input.component.mjs +16 -0
  112. package/esm2022/components/ghost-input/index.mjs +2 -0
  113. package/esm2022/components/index.mjs +4 -1
  114. package/esm2022/directives/tooltip/tooltip-describe.directive.mjs +5 -3
  115. package/esm2022/directives/tooltip/tooltip-position.directive.mjs +6 -3
  116. package/esm2022/directives/tooltip/tooltip.component.mjs +6 -3
  117. package/esm2022/editor/components/editor-attaches-tool/editor-attaches-tool.component.mjs +76 -0
  118. package/esm2022/editor/components/editor-attaches-tool/editor-attaches-tool.options.mjs +2 -0
  119. package/esm2022/editor/components/editor-attaches-tool/index.mjs +3 -0
  120. package/esm2022/editor/components/editor-image-tool/editor-image-tool.component.mjs +43 -0
  121. package/esm2022/editor/components/editor-image-tool/editor-image-tool.options.mjs +2 -0
  122. package/esm2022/editor/components/editor-image-tool/index.mjs +3 -0
  123. package/esm2022/editor/components/editor-tool/editor-tool.component.mjs +74 -0
  124. package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.component.mjs +69 -0
  125. package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.options.mjs +2 -0
  126. package/esm2022/editor/components/editor-tool-modal/index.mjs +3 -0
  127. package/esm2022/editor/components/editor-tooltip/editor-tooltip.component.mjs +45 -0
  128. package/esm2022/editor/components/editor-tooltip/editor-tooltip.options.mjs +2 -0
  129. package/esm2022/editor/components/editor-tooltip/index.mjs +3 -0
  130. package/esm2022/editor/components/editor-video-tool/editor-video-tool.component.mjs +41 -0
  131. package/esm2022/editor/components/editor-video-tool/editor-video-tool.options.mjs +2 -0
  132. package/esm2022/editor/components/editor-video-tool/index.mjs +3 -0
  133. package/esm2022/editor/components/index.mjs +8 -0
  134. package/esm2022/editor/components/marker-modal/index.mjs +3 -0
  135. package/esm2022/editor/components/marker-modal/marker-modal.component.mjs +261 -0
  136. package/esm2022/editor/components/marker-modal/marker-modal.interfaces.mjs +2 -0
  137. package/esm2022/editor/components/marker-modal/marker-modal.options.mjs +2 -0
  138. package/esm2022/editor/components/marker-select/component/select-item/select-option.component.mjs +15 -0
  139. package/esm2022/editor/components/marker-select/index.mjs +3 -0
  140. package/esm2022/editor/components/marker-select/marker-select.component.mjs +155 -0
  141. package/esm2022/editor/components/marker-select/marker-select.options.mjs +2 -0
  142. package/esm2022/editor/config/custom-elements.mjs +32 -0
  143. package/esm2022/editor/config/editor.config.mjs +30 -0
  144. package/esm2022/editor/config/editor.provider.mjs +19 -0
  145. package/esm2022/editor/config/index.mjs +3 -0
  146. package/esm2022/editor/constants/editor.constants.mjs +20 -0
  147. package/esm2022/editor/constants/index.mjs +2 -0
  148. package/esm2022/editor/editor.component.mjs +380 -0
  149. package/esm2022/editor/events/editor-drag.event.mjs +7 -0
  150. package/esm2022/editor/events/editor-keyboard.event.mjs +33 -0
  151. package/esm2022/editor/events/editor-modal.event.mjs +31 -0
  152. package/esm2022/editor/events/editor-tooltip.event.mjs +63 -0
  153. package/esm2022/editor/events/set-editor-events.mjs +11 -0
  154. package/esm2022/editor/i18n/en.json +14 -0
  155. package/esm2022/editor/index.mjs +8 -0
  156. package/esm2022/editor/interfaces/angular-element.mjs +2 -0
  157. package/esm2022/editor/interfaces/blocks-request-data.mjs +2 -0
  158. package/esm2022/editor/interfaces/combined-block-adding-event.mjs +2 -0
  159. package/esm2022/editor/interfaces/combined-block-data.mjs +2 -0
  160. package/esm2022/editor/interfaces/combined-part-block-data.mjs +2 -0
  161. package/esm2022/editor/interfaces/custom-element.mjs +2 -0
  162. package/esm2022/editor/interfaces/event-action-data.mjs +2 -0
  163. package/esm2022/editor/interfaces/file-response-data.mjs +2 -0
  164. package/esm2022/editor/interfaces/full-block-data.mjs +2 -0
  165. package/esm2022/editor/interfaces/index.mjs +14 -0
  166. package/esm2022/editor/interfaces/main-editor-config.mjs +2 -0
  167. package/esm2022/editor/interfaces/mutation-actions.mjs +2 -0
  168. package/esm2022/editor/interfaces/parent.mjs +2 -0
  169. package/esm2022/editor/interfaces/tools.mjs +2 -0
  170. package/esm2022/editor/interfaces/tune.mjs +2 -0
  171. package/esm2022/editor/pipes/file-size.pipe.mjs +25 -0
  172. package/esm2022/editor/services/editor-service.options.mjs +4 -0
  173. package/esm2022/editor/services/editor.service.mjs +138 -0
  174. package/esm2022/editor/services/index.mjs +7 -0
  175. package/esm2022/editor/services/jtext-api.options.mjs +2 -0
  176. package/esm2022/editor/services/jtext-api.service.mjs +50 -0
  177. package/esm2022/editor/services/markers-service.options.mjs +2 -0
  178. package/esm2022/editor/services/markers.service.mjs +79 -0
  179. package/esm2022/editor/tools/attaches.tool.mjs +96 -0
  180. package/esm2022/editor/tools/bold.tool.mjs +33 -0
  181. package/esm2022/editor/tools/combined-text-block.tool.mjs +380 -0
  182. package/esm2022/editor/tools/custom-marker.tool.mjs +88 -0
  183. package/esm2022/editor/tools/header.tool.mjs +16 -0
  184. package/esm2022/editor/tools/image.tool.mjs +157 -0
  185. package/esm2022/editor/tools/index.mjs +12 -0
  186. package/esm2022/editor/tools/italic.tool.mjs +35 -0
  187. package/esm2022/editor/tools/link-marker.tool.mjs +80 -0
  188. package/esm2022/editor/tools/list.tool.mjs +10 -0
  189. package/esm2022/editor/tools/marker.tool.mjs +144 -0
  190. package/esm2022/editor/tools/role-marker.tool.mjs +17 -0
  191. package/esm2022/editor/tools/selection-base.tool.mjs +92 -0
  192. package/esm2022/editor/tools/tool-marker.tool.mjs +14 -0
  193. package/esm2022/editor/tools/video.tool.mjs +132 -0
  194. package/esm2022/editor/utils/create-link-modal.mjs +22 -0
  195. package/esm2022/editor/utils/create-tool-modal.mjs +45 -0
  196. package/esm2022/editor/utils/create-tooltip.mjs +44 -0
  197. package/esm2022/editor/utils/file-uploader.mjs +57 -0
  198. package/esm2022/editor/utils/generate-id.mjs +4 -0
  199. package/esm2022/editor/utils/index.mjs +10 -0
  200. package/esm2022/editor/utils/recalculate-indexes.mjs +32 -0
  201. package/esm2022/editor/utils/remove-element-tag-wrapper.mjs +11 -0
  202. package/esm2022/editor/utils/split-html.mjs +128 -0
  203. package/esm2022/editor/utils/url.validator.mjs +12 -0
  204. package/esm2022/editor/widgets/editor-block/editor-block.component.mjs +63 -0
  205. package/esm2022/editor/widgets/editor-block/index.mjs +2 -0
  206. package/esm2022/editor/widgets/editor-modal/editor-modal.component.mjs +47 -0
  207. package/esm2022/editor/widgets/editor-modal/index.mjs +2 -0
  208. package/esm2022/editor/widgets/editor-readonly/editor-readonly.component.mjs +40 -0
  209. package/esm2022/editor/widgets/editor-readonly/editor-readonly.options.mjs +2 -0
  210. package/esm2022/editor/widgets/editor-readonly/index.mjs +2 -0
  211. package/esm2022/editor/widgets/index.mjs +4 -0
  212. package/esm2022/index.mjs +3 -1
  213. package/esm2022/interceptors/loader.interceptor.mjs +3 -3
  214. package/esm2022/services/loader.options.mjs +2 -2
  215. package/esm2022/services/loader.service.mjs +11 -11
  216. package/esm2022/utils/default-validators/create-default-validators.mjs +12 -0
  217. package/esm2022/utils/default-validators/extra-spaces.options.mjs +11 -0
  218. package/esm2022/utils/default-validators/extra-spaces.validators.mjs +16 -0
  219. package/esm2022/utils/default-validators/index.mjs +2 -0
  220. package/esm2022/utils/index.mjs +2 -1
  221. package/esm2022/widgets/categories/categories.component.mjs +75 -0
  222. package/esm2022/widgets/categories/components/categories-list/categories-list.component.mjs +16 -0
  223. package/esm2022/widgets/categories/components/categories-list/index.mjs +2 -0
  224. package/esm2022/widgets/categories/components/category-form/category-form.component.mjs +79 -0
  225. package/esm2022/widgets/categories/components/category-form/index.mjs +2 -0
  226. package/esm2022/widgets/categories/components/category-item/category-item.component.mjs +123 -0
  227. package/esm2022/widgets/categories/components/category-item/index.mjs +2 -0
  228. package/esm2022/widgets/categories/components/create-category-item/create-category-item.component.mjs +25 -0
  229. package/esm2022/widgets/categories/components/create-category-item/index.mjs +2 -0
  230. package/esm2022/widgets/categories/components/index.mjs +3 -0
  231. package/esm2022/widgets/categories/index.mjs +2 -0
  232. package/esm2022/widgets/categories/services/index.mjs +2 -0
  233. package/esm2022/widgets/categories/services/selected-category.service.mjs +38 -0
  234. package/esm2022/widgets/general-control-error-hint/general-control-error-hint.component.mjs +21 -0
  235. package/esm2022/widgets/general-control-error-hint/index.mjs +2 -0
  236. package/esm2022/widgets/index.mjs +3 -0
  237. package/esm2022/widgets/utility-info/index.mjs +2 -0
  238. package/esm2022/widgets/utility-info/utility-info.component.mjs +224 -0
  239. package/fesm2022/cuby-ui-core-en-D3DnyYmu.mjs +29 -0
  240. package/fesm2022/cuby-ui-core-en-D3DnyYmu.mjs.map +1 -0
  241. package/fesm2022/cuby-ui-core.mjs +4047 -67
  242. package/fesm2022/cuby-ui-core.mjs.map +1 -1
  243. package/index.d.ts +2 -0
  244. package/package.json +3 -3
  245. package/services/loader.options.d.ts +2 -2
  246. package/services/loader.service.d.ts +7 -7
  247. package/utils/default-validators/create-default-validators.d.ts +5 -0
  248. package/utils/default-validators/extra-spaces.options.d.ts +2 -0
  249. package/utils/default-validators/extra-spaces.validators.d.ts +3 -0
  250. package/utils/default-validators/index.d.ts +1 -0
  251. package/utils/index.d.ts +1 -0
  252. package/widgets/categories/categories.component.d.ts +24 -0
  253. package/widgets/categories/components/categories-list/categories-list.component.d.ts +7 -0
  254. package/widgets/categories/components/categories-list/index.d.ts +1 -0
  255. package/widgets/categories/components/category-form/category-form.component.d.ts +28 -0
  256. package/widgets/categories/components/category-form/index.d.ts +1 -0
  257. package/widgets/categories/components/category-item/category-item.component.d.ts +40 -0
  258. package/widgets/categories/components/category-item/index.d.ts +1 -0
  259. package/widgets/categories/components/create-category-item/create-category-item.component.d.ts +10 -0
  260. package/widgets/categories/components/create-category-item/index.d.ts +1 -0
  261. package/widgets/categories/components/index.d.ts +2 -0
  262. package/widgets/categories/index.d.ts +1 -0
  263. package/widgets/categories/services/index.d.ts +1 -0
  264. package/widgets/categories/services/selected-category.service.d.ts +18 -0
  265. package/widgets/general-control-error-hint/general-control-error-hint.component.d.ts +9 -0
  266. package/widgets/general-control-error-hint/index.d.ts +1 -0
  267. package/widgets/index.d.ts +2 -0
  268. package/widgets/utility-info/index.d.ts +1 -0
  269. package/widgets/utility-info/utility-info.component.d.ts +45 -0
@@ -0,0 +1,380 @@
1
+ import { COMBINED_TEXT_BLOCK, COMBINED_TEXT_BLOCK_ADDED, COMBINED_TEXT_BLOCK_NAME, COMBINED_TEXT_BLOCK_PART, COMBINED_TEXT_BLOCK_REMOVED, COMBINED_TEXT_BLOCK_UPDATED, DEFAULT_PLACEHOLDER, DEFAULT_READONLY_PLACEHOLDER, SPLIT_MAX_LENGTH } from '../constants';
2
+ import { recalculateIndexes, splitHTML, generateId } from '../utils';
3
+ export class CuiCombinedTextBlockTool {
4
+ constructor(options) {
5
+ this.TAG = 'span';
6
+ this.DEBOUNCE_TIME = 350;
7
+ this.MAX_CHILD_COUNT_FOR_EMPTY = 1;
8
+ this.PLACEHOLDER_ATTRIBUTE_NAME = 'placeholderActive';
9
+ this.mutationConfig = {
10
+ subtree: true,
11
+ childList: true,
12
+ characterData: true
13
+ };
14
+ this.changes = new Map();
15
+ this.getMutationCallback = (wait) => {
16
+ let timeoutId = null;
17
+ return () => {
18
+ if (timeoutId) {
19
+ clearTimeout(timeoutId);
20
+ }
21
+ timeoutId = setTimeout(() => this.handleMutations(), wait);
22
+ };
23
+ };
24
+ const body = options;
25
+ const data = body.data;
26
+ this.readOnly = body.readOnly;
27
+ this.placeholder = this.getPlaceholder(body.config);
28
+ this.api = body.api;
29
+ this.data = {
30
+ id: data.id || generateId(),
31
+ textBlocks: data.textBlocks || []
32
+ };
33
+ this.convertDefaultDataToCustom(data);
34
+ }
35
+ static get isInline() {
36
+ return false;
37
+ }
38
+ static get isReadOnlySupported() {
39
+ return true;
40
+ }
41
+ static get enableLineBreaks() {
42
+ return false;
43
+ }
44
+ static get toolbox() {
45
+ return {
46
+ icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M8 9V7.2C8 7.08954 8.08954 7 8.2 7L12 7M16 9V7.2C16 7.08954 15.9105 7 15.8 7L12 7M12 7L12 17M12 17H10M12 17H14"></path></svg>',
47
+ title: 'Text'
48
+ };
49
+ }
50
+ static get pasteConfig() {
51
+ return {
52
+ tags: ['P']
53
+ };
54
+ }
55
+ onPaste(event) {
56
+ if (event.type !== 'tag') {
57
+ return;
58
+ }
59
+ const text = event.detail.data.textContent;
60
+ this.data.textBlocks.splice(this.data.textBlocks.length - 1, 1, this.getBlockPartObject(generateId(), text));
61
+ this.update(this.data.textBlocks);
62
+ }
63
+ render() {
64
+ this.wrapper = document.createElement('div');
65
+ this.wrapper.classList.add(COMBINED_TEXT_BLOCK);
66
+ this.wrapper.dataset[this.PLACEHOLDER_ATTRIBUTE_NAME] = this.api.i18n.t(this.placeholder);
67
+ if (!this.readOnly) {
68
+ this.wrapper.contentEditable = 'true';
69
+ }
70
+ if (!this.data.textBlocks.length) {
71
+ this.data.textBlocks.push(this.getBlockPartObject(generateId(), ''));
72
+ }
73
+ this.update(this.data.textBlocks);
74
+ this.checkIsEditorEmpty();
75
+ if (!this.readOnly) {
76
+ const callback = this.getMutationCallback(this.DEBOUNCE_TIME);
77
+ this.observer = new MutationObserver(this.onMutationEvent.bind(this, callback));
78
+ this.observer.observe(this.wrapper, this.mutationConfig);
79
+ }
80
+ return this.wrapper;
81
+ }
82
+ merge(blocksData) {
83
+ if (!this.wrapper) {
84
+ return;
85
+ }
86
+ let blocksTextContent = '';
87
+ this.data.textBlocks = [];
88
+ blocksData.forEach((block) => {
89
+ blocksTextContent += block.data.text;
90
+ });
91
+ for (let i = 0; i < this.wrapper.childNodes.length; i++) {
92
+ const node = this.wrapper.childNodes.item(i);
93
+ if (!(node instanceof HTMLSpanElement)) {
94
+ return;
95
+ }
96
+ i--;
97
+ blocksTextContent = node.innerHTML + blocksTextContent;
98
+ node.remove();
99
+ }
100
+ const parts = blocksTextContent.length < SPLIT_MAX_LENGTH ? [blocksTextContent] : splitHTML(blocksTextContent);
101
+ parts.forEach((part) => {
102
+ const blockObject = this.getBlockPartObject(generateId(), part);
103
+ this.data.textBlocks.push(blockObject);
104
+ });
105
+ this.update(this.data.textBlocks);
106
+ }
107
+ save(blockContent) {
108
+ const textBlocks = [];
109
+ blockContent.querySelectorAll(this.TAG).forEach((span) => {
110
+ textBlocks.push(this.getBlockPartObject(span.dataset['id'], span.innerHTML));
111
+ });
112
+ return textBlocks;
113
+ }
114
+ removed() {
115
+ this.observer?.disconnect();
116
+ const blockIds = new Set();
117
+ this.data.textBlocks.forEach((block) => {
118
+ blockIds.add(block.id || '');
119
+ });
120
+ this.removeBlocks(blockIds);
121
+ }
122
+ onMutationEvent(callback, mutationList) {
123
+ if (mutationList.length === 0) {
124
+ return;
125
+ }
126
+ mutationList.forEach((mutation) => {
127
+ if (mutation.removedNodes.length) {
128
+ this.changes.set(generateId(), mutation);
129
+ return;
130
+ }
131
+ this.changes.set(mutation.target, mutation);
132
+ });
133
+ callback(mutationList);
134
+ this.checkIsEditorEmpty();
135
+ }
136
+ handleMutations() {
137
+ const mutationsList = [...this.changes.values()];
138
+ const { updatedElements, removedElementsIds } = this.getMutationActions(mutationsList);
139
+ const splitedParts = [];
140
+ updatedElements.forEach((element) => {
141
+ const elementContent = element.innerHTML;
142
+ if (elementContent.length < SPLIT_MAX_LENGTH) {
143
+ return;
144
+ }
145
+ const parts = splitHTML(elementContent);
146
+ parts.forEach((part, index) => {
147
+ if (index === 0) {
148
+ return;
149
+ }
150
+ const blockId = generateId();
151
+ const textElement = this.createBlock(blockId, part);
152
+ splitedParts.push(textElement);
153
+ });
154
+ element.innerHTML = parts[0];
155
+ element.after(...splitedParts);
156
+ });
157
+ this.addBlocks(splitedParts, updatedElements);
158
+ this.updateBlocks(updatedElements);
159
+ this.removeBlocks(removedElementsIds);
160
+ this.changes.clear();
161
+ }
162
+ getNextIndex() {
163
+ recalculateIndexes(this.api.blocks);
164
+ const index = this.api.blocks.getCurrentBlockIndex();
165
+ const block = this.api.blocks.getBlockByIndex(index);
166
+ const dataIndex = Number(block?.holder.dataset['index']);
167
+ const selection = window.getSelection();
168
+ const range = selection?.rangeCount ? selection.getRangeAt(0) : null;
169
+ const caretPosition = range?.startOffset ?? 1;
170
+ let nextBlockIndex = dataIndex;
171
+ if (caretPosition !== 0) {
172
+ const blockContainer = block?.holder.querySelector('.' + COMBINED_TEXT_BLOCK);
173
+ const childrenCount = blockContainer?.children?.length ? blockContainer?.children?.length - 1 : 0;
174
+ nextBlockIndex = dataIndex + childrenCount + 1;
175
+ }
176
+ if (!nextBlockIndex) {
177
+ nextBlockIndex ||= 0;
178
+ }
179
+ return nextBlockIndex;
180
+ }
181
+ getBlockPartObject(blockId, text) {
182
+ return {
183
+ id: blockId,
184
+ type: COMBINED_TEXT_BLOCK_PART,
185
+ data: {
186
+ text,
187
+ parentId: this.data.id,
188
+ parentType: COMBINED_TEXT_BLOCK_NAME
189
+ }
190
+ };
191
+ }
192
+ getMutationActions(mutationList) {
193
+ const updatedElements = new Set();
194
+ const removedElementsIds = new Set();
195
+ const changedOutsideElements = [];
196
+ this.lastBlockElement = undefined;
197
+ mutationList.forEach((mutation) => {
198
+ this.handleUpdatedBlocks(mutation, updatedElements, changedOutsideElements);
199
+ this.handleRemovedBlocks(mutation, removedElementsIds);
200
+ });
201
+ if (this.lastBlockElement) {
202
+ const lastBlockElement = this.lastBlockElement;
203
+ lastBlockElement.append(...changedOutsideElements);
204
+ this.setCaretToBlocksEnd(lastBlockElement);
205
+ }
206
+ return {
207
+ updatedElements,
208
+ removedElementsIds
209
+ };
210
+ }
211
+ setCaretToBlocksEnd(block) {
212
+ const selection = window.getSelection();
213
+ const range = document.createRange();
214
+ range.setStart(block, block.childNodes.length);
215
+ selection?.removeAllRanges();
216
+ selection?.addRange(range);
217
+ }
218
+ handleUpdatedBlocks(mutation, updatedElements, outsideChanges) {
219
+ let element = mutation.target;
220
+ if (mutation.target.nodeType === Node.TEXT_NODE) {
221
+ element = mutation.target.parentElement;
222
+ }
223
+ const span = element?.closest('.' + COMBINED_TEXT_BLOCK_PART);
224
+ if (span) {
225
+ updatedElements.add(span);
226
+ return;
227
+ }
228
+ this.handleChangesOutsideBlock(element, outsideChanges);
229
+ }
230
+ handleChangesOutsideBlock(element, outsideChanges) {
231
+ if (!element || this.lastBlockElement) {
232
+ return;
233
+ }
234
+ element.childNodes.forEach((block) => {
235
+ const blockElement = block;
236
+ if (blockElement.classList?.contains(COMBINED_TEXT_BLOCK_PART)) {
237
+ this.lastBlockElement = blockElement;
238
+ return;
239
+ }
240
+ outsideChanges.push(block);
241
+ });
242
+ }
243
+ addBlocks(splicedParts, updatedElements) {
244
+ if (!splicedParts.length) {
245
+ return;
246
+ }
247
+ const addedBlocks = splicedParts.map((block) => {
248
+ const blockId = block.dataset['id'];
249
+ return {
250
+ id: blockId,
251
+ type: COMBINED_TEXT_BLOCK_PART,
252
+ data: {
253
+ text: block.innerHTML,
254
+ parentId: this.data.id,
255
+ parentType: COMBINED_TEXT_BLOCK_NAME
256
+ }
257
+ };
258
+ });
259
+ const previousElement = updatedElements.values().next().value;
260
+ const id = previousElement?.dataset['id'];
261
+ const index = Number(previousElement?.dataset['index']) + 1;
262
+ const blockIndex = this.data.textBlocks.findIndex((block) => block.id === id);
263
+ this.data.textBlocks.splice(blockIndex, 0, ...addedBlocks);
264
+ this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
265
+ index,
266
+ blockIndex,
267
+ blocks: addedBlocks,
268
+ data: this.data.textBlocks
269
+ });
270
+ }
271
+ updateBlocks(updatedElements) {
272
+ if (!updatedElements.size) {
273
+ return;
274
+ }
275
+ const updatedBlocks = [...updatedElements.values()].map((block) => {
276
+ return {
277
+ id: block.dataset['id'],
278
+ type: COMBINED_TEXT_BLOCK_PART,
279
+ data: {
280
+ text: block.innerHTML,
281
+ parentId: this.data.id,
282
+ parentType: COMBINED_TEXT_BLOCK_NAME
283
+ }
284
+ };
285
+ });
286
+ this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, updatedBlocks);
287
+ }
288
+ handleRemovedBlocks(mutation, removedElementsIds) {
289
+ if (mutation.removedNodes.length === 0) {
290
+ return;
291
+ }
292
+ mutation.removedNodes.forEach((node) => {
293
+ if (!(node instanceof HTMLElement)) {
294
+ return;
295
+ }
296
+ const blockId = node.dataset['id'];
297
+ if (!blockId) {
298
+ return;
299
+ }
300
+ removedElementsIds.add(blockId);
301
+ });
302
+ }
303
+ removeBlocks(ids) {
304
+ if (!ids.size) {
305
+ return;
306
+ }
307
+ const removedElementIds = [...ids.values()];
308
+ this.data.textBlocks = this.data.textBlocks.filter((block) => !ids.has(block.id || ''));
309
+ this.api.events.emit(COMBINED_TEXT_BLOCK_REMOVED, removedElementIds);
310
+ }
311
+ update(blocks) {
312
+ if (!blocks.length) {
313
+ return;
314
+ }
315
+ blocks.forEach((block) => {
316
+ const textElement = this.createBlock(block.id || generateId(), block.data.text);
317
+ if (!this.wrapper) {
318
+ return;
319
+ }
320
+ if (this.wrapper.querySelector('.' + COMBINED_TEXT_BLOCK_PART)) {
321
+ this.wrapper.append(textElement);
322
+ return;
323
+ }
324
+ this.wrapper.replaceChildren(textElement);
325
+ });
326
+ setTimeout(() => {
327
+ this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
328
+ blocks
329
+ });
330
+ });
331
+ }
332
+ createBlock(id, text) {
333
+ const textElement = document.createElement(this.TAG);
334
+ textElement.classList.add(COMBINED_TEXT_BLOCK_PART);
335
+ textElement.innerHTML = text;
336
+ textElement.dataset['id'] = id;
337
+ return textElement;
338
+ }
339
+ convertDefaultDataToCustom(data) {
340
+ if (Array.isArray(data)) {
341
+ this.data.textBlocks = data.map((block) => {
342
+ block.id = generateId();
343
+ block.data.parentId = this.data.id;
344
+ return block;
345
+ });
346
+ }
347
+ if (!data.text) {
348
+ return;
349
+ }
350
+ const fragment = document.createRange().createContextualFragment(data.text);
351
+ let elementContent = '';
352
+ fragment.childNodes.forEach((node) => {
353
+ if (node.nodeType === Node.TEXT_NODE) {
354
+ elementContent += node.textContent;
355
+ return;
356
+ }
357
+ elementContent += node.innerHTML;
358
+ });
359
+ const parts = elementContent.length < SPLIT_MAX_LENGTH ? [elementContent] : splitHTML(elementContent);
360
+ parts.forEach((part) => {
361
+ const blockObject = this.getBlockPartObject(generateId(), part);
362
+ this.data.textBlocks.push(blockObject);
363
+ });
364
+ }
365
+ checkIsEditorEmpty() {
366
+ if (!this.wrapper || this.wrapper.children.length > this.MAX_CHILD_COUNT_FOR_EMPTY) {
367
+ return;
368
+ }
369
+ const item = this.wrapper.children.item(0);
370
+ const isItemEmpty = !item.textContent?.length;
371
+ this.wrapper.dataset['empty'] = `${isItemEmpty}`;
372
+ }
373
+ getPlaceholder(config) {
374
+ if (this.readOnly) {
375
+ return config.readonlyPlaceholder ?? DEFAULT_READONLY_PLACEHOLDER;
376
+ }
377
+ return config.placeholder ?? DEFAULT_PLACEHOLDER;
378
+ }
379
+ }
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRSxNQUFNLE9BQU8sd0JBQXdCO0lBb0JqQyxZQUFZLE9BQWdCO1FBbkJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFMUQsbUJBQWMsR0FBRztZQUNyQixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFNLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBMkpwQix3QkFBbUIsR0FBRyxDQUFDLElBQVksRUFBdUIsRUFBRTtZQUNoRSxJQUFJLFNBQVMsR0FBK0MsSUFBSSxDQUFDO1lBRWpFLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFD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RUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBa0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxNQUFNLENBQUMsbUJBQW1CLElBQUksNEJBQTRCLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztJQUNyRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcclxuaW1wb3J0IHR5cGUgeyBBUEksIEJsb2NrVG9vbCwgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zLCBUb29sQ29uZmlnIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLLFxyXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19BRERFRCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfVVBEQVRFRCxcclxuICAgIERFRkFVTFRfUExBQ0VIT0xERVIsXHJcbiAgICBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSLFxyXG4gICAgU1BMSVRfTUFYX0xFTkdUSFxyXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB0eXBlIHsgQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhLCBDdWlDb21iaW5lZFBhcnRCbG9jaywgQ3VpTXV0YXRpb25BY3Rpb25zLCBDdWlNdXRhdGlvbkNhbGxiYWNrIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcywgc3BsaXRIVE1MLCBnZW5lcmF0ZUlkIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1aUNvbWJpbmVkVGV4dEJsb2NrVG9vbCBpbXBsZW1lbnRzIEJsb2NrVG9vbCB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9ICdzcGFuJztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDM1MDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NISUxEX0NPVU5UX0ZPUl9FTVBUWSA9IDE7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBMQUNFSE9MREVSX0FUVFJJQlVURV9OQU1FID0gJ3BsYWNlaG9sZGVyQWN0aXZlJztcclxuXHJcbiAgICBwcml2YXRlIG11dGF0aW9uQ29uZmlnID0ge1xyXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgIH07XHJcbiAgICBwcml2YXRlIGFwaTogQVBJO1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE7XHJcbiAgICBwcml2YXRlIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgcHJpdmF0ZSBsYXN0QmxvY2tFbGVtZW50PzogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHJlYWRPbmx5PzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY2hhbmdlcyA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnMgYXMgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XHJcblxyXG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSBib2R5LnJlYWRPbmx5O1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKGJvZHkuY29uZmlnKTtcclxuICAgICAgICB0aGlzLmFwaSA9IGJvZHkuYXBpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHtcclxuICAgICAgICAgICAgaWQ6IGRhdGEuaWQgfHwgZ2VuZXJhdGVJZCgpLFxyXG4gICAgICAgICAgICB0ZXh0QmxvY2tzOiBkYXRhLnRleHRCbG9ja3MgfHwgW11cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnZlcnREZWZhdWx0RGF0YVRvQ3VzdG9tKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGlzSW5saW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc1JlYWRPbmx5U3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGVuYWJsZUxpbmVCcmVha3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHRvb2xib3goKTogeyBpY29uOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWNvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk04IDlWNy4yQzggNy4wODk1NCA4LjA4OTU0IDcgOC4yIDdMMTIgN00xNiA5VjcuMkMxNiA3LjA4OTU0IDE1LjkxMDUgNyAxNS44IDdMMTIgN00xMiA3TDEyIDE3TTEyIDE3SDEwTTEyIDE3SDE0XCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnVGV4dCdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHBhc3RlQ29uZmlnKCk6IG9iamVjdCB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGFnczogWydQJ11cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChldmVudC50eXBlICE9PSAndGFnJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGV0YWlsLmRhdGEudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZSh0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGggLSAxLCAxLCB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHRleHQpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbmRlcigpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DSyk7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbdGhpcy5QTEFDRUhPTERFUl9BVFRSSUJVVEVfTkFNRV0gPSB0aGlzLmFwaS5pMThuLnQodGhpcy5wbGFjZWhvbGRlcik7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xyXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ3RydWUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MucHVzaCh0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0lzRWRpdG9yRW1wdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRNdXRhdGlvbkNhbGxiYWNrKHRoaXMuREVCT1VOQ0VfVElNRSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9uRXZlbnQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy53cmFwcGVyLCB0aGlzLm11dGF0aW9uQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1lcmdlKGJsb2Nrc0RhdGE6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYmxvY2tzVGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IFtdO1xyXG5cclxuICAgICAgICBibG9ja3NEYXRhLmZvckVhY2goKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGJsb2Nrc1RleHRDb250ZW50ICs9IGJsb2NrLmRhdGEudGV4dDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy53cmFwcGVyLmNoaWxkTm9kZXMuaXRlbShpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU3BhbkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgYmxvY2tzVGV4dENvbnRlbnQgPSBub2RlLmlubmVySFRNTCArIGJsb2Nrc1RleHRDb250ZW50O1xyXG4gICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBibG9ja3NUZXh0Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2Jsb2Nrc1RleHRDb250ZW50XSA6IHNwbGl0SFRNTChibG9ja3NUZXh0Q29udGVudCk7XHJcblxyXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5kYXRhLnRleHRCbG9ja3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKGJsb2NrQ29udGVudDogSFRNTEVsZW1lbnQpOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdIHtcclxuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdID0gW107XHJcblxyXG4gICAgICAgIGJsb2NrQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuVEFHKS5mb3JFYWNoKChzcGFuOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2godGhpcy5nZXRCbG9ja1BhcnRPYmplY3Qoc3Bhbi5kYXRhc2V0WydpZCddISwgc3Bhbi5pbm5lckhUTUwpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHRCbG9ja3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBibG9ja0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5mb3JFYWNoKChibG9jazogQ3VpQ29tYmluZWRQYXJ0QmxvY2spID0+IHtcclxuICAgICAgICAgICAgYmxvY2tJZHMuYWRkKGJsb2NrLmlkIHx8ICcnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVCbG9ja3MoYmxvY2tJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25NdXRhdGlvbkV2ZW50KGNhbGxiYWNrOiAobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB2b2lkLCBtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQoZ2VuZXJhdGVJZCgpLCBtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuc2V0KG11dGF0aW9uLnRhcmdldCwgbXV0YXRpb24pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsYmFjayhtdXRhdGlvbkxpc3QpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbkNhbGxiYWNrID0gKHdhaXQ6IG51bWJlcik6IEN1aU11dGF0aW9uQ2FsbGJhY2sgPT4ge1xyXG4gICAgICAgIGxldCB0aW1lb3V0SWQ6IEN1aU51bGxhYmxlPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PiA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0SWQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlTXV0YXRpb25zKCksIHdhaXQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlTXV0YXRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG11dGF0aW9uc0xpc3QgPSBbLi4udGhpcy5jaGFuZ2VzLnZhbHVlcygpXTtcclxuICAgICAgICBjb25zdCB7IHVwZGF0ZWRFbGVtZW50cywgcmVtb3ZlZEVsZW1lbnRzSWRzIH0gPSB0aGlzLmdldE11dGF0aW9uQWN0aW9ucyhtdXRhdGlvbnNMaXN0KTtcclxuICAgICAgICBjb25zdCBzcGxpdGVkUGFydHM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb250ZW50OiBzdHJpbmcgPSBlbGVtZW50LmlubmVySFRNTDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gc3BsaXRIVE1MKGVsZW1lbnRDb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUJsb2NrKGJsb2NrSWQsIHBhcnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNwbGl0ZWRQYXJ0cy5wdXNoKHRleHRFbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHBhcnRzWzBdO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFmdGVyKC4uLnNwbGl0ZWRQYXJ0cyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkQmxvY2tzKHNwbGl0ZWRQYXJ0cywgdXBkYXRlZEVsZW1lbnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJsb2Nrcyh1cGRhdGVkRWxlbWVudHMpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQmxvY2tzKHJlbW92ZWRFbGVtZW50c0lkcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXROZXh0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZWNhbGN1bGF0ZUluZGV4ZXModGhpcy5hcGkuYmxvY2tzKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5hcGkuYmxvY2tzLmdldEJsb2NrQnlJbmRleChpbmRleCk7XHJcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gTnVtYmVyKGJsb2NrPy5ob2xkZXIuZGF0YXNldFsnaW5kZXgnXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbj8ucmFuZ2VDb3VudCA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDogbnVsbDtcclxuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gcmFuZ2U/LnN0YXJ0T2Zmc2V0ID8/IDE7XHJcblxyXG4gICAgICAgIGxldCBuZXh0QmxvY2tJbmRleCA9IGRhdGFJbmRleDtcclxuXHJcbiAgICAgICAgaWYgKGNhcmV0UG9zaXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tDb250YWluZXIgPSBibG9jaz8uaG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ09NQklORURfVEVYVF9CTE9DSykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ291bnQgPSBibG9ja0NvbnRhaW5lcj8uY2hpbGRyZW4/Lmxlbmd0aCA/IGJsb2NrQ29udGFpbmVyPy5jaGlsZHJlbj8ubGVuZ3RoIC0gMSA6IDA7XHJcblxyXG4gICAgICAgICAgICBuZXh0QmxvY2tJbmRleCA9IGRhdGFJbmRleCArIGNoaWxkcmVuQ291bnQgKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFuZXh0QmxvY2tJbmRleCkge1xyXG4gICAgICAgICAgICBuZXh0QmxvY2tJbmRleCB8fD0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0QmxvY2tJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJsb2NrUGFydE9iamVjdChibG9ja0lkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEN1aUNvbWJpbmVkUGFydEJsb2NrIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE11dGF0aW9uQWN0aW9ucyhtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiBDdWlNdXRhdGlvbkFjdGlvbnMge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlZE91dHNpZGVFbGVtZW50czogTm9kZVtdID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZWRCbG9ja3MobXV0YXRpb24sIHVwZGF0ZWRFbGVtZW50cywgY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZlZEJsb2NrcyhtdXRhdGlvbiwgcmVtb3ZlZEVsZW1lbnRzSWRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGFzdEJsb2NrRWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0QmxvY2tFbGVtZW50ID0gdGhpcy5sYXN0QmxvY2tFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgbGFzdEJsb2NrRWxlbWVudC5hcHBlbmQoLi4uY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRUb0Jsb2Nrc0VuZChsYXN0QmxvY2tFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cyxcclxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENhcmV0VG9CbG9ja3NFbmQoYmxvY2s6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoYmxvY2ssIGJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTtcclxuICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlVXBkYXRlZEJsb2NrcyhcclxuICAgICAgICBtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQsXHJcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIG91dHNpZGVDaGFuZ2VzOiBOb2RlW11cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzcGFuID0gZWxlbWVudD8uY2xvc2VzdCgnLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoc3Bhbikge1xyXG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKHNwYW4pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzT3V0c2lkZUJsb2NrKGVsZW1lbnQsIG91dHNpZGVDaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUNoYW5nZXNPdXRzaWRlQmxvY2soZWxlbWVudDogSFRNTEVsZW1lbnQsIG91dHNpZGVDaGFuZ2VzOiBOb2RlW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgdGhpcy5sYXN0QmxvY2tFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChibG9jaykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBibG9jayBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgPSBibG9ja0VsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvdXRzaWRlQ2hhbmdlcy5wdXNoKGJsb2NrKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEJsb2NrcyhzcGxpY2VkUGFydHM6IEhUTUxFbGVtZW50W10sIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgICAgIGlmICghc3BsaWNlZFBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IHNwbGljZWRQYXJ0cy5tYXAoKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrSWQgPSBibG9jay5kYXRhc2V0WydpZCddO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5kYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB1cGRhdGVkRWxlbWVudHMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGlkID0gcHJldmlvdXNFbGVtZW50Py5kYXRhc2V0WydpZCddO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByZXZpb3VzRWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSkgKyAxO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maW5kSW5kZXgoKGJsb2NrKSA9PiBibG9jay5pZCA9PT0gaWQpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5zcGxpY2UoYmxvY2tJbmRleCwgMCwgLi4uYWRkZWRCbG9ja3MpO1xyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcclxuICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgIGJsb2NrSW5kZXgsXHJcbiAgICAgICAgICAgIGJsb2NrczogYWRkZWRCbG9ja3MsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YS50ZXh0QmxvY2tzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF1cGRhdGVkRWxlbWVudHMuc2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzID0gWy4uLnVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKV0ubWFwKChibG9jaykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGJsb2NrLmRhdGFzZXRbJ2lkJ10sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogYmxvY2suaW5uZXJIVE1MLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfVVBEQVRFRCwgdXBkYXRlZEJsb2Nrcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVSZW1vdmVkQmxvY2tzKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCwgcmVtb3ZlZEVsZW1lbnRzSWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChub2RlOiBOb2RlKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0WydpZCddO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFibG9ja0lkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlbW92ZWRFbGVtZW50c0lkcy5hZGQoYmxvY2tJZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVCbG9ja3MoaWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgICAgIGlmICghaWRzLnNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRJZHMgPSBbLi4uaWRzLnZhbHVlcygpXTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiAhaWRzLmhhcyhibG9jay5pZCB8fCAnJykpO1xyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCwgcmVtb3ZlZEVsZW1lbnRJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlKGJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghYmxvY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5jcmVhdGVCbG9jayhibG9jay5pZCB8fCBnZW5lcmF0ZUlkKCksIGJsb2NrLmRhdGEudGV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZCh0ZXh0RWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIucmVwbGFjZUNoaWxkcmVuKHRleHRFbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcclxuICAgICAgICAgICAgICAgIGJsb2Nrc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUJsb2NrKGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5UQUcpO1xyXG4gICAgICAgIHRleHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DS19QQVJUKTtcclxuICAgICAgICB0ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgICAgIHRleHRFbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBpZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YTogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzID0gZGF0YS5tYXAoKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBibG9jay5pZCA9IGdlbmVyYXRlSWQoKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLmRhdGEucGFyZW50SWQgPSB0aGlzLmRhdGEuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZGF0YS50ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZGF0YS50ZXh0KTtcclxuICAgICAgICBsZXQgZWxlbWVudENvbnRlbnQgPSAnJztcclxuXHJcbiAgICAgICAgZnJhZ21lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudENvbnRlbnQgKz0gbm9kZS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IChub2RlIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUw7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtlbGVtZW50Q29udGVudF0gOiBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xyXG5cclxuICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MucHVzaChibG9ja09iamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0lzRWRpdG9yRW1wdHkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIgfHwgdGhpcy53cmFwcGVyLmNoaWxkcmVuLmxlbmd0aCA+IHRoaXMuTUFYX0NISUxEX0NPVU5UX0ZPUl9FTVBUWSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy53cmFwcGVyLmNoaWxkcmVuLml0ZW0oMCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaXNJdGVtRW1wdHkgPSAhaXRlbS50ZXh0Q29udGVudD8ubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLndyYXBwZXIuZGF0YXNldFsnZW1wdHknXSA9IGAke2lzSXRlbUVtcHR5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQbGFjZWhvbGRlcihjb25maWc6IFRvb2xDb25maWcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWcucmVhZG9ubHlQbGFjZWhvbGRlciA/PyBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5wbGFjZWhvbGRlciA/PyBERUZBVUxUX1BMQUNFSE9MREVSO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,88 @@
1
+ import { MARKER_MODAL_SELECTOR } from '../components/marker-modal/marker-modal.options';
2
+ import { CuiMarkerTool } from './marker.tool';
3
+ export class CuiCustomMarkerTool extends CuiMarkerTool {
4
+ static get sanitize() {
5
+ return {
6
+ mark: {
7
+ class: true,
8
+ 'data-id': true,
9
+ 'data-type': true,
10
+ contenteditable: true
11
+ }
12
+ };
13
+ }
14
+ constructor(data) {
15
+ super(data);
16
+ }
17
+ wrapTool(range, markerData) {
18
+ const { startContainer, endContainer } = range;
19
+ if (markerData.data && typeof markerData.data !== 'string') {
20
+ this.id = markerData.data.id;
21
+ this.type = markerData.data.type;
22
+ }
23
+ const mark = this.createElement(markerData.title);
24
+ range.extractContents();
25
+ this.removeNestedMarkers(mark, this.DEFAULT_CLASS);
26
+ this.addMarkerToDOM(range, mark, startContainer, endContainer);
27
+ this.removeExternalMarkers(range, this.DEFAULT_CLASS);
28
+ this.removeEmptyMarkers(range);
29
+ this.api.selection.expandToTag(mark);
30
+ }
31
+ onToolButtonClick(event) {
32
+ const range = window.getSelection()?.getRangeAt(0);
33
+ if (range) {
34
+ return;
35
+ }
36
+ event.stopImmediatePropagation();
37
+ }
38
+ render() {
39
+ super.render();
40
+ this.button.onclick = this.onToolButtonClick.bind(this);
41
+ return this.button;
42
+ }
43
+ renderActions() {
44
+ this.dropdown = document.createElement(this.DIV);
45
+ if (this.state) {
46
+ return this.dropdown;
47
+ }
48
+ const markerSelect = this.createLinkModal();
49
+ this.dropdown.append(markerSelect);
50
+ return this.dropdown;
51
+ }
52
+ createElement(text = '') {
53
+ const element = super.createElement(text);
54
+ element.contentEditable = 'false';
55
+ element.classList.add(this.CLASS);
56
+ element.setAttribute('data-id', this.id);
57
+ element.setAttribute('data-type', this.type);
58
+ return element;
59
+ }
60
+ checkState(select) {
61
+ const range = select.getRangeAt(0);
62
+ const mark = this.api.selection.findParentTag(this.TAG);
63
+ const isCorrectTool = mark?.classList.contains(this.CLASS);
64
+ if (!mark || !isCorrectTool) {
65
+ this.state = false;
66
+ return;
67
+ }
68
+ const startContainer = range.startContainer;
69
+ const endContainer = range.endContainer;
70
+ const isStartMarker = mark.contains(startContainer);
71
+ const isEndMarker = mark.contains(endContainer);
72
+ this.state = isStartMarker && isEndMarker && isStartMarker === isEndMarker;
73
+ }
74
+ createLinkModal() {
75
+ this.markerModal = document.createElement(MARKER_MODAL_SELECTOR);
76
+ this.markerModal.tool = { id: '', title: '', type: undefined };
77
+ this.markerModal.target = this.button;
78
+ this.markerModal.isTool = true;
79
+ this.markerModal.isGlobal = true;
80
+ this.markerModal.addEventListener('saveClicked', (event) => {
81
+ const customEvent = event;
82
+ const data = customEvent.detail;
83
+ this.wrapTool(this.range, data);
84
+ });
85
+ return this.markerModal;
86
+ }
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1hcmtlci50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY3VzdG9tLW1hcmtlci50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFJN0MsTUFBTSxLQUFLLFFBQVE7UUFDeEIsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSTtnQkFDakIsZUFBZSxFQUFFLElBQUk7YUFDdEI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksSUFBa0M7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFZLEVBQUUsVUFBc0I7UUFDbEQsTUFBTSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFL0MsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFLLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxF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SUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLElBQUksV0FBVyxJQUFJLGFBQWEsS0FBSyxXQUFXLENBQUM7SUFDN0UsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUE0QyxDQUFDO1FBRTVHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNoRSxNQUFNLFdBQVcsR0FBRyxLQUFnQyxDQUFDO1lBQ3JELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5saW5lVG9vbENvbnN0cnVjdG9yT3B0aW9ucywgU2FuaXRpemVyQ29uZmlnIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgQ3VpQW5ndWxhckVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgTWFya2VyTW9kYWxDb21wb25lbnQsIE1hcmtlckRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL21hcmtlci1tb2RhbCc7XHJcbmltcG9ydCB7IE1BUktFUl9NT0RBTF9TRUxFQ1RPUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWFya2VyLW1vZGFsL21hcmtlci1tb2RhbC5vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IEN1aU1hcmtlclRvb2wgfSBmcm9tICcuL21hcmtlci50b29sJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDdWlDdXN0b21NYXJrZXJUb29sIGV4dGVuZHMgQ3VpTWFya2VyVG9vbCB7XHJcbiAgcHJvdGVjdGVkIGlkITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCB0eXBlITogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBzYW5pdGl6ZSgpOiBTYW5pdGl6ZXJDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWFyazoge1xyXG4gICAgICAgIGNsYXNzOiB0cnVlLFxyXG4gICAgICAgICdkYXRhLWlkJzogdHJ1ZSxcclxuICAgICAgICAnZGF0YS10eXBlJzogdHJ1ZSxcclxuICAgICAgICBjb250ZW50ZWRpdGFibGU6IHRydWVcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGRhdGE6IElubGluZVRvb2xDb25zdHJ1Y3Rvck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyYXBUb29sKHJhbmdlOiBSYW5nZSwgbWFya2VyRGF0YTogTWFya2VyRGF0YSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyIH0gPSByYW5nZTtcclxuXHJcbiAgICBpZiAobWFya2VyRGF0YS5kYXRhICYmIHR5cGVvZiBtYXJrZXJEYXRhLmRhdGEgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuaWQgPSBtYXJrZXJEYXRhLmRhdGEuaWQhO1xyXG4gICAgICB0aGlzLnR5cGUgPSBtYXJrZXJEYXRhLmRhdGEudHlwZSE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyayA9IHRoaXMuY3JlYXRlRWxlbWVudChtYXJrZXJEYXRhLnRpdGxlKTtcclxuXHJcbiAgICByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU5lc3RlZE1hcmtlcnMobWFyaywgdGhpcy5ERUZBVUxUX0NMQVNTKTtcclxuXHJcbiAgICB0aGlzLmFkZE1hcmtlclRvRE9NKHJhbmdlLCBtYXJrLCBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUV4dGVybmFsTWFya2VycyhyYW5nZSwgdGhpcy5ERUZBVUxUX0NMQVNTKTtcclxuICAgIHRoaXMucmVtb3ZlRW1wdHlNYXJrZXJzKHJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmFwaS5zZWxlY3Rpb24uZXhwYW5kVG9UYWcobWFyayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVG9vbEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIHJlbmRlcigpOiBIVE1MQnV0dG9uRWxlbWVudCB7XHJcbiAgICBzdXBlci5yZW5kZXIoKTtcclxuXHJcbiAgICB0aGlzLmJ1dHRvbi5vbmNsaWNrID0gdGhpcy5vblRvb2xCdXR0b25DbGljay5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJBY3Rpb25zKCk6IEhUTUxFbGVtZW50IHtcclxuICAgIHRoaXMuZHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuRElWKTtcclxuXHJcbiAgICBpZiAodGhpcy5zdGF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kcm9wZG93bjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXJrZXJTZWxlY3QgPSB0aGlzLmNyZWF0ZUxpbmtNb2RhbCgpO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd24uYXBwZW5kKG1hcmtlclNlbGVjdCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlRWxlbWVudCh0ZXh0ID0gJycpOiBIVE1MRWxlbWVudCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gc3VwZXIuY3JlYXRlRWxlbWVudCh0ZXh0KTtcclxuXHJcbiAgICBlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5DTEFTUyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIHRoaXMuaWQpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScsIHRoaXMudHlwZSk7XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tTdGF0ZShzZWxlY3Q6IFNlbGVjdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3QuZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IG1hcmsgPSB0aGlzLmFwaS5zZWxlY3Rpb24uZmluZFBhcmVudFRhZyh0aGlzLlRBRyk7XHJcbiAgICBjb25zdCBpc0NvcnJlY3RUb29sID0gbWFyaz8uY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuQ0xBU1MpO1xyXG5cclxuICAgIGlmICghbWFyayB8fCAhaXNDb3JyZWN0VG9vbCkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gZmFsc2U7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuXHJcbiAgICBjb25zdCBpc1N0YXJ0TWFya2VyID0gbWFyay5jb250YWlucyhzdGFydENvbnRhaW5lcik7XHJcbiAgICBjb25zdCBpc0VuZE1hcmtlciA9IG1hcmsuY29udGFpbnMoZW5kQ29udGFpbmVyKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gaXNTdGFydE1hcmtlciAmJiBpc0VuZE1hcmtlciAmJiBpc1N0YXJ0TWFya2VyID09PSBpc0VuZE1hcmtlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTGlua01vZGFsKCk6IEN1aUFuZ3VsYXJFbGVtZW50PE1hcmtlck1vZGFsQ29tcG9uZW50PiB7XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChNQVJLRVJfTU9EQUxfU0VMRUNUT1IpIGFzIEN1aUFuZ3VsYXJFbGVtZW50PE1hcmtlck1vZGFsQ29tcG9uZW50PjtcclxuXHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLnRvb2wgPSB7IGlkOiAnJywgdGl0bGU6ICcnLCB0eXBlOiB1bmRlZmluZWQgfTtcclxuICAgIHRoaXMubWFya2VyTW9kYWwudGFyZ2V0ID0gdGhpcy5idXR0b247XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmlzVG9vbCA9IHRydWU7XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmlzR2xvYmFsID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ3NhdmVDbGlja2VkJywgKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE1hcmtlckRhdGE+O1xyXG4gICAgICBjb25zdCBkYXRhID0gY3VzdG9tRXZlbnQuZGV0YWlsO1xyXG5cclxuICAgICAgdGhpcy53cmFwVG9vbCh0aGlzLnJhbmdlLCBkYXRhKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hcmtlck1vZGFsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,16 @@
1
+ import Header from '@editorjs/header';
2
+ export class CuiHeaderTool extends Header {
3
+ constructor(data) {
4
+ super(data);
5
+ }
6
+ validate() {
7
+ return true;
8
+ }
9
+ render() {
10
+ return super.render();
11
+ }
12
+ save(block) {
13
+ return super.save(block);
14
+ }
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLnRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci90b29scy9oZWFkZXIudG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQztBQUV0QyxNQUFNLE9BQU8sYUFBYyxTQUFRLE1BQU07SUFDckMsWUFBWSxJQUFTO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRWUsUUFBUTtRQUNwQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRWUsTUFBTTtRQUNsQixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRWUsSUFBSSxDQUFDLEtBQXlCO1FBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJsb2NrVG9vbERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xyXG5pbXBvcnQgSGVhZGVyIGZyb20gJ0BlZGl0b3Jqcy9oZWFkZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1aUhlYWRlclRvb2wgZXh0ZW5kcyBIZWFkZXIge1xyXG4gICAgY29uc3RydWN0b3IoZGF0YTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvdmVycmlkZSByZW5kZXIoKTogSFRNTEhlYWRpbmdFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIHNhdmUoYmxvY2s6IEhUTUxIZWFkaW5nRWxlbWVudCk6IEJsb2NrVG9vbERhdGEge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5zYXZlKGJsb2NrKTtcclxuICAgIH1cclxufVxyXG4iXX0=