@worktile/theia 18.0.16 → 18.1.0

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 (369) hide show
  1. package/constants/node-types.d.ts +1 -0
  2. package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
  3. package/fesm2022/worktile-theia.mjs +297 -310
  4. package/fesm2022/worktile-theia.mjs.map +1 -1
  5. package/interfaces/view-base.d.ts +1 -1
  6. package/package.json +2 -4
  7. package/plugins/code/code.component.scss +1 -2
  8. package/plugins/image/image.component.d.ts +1 -1
  9. package/plugins/link/link.component.d.ts +1 -1
  10. package/plugins/mention/suggestion.component.d.ts +1 -1
  11. package/esm2022/components/action/prevent-default.mjs +0 -21
  12. package/esm2022/components/column-resize/column-resize-notifier.mjs +0 -31
  13. package/esm2022/components/column-resize/column-resize.directive.mjs +0 -124
  14. package/esm2022/components/column-resize/event-dispatcher.mjs +0 -56
  15. package/esm2022/components/column-resize/overlay-handle.component.mjs +0 -144
  16. package/esm2022/components/column-resize/resize-ref.mjs +0 -26
  17. package/esm2022/components/column-resize/resizing.store.mjs +0 -92
  18. package/esm2022/components/column-resize/selectors.mjs +0 -4
  19. package/esm2022/components/contextmenu/contextmenu.component.mjs +0 -99
  20. package/esm2022/components/conversion-hint/conversion-hint.component.mjs +0 -56
  21. package/esm2022/components/element/element.component.mjs +0 -23
  22. package/esm2022/components/index.mjs +0 -24
  23. package/esm2022/components/inline-toolbar/inline-toolbar.component.mjs +0 -131
  24. package/esm2022/components/listbox/listbox.mjs +0 -380
  25. package/esm2022/components/listbox/listbox.type.mjs +0 -5
  26. package/esm2022/components/plugin-menu/plugin-menu.component.mjs +0 -272
  27. package/esm2022/components/table-select/table-select.component.mjs +0 -49
  28. package/esm2022/components/template/template.component.mjs +0 -62
  29. package/esm2022/components/text/text.component.mjs +0 -57
  30. package/esm2022/components/toolbar/toolbar.component.mjs +0 -262
  31. package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -137
  32. package/esm2022/components/toolbar-group/toolbar-group.component.mjs +0 -125
  33. package/esm2022/components/toolbar-item/toolbar-item.component.mjs +0 -80
  34. package/esm2022/constants/auto-format-rules.mjs +0 -167
  35. package/esm2022/constants/code.mjs +0 -85
  36. package/esm2022/constants/color-select.mjs +0 -3
  37. package/esm2022/constants/default.mjs +0 -11
  38. package/esm2022/constants/error.mjs +0 -7
  39. package/esm2022/constants/index.mjs +0 -9
  40. package/esm2022/constants/node-types.mjs +0 -136
  41. package/esm2022/constants/plugin-menu.mjs +0 -311
  42. package/esm2022/constants/selector.mjs +0 -3
  43. package/esm2022/constants/toolbar.mjs +0 -53
  44. package/esm2022/core/create-plugin.mjs +0 -5
  45. package/esm2022/core/create-toolbar.mjs +0 -55
  46. package/esm2022/core/index.mjs +0 -6
  47. package/esm2022/core/toolbar-item/base-toolbar-item.mjs +0 -95
  48. package/esm2022/core/utils/combine-plugins.mjs +0 -10
  49. package/esm2022/core/utils/flatten-deep-plugins.mjs +0 -19
  50. package/esm2022/core/utils/get-plugin-options.mjs +0 -3
  51. package/esm2022/core/utils/get-plugin.mjs +0 -2
  52. package/esm2022/core/utils/get-plugins.mjs +0 -4
  53. package/esm2022/core/utils/index.mjs +0 -12
  54. package/esm2022/core/utils/merge-array.mjs +0 -18
  55. package/esm2022/core/utils/merge-deep-plugins.mjs +0 -14
  56. package/esm2022/core/utils/merge-options.mjs +0 -25
  57. package/esm2022/core/utils/nested-structure-by-key.mjs +0 -11
  58. package/esm2022/core/utils/plugin-menu.mjs +0 -63
  59. package/esm2022/core/utils/plugins-by-key.mjs +0 -10
  60. package/esm2022/core/with-theia.mjs +0 -25
  61. package/esm2022/custom-types.mjs +0 -2
  62. package/esm2022/editor.component.mjs +0 -488
  63. package/esm2022/editor.module.mjs +0 -18
  64. package/esm2022/i18n/i18n.mjs +0 -10
  65. package/esm2022/i18n/i18n.service.mjs +0 -46
  66. package/esm2022/i18n/i18n.token.mjs +0 -9
  67. package/esm2022/i18n/index.mjs +0 -10
  68. package/esm2022/i18n/locales/de-de.mjs +0 -102
  69. package/esm2022/i18n/locales/en-us.mjs +0 -102
  70. package/esm2022/i18n/locales/ja-jp.mjs +0 -102
  71. package/esm2022/i18n/locales/ru-ru.mjs +0 -102
  72. package/esm2022/i18n/locales/zh-hans.mjs +0 -102
  73. package/esm2022/i18n/locales/zh-hant.mjs +0 -102
  74. package/esm2022/interfaces/auto-format.mjs +0 -2
  75. package/esm2022/interfaces/editor.mjs +0 -26
  76. package/esm2022/interfaces/element.mjs +0 -2
  77. package/esm2022/interfaces/image.mjs +0 -3
  78. package/esm2022/interfaces/index.mjs +0 -11
  79. package/esm2022/interfaces/plugins/index.mjs +0 -6
  80. package/esm2022/interfaces/plugins/no-infer.mjs +0 -2
  81. package/esm2022/interfaces/plugins/plugin-key.mjs +0 -42
  82. package/esm2022/interfaces/plugins/plugin-menu.mjs +0 -19
  83. package/esm2022/interfaces/plugins/plugins.mjs +0 -2
  84. package/esm2022/interfaces/plugins/with-override.mjs +0 -2
  85. package/esm2022/interfaces/preset.mjs +0 -3
  86. package/esm2022/interfaces/reset-block-type-plugin-options.mjs +0 -2
  87. package/esm2022/interfaces/toolbar.mjs +0 -12
  88. package/esm2022/interfaces/upload.mjs +0 -2
  89. package/esm2022/interfaces/utility/index.mjs +0 -4
  90. package/esm2022/interfaces/utility/nested-structure-by-key.mjs +0 -2
  91. package/esm2022/interfaces/utility/override-by-key.mjs +0 -2
  92. package/esm2022/interfaces/utility/types.mjs +0 -2
  93. package/esm2022/interfaces/valid-children-types.mjs +0 -36
  94. package/esm2022/interfaces/view-base.mjs +0 -38
  95. package/esm2022/pipes.mjs +0 -61
  96. package/esm2022/plugins/align/align.editor.mjs +0 -41
  97. package/esm2022/plugins/align/align.plugin.mjs +0 -64
  98. package/esm2022/plugins/autoformat/autoformat.plugin.mjs +0 -109
  99. package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
  100. package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
  101. package/esm2022/plugins/blockquote/blockquote.component.mjs +0 -16
  102. package/esm2022/plugins/blockquote/blockquote.editor.mjs +0 -20
  103. package/esm2022/plugins/blockquote/blockquote.plugin.mjs +0 -84
  104. package/esm2022/plugins/code/code.component.mjs +0 -255
  105. package/esm2022/plugins/code/code.editor.mjs +0 -59
  106. package/esm2022/plugins/code/code.plugin.mjs +0 -67
  107. package/esm2022/plugins/color/color.editor.mjs +0 -27
  108. package/esm2022/plugins/color/color.plugin.mjs +0 -32
  109. package/esm2022/plugins/color/toolbar-item.component.mjs +0 -99
  110. package/esm2022/plugins/common/block-card.plugin.mjs +0 -330
  111. package/esm2022/plugins/common/common.plugin.mjs +0 -49
  112. package/esm2022/plugins/common/get-fragment.plugin.mjs +0 -24
  113. package/esm2022/plugins/common/history.plugin.mjs +0 -31
  114. package/esm2022/plugins/common/insert-data-by-invalid-type.mjs +0 -23
  115. package/esm2022/plugins/common/move-selection.plugin.mjs +0 -105
  116. package/esm2022/plugins/common/remove-empty.plugin.mjs +0 -61
  117. package/esm2022/plugins/common/remove-void.plugin.mjs +0 -60
  118. package/esm2022/plugins/common/reset-type.plugin.mjs +0 -35
  119. package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +0 -61
  120. package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +0 -142
  121. package/esm2022/plugins/font-size/font-size.editor.mjs +0 -98
  122. package/esm2022/plugins/heading/heading.editor.mjs +0 -54
  123. package/esm2022/plugins/heading/heading.plugin.mjs +0 -136
  124. package/esm2022/plugins/hr/hr.component.mjs +0 -37
  125. package/esm2022/plugins/hr/hr.editor.mjs +0 -16
  126. package/esm2022/plugins/hr/hr.plugin.mjs +0 -56
  127. package/esm2022/plugins/image/image.component.mjs +0 -474
  128. package/esm2022/plugins/image/image.editor.mjs +0 -116
  129. package/esm2022/plugins/image/image.plugin.mjs +0 -90
  130. package/esm2022/plugins/indent/indent.editor.mjs +0 -78
  131. package/esm2022/plugins/indent/indent.plugin.mjs +0 -59
  132. package/esm2022/plugins/indent/on-keydown-indent.mjs +0 -59
  133. package/esm2022/plugins/index.mjs +0 -73
  134. package/esm2022/plugins/inline-code/inline-code.component.mjs +0 -28
  135. package/esm2022/plugins/inline-code/inline-code.editor.mjs +0 -49
  136. package/esm2022/plugins/inline-code/inline-code.plugin.mjs +0 -67
  137. package/esm2022/plugins/link/edit/link-edit.component.mjs +0 -104
  138. package/esm2022/plugins/link/hover/link-hover.component.mjs +0 -38
  139. package/esm2022/plugins/link/link.component.mjs +0 -170
  140. package/esm2022/plugins/link/link.editor.mjs +0 -87
  141. package/esm2022/plugins/link/link.plugin.mjs +0 -89
  142. package/esm2022/plugins/link/link.types.mjs +0 -12
  143. package/esm2022/plugins/list/components/bulleted-list.component.mjs +0 -28
  144. package/esm2022/plugins/list/components/list-item.component.mjs +0 -88
  145. package/esm2022/plugins/list/components/numbered-list.component.mjs +0 -37
  146. package/esm2022/plugins/list/list.editor.mjs +0 -128
  147. package/esm2022/plugins/list/list.plugin.mjs +0 -302
  148. package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
  149. package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +0 -18
  150. package/esm2022/plugins/list/normalizers/normalize-no.mjs +0 -43
  151. package/esm2022/plugins/list/on-key-down-list.mjs +0 -33
  152. package/esm2022/plugins/list/queries/get-list-item-entry.mjs +0 -28
  153. package/esm2022/plugins/list/queries/get-list-item-sublist.mjs +0 -12
  154. package/esm2022/plugins/list/queries/get-list-types.mjs +0 -5
  155. package/esm2022/plugins/list/queries/get-start-list-item.mjs +0 -27
  156. package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +0 -27
  157. package/esm2022/plugins/list/queries/is-in-list.mjs +0 -6
  158. package/esm2022/plugins/list/queries/is-list-nested.mjs +0 -10
  159. package/esm2022/plugins/list/queries/is-list.mjs +0 -5
  160. package/esm2022/plugins/list/queries/is-node-type-list.mjs +0 -5
  161. package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
  162. package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
  163. package/esm2022/plugins/list/queries/is-single-list-item.mjs +0 -9
  164. package/esm2022/plugins/list/transforms/insert-list-data.mjs +0 -72
  165. package/esm2022/plugins/list/transforms/insert-list-item.mjs +0 -73
  166. package/esm2022/plugins/list/transforms/move-list-item-down.mjs +0 -41
  167. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
  168. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
  169. package/esm2022/plugins/list/transforms/move-list-item-up.mjs +0 -78
  170. package/esm2022/plugins/list/transforms/unwrap-list.mjs +0 -10
  171. package/esm2022/plugins/list/types.mjs +0 -2
  172. package/esm2022/plugins/mark/mark.editor.mjs +0 -28
  173. package/esm2022/plugins/mark/mark.plugin.mjs +0 -105
  174. package/esm2022/plugins/mention/index.mjs +0 -5
  175. package/esm2022/plugins/mention/mention.editor.mjs +0 -179
  176. package/esm2022/plugins/mention/mention.plugin.mjs +0 -92
  177. package/esm2022/plugins/mention/mention.type.mjs +0 -2
  178. package/esm2022/plugins/mention/suggestion.component.mjs +0 -22
  179. package/esm2022/plugins/node-id/node-id.plugin.mjs +0 -78
  180. package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +0 -28
  181. package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +0 -18
  182. package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +0 -33
  183. package/esm2022/plugins/paint-format/paint-format.editor.mjs +0 -126
  184. package/esm2022/plugins/public-api.mjs +0 -20
  185. package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +0 -126
  186. package/esm2022/plugins/quick-insert/index.mjs +0 -4
  187. package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +0 -70
  188. package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +0 -109
  189. package/esm2022/plugins/soft-break/soft-break.plugin.mjs +0 -36
  190. package/esm2022/plugins/soft-break/soft-break.types.mjs +0 -2
  191. package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -132
  192. package/esm2022/plugins/table/components/row/row.component.mjs +0 -93
  193. package/esm2022/plugins/table/components/table.component.mjs +0 -887
  194. package/esm2022/plugins/table/components/td/td.component.mjs +0 -610
  195. package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +0 -102
  196. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -179
  197. package/esm2022/plugins/table/table.editor.mjs +0 -301
  198. package/esm2022/plugins/table/table.pipe.mjs +0 -66
  199. package/esm2022/plugins/table/table.plugin.mjs +0 -556
  200. package/esm2022/plugins/table/table.service.mjs +0 -122
  201. package/esm2022/plugins/table/table.store.mjs +0 -417
  202. package/esm2022/plugins/table/table.types.mjs +0 -68
  203. package/esm2022/plugins/table/toolbar-item.component.mjs +0 -95
  204. package/esm2022/plugins/table/transforms/clear-cell.mjs +0 -14
  205. package/esm2022/plugins/table/transforms/clear-table-node.mjs +0 -27
  206. package/esm2022/plugins/table/transforms/index.mjs +0 -8
  207. package/esm2022/plugins/table/transforms/insert-column.mjs +0 -69
  208. package/esm2022/plugins/table/transforms/insert-row.mjs +0 -50
  209. package/esm2022/plugins/table/transforms/insert-table.mjs +0 -15
  210. package/esm2022/plugins/table/transforms/move-selection-from-cell.mjs +0 -91
  211. package/esm2022/plugins/table/transforms/remove-column.mjs +0 -51
  212. package/esm2022/plugins/table/transforms/remove-row.mjs +0 -48
  213. package/esm2022/plugins/table/transforms/remove-table.mjs +0 -49
  214. package/esm2022/plugins/table/utils/add-columns.mjs +0 -38
  215. package/esm2022/plugins/table/utils/calc-anchor-position.mjs +0 -26
  216. package/esm2022/plugins/table/utils/calc-span.mjs +0 -73
  217. package/esm2022/plugins/table/utils/calculate-table.mjs +0 -116
  218. package/esm2022/plugins/table/utils/cell-position.mjs +0 -57
  219. package/esm2022/plugins/table/utils/create-cell.mjs +0 -19
  220. package/esm2022/plugins/table/utils/create-row.mjs +0 -12
  221. package/esm2022/plugins/table/utils/create-table-position.mjs +0 -10
  222. package/esm2022/plugins/table/utils/create-table.mjs +0 -15
  223. package/esm2022/plugins/table/utils/get-grid-columns.mjs +0 -79
  224. package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
  225. package/esm2022/plugins/table/utils/get-next-cell.mjs +0 -44
  226. package/esm2022/plugins/table/utils/get-select-cell-node.mjs +0 -16
  227. package/esm2022/plugins/table/utils/handle-cell.mjs +0 -25
  228. package/esm2022/plugins/table/utils/index.mjs +0 -16
  229. package/esm2022/plugins/table/utils/is-header-row.mjs +0 -15
  230. package/esm2022/plugins/table/utils/is-legal-table.mjs +0 -26
  231. package/esm2022/plugins/table/utils/is-range-in-table.mjs +0 -16
  232. package/esm2022/plugins/table/utils/is-selection-in-table.mjs +0 -51
  233. package/esm2022/plugins/table/utils/is-virtual-key.mjs +0 -13
  234. package/esm2022/plugins/table/utils/merge-cell.mjs +0 -110
  235. package/esm2022/plugins/table/utils/next-path.mjs +0 -5
  236. package/esm2022/plugins/table/utils/normalize-table.mjs +0 -31
  237. package/esm2022/plugins/table/utils/remove-columns.mjs +0 -23
  238. package/esm2022/plugins/table/utils/remove-row-column.mjs +0 -45
  239. package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
  240. package/esm2022/plugins/table/utils/split-cell.mjs +0 -29
  241. package/esm2022/plugins/table/utils/table-entry.mjs +0 -21
  242. package/esm2022/plugins/table/utils/table-position.mjs +0 -251
  243. package/esm2022/plugins/table/utils/table-viewport.mjs +0 -41
  244. package/esm2022/plugins/todo-item/todo-item.component.mjs +0 -65
  245. package/esm2022/plugins/todo-item/todo-item.editor.mjs +0 -32
  246. package/esm2022/plugins/todo-item/todo-item.plugin.mjs +0 -93
  247. package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -95
  248. package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +0 -59
  249. package/esm2022/public-api.mjs +0 -22
  250. package/esm2022/queries/anchor-block-entry.mjs +0 -13
  251. package/esm2022/queries/anchor-block.mjs +0 -6
  252. package/esm2022/queries/anchor-inline-entry.mjs +0 -10
  253. package/esm2022/queries/find-descendant.mjs +0 -47
  254. package/esm2022/queries/find-node.mjs +0 -45
  255. package/esm2022/queries/find-path.mjs +0 -28
  256. package/esm2022/queries/get-above-by-type.mjs +0 -14
  257. package/esm2022/queries/get-above.mjs +0 -9
  258. package/esm2022/queries/get-anchor-block-entry.mjs +0 -8
  259. package/esm2022/queries/get-block-above.mjs +0 -10
  260. package/esm2022/queries/get-block-card-above.mjs +0 -10
  261. package/esm2022/queries/get-block-card-cursor.mjs +0 -9
  262. package/esm2022/queries/get-container-blocks.mjs +0 -12
  263. package/esm2022/queries/get-directly-parent.mjs +0 -12
  264. package/esm2022/queries/get-insert-elements-path.mjs +0 -46
  265. package/esm2022/queries/get-last-child-path.mjs +0 -9
  266. package/esm2022/queries/get-last-node.mjs +0 -17
  267. package/esm2022/queries/get-next-sibling-nodes.mjs +0 -17
  268. package/esm2022/queries/get-node.mjs +0 -10
  269. package/esm2022/queries/get-nodes-by-type.mjs +0 -15
  270. package/esm2022/queries/get-nodes.mjs +0 -7
  271. package/esm2022/queries/get-parent.mjs +0 -12
  272. package/esm2022/queries/get-plain-text.mjs +0 -16
  273. package/esm2022/queries/get-plugin-by-toolbar.mjs +0 -13
  274. package/esm2022/queries/get-point-before.mjs +0 -62
  275. package/esm2022/queries/get-point-from-location.mjs +0 -15
  276. package/esm2022/queries/get-previous-path.mjs +0 -9
  277. package/esm2022/queries/get-rang-from-block-start.mjs +0 -16
  278. package/esm2022/queries/get-range-before.mjs +0 -17
  279. package/esm2022/queries/get-selection-marks.mjs +0 -18
  280. package/esm2022/queries/get-selection-nodes-by-type.mjs +0 -30
  281. package/esm2022/queries/get-text.mjs +0 -9
  282. package/esm2022/queries/get-toolbar-disabled.mjs +0 -13
  283. package/esm2022/queries/index.mjs +0 -62
  284. package/esm2022/queries/is-across-blocks.mjs +0 -7
  285. package/esm2022/queries/is-ancestor-empty.mjs +0 -6
  286. package/esm2022/queries/is-ancestor.mjs +0 -3
  287. package/esm2022/queries/is-block-above-empty.mjs +0 -11
  288. package/esm2022/queries/is-block-active.mjs +0 -8
  289. package/esm2022/queries/is-block-card-cursor.mjs +0 -16
  290. package/esm2022/queries/is-block-text-empty-after-selection.mjs +0 -31
  291. package/esm2022/queries/is-collapsed.mjs +0 -7
  292. package/esm2022/queries/is-contain-nested-type.mjs +0 -29
  293. package/esm2022/queries/is-container-type.mjs +0 -3
  294. package/esm2022/queries/is-descendant.mjs +0 -3
  295. package/esm2022/queries/is-empty-content-filter.mjs +0 -22
  296. package/esm2022/queries/is-empty-content.mjs +0 -15
  297. package/esm2022/queries/is-empty-paragraph-by-path.mjs +0 -7
  298. package/esm2022/queries/is-empty-paragraph.mjs +0 -28
  299. package/esm2022/queries/is-first-child.mjs +0 -5
  300. package/esm2022/queries/is-global-collapsed.mjs +0 -5
  301. package/esm2022/queries/is-include-types.mjs +0 -12
  302. package/esm2022/queries/is-node-type-in.mjs +0 -9
  303. package/esm2022/queries/is-node-type.mjs +0 -15
  304. package/esm2022/queries/is-paragraph.mjs +0 -9
  305. package/esm2022/queries/is-point-at-root.mjs +0 -2
  306. package/esm2022/queries/is-range-across-blocks.mjs +0 -22
  307. package/esm2022/queries/is-range-at-root.mjs +0 -3
  308. package/esm2022/queries/is-root-path.mjs +0 -2
  309. package/esm2022/queries/is-start.mjs +0 -6
  310. package/esm2022/queries/some-node.mjs +0 -9
  311. package/esm2022/services/context.service.mjs +0 -140
  312. package/esm2022/services/table-contextmenu.service.mjs +0 -288
  313. package/esm2022/services/toolbar.service.mjs +0 -47
  314. package/esm2022/shortcuts/index.mjs +0 -5
  315. package/esm2022/shortcuts/mark.mjs +0 -25
  316. package/esm2022/test/basic/basic.component.mjs +0 -61
  317. package/esm2022/test/faker/data-transfer-faker.mjs +0 -13
  318. package/esm2022/test/faker/tethys-icon-faker.mjs +0 -22
  319. package/esm2022/test/index.mjs +0 -7
  320. package/esm2022/test/utils/mock-plugins.mjs +0 -104
  321. package/esm2022/test/utils/preset-config.mjs +0 -17
  322. package/esm2022/test/utils/with-plugin.mjs +0 -11
  323. package/esm2022/transforms/apply-deep-to-nodes.mjs +0 -22
  324. package/esm2022/transforms/clear-marks.mjs +0 -23
  325. package/esm2022/transforms/delete-element.mjs +0 -12
  326. package/esm2022/transforms/delete-node-by-type.mjs +0 -10
  327. package/esm2022/transforms/handle-continual-delete-backward.mjs +0 -18
  328. package/esm2022/transforms/handle-continual-insert-break.mjs +0 -20
  329. package/esm2022/transforms/index.mjs +0 -19
  330. package/esm2022/transforms/insert-elements.mjs +0 -55
  331. package/esm2022/transforms/insert-paragraph.mjs +0 -6
  332. package/esm2022/transforms/merge-deep-to-nodes.mjs +0 -9
  333. package/esm2022/transforms/move-children.mjs +0 -22
  334. package/esm2022/transforms/on-keydown-reset-block-type.mjs +0 -23
  335. package/esm2022/transforms/set-end-selection.mjs +0 -10
  336. package/esm2022/transforms/set-marks.mjs +0 -9
  337. package/esm2022/transforms/set-node-by-type.mjs +0 -10
  338. package/esm2022/transforms/set-node.mjs +0 -6
  339. package/esm2022/transforms/un-hang-range.mjs +0 -11
  340. package/esm2022/transforms/un-wrap.mjs +0 -12
  341. package/esm2022/transforms/unwrap-nodes-by-type.mjs +0 -14
  342. package/esm2022/utils/auto-focus.mjs +0 -24
  343. package/esm2022/utils/blob.mjs +0 -16
  344. package/esm2022/utils/cast-array.mjs +0 -7
  345. package/esm2022/utils/color-picker.mjs +0 -15
  346. package/esm2022/utils/common.mjs +0 -11
  347. package/esm2022/utils/copy-node.mjs +0 -38
  348. package/esm2022/utils/create-empty-paragraph.mjs +0 -14
  349. package/esm2022/utils/data-transform.mjs +0 -48
  350. package/esm2022/utils/dom.mjs +0 -56
  351. package/esm2022/utils/editor-uuid.mjs +0 -8
  352. package/esm2022/utils/fragment.mjs +0 -82
  353. package/esm2022/utils/get-editable-element-height.mjs +0 -6
  354. package/esm2022/utils/get-mode.mjs +0 -14
  355. package/esm2022/utils/get-toolbar-class.mjs +0 -6
  356. package/esm2022/utils/id-creator.mjs +0 -11
  357. package/esm2022/utils/index.mjs +0 -23
  358. package/esm2022/utils/insert-data-by-invalid-type.mjs +0 -70
  359. package/esm2022/utils/is-clean-empty-paragraph.mjs +0 -37
  360. package/esm2022/utils/is-inline.mjs +0 -9
  361. package/esm2022/utils/lodash.mjs +0 -3
  362. package/esm2022/utils/match.mjs +0 -32
  363. package/esm2022/utils/merge-element-options.mjs +0 -19
  364. package/esm2022/utils/normalize.mjs +0 -61
  365. package/esm2022/utils/refocus.mjs +0 -47
  366. package/esm2022/utils/scrolling.mjs +0 -43
  367. package/esm2022/utils/update-popover-position.mjs +0 -26
  368. package/esm2022/utils/weak-maps.mjs +0 -9
  369. package/esm2022/worktile-theia.mjs +0 -5
@@ -1,272 +0,0 @@
1
- import { NgFor, NgIf } from '@angular/common';
2
- import { ChangeDetectorRef, Component, ElementRef, HostBinding, Input, NgZone, ViewChildren, inject, viewChild } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { ThyAction } from 'ngx-tethys/action';
5
- import { ScrollToService } from 'ngx-tethys/core';
6
- import { ThyDivider } from 'ngx-tethys/divider';
7
- import { ThyDropdownDirective, ThyDropdownMenuComponent, ThyDropdownMenuGroup, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';
8
- import { ThyEmptyModule } from 'ngx-tethys/empty';
9
- import { ThyIcon } from 'ngx-tethys/icon';
10
- import { ThyInputSearch } from 'ngx-tethys/input';
11
- import { ThyPopoverDirective, ThyPopoverRef } from 'ngx-tethys/popover';
12
- import { ThyTooltipDirective } from 'ngx-tethys/tooltip';
13
- import { Editor, Node, Transforms } from 'slate';
14
- import { AngularEditor } from 'slate-angular';
15
- import { getTheDefaultPluginMenu, QUICK_INSERT_HOTKEY, ThePluginMenuItemType } from '../../constants';
16
- import { buildPluginMenu, buildPluginMenuItemMap } from '../../core';
17
- import { ThePluginMenu } from '../../interfaces';
18
- import { PluginMenuPipe } from '../../pipes';
19
- import { QuickInsertEditor } from '../../plugins/public-api';
20
- import { refocus } from '../../utils';
21
- import { ThePreventDefaultDirective } from '../action/prevent-default';
22
- import { TheListboxDirective, TheListboxGroupDirective, TheListboxOptionDirective } from '../listbox/listbox';
23
- import { TheTableSelect } from '../table-select/table-select.component';
24
- import { injectTranslations, TheI18nService } from '../../i18n';
25
- import * as i0 from "@angular/core";
26
- import * as i1 from "@angular/forms";
27
- import * as i2 from "ngx-tethys/empty";
28
- export class ThePluginMenuComponent {
29
- constructor() {
30
- this.theDisplaySearch = false;
31
- this.autoActiveFirstItem = true;
32
- this.containerClassName = `the-plugin-menu-container`;
33
- this.locale = injectTranslations(inject(TheI18nService));
34
- this.listBox = viewChild(TheListboxDirective);
35
- this.listBoxAutoActiveFirstItem = true;
36
- this.groupMenu = [];
37
- this.iconMenu = [];
38
- this.ThePluginMenuItemType = ThePluginMenuItemType;
39
- this.thyMessage = this.locale().noData;
40
- this.searchGroup = {
41
- groupName: this.locale().searchResult
42
- };
43
- this.expandPopoverOptions = {
44
- placement: 'rightTop',
45
- width: '262px',
46
- minWidth: '262px'
47
- };
48
- this.tableSelectPopoverConfig = {
49
- panelClass: 'plugin-menu-table-select-container',
50
- minWidth: 0,
51
- // 避免重写
52
- originActiveClass: 'thy-popover-origin-active'
53
- };
54
- this.elementRef = inject((ElementRef));
55
- this.ngZone = inject(NgZone);
56
- this.cdr = inject(ChangeDetectorRef);
57
- this.thyPopoverRef = inject((ThyPopoverRef));
58
- this.removeBlock = () => {
59
- const node = Node.get(this.editor, this.editor.selection.anchor.path);
60
- const nodeString = Node.string(node);
61
- const isStartWithHotkey = nodeString.startsWith(QUICK_INSERT_HOTKEY);
62
- const isIncludeKeywords = nodeString.toLocaleLowerCase().trim().includes(this.keyWords);
63
- if (node && nodeString.length > 0 && (isStartWithHotkey || isIncludeKeywords)) {
64
- Editor.deleteBackward(this.editor, { unit: 'block' });
65
- }
66
- };
67
- this.removeCharacter = () => {
68
- const node = Node.get(this.editor, this.editor.selection.anchor.path);
69
- const nodeString = Node.string(node);
70
- const isStartWithHotkey = nodeString.startsWith(QUICK_INSERT_HOTKEY) || nodeString.startsWith('#');
71
- const isIncludeKeywords = nodeString.toLocaleLowerCase().trim().includes(this.keyWords);
72
- if (this.originKeywords?.length > 0 && (isStartWithHotkey || isIncludeKeywords)) {
73
- Transforms.delete(this.editor, { distance: this.originKeywords.length, reverse: true });
74
- }
75
- };
76
- }
77
- ngOnInit() {
78
- if (!this.autoActiveFirstItem || this.theDisplaySearch) {
79
- this.listBoxAutoActiveFirstItem = false;
80
- }
81
- this.initializeSearch();
82
- this.initializePluginMenu();
83
- this.buildMenus();
84
- setTimeout(() => {
85
- this.scrollContainer = this.elementRef.nativeElement.querySelector('.the-plugin-menu-scroll-container');
86
- }, 0);
87
- }
88
- initializeSearch() {
89
- if (this.theDisplaySearch) {
90
- this.keyboardContainer = this.elementRef.nativeElement;
91
- setTimeout(() => {
92
- // 记住位置
93
- if (this.editor.selection) {
94
- this.pathRef = Editor.pathRef(this.editor, this.editor.selection.anchor.path);
95
- }
96
- this.elementRef.nativeElement.querySelector('input').focus();
97
- }, 0);
98
- }
99
- else {
100
- this.keyboardContainer = AngularEditor.toDOMNode(this.editor, this.editor);
101
- }
102
- }
103
- initializePluginMenu() {
104
- const currentMenu = this.thePluginMenu || getTheDefaultPluginMenu(this.locale);
105
- const menuItemsMap = buildPluginMenuItemMap(this.editor);
106
- this._pluginMenu = buildPluginMenu(menuItemsMap, currentMenu);
107
- }
108
- buildMenus() {
109
- this.iconMenu = [];
110
- this.groupMenu = [];
111
- this._pluginMenu.forEach((item) => {
112
- const isHidden = item?.isHidden && item.isHidden(this.editor);
113
- if (ThePluginMenu.isMenuItem(item)) {
114
- item.isMenuItem = true;
115
- item.disabled = item.isDisabled && item.isDisabled(this.editor);
116
- if (this.keyWords && !isHidden && item.keywords && item.keywords?.includes(this.keyWords)) {
117
- this.groupMenu.push(item);
118
- }
119
- if (!isHidden && item.children && item.children.length > 0) {
120
- item.children?.forEach((child) => {
121
- if (child === 'divider')
122
- return;
123
- child.isMenuItem = true;
124
- child.disabled = child.isDisabled && child.isDisabled(this.editor);
125
- const isHiddenChid = item.isHidden && item.isHidden(this.editor);
126
- if (this.keyWords && !isHiddenChid && child.keywords && child.keywords?.includes(this.keyWords)) {
127
- this.groupMenu.push(child);
128
- }
129
- });
130
- }
131
- }
132
- if (!this.keyWords && !isHidden) {
133
- item?.type === ThePluginMenuItemType.icon ? this.iconMenu.push(item) : this.groupMenu.push(item);
134
- }
135
- });
136
- if (this.keyWords && this.groupMenu.length > 0) {
137
- this.groupMenu.unshift(this.searchGroup);
138
- }
139
- if (!this.keyWords) {
140
- const menus = [...this.groupMenu];
141
- this.groupMenu = menus.filter((item, index) => {
142
- const isGroupMenu = ThePluginMenu.isMenuGroup(item);
143
- const nextMenu = menus[index + 1];
144
- const isLastMenu = index === menus.length - 1;
145
- if ((nextMenu && isGroupMenu && ThePluginMenu.isMenuGroup(nextMenu)) ||
146
- (isLastMenu && isGroupMenu) ||
147
- (item?.children && item?.children?.length <= 0)) {
148
- return false;
149
- }
150
- return true;
151
- });
152
- }
153
- this.cdr.markForCheck();
154
- }
155
- listBoxOptionMouseenter(e, menu) {
156
- e.preventDefault();
157
- const listBox = this.listBox();
158
- if (listBox) {
159
- const activeOption = listBox.activeOption;
160
- const newActiveOption = listBox.getOption(menu?.key);
161
- listBox.setActiveItem(activeOption, newActiveOption, 'turn');
162
- }
163
- }
164
- listBoxOptionMouseleave(e, menu) {
165
- e.preventDefault();
166
- const listBox = this.listBox();
167
- listBox?.clearActiveItem();
168
- }
169
- handleItemSelection(menuItem) {
170
- if (menuItem.isDisabled && menuItem.isDisabled(this.editor)) {
171
- return;
172
- }
173
- if (!this.editor.selection) {
174
- refocus(this.editor);
175
- }
176
- if (!this.theDisplaySearch) {
177
- menuItem?.removeKeywordsType === 'character' ? this.removeCharacter() : this.removeBlock();
178
- }
179
- menuItem.execute(this.editor);
180
- this.thyPopoverRef.close();
181
- QuickInsertEditor.updatePluginMenuRef(this.editor, null);
182
- }
183
- updateKeywords(keywords) {
184
- if (this.autoActiveFirstItem) {
185
- this.listBoxAutoActiveFirstItem = true;
186
- }
187
- this.originKeywords = keywords;
188
- this.keyWords = keywords.toLowerCase().trim();
189
- this.buildMenus();
190
- if (this.scrollContainer) {
191
- this.scrollContainer.scrollTop = 0;
192
- }
193
- }
194
- listBoxChange(event) {
195
- if (!event.option) {
196
- return;
197
- }
198
- switch (event.type) {
199
- case 'select':
200
- this.handleItemSelection(event.option.theOptionValue);
201
- break;
202
- case 'child':
203
- const dropdownComponent = this.findDropdownTrigger(event.option.parentOption);
204
- this.ngZone.run(() => {
205
- dropdownComponent.show();
206
- });
207
- break;
208
- case 'parent':
209
- const dropdown = this.findDropdownTrigger(event.option);
210
- dropdown.hide();
211
- break;
212
- case 'turn':
213
- ScrollToService.scrollToElement(event.option.elementRef.nativeElement, this.scrollContainer);
214
- break;
215
- }
216
- }
217
- findDropdownTrigger(option) {
218
- const dropdown = this.dropdownTriggers.find(value => {
219
- return value['elementRef'].nativeElement === option.elementRef.nativeElement;
220
- });
221
- return dropdown;
222
- }
223
- trackByFn(index, item) {
224
- return item?.key ?? index;
225
- }
226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThePluginMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThePluginMenuComponent, isStandalone: true, selector: "the-plugin-menu", inputs: { editor: "editor", theDisplaySearch: "theDisplaySearch", thePluginMenu: "thePluginMenu", sceneKey: "sceneKey", subPanelClass: "subPanelClass", autoActiveFirstItem: "autoActiveFirstItem" }, host: { properties: { "class": "this.containerClassName" } }, viewQueries: [{ propertyName: "listBox", first: true, predicate: TheListboxDirective, descendants: true, isSignal: true }, { propertyName: "dropdownTriggers", predicate: ["dropdownTriggers"], descendants: true, read: ThyDropdownDirective }], ngImport: i0, template: "@if (theDisplaySearch) {\n <div class=\"menu-search px-5 pt-5 pb-2\">\n <thy-input-search\n [placeholder]=\"locale().search\"\n thyIconPosition=\"after\"\n [(ngModel)]=\"keyWords\"\n (ngModelChange)=\"updateKeywords(keyWords)\"\n >\n </thy-input-search>\n </div>\n}\n\n@if (groupMenu.length > 0) {\n <div\n class=\"thy-dropdown-menu the-plugin-menu-scroll-container pb-2 pt-0\"\n theListBox\n [keyboardContainer]=\"keyboardContainer\"\n [autoActiveFirstItem]=\"listBoxAutoActiveFirstItem\"\n (theListboxChange)=\"listBoxChange($event)\"\n >\n <ng-container *ngIf=\"iconMenu?.length > 0\">\n <div theListboxGroup [horizontalColumn]=\"6\" class=\"icon-menu d-flex pl-5 py-1\">\n @for (item of iconMenu; track trackByFn) {\n @if (item.type === ThePluginMenuItemType.icon) {\n <a\n href=\"javascript:;\"\n class=\"mt-2\"\n thyAction\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item?.name\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n ></a>\n }\n }\n </div>\n <thy-divider class=\"my-2\"></thy-divider>\n </ng-container>\n\n <div theListboxGroup>\n <ng-container *ngFor=\"let item of groupMenu; trackBy: trackByFn\">\n <ng-container *ngIf=\"item.isMenuItem && !(item.children?.length > 0) && item.key !== 'table'\">\n <div\n class=\"py-0\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n >\n @if (item?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.isMenuItem && item.children?.length > 0\" #hasExpanded>\n <div\n #dropdownTriggers\n class=\"py-0\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n [thyDropdown]=\"expand\"\n [thyPopoverOptions]=\"expandPopoverOptions\"\n [thyPanelClass]=\"subPanelClass\"\n (click)=\"handleItemSelection(item)\"\n >\n @if (item?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n @if (item.children?.length > 0) {\n <div>\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n }\n <thy-dropdown-menu #expand>\n <div class=\"the-plugin-menu-container expand-menu\" theListboxGroup>\n @for (child of item.children; track trackByFn) {\n @if (child.type === ThePluginMenuItemType.group) {\n <div\n class=\"py-0\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"child.disabled\"\n [theOptionValue]=\"child\"\n (mouseenter)=\"listBoxOptionMouseenter($event, child)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, child)\"\n (click)=\"handleItemSelection(child)\"\n >\n @if (child?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"child.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ child.name }}\n </div>\n </div>\n </div>\n } @else if (child === 'divider') {\n <thy-divider class=\"my-2\"></thy-divider>\n }\n }\n </div>\n </thy-dropdown-menu>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.isMenuItem && item.key === 'table'\">\n <div\n #dropdownTriggers\n class=\"py-0\"\n thyPlacement=\"rightTop\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"item.disabled\"\n [thyPopover]=\"tableSelect\"\n [thyConfig]=\"tableSelectPopoverConfig\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n >\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n <div>\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n\n <ng-template #tableSelect>\n <table-select\n class=\"plugin-menu-table the-table-selector-panel\"\n [editor]=\"editor\"\n [beforeInsert]=\"removeBlock\"\n ></table-select>\n </ng-template>\n </div>\n </ng-container>\n\n @if (!item.isMenuItem) {\n <thy-dropdown-menu-group class=\"font-size-sm\" [thyTitle]=\"item.groupName\"></thy-dropdown-menu-group>\n }\n </ng-container>\n </div>\n </div>\n} @else {\n <div class=\"empty d-flex align-items-center justify-content-center\">\n <thy-empty [thyMessage]=\"thyMessage\"></thy-empty>\n </div>\n}\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ThyEmptyModule }, { kind: "component", type: i2.ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: TheTableSelect, selector: "table-select", inputs: ["optionsParam", "editor", "beforeInsert"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "component", type: ThyInputSearch, selector: "thy-input-search", inputs: ["name", "placeholder", "thyTheme", "thySearchFocus", "thyIconPosition", "thySize"], outputs: ["clear", "thyClear"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "component", type: ThyDropdownMenuGroup, selector: "thy-dropdown-menu-group", inputs: ["thyTitle"] }, { kind: "pipe", type: PluginMenuPipe, name: "getMenuIcon" }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "directive", type: ThyPopoverDirective, selector: "[thyPopover]", inputs: ["thyPopover", "thyTrigger", "thyPlacement", "thyOffset", "thyConfig", "thyShowDelay", "thyHideDelay", "thyAutoAdaptive", "thyDisabled"] }, { kind: "directive", type: TheListboxDirective, selector: "[theListBox]", inputs: ["keyboardContainer", "autoActiveFirstItem"], outputs: ["theListboxChange"], exportAs: ["theListBox"] }, { kind: "directive", type: ThyDropdownDirective, selector: "[thyDropdown]", inputs: ["thyDropdownMenu", "thyDropdown", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyActiveClass", "thyPopoverOptions", "thyPlacement", "thyMenuInsideClosable", "thyPanelClass"], outputs: ["thyActiveChange"] }, { kind: "directive", type: TheListboxGroupDirective, selector: "[theListboxGroup]", inputs: ["horizontalColumn"], exportAs: ["theListboxGroup"] }, { kind: "directive", type: TheListboxOptionDirective, selector: "[theListboxOption]", inputs: ["theOptionValue", "theOptionDisabled"], exportAs: ["theListboxOption"] }, { kind: "directive", type: ThePreventDefaultDirective, selector: "[thePreventDefault]", exportAs: ["thePreventDefault"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }] }); }
228
- }
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThePluginMenuComponent, decorators: [{
230
- type: Component,
231
- args: [{ selector: 'the-plugin-menu', standalone: true, imports: [
232
- NgIf,
233
- NgFor,
234
- FormsModule,
235
- ThyEmptyModule,
236
- TheTableSelect,
237
- ThyIcon,
238
- ThyAction,
239
- ThyDivider,
240
- ThyInputSearch,
241
- ThyDropdownMenuComponent,
242
- ThyDropdownMenuGroup,
243
- PluginMenuPipe,
244
- ThyTooltipDirective,
245
- ThyPopoverDirective,
246
- TheListboxDirective,
247
- ThyDropdownDirective,
248
- TheListboxGroupDirective,
249
- TheListboxOptionDirective,
250
- ThePreventDefaultDirective,
251
- ThyDropdownMenuItemDirective
252
- ], template: "@if (theDisplaySearch) {\n <div class=\"menu-search px-5 pt-5 pb-2\">\n <thy-input-search\n [placeholder]=\"locale().search\"\n thyIconPosition=\"after\"\n [(ngModel)]=\"keyWords\"\n (ngModelChange)=\"updateKeywords(keyWords)\"\n >\n </thy-input-search>\n </div>\n}\n\n@if (groupMenu.length > 0) {\n <div\n class=\"thy-dropdown-menu the-plugin-menu-scroll-container pb-2 pt-0\"\n theListBox\n [keyboardContainer]=\"keyboardContainer\"\n [autoActiveFirstItem]=\"listBoxAutoActiveFirstItem\"\n (theListboxChange)=\"listBoxChange($event)\"\n >\n <ng-container *ngIf=\"iconMenu?.length > 0\">\n <div theListboxGroup [horizontalColumn]=\"6\" class=\"icon-menu d-flex pl-5 py-1\">\n @for (item of iconMenu; track trackByFn) {\n @if (item.type === ThePluginMenuItemType.icon) {\n <a\n href=\"javascript:;\"\n class=\"mt-2\"\n thyAction\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item?.name\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n ></a>\n }\n }\n </div>\n <thy-divider class=\"my-2\"></thy-divider>\n </ng-container>\n\n <div theListboxGroup>\n <ng-container *ngFor=\"let item of groupMenu; trackBy: trackByFn\">\n <ng-container *ngIf=\"item.isMenuItem && !(item.children?.length > 0) && item.key !== 'table'\">\n <div\n class=\"py-0\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n >\n @if (item?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.isMenuItem && item.children?.length > 0\" #hasExpanded>\n <div\n #dropdownTriggers\n class=\"py-0\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n [thyDropdown]=\"expand\"\n [thyPopoverOptions]=\"expandPopoverOptions\"\n [thyPanelClass]=\"subPanelClass\"\n (click)=\"handleItemSelection(item)\"\n >\n @if (item?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n @if (item.children?.length > 0) {\n <div>\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n }\n <thy-dropdown-menu #expand>\n <div class=\"the-plugin-menu-container expand-menu\" theListboxGroup>\n @for (child of item.children; track trackByFn) {\n @if (child.type === ThePluginMenuItemType.group) {\n <div\n class=\"py-0\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"child.disabled\"\n [theOptionValue]=\"child\"\n (mouseenter)=\"listBoxOptionMouseenter($event, child)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, child)\"\n (click)=\"handleItemSelection(child)\"\n >\n @if (child?.menuIcon) {\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"child.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n }\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ child.name }}\n </div>\n </div>\n </div>\n } @else if (child === 'divider') {\n <thy-divider class=\"my-2\"></thy-divider>\n }\n }\n </div>\n </thy-dropdown-menu>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.isMenuItem && item.key === 'table'\">\n <div\n #dropdownTriggers\n class=\"py-0\"\n thyPlacement=\"rightTop\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n theListboxOption\n thePreventDefault\n [theOptionValue]=\"item\"\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"item.disabled\"\n [thyPopover]=\"tableSelect\"\n [thyConfig]=\"tableSelectPopoverConfig\"\n (mouseenter)=\"listBoxOptionMouseenter($event, item)\"\n (mouseleave)=\"listBoxOptionMouseleave($event, item)\"\n (click)=\"handleItemSelection(item)\"\n >\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n <div>\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n\n <ng-template #tableSelect>\n <table-select\n class=\"plugin-menu-table the-table-selector-panel\"\n [editor]=\"editor\"\n [beforeInsert]=\"removeBlock\"\n ></table-select>\n </ng-template>\n </div>\n </ng-container>\n\n @if (!item.isMenuItem) {\n <thy-dropdown-menu-group class=\"font-size-sm\" [thyTitle]=\"item.groupName\"></thy-dropdown-menu-group>\n }\n </ng-container>\n </div>\n </div>\n} @else {\n <div class=\"empty d-flex align-items-center justify-content-center\">\n <thy-empty [thyMessage]=\"thyMessage\"></thy-empty>\n </div>\n}\n" }]
253
- }], propDecorators: { editor: [{
254
- type: Input
255
- }], theDisplaySearch: [{
256
- type: Input
257
- }], thePluginMenu: [{
258
- type: Input
259
- }], sceneKey: [{
260
- type: Input
261
- }], subPanelClass: [{
262
- type: Input
263
- }], autoActiveFirstItem: [{
264
- type: Input
265
- }], containerClassName: [{
266
- type: HostBinding,
267
- args: ['class']
268
- }], dropdownTriggers: [{
269
- type: ViewChildren,
270
- args: ['dropdownTriggers', { read: ThyDropdownDirective }]
271
- }] } });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvcGx1Z2luLW1lbnUvcGx1Z2luLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvcGx1Z2luLW1lbnUvcGx1Z2luLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBR04sWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFB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Q25CLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6QiwwQkFBMEI7d0JBQzFCLDRCQUE0QjtxQkFDL0I7OEJBR1EsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRWdCLGtCQUFrQjtzQkFBdkMsV0FBVzt1QkFBQyxPQUFPO2dCQUdwQixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBTaWduYWwsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGluamVjdCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUFjdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvYWN0aW9uJztcbmltcG9ydCB7IFNjcm9sbFRvU2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlEaXZpZGVyIH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcbmltcG9ydCB7IFRoeURyb3Bkb3duRGlyZWN0aXZlLCBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsIFRoeURyb3Bkb3duTWVudUdyb3VwLCBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUaHlFbXB0eU1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvZW1wdHknO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlJbnB1dFNlYXJjaCB9IGZyb20gJ25neC10ZXRoeXMvaW5wdXQnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlckRpcmVjdGl2ZSwgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBUaHlUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy90b29sdGlwJztcbmltcG9ydCB7IEVkaXRvciwgTm9kZSwgUGF0aFJlZiwgVGV4dCwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IGdldFRoZURlZmF1bHRQbHVnaW5NZW51LCBRVUlDS19JTlNFUlRfSE9US0VZLCBUaGVQbHVnaW5NZW51SXRlbVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYnVpbGRQbHVnaW5NZW51LCBidWlsZFBsdWdpbk1lbnVJdGVtTWFwIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBUaGVQbHVnaW5NZW51LCBUaGVQbHVnaW5NZW51R3JvdXAsIFRoZVBsdWdpbk1lbnVJdGVtLCBUaGVQbHVnaW5NZW51SXRlbUNvbmZpZywgVGhlUGx1Z2luTWVudUl0ZW1XcmFwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQbHVnaW5NZW51UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IFF1aWNrSW5zZXJ0RWRpdG9yIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy9wdWJsaWMtYXBpJztcbmltcG9ydCB7IHJlZm9jdXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBUaGVQcmV2ZW50RGVmYXVsdERpcmVjdGl2ZSB9IGZyb20gJy4uL2FjdGlvbi9wcmV2ZW50LWRlZmF1bHQnO1xuaW1wb3J0IHsgVGhlTGlzdGJveENoYW5nZUV2ZW50LCBUaGVMaXN0Ym94RGlyZWN0aXZlLCBUaGVMaXN0Ym94R3JvdXBEaXJlY3RpdmUsIFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9saXN0Ym94L2xpc3Rib3gnO1xuaW1wb3J0IHsgVGhlVGFibGVTZWxlY3QgfSBmcm9tICcuLi90YWJsZS1zZWxlY3QvdGFibGUtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmplY3RUcmFuc2xhdGlvbnMsIFRoZUkxOG5TZXJ2aWNlLCBUaGVJMThuVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9pMThuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtcGx1Z2luLW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAncGx1Z2luLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRoeUVtcHR5TW9kdWxlLFxuICAgICAgICBUaGVUYWJsZVNlbGVjdCxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5QWN0aW9uLFxuICAgICAgICBUaHlEaXZpZGVyLFxuICAgICAgICBUaHlJbnB1dFNlYXJjaCxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50LFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVHcm91cCxcbiAgICAgICAgUGx1Z2luTWVudVBpcGUsXG4gICAgICAgIFRoeVRvb2x0aXBEaXJlY3RpdmUsXG4gICAgICAgIFRoeVBvcG92ZXJEaXJlY3RpdmUsXG4gICAgICAgIFRoZUxpc3Rib3hEaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duRGlyZWN0aXZlLFxuICAgICAgICBUaGVMaXN0Ym94R3JvdXBEaXJlY3RpdmUsXG4gICAgICAgIFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUsXG4gICAgICAgIFRoZVByZXZlbnREZWZhdWx0RGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaGVQbHVnaW5NZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBlZGl0b3I6IEVkaXRvcjtcblxuICAgIEBJbnB1dCgpIHRoZURpc3BsYXlTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRoZVBsdWdpbk1lbnU6IFRoZVBsdWdpbk1lbnVJdGVtQ29uZmlnW107XG5cbiAgICBASW5wdXQoKSBzY2VuZUtleT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHN1YlBhbmVsQ2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gICAgQElucHV0KCkgYXV0b0FjdGl2ZUZpcnN0SXRlbTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY29udGFpbmVyQ2xhc3NOYW1lID0gYHRoZS1wbHVnaW4tbWVudS1jb250YWluZXJgO1xuXG4gICAgQFZpZXdDaGlsZHJlbignZHJvcGRvd25UcmlnZ2VycycsIHsgcmVhZDogVGh5RHJvcGRvd25EaXJlY3RpdmUgfSlcbiAgICBkcm9wZG93blRyaWdnZXJzOiBUaHlEcm9wZG93bkRpcmVjdGl2ZVtdO1xuXG4gICAgbG9jYWxlOiBTaWduYWw8VGhlSTE4blRyYW5zbGF0aW9uPiA9IGluamVjdFRyYW5zbGF0aW9ucyhpbmplY3QoVGhlSTE4blNlcnZpY2UpKTtcblxuICAgIGxpc3RCb3ggPSB2aWV3Q2hpbGQoVGhlTGlzdGJveERpcmVjdGl2ZSk7XG5cbiAgICBsaXN0Qm94QXV0b0FjdGl2ZUZpcnN0SXRlbSA9IHRydWU7XG5cbiAgICBwYXRoUmVmOiBQYXRoUmVmO1xuXG4gICAga2V5Ym9hcmRDb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgX3BsdWdpbk1lbnU6IFRoZVBsdWdpbk1lbnU7XG5cbiAgICBncm91cE1lbnU6IFRoZVBsdWdpbk1lbnUgPSBbXTtcblxuICAgIGljb25NZW51OiBUaGVQbHVnaW5NZW51ID0gW107XG5cbiAgICBUaGVQbHVnaW5NZW51SXRlbVR5cGUgPSBUaGVQbHVnaW5NZW51SXRlbVR5cGU7XG5cbiAgICBrZXlXb3Jkczogc3RyaW5nO1xuXG4gICAgdGh5TWVzc2FnZSA9IHRoaXMubG9jYWxlKCkubm9EYXRhO1xuXG4gICAgc2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICAgIHNlYXJjaEdyb3VwOiBUaGVQbHVnaW5NZW51R3JvdXAgPSB7XG4gICAgICAgIGdyb3VwTmFtZTogdGhpcy5sb2NhbGUoKS5zZWFyY2hSZXN1bHRcbiAgICB9O1xuXG4gICAgZXhwYW5kUG9wb3Zlck9wdGlvbnMgPSB7XG4gICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0VG9wJyxcbiAgICAgICAgd2lkdGg6ICcyNjJweCcsXG4gICAgICAgIG1pbldpZHRoOiAnMjYycHgnXG4gICAgfTtcblxuICAgIHRhYmxlU2VsZWN0UG9wb3ZlckNvbmZpZyA9IHtcbiAgICAgICAgcGFuZWxDbGFzczogJ3BsdWdpbi1tZW51LXRhYmxlLXNlbGVjdC1jb250YWluZXInLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgLy8gIOmBv+WFjemHjeWGmVxuICAgICAgICBvcmlnaW5BY3RpdmVDbGFzczogJ3RoeS1wb3BvdmVyLW9yaWdpbi1hY3RpdmUnXG4gICAgfTtcblxuICAgIG9yaWdpbktleXdvcmRzOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgcHVibGljIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBwcml2YXRlIHRoeVBvcG92ZXJSZWYgPSBpbmplY3QoVGh5UG9wb3ZlclJlZjxUaGVQbHVnaW5NZW51Q29tcG9uZW50Pik7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9BY3RpdmVGaXJzdEl0ZW0gfHwgdGhpcy50aGVEaXNwbGF5U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RCb3hBdXRvQWN0aXZlRmlyc3RJdGVtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0aWFsaXplU2VhcmNoKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVBsdWdpbk1lbnUoKTtcbiAgICAgICAgdGhpcy5idWlsZE1lbnVzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGhlLXBsdWdpbi1tZW51LXNjcm9sbC1jb250YWluZXInKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVNlYXJjaCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGhlRGlzcGxheVNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZENvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g6K6w5L2P5L2N572uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGhSZWYgPSBFZGl0b3IucGF0aFJlZih0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmtleWJvYXJkQ29udGFpbmVyID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemVQbHVnaW5NZW51KCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TWVudSA9IHRoaXMudGhlUGx1Z2luTWVudSB8fCBnZXRUaGVEZWZhdWx0UGx1Z2luTWVudSh0aGlzLmxvY2FsZSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtc01hcCA9IGJ1aWxkUGx1Z2luTWVudUl0ZW1NYXAodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLl9wbHVnaW5NZW51ID0gYnVpbGRQbHVnaW5NZW51KG1lbnVJdGVtc01hcCwgY3VycmVudE1lbnUpO1xuICAgIH1cblxuICAgIGJ1aWxkTWVudXMoKSB7XG4gICAgICAgIHRoaXMuaWNvbk1lbnUgPSBbXTtcbiAgICAgICAgdGhpcy5ncm91cE1lbnUgPSBbXTtcblxuICAgICAgICB0aGlzLl9wbHVnaW5NZW51LmZvckVhY2goKGl0ZW06IFRoZVBsdWdpbk1lbnVJdGVtV3JhcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNIaWRkZW4gPSBpdGVtPy5pc0hpZGRlbiAmJiBpdGVtLmlzSGlkZGVuKHRoaXMuZWRpdG9yKTtcblxuICAgICAgICAgICAgaWYgKFRoZVBsdWdpbk1lbnUuaXNNZW51SXRlbShpdGVtKSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNNZW51SXRlbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IGl0ZW0uaXNEaXNhYmxlZCAmJiBpdGVtLmlzRGlzYWJsZWQodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtleVdvcmRzICYmICFpc0hpZGRlbiAmJiBpdGVtLmtleXdvcmRzICYmIGl0ZW0ua2V5d29yZHM/LmluY2x1ZGVzKHRoaXMua2V5V29yZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBNZW51LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghaXNIaWRkZW4gJiYgaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQ6IFRoZVBsdWdpbk1lbnVJdGVtV3JhcCB8ICdkaXZpZGVyJykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkID09PSAnZGl2aWRlcicpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNNZW51SXRlbSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5kaXNhYmxlZCA9IGNoaWxkLmlzRGlzYWJsZWQgJiYgY2hpbGQuaXNEaXNhYmxlZCh0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuQ2hpZCA9IGl0ZW0uaXNIaWRkZW4gJiYgaXRlbS5pc0hpZGRlbih0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlXb3JkcyAmJiAhaXNIaWRkZW5DaGlkICYmIGNoaWxkLmtleXdvcmRzICYmIGNoaWxkLmtleXdvcmRzPy5pbmNsdWRlcyh0aGlzLmtleVdvcmRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBNZW51LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5rZXlXb3JkcyAmJiAhaXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBpdGVtPy50eXBlID09PSBUaGVQbHVnaW5NZW51SXRlbVR5cGUuaWNvbiA/IHRoaXMuaWNvbk1lbnUucHVzaChpdGVtKSA6IHRoaXMuZ3JvdXBNZW51LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmtleVdvcmRzICYmIHRoaXMuZ3JvdXBNZW51Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBNZW51LnVuc2hpZnQodGhpcy5zZWFyY2hHcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMua2V5V29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbnVzID0gWy4uLnRoaXMuZ3JvdXBNZW51XTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBNZW51ID0gbWVudXMuZmlsdGVyKChpdGVtOiBUaGVQbHVnaW5NZW51SXRlbVdyYXAsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0dyb3VwTWVudSA9IFRoZVBsdWdpbk1lbnUuaXNNZW51R3JvdXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dE1lbnUgPSBtZW51c1tpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdE1lbnUgPSBpbmRleCA9PT0gbWVudXMubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKG5leHRNZW51ICYmIGlzR3JvdXBNZW51ICYmIFRoZVBsdWdpbk1lbnUuaXNNZW51R3JvdXAobmV4dE1lbnUpKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaXNMYXN0TWVudSAmJiBpc0dyb3VwTWVudSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPD0gMClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBsaXN0Qm94T3B0aW9uTW91c2VlbnRlcihlOiBNb3VzZUV2ZW50LCBtZW51OiBUaGVQbHVnaW5NZW51SXRlbSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGxpc3RCb3ggPSB0aGlzLmxpc3RCb3goKTtcbiAgICAgICAgaWYgKGxpc3RCb3gpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IGxpc3RCb3guYWN0aXZlT3B0aW9uO1xuICAgICAgICAgICAgY29uc3QgbmV3QWN0aXZlT3B0aW9uID0gbGlzdEJveC5nZXRPcHRpb24obWVudT8ua2V5KTtcbiAgICAgICAgICAgIGxpc3RCb3guc2V0QWN0aXZlSXRlbShhY3RpdmVPcHRpb24sIG5ld0FjdGl2ZU9wdGlvbiwgJ3R1cm4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpc3RCb3hPcHRpb25Nb3VzZWxlYXZlKGU6IE1vdXNlRXZlbnQsIG1lbnU6IFRoZVBsdWdpbk1lbnVJdGVtKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgbGlzdEJveCA9IHRoaXMubGlzdEJveCgpO1xuICAgICAgICBsaXN0Qm94Py5jbGVhckFjdGl2ZUl0ZW0oKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJdGVtU2VsZWN0aW9uKG1lbnVJdGVtOiBUaGVQbHVnaW5NZW51SXRlbSkge1xuICAgICAgICBpZiAobWVudUl0ZW0uaXNEaXNhYmxlZCAmJiBtZW51SXRlbS5pc0Rpc2FibGVkKHRoaXMuZWRpdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3Iuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZWZvY3VzKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGhlRGlzcGxheVNlYXJjaCkge1xuICAgICAgICAgICAgbWVudUl0ZW0/LnJlbW92ZUtleXdvcmRzVHlwZSA9PT0gJ2NoYXJhY3RlcicgPyB0aGlzLnJlbW92ZUNoYXJhY3RlcigpIDogdGhpcy5yZW1vdmVCbG9jaygpO1xuICAgICAgICB9XG4gICAgICAgIG1lbnVJdGVtLmV4ZWN1dGUodGhpcy5lZGl0b3IpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgUXVpY2tJbnNlcnRFZGl0b3IudXBkYXRlUGx1Z2luTWVudVJlZih0aGlzLmVkaXRvciwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQmxvY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBOb2RlLmdldCh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoKSBhcyBUZXh0O1xuICAgICAgICBjb25zdCBub2RlU3RyaW5nID0gTm9kZS5zdHJpbmcobm9kZSk7XG4gICAgICAgIGNvbnN0IGlzU3RhcnRXaXRoSG90a2V5ID0gbm9kZVN0cmluZy5zdGFydHNXaXRoKFFVSUNLX0lOU0VSVF9IT1RLRVkpO1xuICAgICAgICBjb25zdCBpc0luY2x1ZGVLZXl3b3JkcyA9IG5vZGVTdHJpbmcudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCkuaW5jbHVkZXModGhpcy5rZXlXb3Jkcyk7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGVTdHJpbmcubGVuZ3RoID4gMCAmJiAoaXNTdGFydFdpdGhIb3RrZXkgfHwgaXNJbmNsdWRlS2V5d29yZHMpKSB7XG4gICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQodGhpcy5lZGl0b3IsIHsgdW5pdDogJ2Jsb2NrJyB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZW1vdmVDaGFyYWN0ZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBOb2RlLmdldCh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoKSBhcyBUZXh0O1xuICAgICAgICBjb25zdCBub2RlU3RyaW5nID0gTm9kZS5zdHJpbmcobm9kZSk7XG4gICAgICAgIGNvbnN0IGlzU3RhcnRXaXRoSG90a2V5ID0gbm9kZVN0cmluZy5zdGFydHNXaXRoKFFVSUNLX0lOU0VSVF9IT1RLRVkpIHx8IG5vZGVTdHJpbmcuc3RhcnRzV2l0aCgnIycpO1xuICAgICAgICBjb25zdCBpc0luY2x1ZGVLZXl3b3JkcyA9IG5vZGVTdHJpbmcudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCkuaW5jbHVkZXModGhpcy5rZXlXb3Jkcyk7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpbktleXdvcmRzPy5sZW5ndGggPiAwICYmIChpc1N0YXJ0V2l0aEhvdGtleSB8fCBpc0luY2x1ZGVLZXl3b3JkcykpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKHRoaXMuZWRpdG9yLCB7IGRpc3RhbmNlOiB0aGlzLm9yaWdpbktleXdvcmRzLmxlbmd0aCwgcmV2ZXJzZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1cGRhdGVLZXl3b3JkcyhrZXl3b3Jkczogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9BY3RpdmVGaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEJveEF1dG9BY3RpdmVGaXJzdEl0ZW0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JpZ2luS2V5d29yZHMgPSBrZXl3b3JkcztcbiAgICAgICAgdGhpcy5rZXlXb3JkcyA9IGtleXdvcmRzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICB0aGlzLmJ1aWxkTWVudXMoKTtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGlzdEJveENoYW5nZShldmVudDogVGhlTGlzdGJveENoYW5nZUV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQub3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJdGVtU2VsZWN0aW9uKGV2ZW50Lm9wdGlvbi50aGVPcHRpb25WYWx1ZSBhcyBUaGVQbHVnaW5NZW51SXRlbSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaGlsZCc6XG4gICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Db21wb25lbnQgPSB0aGlzLmZpbmREcm9wZG93blRyaWdnZXIoZXZlbnQub3B0aW9uLnBhcmVudE9wdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25Db21wb25lbnQuc2hvdygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGFyZW50JzpcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93biA9IHRoaXMuZmluZERyb3Bkb3duVHJpZ2dlcihldmVudC5vcHRpb24pO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3R1cm4nOlxuICAgICAgICAgICAgICAgIFNjcm9sbFRvU2VydmljZS5zY3JvbGxUb0VsZW1lbnQoZXZlbnQub3B0aW9uLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5zY3JvbGxDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZERyb3Bkb3duVHJpZ2dlcihvcHRpb246IFRoZUxpc3Rib3hPcHRpb25EaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duVHJpZ2dlcnMuZmluZCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVbJ2VsZW1lbnRSZWYnXS5uYXRpdmVFbGVtZW50ID09PSBvcHRpb24uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3duO1xuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogVGhlUGx1Z2luTWVudUl0ZW0sIGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gaXRlbT8ua2V5ID8/IGluZGV4O1xuICAgIH1cbn1cbiIsIkBpZiAodGhlRGlzcGxheVNlYXJjaCkge1xuICA8ZGl2IGNsYXNzPVwibWVudS1zZWFyY2ggcHgtNSBwdC01IHBiLTJcIj5cbiAgICA8dGh5LWlucHV0LXNlYXJjaFxuICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZSgpLnNlYXJjaFwiXG4gICAgICB0aHlJY29uUG9zaXRpb249XCJhZnRlclwiXG4gICAgICBbKG5nTW9kZWwpXT1cImtleVdvcmRzXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUtleXdvcmRzKGtleVdvcmRzKVwiXG4gICAgPlxuICAgIDwvdGh5LWlucHV0LXNlYXJjaD5cbiAgPC9kaXY+XG59XG5cbkBpZiAoZ3JvdXBNZW51Lmxlbmd0aCA+IDApIHtcbiAgPGRpdlxuICAgIGNsYXNzPVwidGh5LWRyb3Bkb3duLW1lbnUgdGhlLXBsdWdpbi1tZW51LXNjcm9sbC1jb250YWluZXIgcGItMiBwdC0wXCJcbiAgICB0aGVMaXN0Qm94XG4gICAgW2tleWJvYXJkQ29udGFpbmVyXT1cImtleWJvYXJkQ29udGFpbmVyXCJcbiAgICBbYXV0b0FjdGl2ZUZpcnN0SXRlbV09XCJsaXN0Qm94QXV0b0FjdGl2ZUZpcnN0SXRlbVwiXG4gICAgKHRoZUxpc3Rib3hDaGFuZ2UpPVwibGlzdEJveENoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uTWVudT8ubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiB0aGVMaXN0Ym94R3JvdXAgW2hvcml6b250YWxDb2x1bW5dPVwiNlwiIGNsYXNzPVwiaWNvbi1tZW51IGQtZmxleCBwbC01IHB5LTFcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpY29uTWVudTsgdHJhY2sgdHJhY2tCeUZuKSB7XG4gICAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09IFRoZVBsdWdpbk1lbnVJdGVtVHlwZS5pY29uKSB7XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcbiAgICAgICAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgICAgICAgIHRoZUxpc3Rib3hPcHRpb25cbiAgICAgICAgICAgICAgdGhlUHJldmVudERlZmF1bHRcbiAgICAgICAgICAgICAgW3RoZU9wdGlvblZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbdGh5QWN0aW9uSWNvbl09XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICBbdGh5VG9vbHRpcF09XCJpdGVtPy5uYW1lXCJcbiAgICAgICAgICAgICAgW3RoeURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbdGhlT3B0aW9uRGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImxpc3RCb3hPcHRpb25Nb3VzZWVudGVyKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJsaXN0Qm94T3B0aW9uTW91c2VsZWF2ZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1TZWxlY3Rpb24oaXRlbSlcIlxuICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXktMlwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IHRoZUxpc3Rib3hHcm91cD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXBNZW51OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaXNNZW51SXRlbSAmJiAhKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDApICYmIGl0ZW0ua2V5ICE9PSAndGFibGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJweS0wXCJcbiAgICAgICAgICAgIHRoeURyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICAgIHRoZUxpc3Rib3hPcHRpb25cbiAgICAgICAgICAgIHRoZVByZXZlbnREZWZhdWx0XG4gICAgICAgICAgICBbdGhlT3B0aW9uVmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICBbdGh5RGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbdGhlT3B0aW9uRGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJsaXN0Qm94T3B0aW9uTW91c2VlbnRlcigkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImxpc3RCb3hPcHRpb25Nb3VzZWxlYXZlKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1TZWxlY3Rpb24oaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXRlbT8ubWVudUljb24pIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaWNvbiBtci0yXCI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLm1lbnVJY29uIHwgZ2V0TWVudUljb246IHNjZW5lS2V5XCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jb250ZW50IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS10aXRsZSB3LTEwMFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5pc01lbnVJdGVtICYmIGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIiAjaGFzRXhwYW5kZWQ+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Ryb3Bkb3duVHJpZ2dlcnNcbiAgICAgICAgICAgIGNsYXNzPVwicHktMFwiXG4gICAgICAgICAgICB0aHlUcmlnZ2VyPVwiaG92ZXJcIlxuICAgICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgICAgdGhlTGlzdGJveE9wdGlvblxuICAgICAgICAgICAgdGhlUHJldmVudERlZmF1bHRcbiAgICAgICAgICAgIFt0aGVPcHRpb25WYWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgIFt0aHlEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFt0aGVPcHRpb25EaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFt0aHlEcm9wZG93bl09XCJleHBhbmRcIlxuICAgICAgICAgICAgW3RoeVBvcG92ZXJPcHRpb25zXT1cImV4cGFuZFBvcG92ZXJPcHRpb25zXCJcbiAgICAgICAgICAgIFt0aHlQYW5lbENsYXNzXT1cInN1YlBhbmVsQ2xhc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1TZWxlY3Rpb24oaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXRlbT8ubWVudUljb24pIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaWNvbiBtci0yXCI+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLm1lbnVJY29uIHwgZ2V0TWVudUljb246IHNjZW5lS2V5XCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jb250ZW50IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbS10aXRsZSB3LTEwMFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRoeS1pY29uIGNsYXNzPVwidGV4dC1tdXRlZFwiIHRoeUljb25OYW1lPVwiYW5nbGUtcmlnaHRcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDx0aHktZHJvcGRvd24tbWVudSAjZXhwYW5kPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlLXBsdWdpbi1tZW51LWNvbnRhaW5lciBleHBhbmQtbWVudVwiIHRoZUxpc3Rib3hHcm91cD5cbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBpdGVtLmNoaWxkcmVuOyB0cmFjayB0cmFja0J5Rm4pIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoY2hpbGQudHlwZSA9PT0gVGhlUGx1Z2luTWVudUl0ZW1UeXBlLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgIHRoeURyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICB0aGVMaXN0Ym94T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgdGhlUHJldmVudERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICBbdGhlT3B0aW9uRGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RoeURpc2FibGVkXT1cImNoaWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGhlT3B0aW9uVmFsdWVdPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImxpc3RCb3hPcHRpb25Nb3VzZWVudGVyKCRldmVudCwgY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJsaXN0Qm94T3B0aW9uTW91c2VsZWF2ZSgkZXZlbnQsIGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1TZWxlY3Rpb24oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2hpbGQ/Lm1lbnVJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pY29uIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJjaGlsZC5tZW51SWNvbiB8IGdldE1lbnVJY29uOiBzY2VuZUtleVwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY29udGVudCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXRpdGxlIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNoaWxkID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXktMlwiPjwvdGh5LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGh5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlzTWVudUl0ZW0gJiYgaXRlbS5rZXkgPT09ICd0YWJsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZHJvcGRvd25UcmlnZ2Vyc1xuICAgICAgICAgICAgY2xhc3M9XCJweS0wXCJcbiAgICAgICAgICAgIHRoeVBsYWNlbWVudD1cInJpZ2h0VG9wXCJcbiAgICAgICAgICAgIHRoeVRyaWdnZXI9XCJob3ZlclwiXG4gICAgICAgICAgICB0aHlEcm9wZG93bk1lbnVJdGVtXG4gICAgICAgICAgICB0aGVMaXN0Ym94T3B0aW9uXG4gICAgICAgICAgICB0aGVQcmV2ZW50RGVmYXVsdFxuICAgICAgICAgICAgW3RoZU9wdGlvblZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3RoZU9wdGlvbkRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3RoeURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3RoeVBvcG92ZXJdPVwidGFibGVTZWxlY3RcIlxuICAgICAgICAgICAgW3RoeUNvbmZpZ109XCJ0YWJsZVNlbGVjdFBvcG92ZXJDb25maWdcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibGlzdEJveE9wdGlvbk1vdXNlZW50ZXIoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJsaXN0Qm94T3B0aW9uTW91c2VsZWF2ZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVJdGVtU2VsZWN0aW9uKGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pY29uIG1yLTJcIj5cbiAgICAgICAgICAgICAgPHRoeS1pY29uIFt0aHlJY29uTmFtZV09XCJpdGVtLm1lbnVJY29uIHwgZ2V0TWVudUljb246IHNjZW5lS2V5XCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY29udGVudCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tdGl0bGUgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDx0aHktaWNvbiBjbGFzcz1cInRleHQtbXV0ZWRcIiB0aHlJY29uTmFtZT1cImFuZ2xlLXJpZ2h0XCI+PC90aHktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhYmxlU2VsZWN0PlxuICAgICAgICAgICAgICA8dGFibGUtc2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwbHVnaW4tbWVudS10YWJsZSB0aGUtdGFibGUtc2VsZWN0b3ItcGFuZWxcIlxuICAgICAgICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yXCJcbiAgICAgICAgICAgICAgICBbYmVmb3JlSW5zZXJ0XT1cInJlbW92ZUJsb2NrXCJcbiAgICAgICAgICAgICAgPjwvdGFibGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgQGlmICghaXRlbS5pc01lbnVJdGVtKSB7XG4gICAgICAgICAgPHRoeS1kcm9wZG93bi1tZW51LWdyb3VwIGNsYXNzPVwiZm9udC1zaXplLXNtXCIgW3RoeVRpdGxlXT1cIml0ZW0uZ3JvdXBOYW1lXCI+PC90aHktZHJvcGRvd24tbWVudS1ncm91cD5cbiAgICAgICAgfVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJlbXB0eSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICA8dGh5LWVtcHR5IFt0aHlNZXNzYWdlXT1cInRoeU1lc3NhZ2VcIj48L3RoeS1lbXB0eT5cbiAgPC9kaXY+XG59XG4iXX0=
@@ -1,49 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { insertTable } from '../../plugins/table/transforms/insert-table';
3
- import { TableOptions } from '../../plugins/table/table.types';
4
- import { refocus } from '../../utils';
5
- import { NgFor, NgClass } from '@angular/common';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "ngx-tethys/popover";
8
- export class TheTableSelect {
9
- constructor(popoverRef) {
10
- this.popoverRef = popoverRef;
11
- this.beforeInsert = () => { };
12
- this.tableData = new Array(10);
13
- this.maxRowIndex = -1;
14
- this.maxColIndex = -1;
15
- }
16
- ngOnInit() { }
17
- onSelectCells(rowIndex, colIndex) {
18
- this.maxRowIndex = rowIndex;
19
- this.maxColIndex = colIndex;
20
- }
21
- executeTable(event) {
22
- event.preventDefault();
23
- event.stopPropagation();
24
- this.beforeInsert();
25
- if (!this.editor.selection) {
26
- refocus(this.editor);
27
- }
28
- const opts = new TableOptions(this.optionsParam);
29
- insertTable(opts, this.editor, this.maxRowIndex + 1, this.maxColIndex + 1);
30
- if (this.popoverRef) {
31
- this.popoverRef.close();
32
- this.maxColIndex = -1;
33
- this.maxRowIndex = -1;
34
- }
35
- }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableSelect, deps: [{ token: i1.ThyPopoverRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TheTableSelect, isStandalone: true, selector: "table-select", inputs: { optionsParam: "optionsParam", editor: "editor", beforeInsert: "beforeInsert" }, ngImport: i0, template: "<div class=\"table-selector-container\">\n <div *ngFor=\"let item of tableData; let rowIndex = index\" class=\"selector-row\" (mousedown)=\"executeTable($event)\">\n <span\n *ngFor=\"let item of tableData; let colIndex = index\"\n [ngClass]=\"{ 'active-cell': rowIndex <= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true }\"\n (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n >\n </span>\n </div>\n <span class=\"selector-text\">{{ maxRowIndex + 1 }} x {{ maxColIndex + 1 }}</span>\n</div>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTableSelect, decorators: [{
40
- type: Component,
41
- args: [{ selector: 'table-select', standalone: true, imports: [NgFor, NgClass], template: "<div class=\"table-selector-container\">\n <div *ngFor=\"let item of tableData; let rowIndex = index\" class=\"selector-row\" (mousedown)=\"executeTable($event)\">\n <span\n *ngFor=\"let item of tableData; let colIndex = index\"\n [ngClass]=\"{ 'active-cell': rowIndex <= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true }\"\n (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n >\n </span>\n </div>\n <span class=\"selector-text\">{{ maxRowIndex + 1 }} x {{ maxColIndex + 1 }}</span>\n</div>\n" }]
42
- }], ctorParameters: () => [{ type: i1.ThyPopoverRef }], propDecorators: { optionsParam: [{
43
- type: Input
44
- }], editor: [{
45
- type: Input
46
- }], beforeInsert: [{
47
- type: Input
48
- }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdC90YWJsZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0L3RhYmxlLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBUWpELE1BQU0sT0FBTyxjQUFjO0lBYXZCLFlBQW9CLFVBQXlDO1FBQXpDLGVBQVUsR0FBVixVQUFVLENBQStCO1FBUnBELGlCQUFZLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBRWpDLGNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQixnQkFBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFK0MsQ0FBQztJQUVqRSxRQUFRLEtBQVUsQ0FBQztJQUVuQixhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVE7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFpQjtRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7K0dBcENRLGNBQWM7bUdBQWQsY0FBYyxrS0NkM0IseWhCQVdBLDRDRENjLEtBQUssbUhBQUUsT0FBTzs7NEZBRWYsY0FBYztrQkFOMUIsU0FBUzsrQkFDSSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztrRkFHaEIsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBpbnNlcnRUYWJsZSB9IGZyb20gJy4uLy4uL3BsdWdpbnMvdGFibGUvdHJhbnNmb3Jtcy9pbnNlcnQtdGFibGUnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9wbHVnaW5zL3RhYmxlL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IHJlZm9jdXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBOZ0ZvciwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGFibGUtc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgVGhlVGFibGVTZWxlY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIG9wdGlvbnNQYXJhbTogVGFibGVPcHRpb25zO1xuXG4gICAgQElucHV0KCkgZWRpdG9yOiBUaGVFZGl0b3I7XG5cbiAgICBASW5wdXQoKSBiZWZvcmVJbnNlcnQgPSAoKSA9PiB7fTtcblxuICAgIHRhYmxlRGF0YSA9IG5ldyBBcnJheSgxMCk7XG5cbiAgICBtYXhSb3dJbmRleCA9IC0xO1xuXG4gICAgbWF4Q29sSW5kZXggPSAtMTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcG9wb3ZlclJlZjogVGh5UG9wb3ZlclJlZjxUaGVUYWJsZVNlbGVjdD4pIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBvblNlbGVjdENlbGxzKHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgICAgICB0aGlzLm1heFJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgICAgIHRoaXMubWF4Q29sSW5kZXggPSBjb2xJbmRleDtcbiAgICB9XG5cbiAgICBleGVjdXRlVGFibGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuYmVmb3JlSW5zZXJ0KCk7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3Iuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZWZvY3VzKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyh0aGlzLm9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGluc2VydFRhYmxlKG9wdHMsIHRoaXMuZWRpdG9yLCB0aGlzLm1heFJvd0luZGV4ICsgMSwgdGhpcy5tYXhDb2xJbmRleCArIDEpO1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMubWF4Q29sSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHRoaXMubWF4Um93SW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1zZWxlY3Rvci1jb250YWluZXJcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCIgY2xhc3M9XCJzZWxlY3Rvci1yb3dcIiAobW91c2Vkb3duKT1cImV4ZWN1dGVUYWJsZSgkZXZlbnQpXCI+XG4gICAgPHNwYW5cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YTsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlLWNlbGwnOiByb3dJbmRleCA8PSBtYXhSb3dJbmRleCAmJiBjb2xJbmRleCA8PSBtYXhDb2xJbmRleCwgJ3NlbGVjdG9yLWNlbGwnOiB0cnVlIH1cIlxuICAgICAgKG1vdXNlZW50ZXIpPVwib25TZWxlY3RDZWxscyhyb3dJbmRleCwgY29sSW5kZXgpXCJcbiAgICA+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgPHNwYW4gY2xhc3M9XCJzZWxlY3Rvci10ZXh0XCI+e3sgbWF4Um93SW5kZXggKyAxIH19IHgge3sgbWF4Q29sSW5kZXggKyAxIH19PC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -1,62 +0,0 @@
1
- import { NgStyle } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild } from '@angular/core';
3
- import { ElementKinds } from '../../constants';
4
- import { ElementStylePipe } from '../../pipes';
5
- import { TheDefaultElement } from '../element/element.component';
6
- import * as i0 from "@angular/core";
7
- export class TheTemplate {
8
- constructor() {
9
- this.renderElement = (element) => {
10
- if (element.type === ElementKinds.default) {
11
- return this.paragraphTemplate;
12
- }
13
- if (element.type === ElementKinds.heading_1) {
14
- return this.headingOneTemplate;
15
- }
16
- if (element.type === ElementKinds.heading_2) {
17
- return this.headingTwoTemplate;
18
- }
19
- if (element.type === ElementKinds.heading_3) {
20
- return this.headingThreeTemplate;
21
- }
22
- if (element.type === ElementKinds.heading_4) {
23
- return this.headingFourTemplate;
24
- }
25
- if (element.type === ElementKinds.heading_5) {
26
- return this.headingFiveTemplate;
27
- }
28
- if (element.type === ElementKinds.heading_6) {
29
- return this.headingSixTemplate;
30
- }
31
- return null;
32
- };
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTemplate, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TheTemplate, isStandalone: true, selector: "the-template,[theTemplate]", viewQueries: [{ propertyName: "paragraphTemplate", first: true, predicate: ["paragraph"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingOneTemplate", first: true, predicate: ["headingOne"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingTwoTemplate", first: true, predicate: ["headingTwo"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingThreeTemplate", first: true, predicate: ["headingThree"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingFourTemplate", first: true, predicate: ["headingFour"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingFiveTemplate", first: true, predicate: ["headingFive"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headingSixTemplate", first: true, predicate: ["headingSix"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #paragraph let-context=\"context\" let-viewContext=\"viewContext\">\n <div theDefaultElement [context]=\"context\" [viewContext]=\"viewContext\" [ngStyle]=\"context.element | elementStyle\"></div>\n</ng-template>\n<ng-template #headingOne let-context=\"context\" let-viewContext=\"viewContext\">\n <h1\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h1>\n</ng-template>\n<ng-template #headingTwo let-context=\"context\" let-viewContext=\"viewContext\">\n <h2\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h2>\n</ng-template>\n<ng-template #headingThree let-context=\"context\" let-viewContext=\"viewContext\">\n <h3\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h3>\n</ng-template>\n<ng-template #headingFour let-context=\"context\" let-viewContext=\"viewContext\">\n <h4\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h4>\n</ng-template>\n<ng-template #headingFive let-context=\"context\" let-viewContext=\"viewContext\">\n <h5\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h5>\n</ng-template>\n<ng-template #headingSix let-context=\"context\" let-viewContext=\"viewContext\">\n <h6\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h6>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: ElementStylePipe, name: "elementStyle" }, { kind: "component", type: TheDefaultElement, selector: "[theDefaultElement]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheTemplate, decorators: [{
38
- type: Component,
39
- args: [{ selector: 'the-template,[theTemplate]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgStyle, ElementStylePipe, TheDefaultElement], template: "<ng-template #paragraph let-context=\"context\" let-viewContext=\"viewContext\">\n <div theDefaultElement [context]=\"context\" [viewContext]=\"viewContext\" [ngStyle]=\"context.element | elementStyle\"></div>\n</ng-template>\n<ng-template #headingOne let-context=\"context\" let-viewContext=\"viewContext\">\n <h1\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h1>\n</ng-template>\n<ng-template #headingTwo let-context=\"context\" let-viewContext=\"viewContext\">\n <h2\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h2>\n</ng-template>\n<ng-template #headingThree let-context=\"context\" let-viewContext=\"viewContext\">\n <h3\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h3>\n</ng-template>\n<ng-template #headingFour let-context=\"context\" let-viewContext=\"viewContext\">\n <h4\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h4>\n</ng-template>\n<ng-template #headingFive let-context=\"context\" let-viewContext=\"viewContext\">\n <h5\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h5>\n</ng-template>\n<ng-template #headingSix let-context=\"context\" let-viewContext=\"viewContext\">\n <h6\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h6>\n</ng-template>\n" }]
40
- }], propDecorators: { paragraphTemplate: [{
41
- type: ViewChild,
42
- args: ['paragraph', { read: TemplateRef, static: true }]
43
- }], headingOneTemplate: [{
44
- type: ViewChild,
45
- args: ['headingOne', { read: TemplateRef, static: true }]
46
- }], headingTwoTemplate: [{
47
- type: ViewChild,
48
- args: ['headingTwo', { read: TemplateRef, static: true }]
49
- }], headingThreeTemplate: [{
50
- type: ViewChild,
51
- args: ['headingThree', { read: TemplateRef, static: true }]
52
- }], headingFourTemplate: [{
53
- type: ViewChild,
54
- args: ['headingFour', { read: TemplateRef, static: true }]
55
- }], headingFiveTemplate: [{
56
- type: ViewChild,
57
- args: ['headingFive', { read: TemplateRef, static: true }]
58
- }], headingSixTemplate: [{
59
- type: ViewChild,
60
- args: ['headingSix', { read: TemplateRef, static: true }]
61
- }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVNqRSxNQUFNLE9BQU8sV0FBVztJQVB4QjtRQTZCVyxrQkFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQ3hDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDbkMsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3JDLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ25DLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUM7S0FDTDsrR0E5Q1ksV0FBVzttR0FBWCxXQUFXLGlMQUNZLFdBQVcseUhBR1YsV0FBVyx5SEFHWCxXQUFXLDZIQUdULFdBQVcsMkhBR1osV0FBVywySEFHWCxXQUFXLHlIQUdaLFdBQVcsMkNDakNoRCxzN0RBeURBLDRDRDdDYyxPQUFPLHNFQUFFLGdCQUFnQixxREFBRSxpQkFBaUI7OzRGQUU3QyxXQUFXO2tCQVB2QixTQUFTOytCQUNJLDRCQUE0QixtQkFFckIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7OEJBSXZELGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTNELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVELG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTlELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTdELG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTdELGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRWxlbWVudFN0eWxlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IFRoZURlZmF1bHRFbGVtZW50IH0gZnJvbSAnLi4vZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGhlLXRlbXBsYXRlLFt0aGVUZW1wbGF0ZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nU3R5bGUsIEVsZW1lbnRTdHlsZVBpcGUsIFRoZURlZmF1bHRFbGVtZW50XVxufSlcbmV4cG9ydCBjbGFzcyBUaGVUZW1wbGF0ZSB7XG4gICAgQFZpZXdDaGlsZCgncGFyYWdyYXBoJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcGFyYWdyYXBoVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdoZWFkaW5nT25lJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgaGVhZGluZ09uZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZGluZ1R3bycsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIGhlYWRpbmdUd29UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRpbmdUaHJlZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIGhlYWRpbmdUaHJlZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZGluZ0ZvdXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBoZWFkaW5nRm91clRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZGluZ0ZpdmUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBoZWFkaW5nRml2ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnaGVhZGluZ1NpeCcsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIGhlYWRpbmdTaXhUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHB1YmxpYyByZW5kZXJFbGVtZW50ID0gKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmFncmFwaFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy5oZWFkaW5nXzEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRpbmdPbmVUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMuaGVhZGluZ18yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkaW5nVHdvVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmhlYWRpbmdfMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGluZ1RocmVlVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmhlYWRpbmdfNCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGluZ0ZvdXJUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMuaGVhZGluZ181KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oZWFkaW5nRml2ZVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy5oZWFkaW5nXzYpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlYWRpbmdTaXhUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuIiwiPG5nLXRlbXBsYXRlICNwYXJhZ3JhcGggbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LXZpZXdDb250ZXh0PVwidmlld0NvbnRleHRcIj5cbiAgPGRpdiB0aGVEZWZhdWx0RWxlbWVudCBbY29udGV4dF09XCJjb250ZXh0XCIgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCIgW25nU3R5bGVdPVwiY29udGV4dC5lbGVtZW50IHwgZWxlbWVudFN0eWxlXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNoZWFkaW5nT25lIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC12aWV3Q29udGV4dD1cInZpZXdDb250ZXh0XCI+XG4gIDxoMVxuICAgIHRoZURlZmF1bHRFbGVtZW50XG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCJcbiAgICBbYXR0ci5pZF09XCJjb250ZXh0LmVsZW1lbnQua2V5XCJcbiAgICBbbmdTdHlsZV09XCJjb250ZXh0LmVsZW1lbnQgfCBlbGVtZW50U3R5bGVcIlxuICA+PC9oMT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRpbmdUd28gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LXZpZXdDb250ZXh0PVwidmlld0NvbnRleHRcIj5cbiAgPGgyXG4gICAgdGhlRGVmYXVsdEVsZW1lbnRcbiAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgIFthdHRyLmlkXT1cImNvbnRleHQuZWxlbWVudC5rZXlcIlxuICAgIFtuZ1N0eWxlXT1cImNvbnRleHQuZWxlbWVudCB8IGVsZW1lbnRTdHlsZVwiXG4gID48L2gyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZ1RocmVlIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC12aWV3Q29udGV4dD1cInZpZXdDb250ZXh0XCI+XG4gIDxoM1xuICAgIHRoZURlZmF1bHRFbGVtZW50XG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCJcbiAgICBbYXR0ci5pZF09XCJjb250ZXh0LmVsZW1lbnQua2V5XCJcbiAgICBbbmdTdHlsZV09XCJjb250ZXh0LmVsZW1lbnQgfCBlbGVtZW50U3R5bGVcIlxuICA+PC9oMz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRpbmdGb3VyIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC12aWV3Q29udGV4dD1cInZpZXdDb250ZXh0XCI+XG4gIDxoNFxuICAgIHRoZURlZmF1bHRFbGVtZW50XG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCJcbiAgICBbYXR0ci5pZF09XCJjb250ZXh0LmVsZW1lbnQua2V5XCJcbiAgICBbbmdTdHlsZV09XCJjb250ZXh0LmVsZW1lbnQgfCBlbGVtZW50U3R5bGVcIlxuICA+PC9oND5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRpbmdGaXZlIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC12aWV3Q29udGV4dD1cInZpZXdDb250ZXh0XCI+XG4gIDxoNVxuICAgIHRoZURlZmF1bHRFbGVtZW50XG4gICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3ZpZXdDb250ZXh0XT1cInZpZXdDb250ZXh0XCJcbiAgICBbYXR0ci5pZF09XCJjb250ZXh0LmVsZW1lbnQua2V5XCJcbiAgICBbbmdTdHlsZV09XCJjb250ZXh0LmVsZW1lbnQgfCBlbGVtZW50U3R5bGVcIlxuICA+PC9oNT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRpbmdTaXggbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LXZpZXdDb250ZXh0PVwidmlld0NvbnRleHRcIj5cbiAgPGg2XG4gICAgdGhlRGVmYXVsdEVsZW1lbnRcbiAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIlxuICAgIFthdHRyLmlkXT1cImNvbnRleHQuZWxlbWVudC5rZXlcIlxuICAgIFtuZ1N0eWxlXT1cImNvbnRleHQuZWxlbWVudCB8IGVsZW1lbnRTdHlsZVwiXG4gID48L2g2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,57 +0,0 @@
1
- import { Component, inject, Renderer2 } from '@angular/core';
2
- import { BaseTextComponent } from 'slate-angular';
3
- import { MarkTypes } from '../../constants';
4
- import * as i0 from "@angular/core";
5
- export class TheText extends BaseTextComponent {
6
- constructor() {
7
- super(...arguments);
8
- this.excludes = ['color', 'font-size', 'background-color', 'text'];
9
- this.attributes = [];
10
- this.renderer2 = inject(Renderer2);
11
- }
12
- onContextChange() {
13
- super.onContextChange();
14
- this.applyTextMark();
15
- }
16
- applyTextMark() {
17
- this.attributes.forEach(attr => {
18
- this.renderer2.removeAttribute(this.elementRef.nativeElement, attr);
19
- });
20
- this.attributes = [];
21
- for (const key in this.text) {
22
- if (Object.prototype.hasOwnProperty.call(this.text, key) && !this.excludes.includes(key) && !!this.text[key]) {
23
- const attr = `the-${key}`;
24
- this.renderer2.setAttribute(this.elementRef.nativeElement, attr, 'true');
25
- this.attributes.push(attr);
26
- }
27
- }
28
- const fontSize = this.text[MarkTypes.fontSize];
29
- this.renderer2.setAttribute(this.elementRef.nativeElement, `the-${MarkTypes.fontSize}`, fontSize ? fontSize : null);
30
- if (this.text[MarkTypes.color]) {
31
- this.renderer2.setStyle(this.elementRef.nativeElement, 'color', this.text[MarkTypes.color]);
32
- }
33
- else {
34
- this.renderer2.removeStyle(this.elementRef.nativeElement, 'color');
35
- }
36
- if (this.text[MarkTypes.backgroundColor]) {
37
- this.renderer2.setStyle(this.elementRef.nativeElement, 'background-color', this.text[MarkTypes.backgroundColor]);
38
- }
39
- else {
40
- this.renderer2.removeStyle(this.elementRef.nativeElement, 'background-color');
41
- }
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheText, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TheText, isStandalone: true, selector: "span[theText]", host: { attributes: { "data-slate-node": "text" } }, usesInheritance: true, ngImport: i0, template: ``, isInline: true }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TheText, decorators: [{
47
- type: Component,
48
- args: [{
49
- selector: 'span[theText]',
50
- template: ``,
51
- host: {
52
- 'data-slate-node': 'text'
53
- },
54
- standalone: true
55
- }]
56
- }] });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy90ZXh0L3RleHQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVU1QyxNQUFNLE9BQU8sT0FBUSxTQUFRLGlCQUFpQjtJQVI5Qzs7UUFTSSxhQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlELGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFUixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBbUN6QztJQWpDRyxlQUFlO1FBQ1gsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNHLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxPQUFPLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEgsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3JILENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0wsQ0FBQzsrR0F2Q1EsT0FBTzttR0FBUCxPQUFPLHFKQU5OLEVBQUU7OzRGQU1ILE9BQU87a0JBUm5CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxFQUFFO29CQUNaLElBQUksRUFBRTt3QkFDRixpQkFBaUIsRUFBRSxNQUFNO3FCQUM1QjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVGV4dENvbXBvbmVudCB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgTWFya1R5cGVzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzcGFuW3RoZVRleHRdJyxcbiAgICB0ZW1wbGF0ZTogYGAsXG4gICAgaG9zdDoge1xuICAgICAgICAnZGF0YS1zbGF0ZS1ub2RlJzogJ3RleHQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRoZVRleHQgZXh0ZW5kcyBCYXNlVGV4dENvbXBvbmVudCB7XG4gICAgZXhjbHVkZXMgPSBbJ2NvbG9yJywgJ2ZvbnQtc2l6ZScsICdiYWNrZ3JvdW5kLWNvbG9yJywgJ3RleHQnXTtcblxuICAgIGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBvbkNvbnRleHRDaGFuZ2UoKSB7XG4gICAgICAgIHN1cGVyLm9uQ29udGV4dENoYW5nZSgpO1xuICAgICAgICB0aGlzLmFwcGx5VGV4dE1hcmsoKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRNYXJrKCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXR0cik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudGV4dCwga2V5KSAmJiAhdGhpcy5leGNsdWRlcy5pbmNsdWRlcyhrZXkpICYmICEhdGhpcy50ZXh0W2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyID0gYHRoZS0ke2tleX1gO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXR0ciwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaChhdHRyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gdGhpcy50ZXh0W01hcmtUeXBlcy5mb250U2l6ZV07XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYHRoZS0ke01hcmtUeXBlcy5mb250U2l6ZX1gLCBmb250U2l6ZSA/IGZvbnRTaXplIDogbnVsbCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGV4dFtNYXJrVHlwZXMuY29sb3JdKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NvbG9yJywgdGhpcy50ZXh0W01hcmtUeXBlcy5jb2xvcl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjb2xvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGV4dFtNYXJrVHlwZXMuYmFja2dyb3VuZENvbG9yXSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy50ZXh0W01hcmtUeXBlcy5iYWNrZ3JvdW5kQ29sb3JdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmFja2dyb3VuZC1jb2xvcicpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19